bfd/
[deliverable/binutils-gdb.git] / gas / cgen.h
CommitLineData
252b5132 1/* GAS cgen support.
ec2655a6 2 Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2007
2da5c037 3 Free Software Foundation, Inc.
252b5132
RH
4
5 This file is part of GAS, the GNU Assembler.
6
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
ec2655a6 9 the Free Software Foundation; either version 3, or (at your option)
252b5132
RH
10 any later version.
11
ec2655a6
NC
12 GAS is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 License for more details.
252b5132
RH
16
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
4b4da160
NC
19 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20 02110-1301, USA. */
252b5132
RH
21
22#ifndef GAS_CGEN_H
23#define GAS_CGEN_H
24
25/* Opcode table handle. */
26extern CGEN_CPU_DESC gas_cgen_cpu_desc;
27
28/* Maximum number of fixups in an insn.
29 If you need to change this, allow target to override and do so there. */
7c3dc350 30#ifndef GAS_CGEN_MAX_FIXUPS
252b5132 31#define GAS_CGEN_MAX_FIXUPS 3
7c3dc350 32#endif
252b5132
RH
33
34/* Struct defining result of gas_cgen_finish_insn. */
ee515fb7 35typedef struct {
252b5132 36 /* frag containing the insn */
e972090a 37 fragS * frag;
252b5132 38 /* Address of insn in frag. */
e972090a 39 char * addr;
252b5132
RH
40 /* Number of fixups this insn has. */
41 int num_fixups;
42 /* Array of fixups. */
e972090a 43 fixS * fixups[GAS_CGEN_MAX_FIXUPS];
252b5132
RH
44} finished_insnS;
45
46/* Callback for operand parsing.
47 The result is an error message or NULL for success.
48 The parsed value is stored in the bfd_vma *. */
49extern const char * gas_cgen_parse_operand
73ee5e4c
KH
50 (CGEN_CPU_DESC, enum cgen_parse_operand_type,
51 const char **, int, int, enum cgen_parse_operand_result *,
52 bfd_vma *);
252b5132
RH
53
54/* Call this from md_assemble to initialize the assembler callback. */
73ee5e4c 55extern void gas_cgen_init_parse (void);
252b5132 56
d1a6c242 57/* Routines and macros for saving fixup chains. */
73ee5e4c
KH
58extern void gas_cgen_save_fixups (int);
59extern void gas_cgen_restore_fixups (int);
60extern void gas_cgen_swap_fixups (int);
61extern void gas_cgen_initialize_saved_fixups_array (void);
002de68b 62#define MAX_SAVED_FIXUP_CHAINS 50
30a2b4ef 63
252b5132
RH
64/* Add a register to the assembler's hash table.
65 This makes lets GAS parse registers for us.
66 ??? This isn't currently used, but it could be in the future. */
73ee5e4c 67extern void cgen_asm_record_register (char *, int);
252b5132
RH
68
69/* After CGEN_SYM (assemble_insn) is done, this is called to
70 output the insn and record any fixups. */
73ee5e4c
KH
71extern void gas_cgen_finish_insn (const CGEN_INSN *,
72 CGEN_INSN_BYTES_PTR, unsigned int,
73 int, finished_insnS *);
252b5132
RH
74
75/* Record a fixup. */
73ee5e4c
KH
76extern fixS * gas_cgen_record_fixup (fragS *, int, const CGEN_INSN *,
77 int, const CGEN_OPERAND *, int,
78 symbolS *, offsetT);
79extern fixS * gas_cgen_record_fixup_exp (fragS *, int, const CGEN_INSN *,
80 int, const CGEN_OPERAND *, int,
81 expressionS *);
252b5132 82
55cf6793
ZW
83/* md_apply_fix handler */
84extern void gas_cgen_md_apply_fix (fixS *, valueT *, segT);
252b5132
RH
85
86/* tc_gen_reloc handler */
73ee5e4c 87extern arelent *gas_cgen_tc_gen_reloc (asection *, fixS *);
252b5132
RH
88
89/* Target supplied routine to lookup a reloc. */
90extern bfd_reloc_code_real_type
73ee5e4c 91md_cgen_lookup_reloc (const CGEN_INSN *, const CGEN_OPERAND *, fixS *);
252b5132
RH
92
93/* Optional target supplied routine to record a fixup for an expression. */
94extern fixS *
73ee5e4c
KH
95md_cgen_record_fixup_exp (fragS *, int, const CGEN_INSN *, int,
96 const CGEN_OPERAND *, int, expressionS *);
252b5132 97
73ee5e4c 98extern void gas_cgen_md_operand (expressionS *);
0609eb57 99
9cc92a36 100/* Perform any cgen specific initialisation for gas. */
73ee5e4c 101extern void gas_cgen_begin (void);
9cc92a36 102
252b5132 103#endif /* GAS_CGEN_H */
This page took 0.37254 seconds and 4 git commands to generate.