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