1 1.1 christos /* tic30.h -- Header file for TI TMS320C30 opcode table 2 1.11 christos Copyright (C) 1998-2024 Free Software Foundation, Inc. 3 1.1 christos Contributed by Steven Haworth (steve (at) pm.cse.rmit.edu.au) 4 1.1 christos 5 1.1 christos This file is part of GDB, GAS, and the GNU binutils. 6 1.1 christos 7 1.1 christos GDB, GAS, and the GNU binutils are free software; you can redistribute 8 1.1 christos them and/or modify them under the terms of the GNU General Public 9 1.1 christos License as published by the Free Software Foundation; either version 3, 10 1.1 christos or (at your option) any later version. 11 1.1 christos 12 1.1 christos GDB, GAS, and the GNU binutils are distributed in the hope that they 13 1.1 christos will be useful, but WITHOUT ANY WARRANTY; without even the implied 14 1.1 christos warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 15 1.1 christos the GNU General Public License for more details. 16 1.1 christos 17 1.1 christos You should have received a copy of the GNU General Public License 18 1.1 christos along with this file; see the file COPYING3. If not, write to the Free 19 1.1 christos Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 20 1.1 christos 02110-1301, USA. */ 21 1.1 christos 22 1.1 christos /* FIXME: The opcode table should be in opcodes/tic30-opc.c, not in a 23 1.1 christos header file. */ 24 1.1 christos 25 1.1 christos #ifndef _TMS320_H_ 26 1.1 christos #define _TMS320_H_ 27 1.1 christos 28 1.1 christos struct _register 29 1.1 christos { 30 1.6 christos const char *name; 31 1.1 christos unsigned char opcode; 32 1.1 christos unsigned char regtype; 33 1.1 christos }; 34 1.1 christos 35 1.1 christos typedef struct _register reg; 36 1.1 christos 37 1.1 christos #define REG_Rn 0x01 38 1.1 christos #define REG_ARn 0x02 39 1.1 christos #define REG_DP 0x03 40 1.1 christos #define REG_OTHER 0x04 41 1.1 christos 42 1.1 christos static const reg tic30_regtab[] = { 43 1.1 christos { "r0", 0x00, REG_Rn }, 44 1.1 christos { "r1", 0x01, REG_Rn }, 45 1.1 christos { "r2", 0x02, REG_Rn }, 46 1.1 christos { "r3", 0x03, REG_Rn }, 47 1.1 christos { "r4", 0x04, REG_Rn }, 48 1.1 christos { "r5", 0x05, REG_Rn }, 49 1.1 christos { "r6", 0x06, REG_Rn }, 50 1.1 christos { "r7", 0x07, REG_Rn }, 51 1.1 christos { "ar0",0x08, REG_ARn }, 52 1.1 christos { "ar1",0x09, REG_ARn }, 53 1.1 christos { "ar2",0x0A, REG_ARn }, 54 1.1 christos { "ar3",0x0B, REG_ARn }, 55 1.1 christos { "ar4",0x0C, REG_ARn }, 56 1.1 christos { "ar5",0x0D, REG_ARn }, 57 1.1 christos { "ar6",0x0E, REG_ARn }, 58 1.1 christos { "ar7",0x0F, REG_ARn }, 59 1.1 christos { "dp", 0x10, REG_DP }, 60 1.1 christos { "ir0",0x11, REG_OTHER }, 61 1.1 christos { "ir1",0x12, REG_OTHER }, 62 1.1 christos { "bk", 0x13, REG_OTHER }, 63 1.1 christos { "sp", 0x14, REG_OTHER }, 64 1.1 christos { "st", 0x15, REG_OTHER }, 65 1.1 christos { "ie", 0x16, REG_OTHER }, 66 1.1 christos { "if", 0x17, REG_OTHER }, 67 1.1 christos { "iof",0x18, REG_OTHER }, 68 1.1 christos { "rs", 0x19, REG_OTHER }, 69 1.1 christos { "re", 0x1A, REG_OTHER }, 70 1.1 christos { "rc", 0x1B, REG_OTHER }, 71 1.1 christos { "R0", 0x00, REG_Rn }, 72 1.1 christos { "R1", 0x01, REG_Rn }, 73 1.1 christos { "R2", 0x02, REG_Rn }, 74 1.1 christos { "R3", 0x03, REG_Rn }, 75 1.1 christos { "R4", 0x04, REG_Rn }, 76 1.1 christos { "R5", 0x05, REG_Rn }, 77 1.1 christos { "R6", 0x06, REG_Rn }, 78 1.1 christos { "R7", 0x07, REG_Rn }, 79 1.1 christos { "AR0",0x08, REG_ARn }, 80 1.1 christos { "AR1",0x09, REG_ARn }, 81 1.1 christos { "AR2",0x0A, REG_ARn }, 82 1.1 christos { "AR3",0x0B, REG_ARn }, 83 1.1 christos { "AR4",0x0C, REG_ARn }, 84 1.1 christos { "AR5",0x0D, REG_ARn }, 85 1.1 christos { "AR6",0x0E, REG_ARn }, 86 1.1 christos { "AR7",0x0F, REG_ARn }, 87 1.1 christos { "DP", 0x10, REG_DP }, 88 1.1 christos { "IR0",0x11, REG_OTHER }, 89 1.1 christos { "IR1",0x12, REG_OTHER }, 90 1.1 christos { "BK", 0x13, REG_OTHER }, 91 1.1 christos { "SP", 0x14, REG_OTHER }, 92 1.1 christos { "ST", 0x15, REG_OTHER }, 93 1.1 christos { "IE", 0x16, REG_OTHER }, 94 1.1 christos { "IF", 0x17, REG_OTHER }, 95 1.1 christos { "IOF",0x18, REG_OTHER }, 96 1.1 christos { "RS", 0x19, REG_OTHER }, 97 1.1 christos { "RE", 0x1A, REG_OTHER }, 98 1.1 christos { "RC", 0x1B, REG_OTHER }, 99 1.1 christos { "", 0, 0 } 100 1.1 christos }; 101 1.1 christos 102 1.1 christos static const reg *const tic30_regtab_end 103 1.1 christos = tic30_regtab + sizeof(tic30_regtab)/sizeof(tic30_regtab[0]); 104 1.1 christos 105 1.1 christos /* Indirect Addressing Modes Modification Fields */ 106 1.1 christos /* Indirect Addressing with Displacement */ 107 1.1 christos #define PreDisp_Add 0x00 108 1.1 christos #define PreDisp_Sub 0x01 109 1.1 christos #define PreDisp_Add_Mod 0x02 110 1.1 christos #define PreDisp_Sub_Mod 0x03 111 1.1 christos #define PostDisp_Add_Mod 0x04 112 1.1 christos #define PostDisp_Sub_Mod 0x05 113 1.1 christos #define PostDisp_Add_Circ 0x06 114 1.1 christos #define PostDisp_Sub_Circ 0x07 115 1.1 christos /* Indirect Addressing with Index Register IR0 */ 116 1.1 christos #define PreIR0_Add 0x08 117 1.1 christos #define PreIR0_Sub 0x09 118 1.1 christos #define PreIR0_Add_Mod 0x0A 119 1.1 christos #define PreIR0_Sub_Mod 0x0B 120 1.1 christos #define PostIR0_Add_Mod 0x0C 121 1.1 christos #define PostIR0_Sub_Mod 0x0D 122 1.1 christos #define PostIR0_Add_Circ 0x0E 123 1.1 christos #define PostIR0_Sub_Circ 0x0F 124 1.1 christos /* Indirect Addressing with Index Register IR1 */ 125 1.1 christos #define PreIR1_Add 0x10 126 1.1 christos #define PreIR1_Sub 0x11 127 1.1 christos #define PreIR1_Add_Mod 0x12 128 1.1 christos #define PreIR1_Sub_Mod 0x13 129 1.1 christos #define PostIR1_Add_Mod 0x14 130 1.1 christos #define PostIR1_Sub_Mod 0x15 131 1.1 christos #define PostIR1_Add_Circ 0x16 132 1.1 christos #define PostIR1_Sub_Circ 0x17 133 1.1 christos /* Indirect Addressing (Special Cases) */ 134 1.1 christos #define IndirectOnly 0x18 135 1.1 christos #define PostIR0_Add_BitRev 0x19 136 1.1 christos 137 1.1 christos typedef struct { 138 1.6 christos const char *syntax; 139 1.1 christos unsigned char modfield; 140 1.1 christos unsigned char displacement; 141 1.1 christos } ind_addr_type; 142 1.1 christos 143 1.1 christos #define IMPLIED_DISP 0x01 144 1.1 christos #define DISP_REQUIRED 0x02 145 1.1 christos #define NO_DISP 0x03 146 1.1 christos 147 1.1 christos static const ind_addr_type tic30_indaddr_tab[] = { 148 1.1 christos { "*+ar", PreDisp_Add, IMPLIED_DISP }, 149 1.1 christos { "*-ar", PreDisp_Sub, IMPLIED_DISP }, 150 1.1 christos { "*++ar", PreDisp_Add_Mod, IMPLIED_DISP }, 151 1.1 christos { "*--ar", PreDisp_Sub_Mod, IMPLIED_DISP }, 152 1.1 christos { "*ar++", PostDisp_Add_Mod, IMPLIED_DISP }, 153 1.1 christos { "*ar--", PostDisp_Sub_Mod, IMPLIED_DISP }, 154 1.1 christos { "*ar++%", PostDisp_Add_Circ, IMPLIED_DISP }, 155 1.1 christos { "*ar--%", PostDisp_Sub_Circ, IMPLIED_DISP }, 156 1.1 christos { "*+ar()", PreDisp_Add, DISP_REQUIRED }, 157 1.1 christos { "*-ar()", PreDisp_Sub, DISP_REQUIRED }, 158 1.1 christos { "*++ar()", PreDisp_Add_Mod, DISP_REQUIRED }, 159 1.1 christos { "*--ar()", PreDisp_Sub_Mod, DISP_REQUIRED }, 160 1.1 christos { "*ar++()", PostDisp_Add_Mod, DISP_REQUIRED }, 161 1.1 christos { "*ar--()", PostDisp_Sub_Mod, DISP_REQUIRED }, 162 1.1 christos { "*ar++()%", PostDisp_Add_Circ, DISP_REQUIRED }, 163 1.1 christos { "*ar--()%", PostDisp_Sub_Circ, DISP_REQUIRED }, 164 1.1 christos { "*+ar(ir0)", PreIR0_Add, NO_DISP }, 165 1.1 christos { "*-ar(ir0)", PreIR0_Sub, NO_DISP }, 166 1.1 christos { "*++ar(ir0)", PreIR0_Add_Mod, NO_DISP }, 167 1.1 christos { "*--ar(ir0)", PreIR0_Sub_Mod, NO_DISP }, 168 1.1 christos { "*ar++(ir0)", PostIR0_Add_Mod, NO_DISP }, 169 1.1 christos { "*ar--(ir0)", PostIR0_Sub_Mod, NO_DISP }, 170 1.1 christos { "*ar++(ir0)%",PostIR0_Add_Circ, NO_DISP }, 171 1.1 christos { "*ar--(ir0)%",PostIR0_Sub_Circ, NO_DISP }, 172 1.1 christos { "*+ar(ir1)", PreIR1_Add, NO_DISP }, 173 1.1 christos { "*-ar(ir1)", PreIR1_Sub, NO_DISP }, 174 1.1 christos { "*++ar(ir1)", PreIR1_Add_Mod, NO_DISP }, 175 1.1 christos { "*--ar(ir1)", PreIR1_Sub_Mod, NO_DISP }, 176 1.1 christos { "*ar++(ir1)", PostIR1_Add_Mod, NO_DISP }, 177 1.1 christos { "*ar--(ir1)", PostIR1_Sub_Mod, NO_DISP }, 178 1.1 christos { "*ar++(ir1)%",PostIR1_Add_Circ, NO_DISP }, 179 1.1 christos { "*ar--(ir1)%",PostIR1_Sub_Circ, NO_DISP }, 180 1.1 christos { "*ar", IndirectOnly, NO_DISP }, 181 1.1 christos { "*ar++(ir0)b",PostIR0_Add_BitRev, NO_DISP }, 182 1.1 christos { "", 0,0 } 183 1.1 christos }; 184 1.1 christos 185 1.1 christos static const ind_addr_type *const tic30_indaddrtab_end 186 1.1 christos = tic30_indaddr_tab + sizeof(tic30_indaddr_tab)/sizeof(tic30_indaddr_tab[0]); 187 1.1 christos 188 1.1 christos /* Possible operand types */ 189 1.1 christos /* Register types */ 190 1.1 christos #define Rn 0x0001 191 1.1 christos #define ARn 0x0002 192 1.1 christos #define DPReg 0x0004 193 1.1 christos #define OtherReg 0x0008 194 1.1 christos /* Addressing mode types */ 195 1.1 christos #define Direct 0x0010 196 1.1 christos #define Indirect 0x0020 197 1.1 christos #define Imm16 0x0040 198 1.1 christos #define Disp 0x0080 199 1.1 christos #define Imm24 0x0100 200 1.1 christos #define Abs24 0x0200 201 1.1 christos /* 3 operand addressing mode types */ 202 1.1 christos #define op3T1 0x0400 203 1.1 christos #define op3T2 0x0800 204 1.1 christos /* Interrupt vector */ 205 1.1 christos #define IVector 0x1000 206 1.1 christos /* Not required */ 207 1.1 christos #define NotReq 0x2000 208 1.1 christos 209 1.1 christos #define GAddr1 Rn | Direct | Indirect | Imm16 210 1.1 christos #define GAddr2 GAddr1 | AllReg 211 1.1 christos #define TAddr1 op3T1 | Rn | Indirect 212 1.1 christos #define TAddr2 op3T2 | Rn | Indirect 213 1.1 christos #define Reg Rn | ARn 214 1.1 christos #define AllReg Reg | DPReg | OtherReg 215 1.1 christos 216 1.1 christos typedef struct _template 217 1.1 christos { 218 1.6 christos const char *name; 219 1.1 christos unsigned int operands; /* how many operands */ 220 1.1 christos unsigned int base_opcode; /* base_opcode is the fundamental opcode byte */ 221 1.1 christos /* the bits in opcode_modifier are used to generate the final opcode from 222 1.1 christos the base_opcode. These bits also are used to detect alternate forms of 223 1.1 christos the same instruction */ 224 1.1 christos unsigned int opcode_modifier; 225 1.1 christos 226 1.1 christos /* opcode_modifier bits: */ 227 1.1 christos #define AddressMode 0x00600000 228 1.1 christos #define PCRel 0x02000000 229 1.1 christos #define StackOp 0x001F0000 230 1.1 christos #define Rotate StackOp 231 1.1 christos 232 1.1 christos /* operand_types[i] describes the type of operand i. This is made 233 1.1 christos by OR'ing together all of the possible type masks. (e.g. 234 1.1 christos 'operand_types[i] = Reg|Imm' specifies that operand i can be 235 1.1 christos either a register or an immediate operand */ 236 1.1 christos unsigned int operand_types[3]; 237 1.1 christos /* This defines the number type of an immediate argument to an instruction. */ 238 1.1 christos int imm_arg_type; 239 1.1 christos #define Imm_None 0 240 1.1 christos #define Imm_Float 1 241 1.1 christos #define Imm_SInt 2 242 1.1 christos #define Imm_UInt 3 243 1.1 christos } 244 1.1 christos insn_template; 245 1.1 christos 246 1.1 christos static const insn_template tic30_optab[] = { 247 1.1 christos { "absf" ,2,0x00000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 248 1.1 christos { "absi" ,2,0x00800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 249 1.1 christos { "addc" ,2,0x01000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 250 1.1 christos { "addc3" ,3,0x20000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 251 1.1 christos { "addf" ,2,0x01800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 252 1.1 christos { "addf3" ,3,0x20800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None }, 253 1.1 christos { "addi" ,2,0x02000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 254 1.1 christos { "addi3" ,3,0x21000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 255 1.1 christos { "and" ,2,0x02800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 256 1.1 christos { "and3" ,3,0x21800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 257 1.1 christos { "andn" ,2,0x03000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 258 1.1 christos { "andn3" ,3,0x22000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 259 1.1 christos { "ash" ,2,0x03800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 260 1.1 christos { "ash3" ,3,0x22800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 261 1.1 christos { "b" ,1,0x68000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 262 1.1 christos { "bu" ,1,0x68000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 263 1.1 christos { "blo" ,1,0x68010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 264 1.1 christos { "bls" ,1,0x68020000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 265 1.1 christos { "bhi" ,1,0x68030000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 266 1.1 christos { "bhs" ,1,0x68040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 267 1.1 christos { "beq" ,1,0x68050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 268 1.1 christos { "bne" ,1,0x68060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 269 1.1 christos { "blt" ,1,0x68070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 270 1.1 christos { "ble" ,1,0x68080000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 271 1.1 christos { "bgt" ,1,0x68090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 272 1.1 christos { "bge" ,1,0x680A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 273 1.1 christos { "bz" ,1,0x68050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 274 1.1 christos { "bnz" ,1,0x68060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 275 1.1 christos { "bp" ,1,0x68090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 276 1.1 christos { "bn" ,1,0x68070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 277 1.1 christos { "bnn" ,1,0x680A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 278 1.1 christos { "bnv" ,1,0x680C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 279 1.1 christos { "bv" ,1,0x680D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 280 1.1 christos { "bnuf" ,1,0x680E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 281 1.1 christos { "buf" ,1,0x680F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 282 1.1 christos { "bnc" ,1,0x68040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 283 1.1 christos { "bc" ,1,0x68010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 284 1.1 christos { "bnlv" ,1,0x68100000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 285 1.1 christos { "blv" ,1,0x68110000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 286 1.1 christos { "bnluf" ,1,0x68120000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 287 1.1 christos { "bluf" ,1,0x68130000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 288 1.1 christos { "bzuf" ,1,0x68140000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 289 1.1 christos { "bd" ,1,0x68200000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 290 1.1 christos { "bud" ,1,0x68200000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 291 1.1 christos { "blod" ,1,0x68210000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 292 1.1 christos { "blsd" ,1,0x68220000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 293 1.1 christos { "bhid" ,1,0x68230000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 294 1.1 christos { "bhsd" ,1,0x68240000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 295 1.1 christos { "beqd" ,1,0x68250000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 296 1.1 christos { "bned" ,1,0x68260000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 297 1.1 christos { "bltd" ,1,0x68270000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 298 1.1 christos { "bled" ,1,0x68280000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 299 1.1 christos { "bgtd" ,1,0x68290000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 300 1.1 christos { "bged" ,1,0x682A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 301 1.1 christos { "bzd" ,1,0x68250000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 302 1.1 christos { "bnzd" ,1,0x68260000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 303 1.1 christos { "bpd" ,1,0x68290000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 304 1.1 christos { "bnd" ,1,0x68270000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 305 1.1 christos { "bnnd" ,1,0x682A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 306 1.1 christos { "bnvd" ,1,0x682C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 307 1.1 christos { "bvd" ,1,0x682D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 308 1.1 christos { "bnufd" ,1,0x682E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 309 1.1 christos { "bufd" ,1,0x682F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 310 1.1 christos { "bncd" ,1,0x68240000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 311 1.1 christos { "bcd" ,1,0x68210000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 312 1.1 christos { "bnlvd" ,1,0x68300000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 313 1.1 christos { "blvd" ,1,0x68310000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 314 1.1 christos { "bnlufd" ,1,0x68320000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 315 1.1 christos { "blufd" ,1,0x68330000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 316 1.1 christos { "bzufd" ,1,0x68340000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 317 1.1 christos { "br" ,1,0x60000000,0, { Imm24, 0, 0 }, Imm_UInt }, 318 1.1 christos { "brd" ,1,0x61000000,0, { Imm24, 0, 0 }, Imm_UInt }, 319 1.1 christos { "call" ,1,0x62000000,0, { Imm24, 0, 0 }, Imm_UInt }, 320 1.1 christos { "callu" ,1,0x70000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 321 1.1 christos { "calllo" ,1,0x70010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 322 1.1 christos { "callls" ,1,0x70020000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 323 1.1 christos { "callhi" ,1,0x70030000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 324 1.1 christos { "callhs" ,1,0x70040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 325 1.1 christos { "calleq" ,1,0x70050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 326 1.1 christos { "callne" ,1,0x70060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 327 1.1 christos { "calllt" ,1,0x70070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 328 1.1 christos { "callle" ,1,0x70080000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 329 1.1 christos { "callgt" ,1,0x70090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 330 1.1 christos { "callge" ,1,0x700A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 331 1.1 christos { "callz" ,1,0x70050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 332 1.1 christos { "callnz" ,1,0x70060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 333 1.1 christos { "callp" ,1,0x70090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 334 1.1 christos { "calln" ,1,0x70070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 335 1.1 christos { "callnn" ,1,0x700A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 336 1.1 christos { "callnv" ,1,0x700C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 337 1.1 christos { "callv" ,1,0x700D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 338 1.1 christos { "callnuf",1,0x700E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 339 1.1 christos { "calluf" ,1,0x700F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 340 1.1 christos { "callnc" ,1,0x70040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 341 1.1 christos { "callc" ,1,0x70010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 342 1.1 christos { "callnlv",1,0x70100000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 343 1.1 christos { "calllv" ,1,0x70110000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 344 1.1 christos { "callnluf",1,0x70120000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 345 1.1 christos { "callluf",1,0x70130000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 346 1.1 christos { "callzuf",1,0x70140000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 347 1.1 christos { "cmpf" ,2,0x04000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 348 1.1 christos { "cmpf3" ,2,0x23000000,AddressMode, { TAddr1, TAddr2, 0 }, Imm_None }, 349 1.1 christos { "cmpi" ,2,0x04800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 350 1.1 christos { "cmpi3" ,2,0x23800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, 0 }, Imm_None }, 351 1.1 christos { "db" ,2,0x6C000000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 352 1.1 christos { "dbu" ,2,0x6C000000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 353 1.1 christos { "dblo" ,2,0x6C010000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 354 1.1 christos { "dbls" ,2,0x6C020000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 355 1.1 christos { "dbhi" ,2,0x6C030000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 356 1.1 christos { "dbhs" ,2,0x6C040000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 357 1.1 christos { "dbeq" ,2,0x6C050000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 358 1.1 christos { "dbne" ,2,0x6C060000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 359 1.1 christos { "dblt" ,2,0x6C070000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 360 1.1 christos { "dble" ,2,0x6C080000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 361 1.1 christos { "dbgt" ,2,0x6C090000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 362 1.1 christos { "dbge" ,2,0x6C0A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 363 1.1 christos { "dbz" ,2,0x6C050000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 364 1.1 christos { "dbnz" ,2,0x6C060000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 365 1.1 christos { "dbp" ,2,0x6C090000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 366 1.1 christos { "dbn" ,2,0x6C070000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 367 1.1 christos { "dbnn" ,2,0x6C0A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 368 1.1 christos { "dbnv" ,2,0x6C0C0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 369 1.1 christos { "dbv" ,2,0x6C0D0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 370 1.1 christos { "dbnuf" ,2,0x6C0E0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 371 1.1 christos { "dbuf" ,2,0x6C0F0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 372 1.1 christos { "dbnc" ,2,0x6C040000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 373 1.1 christos { "dbc" ,2,0x6C010000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 374 1.1 christos { "dbnlv" ,2,0x6C100000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 375 1.1 christos { "dblv" ,2,0x6C110000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 376 1.1 christos { "dbnluf" ,2,0x6C120000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 377 1.1 christos { "dbluf" ,2,0x6C130000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 378 1.1 christos { "dbzuf" ,2,0x6C140000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 379 1.1 christos { "dbd" ,2,0x6C200000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 380 1.1 christos { "dbud" ,2,0x6C200000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 381 1.1 christos { "dblod" ,2,0x6C210000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 382 1.1 christos { "dblsd" ,2,0x6C220000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 383 1.1 christos { "dbhid" ,2,0x6C230000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 384 1.1 christos { "dbhsd" ,2,0x6C240000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 385 1.1 christos { "dbeqd" ,2,0x6C250000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 386 1.1 christos { "dbned" ,2,0x6C260000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 387 1.1 christos { "dbltd" ,2,0x6C270000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 388 1.1 christos { "dbled" ,2,0x6C280000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 389 1.1 christos { "dbgtd" ,2,0x6C290000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 390 1.1 christos { "dbged" ,2,0x6C2A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 391 1.1 christos { "dbzd" ,2,0x6C250000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 392 1.1 christos { "dbnzd" ,2,0x6C260000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 393 1.1 christos { "dbpd" ,2,0x6C290000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 394 1.1 christos { "dbnd" ,2,0x6C270000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 395 1.1 christos { "dbnnd" ,2,0x6C2A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 396 1.1 christos { "dbnvd" ,2,0x6C2C0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 397 1.1 christos { "dbvd" ,2,0x6C2D0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 398 1.1 christos { "dbnufd" ,2,0x6C2E0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 399 1.1 christos { "dbufd" ,2,0x6C2F0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 400 1.1 christos { "dbncd" ,2,0x6C240000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 401 1.1 christos { "dbcd" ,2,0x6C210000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 402 1.1 christos { "dbnlvd" ,2,0x6C300000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 403 1.1 christos { "dblvd" ,2,0x6C310000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 404 1.1 christos { "dbnlufd",2,0x6C320000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 405 1.1 christos { "dblufd" ,2,0x6C330000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 406 1.1 christos { "dbzufd" ,2,0x6C340000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 407 1.1 christos { "fix" ,2,0x05000000,AddressMode, { GAddr1, AllReg, 0 }, Imm_Float }, 408 1.1 christos { "float" ,2,0x05800000,AddressMode, { GAddr2, Rn, 0 }, Imm_SInt }, 409 1.1 christos { "iack" ,1,0x1B000000,AddressMode, { Direct|Indirect, 0, 0 }, Imm_None }, 410 1.1 christos { "idle" ,0,0x06000000,0, { 0, 0, 0 }, Imm_None }, 411 1.1 christos { "idle2" ,0,0x06000001,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */ 412 1.1 christos { "lde" ,2,0x06800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 413 1.1 christos { "ldf" ,2,0x07000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 414 1.1 christos { "ldfu" ,2,0x40000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 415 1.1 christos { "ldflo" ,2,0x40800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 416 1.1 christos { "ldfls" ,2,0x41000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 417 1.1 christos { "ldfhi" ,2,0x41800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 418 1.1 christos { "ldfhs" ,2,0x42000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 419 1.1 christos { "ldfeq" ,2,0x42800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 420 1.1 christos { "ldfne" ,2,0x43000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 421 1.1 christos { "ldflt" ,2,0x43800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 422 1.1 christos { "ldfle" ,2,0x44000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 423 1.1 christos { "ldfgt" ,2,0x44800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 424 1.1 christos { "ldfge" ,2,0x45000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 425 1.1 christos { "ldfz" ,2,0x42800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 426 1.1 christos { "ldfnz" ,2,0x43000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 427 1.1 christos { "ldfp" ,2,0x44800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 428 1.1 christos { "ldfn" ,2,0x43800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 429 1.1 christos { "ldfnn" ,2,0x45000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 430 1.1 christos { "ldfnv" ,2,0x46000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 431 1.1 christos { "ldfv" ,2,0x46800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 432 1.1 christos { "ldfnuf" ,2,0x47000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 433 1.1 christos { "ldfuf" ,2,0x47800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 434 1.1 christos { "ldfnc" ,2,0x42000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 435 1.1 christos { "ldfc" ,2,0x40800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 436 1.1 christos { "ldfnlv" ,2,0x48000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 437 1.1 christos { "ldflv" ,2,0x48800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 438 1.1 christos { "ldfnluf",2,0x49000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 439 1.1 christos { "ldfluf" ,2,0x49800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 440 1.1 christos { "ldfzuf" ,2,0x4A000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 441 1.1 christos { "ldfi" ,2,0x07800000,AddressMode, { Direct|Indirect, Rn, 0 }, Imm_None }, 442 1.1 christos { "ldi" ,2,0x08000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 443 1.1 christos { "ldiu" ,2,0x50000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 444 1.1 christos { "ldilo" ,2,0x50800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 445 1.1 christos { "ldils" ,2,0x51000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 446 1.1 christos { "ldihi" ,2,0x51800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 447 1.1 christos { "ldihs" ,2,0x52000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 448 1.1 christos { "ldieq" ,2,0x52800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 449 1.1 christos { "ldine" ,2,0x53000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 450 1.1 christos { "ldilt" ,2,0x53800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 451 1.1 christos { "ldile" ,2,0x54000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 452 1.1 christos { "ldigt" ,2,0x54800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 453 1.1 christos { "ldige" ,2,0x55000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 454 1.1 christos { "ldiz" ,2,0x52800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 455 1.1 christos { "ldinz" ,2,0x53000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 456 1.1 christos { "ldip" ,2,0x54800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 457 1.1 christos { "ldin" ,2,0x53800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 458 1.1 christos { "ldinn" ,2,0x55000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 459 1.1 christos { "ldinv" ,2,0x56000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 460 1.1 christos { "ldiv" ,2,0x56800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 461 1.1 christos { "ldinuf" ,2,0x57000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 462 1.1 christos { "ldiuf" ,2,0x57800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 463 1.1 christos { "ldinc" ,2,0x52000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 464 1.1 christos { "ldic" ,2,0x50800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 465 1.1 christos { "ldinlv" ,2,0x58000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 466 1.1 christos { "ldilv" ,2,0x58800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 467 1.1 christos { "ldinluf",2,0x59000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 468 1.1 christos { "ldiluf" ,2,0x59800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 469 1.1 christos { "ldizuf" ,2,0x5A000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 470 1.1 christos { "ldii" ,2,0x08800000,AddressMode, { Direct|Indirect, AllReg, 0 }, Imm_None }, 471 1.1 christos { "ldm" ,2,0x09000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 472 1.1 christos { "ldp" ,2,0x08700000,0, { Abs24|Direct, DPReg|NotReq, 0 }, Imm_UInt }, 473 1.1 christos { "lopower",0,0x10800001,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */ 474 1.1 christos { "lsh" ,2,0x09800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 475 1.1 christos { "lsh3" ,3,0x24000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 476 1.1 christos { "maxspeed",0,0x10800000,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */ 477 1.1 christos { "mpyf" ,2,0x0A000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 478 1.1 christos { "mpyf3" ,3,0x24800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None }, 479 1.1 christos { "mpyi" ,2,0x0A800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 480 1.1 christos { "mpyi3" ,3,0x25000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 481 1.1 christos { "negb" ,2,0x0B000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 482 1.1 christos { "negf" ,2,0x0B800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 483 1.1 christos { "negi" ,2,0x0C000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 484 1.1 christos { "nop" ,1,0x0C800000,AddressMode, { AllReg|Indirect|NotReq, 0, 0 }, Imm_None }, 485 1.1 christos { "norm" ,2,0x0D000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, /*Check another source*/ 486 1.1 christos { "not" ,2,0x0D800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 487 1.1 christos { "or" ,2,0x10000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 488 1.1 christos { "or3" ,3,0x25800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 489 1.1 christos { "pop" ,1,0x0E200000,StackOp, { AllReg, 0, 0 }, Imm_None }, 490 1.1 christos { "popf" ,1,0x0EA00000,StackOp, { Rn, 0, 0 }, Imm_None }, 491 1.1 christos { "push" ,1,0x0F200000,StackOp, { AllReg, 0, 0 }, Imm_None }, 492 1.1 christos { "pushf" ,1,0x0FA00000,StackOp, { Rn, 0, 0 }, Imm_None }, 493 1.1 christos { "reti" ,0,0x78000000,0, { 0, 0, 0 }, Imm_None }, 494 1.1 christos { "retiu" ,0,0x78000000,0, { 0, 0, 0 }, Imm_None }, 495 1.1 christos { "retilo" ,0,0x78010000,0, { 0, 0, 0 }, Imm_None }, 496 1.1 christos { "retils" ,0,0x78020000,0, { 0, 0, 0 }, Imm_None }, 497 1.1 christos { "retihi" ,0,0x78030000,0, { 0, 0, 0 }, Imm_None }, 498 1.1 christos { "retihs" ,0,0x78040000,0, { 0, 0, 0 }, Imm_None }, 499 1.1 christos { "retieq" ,0,0x78050000,0, { 0, 0, 0 }, Imm_None }, 500 1.1 christos { "retine" ,0,0x78060000,0, { 0, 0, 0 }, Imm_None }, 501 1.1 christos { "retilt" ,0,0x78070000,0, { 0, 0, 0 }, Imm_None }, 502 1.1 christos { "retile" ,0,0x78080000,0, { 0, 0, 0 }, Imm_None }, 503 1.1 christos { "retigt" ,0,0x78090000,0, { 0, 0, 0 }, Imm_None }, 504 1.1 christos { "retige" ,0,0x780A0000,0, { 0, 0, 0 }, Imm_None }, 505 1.1 christos { "retiz" ,0,0x78050000,0, { 0, 0, 0 }, Imm_None }, 506 1.1 christos { "retinz" ,0,0x78060000,0, { 0, 0, 0 }, Imm_None }, 507 1.1 christos { "retip" ,0,0x78090000,0, { 0, 0, 0 }, Imm_None }, 508 1.1 christos { "retin" ,0,0x78070000,0, { 0, 0, 0 }, Imm_None }, 509 1.1 christos { "retinn" ,0,0x780A0000,0, { 0, 0, 0 }, Imm_None }, 510 1.1 christos { "retinv" ,0,0x780C0000,0, { 0, 0, 0 }, Imm_None }, 511 1.1 christos { "retiv" ,0,0x780D0000,0, { 0, 0, 0 }, Imm_None }, 512 1.1 christos { "retinuf",0,0x780E0000,0, { 0, 0, 0 }, Imm_None }, 513 1.1 christos { "retiuf" ,0,0x780F0000,0, { 0, 0, 0 }, Imm_None }, 514 1.1 christos { "retinc" ,0,0x78040000,0, { 0, 0, 0 }, Imm_None }, 515 1.1 christos { "retic" ,0,0x78010000,0, { 0, 0, 0 }, Imm_None }, 516 1.1 christos { "retinlv",0,0x78100000,0, { 0, 0, 0 }, Imm_None }, 517 1.1 christos { "retilv" ,0,0x78110000,0, { 0, 0, 0 }, Imm_None }, 518 1.1 christos { "retinluf",0,0x78120000,0, { 0, 0, 0 }, Imm_None }, 519 1.1 christos { "retiluf",0,0x78130000,0, { 0, 0, 0 }, Imm_None }, 520 1.1 christos { "retizuf",0,0x78140000,0, { 0, 0, 0 }, Imm_None }, 521 1.1 christos { "rets" ,0,0x78800000,0, { 0, 0, 0 }, Imm_None }, 522 1.1 christos { "retsu" ,0,0x78800000,0, { 0, 0, 0 }, Imm_None }, 523 1.1 christos { "retslo" ,0,0x78810000,0, { 0, 0, 0 }, Imm_None }, 524 1.1 christos { "retsls" ,0,0x78820000,0, { 0, 0, 0 }, Imm_None }, 525 1.1 christos { "retshi" ,0,0x78830000,0, { 0, 0, 0 }, Imm_None }, 526 1.1 christos { "retshs" ,0,0x78840000,0, { 0, 0, 0 }, Imm_None }, 527 1.1 christos { "retseq" ,0,0x78850000,0, { 0, 0, 0 }, Imm_None }, 528 1.1 christos { "retsne" ,0,0x78860000,0, { 0, 0, 0 }, Imm_None }, 529 1.1 christos { "retslt" ,0,0x78870000,0, { 0, 0, 0 }, Imm_None }, 530 1.1 christos { "retsle" ,0,0x78880000,0, { 0, 0, 0 }, Imm_None }, 531 1.1 christos { "retsgt" ,0,0x78890000,0, { 0, 0, 0 }, Imm_None }, 532 1.1 christos { "retsge" ,0,0x788A0000,0, { 0, 0, 0 }, Imm_None }, 533 1.1 christos { "retsz" ,0,0x78850000,0, { 0, 0, 0 }, Imm_None }, 534 1.1 christos { "retsnz" ,0,0x78860000,0, { 0, 0, 0 }, Imm_None }, 535 1.1 christos { "retsp" ,0,0x78890000,0, { 0, 0, 0 }, Imm_None }, 536 1.1 christos { "retsn" ,0,0x78870000,0, { 0, 0, 0 }, Imm_None }, 537 1.1 christos { "retsnn" ,0,0x788A0000,0, { 0, 0, 0 }, Imm_None }, 538 1.1 christos { "retsnv" ,0,0x788C0000,0, { 0, 0, 0 }, Imm_None }, 539 1.1 christos { "retsv" ,0,0x788D0000,0, { 0, 0, 0 }, Imm_None }, 540 1.1 christos { "retsnuf",0,0x788E0000,0, { 0, 0, 0 }, Imm_None }, 541 1.1 christos { "retsuf" ,0,0x788F0000,0, { 0, 0, 0 }, Imm_None }, 542 1.1 christos { "retsnc" ,0,0x78840000,0, { 0, 0, 0 }, Imm_None }, 543 1.1 christos { "retsc" ,0,0x78810000,0, { 0, 0, 0 }, Imm_None }, 544 1.1 christos { "retsnlv",0,0x78900000,0, { 0, 0, 0 }, Imm_None }, 545 1.1 christos { "retslv" ,0,0x78910000,0, { 0, 0, 0 }, Imm_None }, 546 1.1 christos { "retsnluf",0,0x78920000,0, { 0, 0, 0 }, Imm_None }, 547 1.1 christos { "retsluf",0,0x78930000,0, { 0, 0, 0 }, Imm_None }, 548 1.1 christos { "retszuf",0,0x78940000,0, { 0, 0, 0 }, Imm_None }, 549 1.1 christos { "rnd" ,2,0x11000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 550 1.1 christos { "rol" ,1,0x11E00001,Rotate, { AllReg, 0, 0 }, Imm_None }, 551 1.1 christos { "rolc" ,1,0x12600001,Rotate, { AllReg, 0, 0 }, Imm_None }, 552 1.1 christos { "ror" ,1,0x12E0FFFF,Rotate, { AllReg, 0, 0 }, Imm_None }, 553 1.1 christos { "rorc" ,1,0x1360FFFF,Rotate, { AllReg, 0, 0 }, Imm_None }, 554 1.1 christos { "rptb" ,1,0x64000000,0, { Imm24, 0, 0 }, Imm_UInt }, 555 1.1 christos { "rpts" ,1,0x139B0000,AddressMode, { GAddr2, 0, 0 }, Imm_UInt }, 556 1.1 christos { "sigi" ,0,0x16000000,0, { 0, 0, 0 }, Imm_None }, 557 1.1 christos { "stf" ,2,0x14000000,AddressMode, { Rn, Direct|Indirect, 0 }, Imm_Float }, 558 1.1 christos { "stfi" ,2,0x14800000,AddressMode, { Rn, Direct|Indirect, 0 }, Imm_Float }, 559 1.1 christos { "sti" ,2,0x15000000,AddressMode, { AllReg, Direct|Indirect, 0 }, Imm_SInt }, 560 1.1 christos { "stii" ,2,0x15800000,AddressMode, { AllReg, Direct|Indirect, 0 }, Imm_SInt }, 561 1.1 christos { "subb" ,2,0x16800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 562 1.1 christos { "subb3" ,3,0x26000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 563 1.1 christos { "subc" ,2,0x17000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 564 1.1 christos { "subf" ,2,0x17800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 565 1.1 christos { "subf3" ,3,0x26800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None }, 566 1.1 christos { "subi" ,2,0x18000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 567 1.1 christos { "subi3" ,3,0x27000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 568 1.1 christos { "subrb" ,2,0x18800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 569 1.1 christos { "subrf" ,2,0x19000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 570 1.1 christos { "subri" ,2,0x19800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 571 1.1 christos { "swi" ,0,0x66000000,0, { 0, 0, 0 }, Imm_None }, 572 1.1 christos { "trap" ,1,0x74800020,0, { IVector, 0, 0 }, Imm_None }, 573 1.1 christos { "trapu" ,1,0x74800020,0, { IVector, 0, 0 }, Imm_None }, 574 1.1 christos { "traplo" ,1,0x74810020,0, { IVector, 0, 0 }, Imm_None }, 575 1.1 christos { "trapls" ,1,0x74820020,0, { IVector, 0, 0 }, Imm_None }, 576 1.1 christos { "traphi" ,1,0x74830020,0, { IVector, 0, 0 }, Imm_None }, 577 1.1 christos { "traphs" ,1,0x74840020,0, { IVector, 0, 0 }, Imm_None }, 578 1.1 christos { "trapeq" ,1,0x74850020,0, { IVector, 0, 0 }, Imm_None }, 579 1.1 christos { "trapne" ,1,0x74860020,0, { IVector, 0, 0 }, Imm_None }, 580 1.1 christos { "traplt" ,1,0x74870020,0, { IVector, 0, 0 }, Imm_None }, 581 1.1 christos { "traple" ,1,0x74880020,0, { IVector, 0, 0 }, Imm_None }, 582 1.1 christos { "trapgt" ,1,0x74890020,0, { IVector, 0, 0 }, Imm_None }, 583 1.1 christos { "trapge" ,1,0x748A0020,0, { IVector, 0, 0 }, Imm_None }, 584 1.1 christos { "trapz" ,1,0x74850020,0, { IVector, 0, 0 }, Imm_None }, 585 1.1 christos { "trapnz" ,1,0x74860020,0, { IVector, 0, 0 }, Imm_None }, 586 1.1 christos { "trapp" ,1,0x74890020,0, { IVector, 0, 0 }, Imm_None }, 587 1.1 christos { "trapn" ,1,0x74870020,0, { IVector, 0, 0 }, Imm_None }, 588 1.1 christos { "trapnn" ,1,0x748A0020,0, { IVector, 0, 0 }, Imm_None }, 589 1.1 christos { "trapnv" ,1,0x748C0020,0, { IVector, 0, 0 }, Imm_None }, 590 1.1 christos { "trapv" ,1,0x748D0020,0, { IVector, 0, 0 }, Imm_None }, 591 1.1 christos { "trapnuf",1,0x748E0020,0, { IVector, 0, 0 }, Imm_None }, 592 1.1 christos { "trapuf" ,1,0x748F0020,0, { IVector, 0, 0 }, Imm_None }, 593 1.1 christos { "trapnc" ,1,0x74840020,0, { IVector, 0, 0 }, Imm_None }, 594 1.1 christos { "trapc" ,1,0x74810020,0, { IVector, 0, 0 }, Imm_None }, 595 1.1 christos { "trapnlv",1,0x74900020,0, { IVector, 0, 0 }, Imm_None }, 596 1.1 christos { "traplv" ,1,0x74910020,0, { IVector, 0, 0 }, Imm_None }, 597 1.1 christos { "trapnluf",1,0x74920020,0, { IVector, 0, 0 }, Imm_None }, 598 1.1 christos { "trapluf",1,0x74930020,0, { IVector, 0, 0 }, Imm_None }, 599 1.1 christos { "trapzuf",1,0x74940020,0, { IVector, 0, 0 }, Imm_None }, 600 1.1 christos { "tstb" ,2,0x1A000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 601 1.1 christos { "tstb3" ,2,0x27800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, 0 }, Imm_None }, 602 1.1 christos { "xor" ,2,0x1A800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 603 1.1 christos { "xor3" ,3,0x28000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 604 1.1 christos { "" ,0,0x00000000,0, { 0, 0, 0 }, 0 } 605 1.1 christos }; 606 1.1 christos 607 1.1 christos static const insn_template *const tic30_optab_end = 608 1.1 christos tic30_optab + sizeof(tic30_optab)/sizeof(tic30_optab[0]); 609 1.1 christos 610 1.1 christos typedef struct { 611 1.6 christos const char *name; 612 1.1 christos unsigned int operands_1; 613 1.1 christos unsigned int operands_2; 614 1.1 christos unsigned int base_opcode; 615 1.1 christos unsigned int operand_types[2][3]; 616 1.1 christos /* Which operand fits into which part of the final opcode word. */ 617 1.1 christos int oporder; 618 1.1 christos } partemplate; 619 1.1 christos 620 1.1 christos /* oporder defines - not very descriptive. */ 621 1.1 christos #define OO_4op1 0 622 1.1 christos #define OO_4op2 1 623 1.1 christos #define OO_4op3 2 624 1.1 christos #define OO_5op1 3 625 1.1 christos #define OO_5op2 4 626 1.1 christos #define OO_PField 5 627 1.1 christos 628 1.1 christos static const partemplate tic30_paroptab[] = { 629 1.1 christos { "q_absf_stf", 2,2,0xC8000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 630 1.1 christos OO_4op1 }, 631 1.1 christos { "q_absi_sti", 2,2,0xCA000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 632 1.1 christos OO_4op1 }, 633 1.1 christos { "q_addf3_stf", 3,2,0xCC000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 634 1.1 christos OO_5op1 }, 635 1.1 christos { "q_addi3_sti", 3,2,0xCE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 636 1.1 christos OO_5op1 }, 637 1.1 christos { "q_and3_sti", 3,2,0xD0000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 638 1.1 christos OO_5op1 }, 639 1.1 christos { "q_ash3_sti", 3,2,0xD2000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, 640 1.1 christos OO_5op2 }, 641 1.1 christos { "q_fix_sti", 2,2,0xD4000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 642 1.1 christos OO_4op1 }, 643 1.1 christos { "q_float_stf", 2,2,0xD6000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 644 1.1 christos OO_4op1 }, 645 1.1 christos { "q_ldf_ldf", 2,2,0xC4000000, { { Indirect, Rn, 0 }, { Indirect, Rn, 0 } }, 646 1.1 christos OO_4op2 }, 647 1.1 christos { "q_ldf_stf", 2,2,0xD8000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 648 1.1 christos OO_4op1 }, 649 1.1 christos { "q_ldi_ldi", 2,2,0xC6000000, { { Indirect, Rn, 0 }, { Indirect, Rn, 0 } }, 650 1.1 christos OO_4op2 }, 651 1.1 christos { "q_ldi_sti", 2,2,0xDA000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 652 1.1 christos OO_4op1 }, 653 1.1 christos { "q_lsh3_sti", 3,2,0xDC000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, 654 1.1 christos OO_5op2 }, 655 1.1 christos { "q_mpyf3_addf3",3,3,0x80000000, { { Rn | Indirect, Rn | Indirect, Rn }, 656 1.1 christos { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, 657 1.1 christos { "q_mpyf3_stf", 3,2,0xDE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 658 1.1 christos OO_5op1 }, 659 1.1 christos { "q_mpyf3_subf3",3,3,0x84000000, { { Rn | Indirect, Rn | Indirect, Rn }, 660 1.1 christos { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, 661 1.1 christos { "q_mpyi3_addi3",3,3,0x88000000, { { Rn | Indirect, Rn | Indirect, Rn }, 662 1.1 christos { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, 663 1.1 christos { "q_mpyi3_sti", 3,2,0xE0000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 664 1.1 christos OO_5op1 }, 665 1.1 christos { "q_mpyi3_subi3",3,3,0x8C000000, { { Rn | Indirect, Rn | Indirect, Rn }, 666 1.1 christos { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, 667 1.1 christos { "q_negf_stf", 2,2,0xE2000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 668 1.1 christos OO_4op1 }, 669 1.1 christos { "q_negi_sti", 2,2,0xE4000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 670 1.1 christos OO_4op1 }, 671 1.1 christos { "q_not_sti", 2,2,0xE6000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 672 1.1 christos OO_4op1 }, 673 1.1 christos { "q_or3_sti", 3,2,0xE8000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 674 1.1 christos OO_5op1 }, 675 1.1 christos { "q_stf_stf", 2,2,0xC0000000, { { Rn, Indirect, 0 }, { Rn, Indirect, 0 } }, 676 1.1 christos OO_4op3 }, 677 1.1 christos { "q_sti_sti", 2,2,0xC2000000, { { Rn, Indirect, 0 }, { Rn, Indirect, 0 } }, 678 1.1 christos OO_4op3 }, 679 1.1 christos { "q_subf3_stf", 3,2,0xEA000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, 680 1.1 christos OO_5op2 }, 681 1.1 christos { "q_subi3_sti", 3,2,0xEC000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, 682 1.1 christos OO_5op2 }, 683 1.1 christos { "q_xor3_sti", 3,2,0xEE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 684 1.1 christos OO_5op1 }, 685 1.1 christos { "", 0,0,0x00000000, { { 0, 0, 0 }, { 0, 0, 0 } }, 0 } 686 1.1 christos }; 687 1.1 christos 688 1.1 christos static const partemplate *const tic30_paroptab_end = 689 1.1 christos tic30_paroptab + sizeof(tic30_paroptab)/sizeof(tic30_paroptab[0]); 690 1.1 christos 691 1.1 christos #endif 692