Commit | Line | Data |
---|---|---|
7499d566 NC |
1 | /* tc-maxq.h -- Header file for the asssembler(MAXQ) |
2 | ||
3 | Copyright 2004 Free Software Foundation, Inc. | |
4 | ||
5 | Contributed by HCL Technologies Pvt. Ltd. | |
6 | ||
7 | Written by Vineet Sharma(vineets@noida.hcltech.com) Inderpreet | |
8 | S.(inderpreetb@noida.hcltech.com) | |
9 | ||
10 | This file is part of GAS. | |
11 | ||
12 | GAS is free software; you can redistribute it and/or modify it under the | |
13 | terms of the GNU General Public License as published by the Free Software | |
14 | Foundation; either version 2, or (at your option) any later version. | |
15 | ||
16 | GAS is distributed in the hope that it will be useful, but WITHOUT ANY | |
17 | WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
18 | FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
19 | details. | |
20 | ||
21 | You should have received a copy of the GNU General Public License along | |
22 | with GAS; see the file COPYING. If not, write to the Free Software | |
4b4da160 | 23 | Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ |
7499d566 NC |
24 | |
25 | #ifndef _TC_MAXQ_H_ | |
26 | #define _TC_MAXQ_H_ | |
27 | ||
28 | #ifndef NO_RELOC | |
29 | #define NO_RELOC 0 | |
30 | #endif | |
31 | ||
32 | /* `md_short_jump_size' `md_long_jump_size' `md_create_short_jump' | |
33 | `md_create_long_jump' If `WORKING_DOT_WORD' is defined, GAS will not do | |
34 | broken word processing (*note Broken words::.). Otherwise, you should set | |
35 | `md_short_jump_size' to the size of a short jump (a jump that is just long | |
36 | enough to jump around a long jmp) and `md_long_jump_size' to the size of a | |
37 | long jump (a jump that can go anywhere in the function), You should define | |
38 | `md_create_short_jump' to create a short jump around a long jump, and | |
39 | define `md_create_long_jump' to create a long jump. */ | |
40 | #define WORKING_DOT_WORD | |
41 | typedef enum _RELOC_ENUM | |
42 | { | |
43 | MAXQ_WORDDATA = 5, /* Word+n. */ | |
44 | MAXQ_LONGDATA = 2, /* Long+n. */ | |
45 | MAXQ_INTERSEGMENT = 4, /* Text to any other segment. */ | |
46 | MAXQ_SHORTJUMP = BFD_RELOC_16_PCREL_S2, /* PC Relative. */ | |
47 | MAXQ_LONGJUMP = 6, /* Absolute Jump. */ | |
48 | EXTERNAL_RELOC = 8, | |
49 | INTERSEGMENT_RELOC | |
50 | } | |
51 | RELOC_ENUM; | |
52 | ||
53 | #ifndef NEED_FX_R_TYPE | |
54 | #define NEED_FX_R_TYPE /* For defining our own rloc type. */ | |
55 | #endif | |
56 | ||
57 | #ifndef MAX_STACK | |
58 | #define MAX_STACK 0xf | |
59 | #endif | |
60 | ||
61 | #ifndef TC_MAXQ20 | |
62 | #define TC_MAXQ20 1 | |
63 | #endif | |
64 | ||
65 | #ifndef MAX_OPERAND_SIZE | |
66 | #define MAX_OPERAND_SIZE 255 | |
67 | #endif | |
68 | ||
69 | #ifndef MAXQ_INSTRUCTION_SIZE | |
70 | #define MAXQ_INSTRUCTION_SIZE 2 /* 16 - BITS */ | |
71 | #endif | |
72 | ||
73 | #if MAXQ_INSTRUCTION_SIZE | |
74 | #define MAXQ_OCTETS_PER_BYTE MAXQ_INSTRUCTION_SIZE | |
75 | #else | |
76 | #define MAXQ_OCTETS_PER_BYTE OCTETS_PER_BYTE | |
77 | #endif | |
78 | ||
79 | /* if this macro is defined gas will use this instead of comment_chars. */ | |
80 | #define tc_comments_chars maxq20_comment_chars | |
81 | ||
82 | #define tc_coff_symbol_emit_hook(a) ; /* not used */ | |
83 | ||
84 | #define md_section_align(SEGMENT, SIZE) (SIZE) | |
85 | ||
86 | /* Locally defined symbol shoudnot be adjusted to section symbol. */ | |
87 | #define tc_fix_adjustable(FIX) 0 | |
88 | ||
89 | #define TC_COFF_SIZEMACHDEP(frag) tc_coff_sizemachdep (frag) | |
90 | extern int tc_coff_sizemachdep (fragS * frag); | |
91 | ||
92 | /* This specifies that the target has been defined as little endian - | |
93 | default. */ | |
94 | #define TARGET_BYTES_BIG_ENDIAN 0 | |
95 | ||
96 | #define MAX_MEM_NAME_SIZE 12 | |
97 | #define MAX_REG_NAME_SIZE 7 | |
98 | #define MAX_MNEM_SIZE 8 | |
99 | ||
100 | #define END_OF_INSN '\0' | |
101 | ||
102 | /* This macro is the BFD archetectureto pass to 'bfd_set_arch_mach'. */ | |
103 | #define TARGET_ARCH bfd_arch_maxq | |
104 | ||
105 | /* This macro is the BFD machine number to pass to 'bfd_set_arch_mach'. | |
106 | If not defines GAS will use 0. */ | |
107 | #define TARGET_MACH maxq20_mach () | |
108 | extern unsigned long maxq20_mach (void); | |
109 | ||
110 | /* COFF format. */ | |
111 | #ifndef BFD_ASSEMBLER | |
112 | ||
113 | /* Defines the magic number we are using for the maxq-coff. defined in coff.h. */ | |
114 | #define COFF_MAGIC MAXQ20MAGIC | |
115 | #define BFD_ARCH bfd_arch_maxq | |
116 | ||
117 | /* Whether the reloc should be outputted to the file or not. This | |
118 | is only true if the symbol we are relocating for is not empty. */ | |
119 | #define TC_COUNT_RELOC(fixp) ((fixp) -> fx_addsy != NULL) | |
120 | ||
121 | /* This macro translates between an internal fix and an coff reloc type. */ | |
122 | #define TC_COFF_FIX2RTYPE(fixP) tc_coff_fix2rtype (fixP) | |
123 | extern short tc_coff_fix2rtype (struct fix *); | |
124 | ||
125 | #endif /* BFD_ASSEMBLER */ | |
126 | ||
127 | #ifndef LEX_AT | |
128 | /* We define this macro to generate a fixup for a data allocation pseudo-op. */ | |
129 | #define TC_CONS_FIX_NEW(FRAG,OFF,LEN,EXP) maxq20_cons_fix_new (FRAG,OFF,LEN,EXP) | |
130 | extern void maxq20_cons_fix_new (fragS *, unsigned int, unsigned int, expressionS *); | |
131 | #endif | |
132 | ||
133 | /* Define md_number_to_chars as the appropriate standard big endian or This | |
134 | should just call either `number_to_chars_bigendian' or | |
135 | `number_to_chars_littleendian', whichever is appropriate. On targets like | |
136 | the MIPS which support options to change the endianness, which function to | |
137 | call is a runtime decision. On other targets, `md_number_to_chars' can be | |
138 | a simple macro. */ | |
139 | #define md_number_to_chars maxq_number_to_chars | |
140 | extern void maxq_number_to_chars (char *, valueT, int); | |
141 | ||
142 | /* If this macro is defined, it is a pointer to a NULL terminated list of | |
143 | chracters which may appear in an operand. GAS already assumes that all | |
144 | alphanumeric chracters, and '$', '.', and '_' may appear in an | |
145 | operand("symbol_char"in app.c). This macro may be defined to treat | |
146 | additional chracters as appearing in an operand. This affects the way in | |
147 | which GAS removes whitespaces before passing the string to md_assemble. */ | |
148 | #define tc_symbol_chars_extra_symbol_chars | |
149 | ||
150 | /* Define away the call to md_operand in the expression parsing code. This is | |
151 | called whenever the expression parser can't parse the input and gives the | |
152 | assembler backend a chance to deal with it instead. */ | |
153 | #define md_operand(x) | |
154 | ||
155 | #define MAX_OPERANDS 2 /* Max operands per instruction. */ | |
156 | #define MAX_IMMEDIATE_OPERANDS 1 /* Max immediate operands per instruction. */ | |
157 | #define MAX_MEMORY_OPERANDS 1 /* Max memory operands per instruction. */ | |
158 | ||
159 | /* Define the prefix we are using while trying to use an immediate value in | |
160 | an instruction. e.g move A[0], #03h. */ | |
161 | #define IMMEDIATE_PREFIX '#' | |
162 | ||
163 | #define ABSOLUTE_PREFIX '@' | |
164 | ||
165 | /* This here defines the opcode of the nop operation on the MAXQ. We did | |
166 | declare it here when we tried to fill the align bites with nop's but GAS | |
167 | only expects nop's to be single byte instruction. */ | |
168 | #define NOP_OPCODE (char)0xDA3A | |
169 | ||
170 | #define SIZE_OF_PM sizeof(pmodule) /* Size of the structure. */ | |
171 | ||
172 | #endif /* TC_MAXQ_H */ |