198b9484cSchristos /* tic30.h -- Header file for TI TMS320C30 opcode table 2*aab831ceSchristos Copyright (C) 1998-2024 Free Software Foundation, Inc. 398b9484cSchristos Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) 498b9484cSchristos 598b9484cSchristos This file is part of GDB, GAS, and the GNU binutils. 698b9484cSchristos 798b9484cSchristos GDB, GAS, and the GNU binutils are free software; you can redistribute 898b9484cSchristos them and/or modify them under the terms of the GNU General Public 998b9484cSchristos License as published by the Free Software Foundation; either version 3, 1098b9484cSchristos or (at your option) any later version. 1198b9484cSchristos 1298b9484cSchristos GDB, GAS, and the GNU binutils are distributed in the hope that they 1398b9484cSchristos will be useful, but WITHOUT ANY WARRANTY; without even the implied 1498b9484cSchristos warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 1598b9484cSchristos the GNU General Public License for more details. 1698b9484cSchristos 1798b9484cSchristos You should have received a copy of the GNU General Public License 1898b9484cSchristos along with this file; see the file COPYING3. If not, write to the Free 1998b9484cSchristos Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 2098b9484cSchristos 02110-1301, USA. */ 2198b9484cSchristos 2298b9484cSchristos /* FIXME: The opcode table should be in opcodes/tic30-opc.c, not in a 2398b9484cSchristos header file. */ 2498b9484cSchristos 2598b9484cSchristos #ifndef _TMS320_H_ 2698b9484cSchristos #define _TMS320_H_ 2798b9484cSchristos 2898b9484cSchristos struct _register 2998b9484cSchristos { 30ba340e45Schristos const char *name; 3198b9484cSchristos unsigned char opcode; 3298b9484cSchristos unsigned char regtype; 3398b9484cSchristos }; 3498b9484cSchristos 3598b9484cSchristos typedef struct _register reg; 3698b9484cSchristos 3798b9484cSchristos #define REG_Rn 0x01 3898b9484cSchristos #define REG_ARn 0x02 3998b9484cSchristos #define REG_DP 0x03 4098b9484cSchristos #define REG_OTHER 0x04 4198b9484cSchristos 4298b9484cSchristos static const reg tic30_regtab[] = { 4398b9484cSchristos { "r0", 0x00, REG_Rn }, 4498b9484cSchristos { "r1", 0x01, REG_Rn }, 4598b9484cSchristos { "r2", 0x02, REG_Rn }, 4698b9484cSchristos { "r3", 0x03, REG_Rn }, 4798b9484cSchristos { "r4", 0x04, REG_Rn }, 4898b9484cSchristos { "r5", 0x05, REG_Rn }, 4998b9484cSchristos { "r6", 0x06, REG_Rn }, 5098b9484cSchristos { "r7", 0x07, REG_Rn }, 5198b9484cSchristos { "ar0",0x08, REG_ARn }, 5298b9484cSchristos { "ar1",0x09, REG_ARn }, 5398b9484cSchristos { "ar2",0x0A, REG_ARn }, 5498b9484cSchristos { "ar3",0x0B, REG_ARn }, 5598b9484cSchristos { "ar4",0x0C, REG_ARn }, 5698b9484cSchristos { "ar5",0x0D, REG_ARn }, 5798b9484cSchristos { "ar6",0x0E, REG_ARn }, 5898b9484cSchristos { "ar7",0x0F, REG_ARn }, 5998b9484cSchristos { "dp", 0x10, REG_DP }, 6098b9484cSchristos { "ir0",0x11, REG_OTHER }, 6198b9484cSchristos { "ir1",0x12, REG_OTHER }, 6298b9484cSchristos { "bk", 0x13, REG_OTHER }, 6398b9484cSchristos { "sp", 0x14, REG_OTHER }, 6498b9484cSchristos { "st", 0x15, REG_OTHER }, 6598b9484cSchristos { "ie", 0x16, REG_OTHER }, 6698b9484cSchristos { "if", 0x17, REG_OTHER }, 6798b9484cSchristos { "iof",0x18, REG_OTHER }, 6898b9484cSchristos { "rs", 0x19, REG_OTHER }, 6998b9484cSchristos { "re", 0x1A, REG_OTHER }, 7098b9484cSchristos { "rc", 0x1B, REG_OTHER }, 7198b9484cSchristos { "R0", 0x00, REG_Rn }, 7298b9484cSchristos { "R1", 0x01, REG_Rn }, 7398b9484cSchristos { "R2", 0x02, REG_Rn }, 7498b9484cSchristos { "R3", 0x03, REG_Rn }, 7598b9484cSchristos { "R4", 0x04, REG_Rn }, 7698b9484cSchristos { "R5", 0x05, REG_Rn }, 7798b9484cSchristos { "R6", 0x06, REG_Rn }, 7898b9484cSchristos { "R7", 0x07, REG_Rn }, 7998b9484cSchristos { "AR0",0x08, REG_ARn }, 8098b9484cSchristos { "AR1",0x09, REG_ARn }, 8198b9484cSchristos { "AR2",0x0A, REG_ARn }, 8298b9484cSchristos { "AR3",0x0B, REG_ARn }, 8398b9484cSchristos { "AR4",0x0C, REG_ARn }, 8498b9484cSchristos { "AR5",0x0D, REG_ARn }, 8598b9484cSchristos { "AR6",0x0E, REG_ARn }, 8698b9484cSchristos { "AR7",0x0F, REG_ARn }, 8798b9484cSchristos { "DP", 0x10, REG_DP }, 8898b9484cSchristos { "IR0",0x11, REG_OTHER }, 8998b9484cSchristos { "IR1",0x12, REG_OTHER }, 9098b9484cSchristos { "BK", 0x13, REG_OTHER }, 9198b9484cSchristos { "SP", 0x14, REG_OTHER }, 9298b9484cSchristos { "ST", 0x15, REG_OTHER }, 9398b9484cSchristos { "IE", 0x16, REG_OTHER }, 9498b9484cSchristos { "IF", 0x17, REG_OTHER }, 9598b9484cSchristos { "IOF",0x18, REG_OTHER }, 9698b9484cSchristos { "RS", 0x19, REG_OTHER }, 9798b9484cSchristos { "RE", 0x1A, REG_OTHER }, 9898b9484cSchristos { "RC", 0x1B, REG_OTHER }, 9998b9484cSchristos { "", 0, 0 } 10098b9484cSchristos }; 10198b9484cSchristos 10298b9484cSchristos static const reg *const tic30_regtab_end 10398b9484cSchristos = tic30_regtab + sizeof(tic30_regtab)/sizeof(tic30_regtab[0]); 10498b9484cSchristos 10598b9484cSchristos /* Indirect Addressing Modes Modification Fields */ 10698b9484cSchristos /* Indirect Addressing with Displacement */ 10798b9484cSchristos #define PreDisp_Add 0x00 10898b9484cSchristos #define PreDisp_Sub 0x01 10998b9484cSchristos #define PreDisp_Add_Mod 0x02 11098b9484cSchristos #define PreDisp_Sub_Mod 0x03 11198b9484cSchristos #define PostDisp_Add_Mod 0x04 11298b9484cSchristos #define PostDisp_Sub_Mod 0x05 11398b9484cSchristos #define PostDisp_Add_Circ 0x06 11498b9484cSchristos #define PostDisp_Sub_Circ 0x07 11598b9484cSchristos /* Indirect Addressing with Index Register IR0 */ 11698b9484cSchristos #define PreIR0_Add 0x08 11798b9484cSchristos #define PreIR0_Sub 0x09 11898b9484cSchristos #define PreIR0_Add_Mod 0x0A 11998b9484cSchristos #define PreIR0_Sub_Mod 0x0B 12098b9484cSchristos #define PostIR0_Add_Mod 0x0C 12198b9484cSchristos #define PostIR0_Sub_Mod 0x0D 12298b9484cSchristos #define PostIR0_Add_Circ 0x0E 12398b9484cSchristos #define PostIR0_Sub_Circ 0x0F 12498b9484cSchristos /* Indirect Addressing with Index Register IR1 */ 12598b9484cSchristos #define PreIR1_Add 0x10 12698b9484cSchristos #define PreIR1_Sub 0x11 12798b9484cSchristos #define PreIR1_Add_Mod 0x12 12898b9484cSchristos #define PreIR1_Sub_Mod 0x13 12998b9484cSchristos #define PostIR1_Add_Mod 0x14 13098b9484cSchristos #define PostIR1_Sub_Mod 0x15 13198b9484cSchristos #define PostIR1_Add_Circ 0x16 13298b9484cSchristos #define PostIR1_Sub_Circ 0x17 13398b9484cSchristos /* Indirect Addressing (Special Cases) */ 13498b9484cSchristos #define IndirectOnly 0x18 13598b9484cSchristos #define PostIR0_Add_BitRev 0x19 13698b9484cSchristos 13798b9484cSchristos typedef struct { 138ba340e45Schristos const char *syntax; 13998b9484cSchristos unsigned char modfield; 14098b9484cSchristos unsigned char displacement; 14198b9484cSchristos } ind_addr_type; 14298b9484cSchristos 14398b9484cSchristos #define IMPLIED_DISP 0x01 14498b9484cSchristos #define DISP_REQUIRED 0x02 14598b9484cSchristos #define NO_DISP 0x03 14698b9484cSchristos 14798b9484cSchristos static const ind_addr_type tic30_indaddr_tab[] = { 14898b9484cSchristos { "*+ar", PreDisp_Add, IMPLIED_DISP }, 14998b9484cSchristos { "*-ar", PreDisp_Sub, IMPLIED_DISP }, 15098b9484cSchristos { "*++ar", PreDisp_Add_Mod, IMPLIED_DISP }, 15198b9484cSchristos { "*--ar", PreDisp_Sub_Mod, IMPLIED_DISP }, 15298b9484cSchristos { "*ar++", PostDisp_Add_Mod, IMPLIED_DISP }, 15398b9484cSchristos { "*ar--", PostDisp_Sub_Mod, IMPLIED_DISP }, 15498b9484cSchristos { "*ar++%", PostDisp_Add_Circ, IMPLIED_DISP }, 15598b9484cSchristos { "*ar--%", PostDisp_Sub_Circ, IMPLIED_DISP }, 15698b9484cSchristos { "*+ar()", PreDisp_Add, DISP_REQUIRED }, 15798b9484cSchristos { "*-ar()", PreDisp_Sub, DISP_REQUIRED }, 15898b9484cSchristos { "*++ar()", PreDisp_Add_Mod, DISP_REQUIRED }, 15998b9484cSchristos { "*--ar()", PreDisp_Sub_Mod, DISP_REQUIRED }, 16098b9484cSchristos { "*ar++()", PostDisp_Add_Mod, DISP_REQUIRED }, 16198b9484cSchristos { "*ar--()", PostDisp_Sub_Mod, DISP_REQUIRED }, 16298b9484cSchristos { "*ar++()%", PostDisp_Add_Circ, DISP_REQUIRED }, 16398b9484cSchristos { "*ar--()%", PostDisp_Sub_Circ, DISP_REQUIRED }, 16498b9484cSchristos { "*+ar(ir0)", PreIR0_Add, NO_DISP }, 16598b9484cSchristos { "*-ar(ir0)", PreIR0_Sub, NO_DISP }, 16698b9484cSchristos { "*++ar(ir0)", PreIR0_Add_Mod, NO_DISP }, 16798b9484cSchristos { "*--ar(ir0)", PreIR0_Sub_Mod, NO_DISP }, 16898b9484cSchristos { "*ar++(ir0)", PostIR0_Add_Mod, NO_DISP }, 16998b9484cSchristos { "*ar--(ir0)", PostIR0_Sub_Mod, NO_DISP }, 17098b9484cSchristos { "*ar++(ir0)%",PostIR0_Add_Circ, NO_DISP }, 17198b9484cSchristos { "*ar--(ir0)%",PostIR0_Sub_Circ, NO_DISP }, 17298b9484cSchristos { "*+ar(ir1)", PreIR1_Add, NO_DISP }, 17398b9484cSchristos { "*-ar(ir1)", PreIR1_Sub, NO_DISP }, 17498b9484cSchristos { "*++ar(ir1)", PreIR1_Add_Mod, NO_DISP }, 17598b9484cSchristos { "*--ar(ir1)", PreIR1_Sub_Mod, NO_DISP }, 17698b9484cSchristos { "*ar++(ir1)", PostIR1_Add_Mod, NO_DISP }, 17798b9484cSchristos { "*ar--(ir1)", PostIR1_Sub_Mod, NO_DISP }, 17898b9484cSchristos { "*ar++(ir1)%",PostIR1_Add_Circ, NO_DISP }, 17998b9484cSchristos { "*ar--(ir1)%",PostIR1_Sub_Circ, NO_DISP }, 18098b9484cSchristos { "*ar", IndirectOnly, NO_DISP }, 18198b9484cSchristos { "*ar++(ir0)b",PostIR0_Add_BitRev, NO_DISP }, 18298b9484cSchristos { "", 0,0 } 18398b9484cSchristos }; 18498b9484cSchristos 18598b9484cSchristos static const ind_addr_type *const tic30_indaddrtab_end 18698b9484cSchristos = tic30_indaddr_tab + sizeof(tic30_indaddr_tab)/sizeof(tic30_indaddr_tab[0]); 18798b9484cSchristos 18898b9484cSchristos /* Possible operand types */ 18998b9484cSchristos /* Register types */ 19098b9484cSchristos #define Rn 0x0001 19198b9484cSchristos #define ARn 0x0002 19298b9484cSchristos #define DPReg 0x0004 19398b9484cSchristos #define OtherReg 0x0008 19498b9484cSchristos /* Addressing mode types */ 19598b9484cSchristos #define Direct 0x0010 19698b9484cSchristos #define Indirect 0x0020 19798b9484cSchristos #define Imm16 0x0040 19898b9484cSchristos #define Disp 0x0080 19998b9484cSchristos #define Imm24 0x0100 20098b9484cSchristos #define Abs24 0x0200 20198b9484cSchristos /* 3 operand addressing mode types */ 20298b9484cSchristos #define op3T1 0x0400 20398b9484cSchristos #define op3T2 0x0800 20498b9484cSchristos /* Interrupt vector */ 20598b9484cSchristos #define IVector 0x1000 20698b9484cSchristos /* Not required */ 20798b9484cSchristos #define NotReq 0x2000 20898b9484cSchristos 20998b9484cSchristos #define GAddr1 Rn | Direct | Indirect | Imm16 21098b9484cSchristos #define GAddr2 GAddr1 | AllReg 21198b9484cSchristos #define TAddr1 op3T1 | Rn | Indirect 21298b9484cSchristos #define TAddr2 op3T2 | Rn | Indirect 21398b9484cSchristos #define Reg Rn | ARn 21498b9484cSchristos #define AllReg Reg | DPReg | OtherReg 21598b9484cSchristos 21698b9484cSchristos typedef struct _template 21798b9484cSchristos { 218ba340e45Schristos const char *name; 21998b9484cSchristos unsigned int operands; /* how many operands */ 22098b9484cSchristos unsigned int base_opcode; /* base_opcode is the fundamental opcode byte */ 22198b9484cSchristos /* the bits in opcode_modifier are used to generate the final opcode from 22298b9484cSchristos the base_opcode. These bits also are used to detect alternate forms of 22398b9484cSchristos the same instruction */ 22498b9484cSchristos unsigned int opcode_modifier; 22598b9484cSchristos 22698b9484cSchristos /* opcode_modifier bits: */ 22798b9484cSchristos #define AddressMode 0x00600000 22898b9484cSchristos #define PCRel 0x02000000 22998b9484cSchristos #define StackOp 0x001F0000 23098b9484cSchristos #define Rotate StackOp 23198b9484cSchristos 23298b9484cSchristos /* operand_types[i] describes the type of operand i. This is made 23398b9484cSchristos by OR'ing together all of the possible type masks. (e.g. 23498b9484cSchristos 'operand_types[i] = Reg|Imm' specifies that operand i can be 23598b9484cSchristos either a register or an immediate operand */ 23698b9484cSchristos unsigned int operand_types[3]; 23798b9484cSchristos /* This defines the number type of an immediate argument to an instruction. */ 23898b9484cSchristos int imm_arg_type; 23998b9484cSchristos #define Imm_None 0 24098b9484cSchristos #define Imm_Float 1 24198b9484cSchristos #define Imm_SInt 2 24298b9484cSchristos #define Imm_UInt 3 24398b9484cSchristos } 24498b9484cSchristos insn_template; 24598b9484cSchristos 24698b9484cSchristos static const insn_template tic30_optab[] = { 24798b9484cSchristos { "absf" ,2,0x00000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 24898b9484cSchristos { "absi" ,2,0x00800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 24998b9484cSchristos { "addc" ,2,0x01000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 25098b9484cSchristos { "addc3" ,3,0x20000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 25198b9484cSchristos { "addf" ,2,0x01800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 25298b9484cSchristos { "addf3" ,3,0x20800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None }, 25398b9484cSchristos { "addi" ,2,0x02000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 25498b9484cSchristos { "addi3" ,3,0x21000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 25598b9484cSchristos { "and" ,2,0x02800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 25698b9484cSchristos { "and3" ,3,0x21800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 25798b9484cSchristos { "andn" ,2,0x03000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 25898b9484cSchristos { "andn3" ,3,0x22000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 25998b9484cSchristos { "ash" ,2,0x03800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 26098b9484cSchristos { "ash3" ,3,0x22800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 26198b9484cSchristos { "b" ,1,0x68000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 26298b9484cSchristos { "bu" ,1,0x68000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 26398b9484cSchristos { "blo" ,1,0x68010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 26498b9484cSchristos { "bls" ,1,0x68020000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 26598b9484cSchristos { "bhi" ,1,0x68030000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 26698b9484cSchristos { "bhs" ,1,0x68040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 26798b9484cSchristos { "beq" ,1,0x68050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 26898b9484cSchristos { "bne" ,1,0x68060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 26998b9484cSchristos { "blt" ,1,0x68070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27098b9484cSchristos { "ble" ,1,0x68080000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27198b9484cSchristos { "bgt" ,1,0x68090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27298b9484cSchristos { "bge" ,1,0x680A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27398b9484cSchristos { "bz" ,1,0x68050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27498b9484cSchristos { "bnz" ,1,0x68060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27598b9484cSchristos { "bp" ,1,0x68090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27698b9484cSchristos { "bn" ,1,0x68070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27798b9484cSchristos { "bnn" ,1,0x680A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27898b9484cSchristos { "bnv" ,1,0x680C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 27998b9484cSchristos { "bv" ,1,0x680D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28098b9484cSchristos { "bnuf" ,1,0x680E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28198b9484cSchristos { "buf" ,1,0x680F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28298b9484cSchristos { "bnc" ,1,0x68040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28398b9484cSchristos { "bc" ,1,0x68010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28498b9484cSchristos { "bnlv" ,1,0x68100000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28598b9484cSchristos { "blv" ,1,0x68110000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28698b9484cSchristos { "bnluf" ,1,0x68120000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28798b9484cSchristos { "bluf" ,1,0x68130000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28898b9484cSchristos { "bzuf" ,1,0x68140000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 28998b9484cSchristos { "bd" ,1,0x68200000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29098b9484cSchristos { "bud" ,1,0x68200000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29198b9484cSchristos { "blod" ,1,0x68210000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29298b9484cSchristos { "blsd" ,1,0x68220000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29398b9484cSchristos { "bhid" ,1,0x68230000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29498b9484cSchristos { "bhsd" ,1,0x68240000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29598b9484cSchristos { "beqd" ,1,0x68250000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29698b9484cSchristos { "bned" ,1,0x68260000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29798b9484cSchristos { "bltd" ,1,0x68270000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29898b9484cSchristos { "bled" ,1,0x68280000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 29998b9484cSchristos { "bgtd" ,1,0x68290000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30098b9484cSchristos { "bged" ,1,0x682A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30198b9484cSchristos { "bzd" ,1,0x68250000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30298b9484cSchristos { "bnzd" ,1,0x68260000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30398b9484cSchristos { "bpd" ,1,0x68290000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30498b9484cSchristos { "bnd" ,1,0x68270000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30598b9484cSchristos { "bnnd" ,1,0x682A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30698b9484cSchristos { "bnvd" ,1,0x682C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30798b9484cSchristos { "bvd" ,1,0x682D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30898b9484cSchristos { "bnufd" ,1,0x682E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 30998b9484cSchristos { "bufd" ,1,0x682F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 31098b9484cSchristos { "bncd" ,1,0x68240000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 31198b9484cSchristos { "bcd" ,1,0x68210000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 31298b9484cSchristos { "bnlvd" ,1,0x68300000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 31398b9484cSchristos { "blvd" ,1,0x68310000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 31498b9484cSchristos { "bnlufd" ,1,0x68320000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 31598b9484cSchristos { "blufd" ,1,0x68330000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 31698b9484cSchristos { "bzufd" ,1,0x68340000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, 31798b9484cSchristos { "br" ,1,0x60000000,0, { Imm24, 0, 0 }, Imm_UInt }, 31898b9484cSchristos { "brd" ,1,0x61000000,0, { Imm24, 0, 0 }, Imm_UInt }, 31998b9484cSchristos { "call" ,1,0x62000000,0, { Imm24, 0, 0 }, Imm_UInt }, 32098b9484cSchristos { "callu" ,1,0x70000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 32198b9484cSchristos { "calllo" ,1,0x70010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 32298b9484cSchristos { "callls" ,1,0x70020000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 32398b9484cSchristos { "callhi" ,1,0x70030000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 32498b9484cSchristos { "callhs" ,1,0x70040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 32598b9484cSchristos { "calleq" ,1,0x70050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 32698b9484cSchristos { "callne" ,1,0x70060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 32798b9484cSchristos { "calllt" ,1,0x70070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 32898b9484cSchristos { "callle" ,1,0x70080000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 32998b9484cSchristos { "callgt" ,1,0x70090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33098b9484cSchristos { "callge" ,1,0x700A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33198b9484cSchristos { "callz" ,1,0x70050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33298b9484cSchristos { "callnz" ,1,0x70060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33398b9484cSchristos { "callp" ,1,0x70090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33498b9484cSchristos { "calln" ,1,0x70070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33598b9484cSchristos { "callnn" ,1,0x700A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33698b9484cSchristos { "callnv" ,1,0x700C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33798b9484cSchristos { "callv" ,1,0x700D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33898b9484cSchristos { "callnuf",1,0x700E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 33998b9484cSchristos { "calluf" ,1,0x700F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 34098b9484cSchristos { "callnc" ,1,0x70040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 34198b9484cSchristos { "callc" ,1,0x70010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 34298b9484cSchristos { "callnlv",1,0x70100000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 34398b9484cSchristos { "calllv" ,1,0x70110000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 34498b9484cSchristos { "callnluf",1,0x70120000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 34598b9484cSchristos { "callluf",1,0x70130000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 34698b9484cSchristos { "callzuf",1,0x70140000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, 34798b9484cSchristos { "cmpf" ,2,0x04000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 34898b9484cSchristos { "cmpf3" ,2,0x23000000,AddressMode, { TAddr1, TAddr2, 0 }, Imm_None }, 34998b9484cSchristos { "cmpi" ,2,0x04800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 35098b9484cSchristos { "cmpi3" ,2,0x23800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, 0 }, Imm_None }, 35198b9484cSchristos { "db" ,2,0x6C000000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 35298b9484cSchristos { "dbu" ,2,0x6C000000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 35398b9484cSchristos { "dblo" ,2,0x6C010000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 35498b9484cSchristos { "dbls" ,2,0x6C020000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 35598b9484cSchristos { "dbhi" ,2,0x6C030000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 35698b9484cSchristos { "dbhs" ,2,0x6C040000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 35798b9484cSchristos { "dbeq" ,2,0x6C050000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 35898b9484cSchristos { "dbne" ,2,0x6C060000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 35998b9484cSchristos { "dblt" ,2,0x6C070000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36098b9484cSchristos { "dble" ,2,0x6C080000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36198b9484cSchristos { "dbgt" ,2,0x6C090000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36298b9484cSchristos { "dbge" ,2,0x6C0A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36398b9484cSchristos { "dbz" ,2,0x6C050000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36498b9484cSchristos { "dbnz" ,2,0x6C060000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36598b9484cSchristos { "dbp" ,2,0x6C090000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36698b9484cSchristos { "dbn" ,2,0x6C070000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36798b9484cSchristos { "dbnn" ,2,0x6C0A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36898b9484cSchristos { "dbnv" ,2,0x6C0C0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 36998b9484cSchristos { "dbv" ,2,0x6C0D0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37098b9484cSchristos { "dbnuf" ,2,0x6C0E0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37198b9484cSchristos { "dbuf" ,2,0x6C0F0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37298b9484cSchristos { "dbnc" ,2,0x6C040000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37398b9484cSchristos { "dbc" ,2,0x6C010000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37498b9484cSchristos { "dbnlv" ,2,0x6C100000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37598b9484cSchristos { "dblv" ,2,0x6C110000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37698b9484cSchristos { "dbnluf" ,2,0x6C120000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37798b9484cSchristos { "dbluf" ,2,0x6C130000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37898b9484cSchristos { "dbzuf" ,2,0x6C140000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 37998b9484cSchristos { "dbd" ,2,0x6C200000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38098b9484cSchristos { "dbud" ,2,0x6C200000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38198b9484cSchristos { "dblod" ,2,0x6C210000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38298b9484cSchristos { "dblsd" ,2,0x6C220000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38398b9484cSchristos { "dbhid" ,2,0x6C230000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38498b9484cSchristos { "dbhsd" ,2,0x6C240000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38598b9484cSchristos { "dbeqd" ,2,0x6C250000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38698b9484cSchristos { "dbned" ,2,0x6C260000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38798b9484cSchristos { "dbltd" ,2,0x6C270000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38898b9484cSchristos { "dbled" ,2,0x6C280000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 38998b9484cSchristos { "dbgtd" ,2,0x6C290000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39098b9484cSchristos { "dbged" ,2,0x6C2A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39198b9484cSchristos { "dbzd" ,2,0x6C250000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39298b9484cSchristos { "dbnzd" ,2,0x6C260000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39398b9484cSchristos { "dbpd" ,2,0x6C290000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39498b9484cSchristos { "dbnd" ,2,0x6C270000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39598b9484cSchristos { "dbnnd" ,2,0x6C2A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39698b9484cSchristos { "dbnvd" ,2,0x6C2C0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39798b9484cSchristos { "dbvd" ,2,0x6C2D0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39898b9484cSchristos { "dbnufd" ,2,0x6C2E0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 39998b9484cSchristos { "dbufd" ,2,0x6C2F0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 40098b9484cSchristos { "dbncd" ,2,0x6C240000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 40198b9484cSchristos { "dbcd" ,2,0x6C210000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 40298b9484cSchristos { "dbnlvd" ,2,0x6C300000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 40398b9484cSchristos { "dblvd" ,2,0x6C310000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 40498b9484cSchristos { "dbnlufd",2,0x6C320000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 40598b9484cSchristos { "dblufd" ,2,0x6C330000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 40698b9484cSchristos { "dbzufd" ,2,0x6C340000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, 40798b9484cSchristos { "fix" ,2,0x05000000,AddressMode, { GAddr1, AllReg, 0 }, Imm_Float }, 40898b9484cSchristos { "float" ,2,0x05800000,AddressMode, { GAddr2, Rn, 0 }, Imm_SInt }, 40998b9484cSchristos { "iack" ,1,0x1B000000,AddressMode, { Direct|Indirect, 0, 0 }, Imm_None }, 41098b9484cSchristos { "idle" ,0,0x06000000,0, { 0, 0, 0 }, Imm_None }, 41198b9484cSchristos { "idle2" ,0,0x06000001,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */ 41298b9484cSchristos { "lde" ,2,0x06800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 41398b9484cSchristos { "ldf" ,2,0x07000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 41498b9484cSchristos { "ldfu" ,2,0x40000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 41598b9484cSchristos { "ldflo" ,2,0x40800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 41698b9484cSchristos { "ldfls" ,2,0x41000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 41798b9484cSchristos { "ldfhi" ,2,0x41800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 41898b9484cSchristos { "ldfhs" ,2,0x42000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 41998b9484cSchristos { "ldfeq" ,2,0x42800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42098b9484cSchristos { "ldfne" ,2,0x43000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42198b9484cSchristos { "ldflt" ,2,0x43800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42298b9484cSchristos { "ldfle" ,2,0x44000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42398b9484cSchristos { "ldfgt" ,2,0x44800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42498b9484cSchristos { "ldfge" ,2,0x45000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42598b9484cSchristos { "ldfz" ,2,0x42800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42698b9484cSchristos { "ldfnz" ,2,0x43000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42798b9484cSchristos { "ldfp" ,2,0x44800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42898b9484cSchristos { "ldfn" ,2,0x43800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 42998b9484cSchristos { "ldfnn" ,2,0x45000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43098b9484cSchristos { "ldfnv" ,2,0x46000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43198b9484cSchristos { "ldfv" ,2,0x46800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43298b9484cSchristos { "ldfnuf" ,2,0x47000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43398b9484cSchristos { "ldfuf" ,2,0x47800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43498b9484cSchristos { "ldfnc" ,2,0x42000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43598b9484cSchristos { "ldfc" ,2,0x40800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43698b9484cSchristos { "ldfnlv" ,2,0x48000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43798b9484cSchristos { "ldflv" ,2,0x48800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43898b9484cSchristos { "ldfnluf",2,0x49000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 43998b9484cSchristos { "ldfluf" ,2,0x49800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 44098b9484cSchristos { "ldfzuf" ,2,0x4A000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 44198b9484cSchristos { "ldfi" ,2,0x07800000,AddressMode, { Direct|Indirect, Rn, 0 }, Imm_None }, 44298b9484cSchristos { "ldi" ,2,0x08000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 44398b9484cSchristos { "ldiu" ,2,0x50000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 44498b9484cSchristos { "ldilo" ,2,0x50800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 44598b9484cSchristos { "ldils" ,2,0x51000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 44698b9484cSchristos { "ldihi" ,2,0x51800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 44798b9484cSchristos { "ldihs" ,2,0x52000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 44898b9484cSchristos { "ldieq" ,2,0x52800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 44998b9484cSchristos { "ldine" ,2,0x53000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45098b9484cSchristos { "ldilt" ,2,0x53800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45198b9484cSchristos { "ldile" ,2,0x54000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45298b9484cSchristos { "ldigt" ,2,0x54800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45398b9484cSchristos { "ldige" ,2,0x55000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45498b9484cSchristos { "ldiz" ,2,0x52800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45598b9484cSchristos { "ldinz" ,2,0x53000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45698b9484cSchristos { "ldip" ,2,0x54800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45798b9484cSchristos { "ldin" ,2,0x53800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45898b9484cSchristos { "ldinn" ,2,0x55000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 45998b9484cSchristos { "ldinv" ,2,0x56000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46098b9484cSchristos { "ldiv" ,2,0x56800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46198b9484cSchristos { "ldinuf" ,2,0x57000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46298b9484cSchristos { "ldiuf" ,2,0x57800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46398b9484cSchristos { "ldinc" ,2,0x52000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46498b9484cSchristos { "ldic" ,2,0x50800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46598b9484cSchristos { "ldinlv" ,2,0x58000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46698b9484cSchristos { "ldilv" ,2,0x58800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46798b9484cSchristos { "ldinluf",2,0x59000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46898b9484cSchristos { "ldiluf" ,2,0x59800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 46998b9484cSchristos { "ldizuf" ,2,0x5A000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 47098b9484cSchristos { "ldii" ,2,0x08800000,AddressMode, { Direct|Indirect, AllReg, 0 }, Imm_None }, 47198b9484cSchristos { "ldm" ,2,0x09000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 47298b9484cSchristos { "ldp" ,2,0x08700000,0, { Abs24|Direct, DPReg|NotReq, 0 }, Imm_UInt }, 47398b9484cSchristos { "lopower",0,0x10800001,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */ 47498b9484cSchristos { "lsh" ,2,0x09800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 47598b9484cSchristos { "lsh3" ,3,0x24000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 47698b9484cSchristos { "maxspeed",0,0x10800000,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */ 47798b9484cSchristos { "mpyf" ,2,0x0A000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 47898b9484cSchristos { "mpyf3" ,3,0x24800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None }, 47998b9484cSchristos { "mpyi" ,2,0x0A800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 48098b9484cSchristos { "mpyi3" ,3,0x25000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 48198b9484cSchristos { "negb" ,2,0x0B000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 48298b9484cSchristos { "negf" ,2,0x0B800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 48398b9484cSchristos { "negi" ,2,0x0C000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 48498b9484cSchristos { "nop" ,1,0x0C800000,AddressMode, { AllReg|Indirect|NotReq, 0, 0 }, Imm_None }, 48598b9484cSchristos { "norm" ,2,0x0D000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, /*Check another source*/ 48698b9484cSchristos { "not" ,2,0x0D800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 48798b9484cSchristos { "or" ,2,0x10000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 48898b9484cSchristos { "or3" ,3,0x25800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 48998b9484cSchristos { "pop" ,1,0x0E200000,StackOp, { AllReg, 0, 0 }, Imm_None }, 49098b9484cSchristos { "popf" ,1,0x0EA00000,StackOp, { Rn, 0, 0 }, Imm_None }, 49198b9484cSchristos { "push" ,1,0x0F200000,StackOp, { AllReg, 0, 0 }, Imm_None }, 49298b9484cSchristos { "pushf" ,1,0x0FA00000,StackOp, { Rn, 0, 0 }, Imm_None }, 49398b9484cSchristos { "reti" ,0,0x78000000,0, { 0, 0, 0 }, Imm_None }, 49498b9484cSchristos { "retiu" ,0,0x78000000,0, { 0, 0, 0 }, Imm_None }, 49598b9484cSchristos { "retilo" ,0,0x78010000,0, { 0, 0, 0 }, Imm_None }, 49698b9484cSchristos { "retils" ,0,0x78020000,0, { 0, 0, 0 }, Imm_None }, 49798b9484cSchristos { "retihi" ,0,0x78030000,0, { 0, 0, 0 }, Imm_None }, 49898b9484cSchristos { "retihs" ,0,0x78040000,0, { 0, 0, 0 }, Imm_None }, 49998b9484cSchristos { "retieq" ,0,0x78050000,0, { 0, 0, 0 }, Imm_None }, 50098b9484cSchristos { "retine" ,0,0x78060000,0, { 0, 0, 0 }, Imm_None }, 50198b9484cSchristos { "retilt" ,0,0x78070000,0, { 0, 0, 0 }, Imm_None }, 50298b9484cSchristos { "retile" ,0,0x78080000,0, { 0, 0, 0 }, Imm_None }, 50398b9484cSchristos { "retigt" ,0,0x78090000,0, { 0, 0, 0 }, Imm_None }, 50498b9484cSchristos { "retige" ,0,0x780A0000,0, { 0, 0, 0 }, Imm_None }, 50598b9484cSchristos { "retiz" ,0,0x78050000,0, { 0, 0, 0 }, Imm_None }, 50698b9484cSchristos { "retinz" ,0,0x78060000,0, { 0, 0, 0 }, Imm_None }, 50798b9484cSchristos { "retip" ,0,0x78090000,0, { 0, 0, 0 }, Imm_None }, 50898b9484cSchristos { "retin" ,0,0x78070000,0, { 0, 0, 0 }, Imm_None }, 50998b9484cSchristos { "retinn" ,0,0x780A0000,0, { 0, 0, 0 }, Imm_None }, 51098b9484cSchristos { "retinv" ,0,0x780C0000,0, { 0, 0, 0 }, Imm_None }, 51198b9484cSchristos { "retiv" ,0,0x780D0000,0, { 0, 0, 0 }, Imm_None }, 51298b9484cSchristos { "retinuf",0,0x780E0000,0, { 0, 0, 0 }, Imm_None }, 51398b9484cSchristos { "retiuf" ,0,0x780F0000,0, { 0, 0, 0 }, Imm_None }, 51498b9484cSchristos { "retinc" ,0,0x78040000,0, { 0, 0, 0 }, Imm_None }, 51598b9484cSchristos { "retic" ,0,0x78010000,0, { 0, 0, 0 }, Imm_None }, 51698b9484cSchristos { "retinlv",0,0x78100000,0, { 0, 0, 0 }, Imm_None }, 51798b9484cSchristos { "retilv" ,0,0x78110000,0, { 0, 0, 0 }, Imm_None }, 51898b9484cSchristos { "retinluf",0,0x78120000,0, { 0, 0, 0 }, Imm_None }, 51998b9484cSchristos { "retiluf",0,0x78130000,0, { 0, 0, 0 }, Imm_None }, 52098b9484cSchristos { "retizuf",0,0x78140000,0, { 0, 0, 0 }, Imm_None }, 52198b9484cSchristos { "rets" ,0,0x78800000,0, { 0, 0, 0 }, Imm_None }, 52298b9484cSchristos { "retsu" ,0,0x78800000,0, { 0, 0, 0 }, Imm_None }, 52398b9484cSchristos { "retslo" ,0,0x78810000,0, { 0, 0, 0 }, Imm_None }, 52498b9484cSchristos { "retsls" ,0,0x78820000,0, { 0, 0, 0 }, Imm_None }, 52598b9484cSchristos { "retshi" ,0,0x78830000,0, { 0, 0, 0 }, Imm_None }, 52698b9484cSchristos { "retshs" ,0,0x78840000,0, { 0, 0, 0 }, Imm_None }, 52798b9484cSchristos { "retseq" ,0,0x78850000,0, { 0, 0, 0 }, Imm_None }, 52898b9484cSchristos { "retsne" ,0,0x78860000,0, { 0, 0, 0 }, Imm_None }, 52998b9484cSchristos { "retslt" ,0,0x78870000,0, { 0, 0, 0 }, Imm_None }, 53098b9484cSchristos { "retsle" ,0,0x78880000,0, { 0, 0, 0 }, Imm_None }, 53198b9484cSchristos { "retsgt" ,0,0x78890000,0, { 0, 0, 0 }, Imm_None }, 53298b9484cSchristos { "retsge" ,0,0x788A0000,0, { 0, 0, 0 }, Imm_None }, 53398b9484cSchristos { "retsz" ,0,0x78850000,0, { 0, 0, 0 }, Imm_None }, 53498b9484cSchristos { "retsnz" ,0,0x78860000,0, { 0, 0, 0 }, Imm_None }, 53598b9484cSchristos { "retsp" ,0,0x78890000,0, { 0, 0, 0 }, Imm_None }, 53698b9484cSchristos { "retsn" ,0,0x78870000,0, { 0, 0, 0 }, Imm_None }, 53798b9484cSchristos { "retsnn" ,0,0x788A0000,0, { 0, 0, 0 }, Imm_None }, 53898b9484cSchristos { "retsnv" ,0,0x788C0000,0, { 0, 0, 0 }, Imm_None }, 53998b9484cSchristos { "retsv" ,0,0x788D0000,0, { 0, 0, 0 }, Imm_None }, 54098b9484cSchristos { "retsnuf",0,0x788E0000,0, { 0, 0, 0 }, Imm_None }, 54198b9484cSchristos { "retsuf" ,0,0x788F0000,0, { 0, 0, 0 }, Imm_None }, 54298b9484cSchristos { "retsnc" ,0,0x78840000,0, { 0, 0, 0 }, Imm_None }, 54398b9484cSchristos { "retsc" ,0,0x78810000,0, { 0, 0, 0 }, Imm_None }, 54498b9484cSchristos { "retsnlv",0,0x78900000,0, { 0, 0, 0 }, Imm_None }, 54598b9484cSchristos { "retslv" ,0,0x78910000,0, { 0, 0, 0 }, Imm_None }, 54698b9484cSchristos { "retsnluf",0,0x78920000,0, { 0, 0, 0 }, Imm_None }, 54798b9484cSchristos { "retsluf",0,0x78930000,0, { 0, 0, 0 }, Imm_None }, 54898b9484cSchristos { "retszuf",0,0x78940000,0, { 0, 0, 0 }, Imm_None }, 54998b9484cSchristos { "rnd" ,2,0x11000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 55098b9484cSchristos { "rol" ,1,0x11E00001,Rotate, { AllReg, 0, 0 }, Imm_None }, 55198b9484cSchristos { "rolc" ,1,0x12600001,Rotate, { AllReg, 0, 0 }, Imm_None }, 55298b9484cSchristos { "ror" ,1,0x12E0FFFF,Rotate, { AllReg, 0, 0 }, Imm_None }, 55398b9484cSchristos { "rorc" ,1,0x1360FFFF,Rotate, { AllReg, 0, 0 }, Imm_None }, 55498b9484cSchristos { "rptb" ,1,0x64000000,0, { Imm24, 0, 0 }, Imm_UInt }, 55598b9484cSchristos { "rpts" ,1,0x139B0000,AddressMode, { GAddr2, 0, 0 }, Imm_UInt }, 55698b9484cSchristos { "sigi" ,0,0x16000000,0, { 0, 0, 0 }, Imm_None }, 55798b9484cSchristos { "stf" ,2,0x14000000,AddressMode, { Rn, Direct|Indirect, 0 }, Imm_Float }, 55898b9484cSchristos { "stfi" ,2,0x14800000,AddressMode, { Rn, Direct|Indirect, 0 }, Imm_Float }, 55998b9484cSchristos { "sti" ,2,0x15000000,AddressMode, { AllReg, Direct|Indirect, 0 }, Imm_SInt }, 56098b9484cSchristos { "stii" ,2,0x15800000,AddressMode, { AllReg, Direct|Indirect, 0 }, Imm_SInt }, 56198b9484cSchristos { "subb" ,2,0x16800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 56298b9484cSchristos { "subb3" ,3,0x26000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 56398b9484cSchristos { "subc" ,2,0x17000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 56498b9484cSchristos { "subf" ,2,0x17800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 56598b9484cSchristos { "subf3" ,3,0x26800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None }, 56698b9484cSchristos { "subi" ,2,0x18000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 56798b9484cSchristos { "subi3" ,3,0x27000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 56898b9484cSchristos { "subrb" ,2,0x18800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 56998b9484cSchristos { "subrf" ,2,0x19000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, 57098b9484cSchristos { "subri" ,2,0x19800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, 57198b9484cSchristos { "swi" ,0,0x66000000,0, { 0, 0, 0 }, Imm_None }, 57298b9484cSchristos { "trap" ,1,0x74800020,0, { IVector, 0, 0 }, Imm_None }, 57398b9484cSchristos { "trapu" ,1,0x74800020,0, { IVector, 0, 0 }, Imm_None }, 57498b9484cSchristos { "traplo" ,1,0x74810020,0, { IVector, 0, 0 }, Imm_None }, 57598b9484cSchristos { "trapls" ,1,0x74820020,0, { IVector, 0, 0 }, Imm_None }, 57698b9484cSchristos { "traphi" ,1,0x74830020,0, { IVector, 0, 0 }, Imm_None }, 57798b9484cSchristos { "traphs" ,1,0x74840020,0, { IVector, 0, 0 }, Imm_None }, 57898b9484cSchristos { "trapeq" ,1,0x74850020,0, { IVector, 0, 0 }, Imm_None }, 57998b9484cSchristos { "trapne" ,1,0x74860020,0, { IVector, 0, 0 }, Imm_None }, 58098b9484cSchristos { "traplt" ,1,0x74870020,0, { IVector, 0, 0 }, Imm_None }, 58198b9484cSchristos { "traple" ,1,0x74880020,0, { IVector, 0, 0 }, Imm_None }, 58298b9484cSchristos { "trapgt" ,1,0x74890020,0, { IVector, 0, 0 }, Imm_None }, 58398b9484cSchristos { "trapge" ,1,0x748A0020,0, { IVector, 0, 0 }, Imm_None }, 58498b9484cSchristos { "trapz" ,1,0x74850020,0, { IVector, 0, 0 }, Imm_None }, 58598b9484cSchristos { "trapnz" ,1,0x74860020,0, { IVector, 0, 0 }, Imm_None }, 58698b9484cSchristos { "trapp" ,1,0x74890020,0, { IVector, 0, 0 }, Imm_None }, 58798b9484cSchristos { "trapn" ,1,0x74870020,0, { IVector, 0, 0 }, Imm_None }, 58898b9484cSchristos { "trapnn" ,1,0x748A0020,0, { IVector, 0, 0 }, Imm_None }, 58998b9484cSchristos { "trapnv" ,1,0x748C0020,0, { IVector, 0, 0 }, Imm_None }, 59098b9484cSchristos { "trapv" ,1,0x748D0020,0, { IVector, 0, 0 }, Imm_None }, 59198b9484cSchristos { "trapnuf",1,0x748E0020,0, { IVector, 0, 0 }, Imm_None }, 59298b9484cSchristos { "trapuf" ,1,0x748F0020,0, { IVector, 0, 0 }, Imm_None }, 59398b9484cSchristos { "trapnc" ,1,0x74840020,0, { IVector, 0, 0 }, Imm_None }, 59498b9484cSchristos { "trapc" ,1,0x74810020,0, { IVector, 0, 0 }, Imm_None }, 59598b9484cSchristos { "trapnlv",1,0x74900020,0, { IVector, 0, 0 }, Imm_None }, 59698b9484cSchristos { "traplv" ,1,0x74910020,0, { IVector, 0, 0 }, Imm_None }, 59798b9484cSchristos { "trapnluf",1,0x74920020,0, { IVector, 0, 0 }, Imm_None }, 59898b9484cSchristos { "trapluf",1,0x74930020,0, { IVector, 0, 0 }, Imm_None }, 59998b9484cSchristos { "trapzuf",1,0x74940020,0, { IVector, 0, 0 }, Imm_None }, 60098b9484cSchristos { "tstb" ,2,0x1A000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 60198b9484cSchristos { "tstb3" ,2,0x27800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, 0 }, Imm_None }, 60298b9484cSchristos { "xor" ,2,0x1A800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, 60398b9484cSchristos { "xor3" ,3,0x28000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, 60498b9484cSchristos { "" ,0,0x00000000,0, { 0, 0, 0 }, 0 } 60598b9484cSchristos }; 60698b9484cSchristos 60798b9484cSchristos static const insn_template *const tic30_optab_end = 60898b9484cSchristos tic30_optab + sizeof(tic30_optab)/sizeof(tic30_optab[0]); 60998b9484cSchristos 61098b9484cSchristos typedef struct { 611ba340e45Schristos const char *name; 61298b9484cSchristos unsigned int operands_1; 61398b9484cSchristos unsigned int operands_2; 61498b9484cSchristos unsigned int base_opcode; 61598b9484cSchristos unsigned int operand_types[2][3]; 61698b9484cSchristos /* Which operand fits into which part of the final opcode word. */ 61798b9484cSchristos int oporder; 61898b9484cSchristos } partemplate; 61998b9484cSchristos 62098b9484cSchristos /* oporder defines - not very descriptive. */ 62198b9484cSchristos #define OO_4op1 0 62298b9484cSchristos #define OO_4op2 1 62398b9484cSchristos #define OO_4op3 2 62498b9484cSchristos #define OO_5op1 3 62598b9484cSchristos #define OO_5op2 4 62698b9484cSchristos #define OO_PField 5 62798b9484cSchristos 62898b9484cSchristos static const partemplate tic30_paroptab[] = { 62998b9484cSchristos { "q_absf_stf", 2,2,0xC8000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 63098b9484cSchristos OO_4op1 }, 63198b9484cSchristos { "q_absi_sti", 2,2,0xCA000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 63298b9484cSchristos OO_4op1 }, 63398b9484cSchristos { "q_addf3_stf", 3,2,0xCC000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 63498b9484cSchristos OO_5op1 }, 63598b9484cSchristos { "q_addi3_sti", 3,2,0xCE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 63698b9484cSchristos OO_5op1 }, 63798b9484cSchristos { "q_and3_sti", 3,2,0xD0000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 63898b9484cSchristos OO_5op1 }, 63998b9484cSchristos { "q_ash3_sti", 3,2,0xD2000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, 64098b9484cSchristos OO_5op2 }, 64198b9484cSchristos { "q_fix_sti", 2,2,0xD4000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 64298b9484cSchristos OO_4op1 }, 64398b9484cSchristos { "q_float_stf", 2,2,0xD6000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 64498b9484cSchristos OO_4op1 }, 64598b9484cSchristos { "q_ldf_ldf", 2,2,0xC4000000, { { Indirect, Rn, 0 }, { Indirect, Rn, 0 } }, 64698b9484cSchristos OO_4op2 }, 64798b9484cSchristos { "q_ldf_stf", 2,2,0xD8000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 64898b9484cSchristos OO_4op1 }, 64998b9484cSchristos { "q_ldi_ldi", 2,2,0xC6000000, { { Indirect, Rn, 0 }, { Indirect, Rn, 0 } }, 65098b9484cSchristos OO_4op2 }, 65198b9484cSchristos { "q_ldi_sti", 2,2,0xDA000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 65298b9484cSchristos OO_4op1 }, 65398b9484cSchristos { "q_lsh3_sti", 3,2,0xDC000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, 65498b9484cSchristos OO_5op2 }, 65598b9484cSchristos { "q_mpyf3_addf3",3,3,0x80000000, { { Rn | Indirect, Rn | Indirect, Rn }, 65698b9484cSchristos { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, 65798b9484cSchristos { "q_mpyf3_stf", 3,2,0xDE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 65898b9484cSchristos OO_5op1 }, 65998b9484cSchristos { "q_mpyf3_subf3",3,3,0x84000000, { { Rn | Indirect, Rn | Indirect, Rn }, 66098b9484cSchristos { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, 66198b9484cSchristos { "q_mpyi3_addi3",3,3,0x88000000, { { Rn | Indirect, Rn | Indirect, Rn }, 66298b9484cSchristos { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, 66398b9484cSchristos { "q_mpyi3_sti", 3,2,0xE0000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 66498b9484cSchristos OO_5op1 }, 66598b9484cSchristos { "q_mpyi3_subi3",3,3,0x8C000000, { { Rn | Indirect, Rn | Indirect, Rn }, 66698b9484cSchristos { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, 66798b9484cSchristos { "q_negf_stf", 2,2,0xE2000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 66898b9484cSchristos OO_4op1 }, 66998b9484cSchristos { "q_negi_sti", 2,2,0xE4000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 67098b9484cSchristos OO_4op1 }, 67198b9484cSchristos { "q_not_sti", 2,2,0xE6000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, 67298b9484cSchristos OO_4op1 }, 67398b9484cSchristos { "q_or3_sti", 3,2,0xE8000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 67498b9484cSchristos OO_5op1 }, 67598b9484cSchristos { "q_stf_stf", 2,2,0xC0000000, { { Rn, Indirect, 0 }, { Rn, Indirect, 0 } }, 67698b9484cSchristos OO_4op3 }, 67798b9484cSchristos { "q_sti_sti", 2,2,0xC2000000, { { Rn, Indirect, 0 }, { Rn, Indirect, 0 } }, 67898b9484cSchristos OO_4op3 }, 67998b9484cSchristos { "q_subf3_stf", 3,2,0xEA000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, 68098b9484cSchristos OO_5op2 }, 68198b9484cSchristos { "q_subi3_sti", 3,2,0xEC000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, 68298b9484cSchristos OO_5op2 }, 68398b9484cSchristos { "q_xor3_sti", 3,2,0xEE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, 68498b9484cSchristos OO_5op1 }, 68598b9484cSchristos { "", 0,0,0x00000000, { { 0, 0, 0 }, { 0, 0, 0 } }, 0 } 68698b9484cSchristos }; 68798b9484cSchristos 68898b9484cSchristos static const partemplate *const tic30_paroptab_end = 68998b9484cSchristos tic30_paroptab + sizeof(tic30_paroptab)/sizeof(tic30_paroptab[0]); 69098b9484cSchristos 69198b9484cSchristos #endif 692