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 23 Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 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 */ 173