Statistics
| Branch: | Revision:

root / microblaze-dis.c @ b4bf0a9a

History | View | Annotate | Download (62 kB)

1 e90e390c Edgar E. Iglesias
/* Disassemble Xilinx microblaze instructions.
2 e90e390c Edgar E. Iglesias
   Copyright (C) 1993, 1999, 2000 Free Software Foundation, Inc.
3 e90e390c Edgar E. Iglesias

4 e90e390c Edgar E. Iglesias
This program is free software; you can redistribute it and/or modify
5 e90e390c Edgar E. Iglesias
it under the terms of the GNU General Public License as published by
6 e90e390c Edgar E. Iglesias
the Free Software Foundation; either version 2 of the License, or
7 e90e390c Edgar E. Iglesias
(at your option) any later version.
8 e90e390c Edgar E. Iglesias

9 e90e390c Edgar E. Iglesias
This program is distributed in the hope that it will be useful,
10 e90e390c Edgar E. Iglesias
but WITHOUT ANY WARRANTY; without even the implied warranty of
11 e90e390c Edgar E. Iglesias
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 e90e390c Edgar E. Iglesias
GNU General Public License for more details.
13 e90e390c Edgar E. Iglesias

14 e90e390c Edgar E. Iglesias
You should have received a copy of the GNU General Public License
15 6287462e Edgar E. Iglesias
along with this program; if not, write to the Free Software
16 6287462e Edgar E. Iglesias
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
17 e90e390c Edgar E. Iglesias
18 e90e390c Edgar E. Iglesias
/*
19 e90e390c Edgar E. Iglesias
 * Copyright (c) 2001 Xilinx, Inc.  All rights reserved. 
20 e90e390c Edgar E. Iglesias
 *
21 e90e390c Edgar E. Iglesias
 * Redistribution and use in source and binary forms are permitted
22 e90e390c Edgar E. Iglesias
 * provided that the above copyright notice and this paragraph are
23 e90e390c Edgar E. Iglesias
 * duplicated in all such forms and that any documentation,
24 e90e390c Edgar E. Iglesias
 * advertising materials, and other materials related to such
25 e90e390c Edgar E. Iglesias
 * distribution and use acknowledge that the software was developed
26 e90e390c Edgar E. Iglesias
 * by Xilinx, Inc.  The name of the Company may not be used to endorse 
27 e90e390c Edgar E. Iglesias
 * or promote products derived from this software without specific prior 
28 e90e390c Edgar E. Iglesias
 * written permission.
29 e90e390c Edgar E. Iglesias
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
30 e90e390c Edgar E. Iglesias
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
31 e90e390c Edgar E. Iglesias
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
32 e90e390c Edgar E. Iglesias
 *
33 e90e390c Edgar E. Iglesias
 *        Xilinx, Inc.
34 e90e390c Edgar E. Iglesias
 */
35 e90e390c Edgar E. Iglesias
36 e90e390c Edgar E. Iglesias
37 e90e390c Edgar E. Iglesias
#include <stdio.h>
38 e90e390c Edgar E. Iglesias
#define STATIC_TABLE
39 e90e390c Edgar E. Iglesias
#define DEFINE_TABLE
40 e90e390c Edgar E. Iglesias
41 6287462e Edgar E. Iglesias
#define TRUE   1
42 6287462e Edgar E. Iglesias
#define FALSE  0
43 6287462e Edgar E. Iglesias
44 e90e390c Edgar E. Iglesias
#ifndef MICROBLAZE_OPC
45 e90e390c Edgar E. Iglesias
#define MICROBLAZE_OPC
46 e90e390c Edgar E. Iglesias
/* Assembler instructions for Xilinx's microblaze processor
47 e90e390c Edgar E. Iglesias
   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
48 e90e390c Edgar E. Iglesias

49 e90e390c Edgar E. Iglesias
   
50 e90e390c Edgar E. Iglesias
This program is free software; you can redistribute it and/or modify
51 e90e390c Edgar E. Iglesias
it under the terms of the GNU General Public License as published by
52 e90e390c Edgar E. Iglesias
the Free Software Foundation; either version 2 of the License, or
53 e90e390c Edgar E. Iglesias
(at your option) any later version.
54 e90e390c Edgar E. Iglesias

55 e90e390c Edgar E. Iglesias
This program is distributed in the hope that it will be useful,
56 e90e390c Edgar E. Iglesias
but WITHOUT ANY WARRANTY; without even the implied warranty of
57 e90e390c Edgar E. Iglesias
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
58 e90e390c Edgar E. Iglesias
GNU General Public License for more details.
59 e90e390c Edgar E. Iglesias

60 e90e390c Edgar E. Iglesias
You should have received a copy of the GNU General Public License
61 6287462e Edgar E. Iglesias
along with this program; if not, write to the Free Software
62 6287462e Edgar E. Iglesias
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
63 e90e390c Edgar E. Iglesias
64 e90e390c Edgar E. Iglesias
/*
65 e90e390c Edgar E. Iglesias
 * Copyright (c) 2001 Xilinx, Inc.  All rights reserved. 
66 e90e390c Edgar E. Iglesias
 *
67 e90e390c Edgar E. Iglesias
 * Redistribution and use in source and binary forms are permitted
68 e90e390c Edgar E. Iglesias
 * provided that the above copyright notice and this paragraph are
69 e90e390c Edgar E. Iglesias
 * duplicated in all such forms and that any documentation,
70 e90e390c Edgar E. Iglesias
 * advertising materials, and other materials related to such
71 e90e390c Edgar E. Iglesias
 * distribution and use acknowledge that the software was developed
72 e90e390c Edgar E. Iglesias
 * by Xilinx, Inc.  The name of the Company may not be used to endorse 
73 e90e390c Edgar E. Iglesias
 * or promote products derived from this software without specific prior 
74 e90e390c Edgar E. Iglesias
 * written permission.
75 e90e390c Edgar E. Iglesias
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
76 e90e390c Edgar E. Iglesias
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
77 e90e390c Edgar E. Iglesias
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
78 e90e390c Edgar E. Iglesias
 *
79 e90e390c Edgar E. Iglesias
 *        Xilinx, Inc.
80 e90e390c Edgar E. Iglesias
 */
81 e90e390c Edgar E. Iglesias
82 e90e390c Edgar E. Iglesias
83 e90e390c Edgar E. Iglesias
#ifndef MICROBLAZE_OPCM
84 e90e390c Edgar E. Iglesias
#define MICROBLAZE_OPCM
85 e90e390c Edgar E. Iglesias
86 e90e390c Edgar E. Iglesias
/*
87 e90e390c Edgar E. Iglesias
 * Copyright (c) 2001 Xilinx, Inc.  All rights reserved. 
88 e90e390c Edgar E. Iglesias
 *
89 e90e390c Edgar E. Iglesias
 * Redistribution and use in source and binary forms are permitted
90 e90e390c Edgar E. Iglesias
 * provided that the above copyright notice and this paragraph are
91 e90e390c Edgar E. Iglesias
 * duplicated in all such forms and that any documentation,
92 e90e390c Edgar E. Iglesias
 * advertising materials, and other materials related to such
93 e90e390c Edgar E. Iglesias
 * distribution and use acknowledge that the software was developed
94 e90e390c Edgar E. Iglesias
 * by Xilinx, Inc.  The name of the Company may not be used to endorse 
95 e90e390c Edgar E. Iglesias
 * or promote products derived from this software without specific prior 
96 e90e390c Edgar E. Iglesias
 * written permission.
97 e90e390c Edgar E. Iglesias
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
98 e90e390c Edgar E. Iglesias
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
99 e90e390c Edgar E. Iglesias
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
100 e90e390c Edgar E. Iglesias
 *
101 e90e390c Edgar E. Iglesias
 *        Xilinx, Inc.
102 e90e390c Edgar E. Iglesias
 * $Header:
103 e90e390c Edgar E. Iglesias
 */
104 e90e390c Edgar E. Iglesias
105 e90e390c Edgar E. Iglesias
enum microblaze_instr {
106 e90e390c Edgar E. Iglesias
   add, rsub, addc, rsubc, addk, rsubk, addkc, rsubkc, cmp, cmpu,
107 6287462e Edgar E. Iglesias
   addi, rsubi, addic, rsubic, addik, rsubik, addikc, rsubikc, mul, mulh, mulhu, mulhsu,
108 e90e390c Edgar E. Iglesias
   idiv, idivu, bsll, bsra, bsrl, get, put, nget, nput, cget, cput,
109 e90e390c Edgar E. Iglesias
   ncget, ncput, muli, bslli, bsrai, bsrli, mului, or, and, xor,
110 6287462e Edgar E. Iglesias
   andn, pcmpbf, pcmpbc, pcmpeq, pcmpne, sra, src, srl, sext8, sext16, wic, wdc, wdcclear, wdcflush, mts, mfs, br, brd,
111 e90e390c Edgar E. Iglesias
   brld, bra, brad, brald, microblaze_brk, beq, beqd, bne, bned, blt,
112 e90e390c Edgar E. Iglesias
   bltd, ble, bled, bgt, bgtd, bge, bged, ori, andi, xori, andni,
113 e90e390c Edgar E. Iglesias
   imm, rtsd, rtid, rtbd, rted, bri, brid, brlid, brai, braid, bralid,
114 e90e390c Edgar E. Iglesias
   brki, beqi, beqid, bnei, bneid, blti, bltid, blei, bleid, bgti,
115 6287462e Edgar E. Iglesias
   bgtid, bgei, bgeid, lbu, lhu, lw, lwx, sb, sh, sw, swx, lbui, lhui, lwi,
116 e90e390c Edgar E. Iglesias
   sbi, shi, swi, msrset, msrclr, tuqula, fadd, frsub, fmul, fdiv, 
117 6287462e Edgar E. Iglesias
   fcmp_lt, fcmp_eq, fcmp_le, fcmp_gt, fcmp_ne, fcmp_ge, fcmp_un, flt, fint, fsqrt, 
118 6287462e Edgar E. Iglesias
   tget, tcget, tnget, tncget, tput, tcput, tnput, tncput,
119 6287462e Edgar E. Iglesias
   eget, ecget, neget, necget, eput, ecput, neput, necput,
120 6287462e Edgar E. Iglesias
   teget, tecget, tneget, tnecget, teput, tecput, tneput, tnecput,
121 6287462e Edgar E. Iglesias
   aget, caget, naget, ncaget, aput, caput, naput, ncaput,
122 6287462e Edgar E. Iglesias
   taget, tcaget, tnaget, tncaget, taput, tcaput, tnaput, tncaput,
123 6287462e Edgar E. Iglesias
   eaget, ecaget, neaget, necaget, eaput, ecaput, neaput, necaput,
124 6287462e Edgar E. Iglesias
   teaget, tecaget, tneaget, tnecaget, teaput, tecaput, tneaput, tnecaput,
125 6287462e Edgar E. Iglesias
   getd, tgetd, cgetd, tcgetd, ngetd, tngetd, ncgetd, tncgetd,
126 6287462e Edgar E. Iglesias
   putd, tputd, cputd, tcputd, nputd, tnputd, ncputd, tncputd,
127 6287462e Edgar E. Iglesias
   egetd, tegetd, ecgetd, tecgetd, negetd, tnegetd, necgetd, tnecgetd,
128 6287462e Edgar E. Iglesias
   eputd, teputd, ecputd, tecputd, neputd, tneputd, necputd, tnecputd,
129 6287462e Edgar E. Iglesias
   agetd, tagetd, cagetd, tcagetd, nagetd, tnagetd, ncagetd, tncagetd,
130 6287462e Edgar E. Iglesias
   aputd, taputd, caputd, tcaputd, naputd, tnaputd, ncaputd, tncaputd,
131 6287462e Edgar E. Iglesias
   eagetd, teagetd, ecagetd, tecagetd, neagetd, tneagetd, necagetd, tnecagetd,
132 6287462e Edgar E. Iglesias
   eaputd, teaputd, ecaputd, tecaputd, neaputd, tneaputd, necaputd, tnecaputd,
133 6287462e Edgar E. Iglesias
   invalid_inst } ;
134 e90e390c Edgar E. Iglesias
135 e90e390c Edgar E. Iglesias
enum microblaze_instr_type {
136 e90e390c Edgar E. Iglesias
   arithmetic_inst, logical_inst, mult_inst, div_inst, branch_inst,
137 e90e390c Edgar E. Iglesias
   return_inst, immediate_inst, special_inst, memory_load_inst,
138 e90e390c Edgar E. Iglesias
   memory_store_inst, barrel_shift_inst, anyware_inst };
139 e90e390c Edgar E. Iglesias
140 e90e390c Edgar E. Iglesias
#define INST_WORD_SIZE 4
141 e90e390c Edgar E. Iglesias
142 e90e390c Edgar E. Iglesias
/* gen purpose regs go from 0 to 31 */
143 e90e390c Edgar E. Iglesias
/* mask is reg num - max_reg_num, ie reg_num - 32 in this case */
144 e90e390c Edgar E. Iglesias
145 e90e390c Edgar E. Iglesias
#define REG_PC_MASK 0x8000
146 e90e390c Edgar E. Iglesias
#define REG_MSR_MASK 0x8001
147 e90e390c Edgar E. Iglesias
#define REG_EAR_MASK 0x8003
148 e90e390c Edgar E. Iglesias
#define REG_ESR_MASK 0x8005
149 e90e390c Edgar E. Iglesias
#define REG_FSR_MASK 0x8007
150 6287462e Edgar E. Iglesias
#define REG_BTR_MASK 0x800b
151 6287462e Edgar E. Iglesias
#define REG_EDR_MASK 0x800d
152 6287462e Edgar E. Iglesias
#define REG_PVR_MASK 0xa000
153 6287462e Edgar E. Iglesias
154 6287462e Edgar E. Iglesias
#define REG_PID_MASK   0x9000
155 6287462e Edgar E. Iglesias
#define REG_ZPR_MASK   0x9001
156 6287462e Edgar E. Iglesias
#define REG_TLBX_MASK  0x9002
157 6287462e Edgar E. Iglesias
#define REG_TLBLO_MASK 0x9003
158 6287462e Edgar E. Iglesias
#define REG_TLBHI_MASK 0x9004
159 6287462e Edgar E. Iglesias
#define REG_TLBSX_MASK 0x9005
160 e90e390c Edgar E. Iglesias
161 e90e390c Edgar E. Iglesias
#define MIN_REGNUM 0
162 e90e390c Edgar E. Iglesias
#define MAX_REGNUM 31
163 e90e390c Edgar E. Iglesias
164 6287462e Edgar E. Iglesias
#define MIN_PVR_REGNUM 0
165 6287462e Edgar E. Iglesias
#define MAX_PVR_REGNUM 15
166 6287462e Edgar E. Iglesias
167 e90e390c Edgar E. Iglesias
#define REG_PC  32 /* PC */
168 e90e390c Edgar E. Iglesias
#define REG_MSR 33 /* machine status reg */
169 e90e390c Edgar E. Iglesias
#define REG_EAR 35 /* Exception reg */
170 e90e390c Edgar E. Iglesias
#define REG_ESR 37 /* Exception reg */
171 e90e390c Edgar E. Iglesias
#define REG_FSR 39 /* FPU Status reg */
172 6287462e Edgar E. Iglesias
#define REG_BTR 43 /* Branch Target reg */
173 6287462e Edgar E. Iglesias
#define REG_EDR 45 /* Exception reg */
174 6287462e Edgar E. Iglesias
#define REG_PVR 40960 /* Program Verification reg */
175 6287462e Edgar E. Iglesias
176 6287462e Edgar E. Iglesias
#define REG_PID   36864 /* MMU: Process ID reg       */
177 6287462e Edgar E. Iglesias
#define REG_ZPR   36865 /* MMU: Zone Protect reg     */
178 6287462e Edgar E. Iglesias
#define REG_TLBX  36866 /* MMU: TLB Index reg        */
179 6287462e Edgar E. Iglesias
#define REG_TLBLO 36867 /* MMU: TLB Low reg          */
180 6287462e Edgar E. Iglesias
#define REG_TLBHI 36868 /* MMU: TLB High reg         */
181 6287462e Edgar E. Iglesias
#define REG_TLBSX 36869 /* MMU: TLB Search Index reg */
182 e90e390c Edgar E. Iglesias
183 e90e390c Edgar E. Iglesias
/* alternate names for gen purpose regs */
184 e90e390c Edgar E. Iglesias
#define REG_SP  1 /* stack pointer */
185 e90e390c Edgar E. Iglesias
#define REG_ROSDP 2 /* read-only small data pointer */
186 e90e390c Edgar E. Iglesias
#define REG_RWSDP 13 /* read-write small data pointer */
187 e90e390c Edgar E. Iglesias
188 e90e390c Edgar E. Iglesias
/* Assembler Register - Used in Delay Slot Optimization */
189 e90e390c Edgar E. Iglesias
#define REG_AS    18
190 e90e390c Edgar E. Iglesias
#define REG_ZERO  0
191 e90e390c Edgar E. Iglesias
 
192 e90e390c Edgar E. Iglesias
#define RD_LOW  21 /* low bit for RD */
193 e90e390c Edgar E. Iglesias
#define RA_LOW  16 /* low bit for RA */
194 e90e390c Edgar E. Iglesias
#define RB_LOW  11 /* low bit for RB */
195 e90e390c Edgar E. Iglesias
#define IMM_LOW  0 /* low bit for immediate */
196 e90e390c Edgar E. Iglesias
197 e90e390c Edgar E. Iglesias
#define RD_MASK 0x03E00000
198 e90e390c Edgar E. Iglesias
#define RA_MASK 0x001F0000
199 e90e390c Edgar E. Iglesias
#define RB_MASK 0x0000F800
200 e90e390c Edgar E. Iglesias
#define IMM_MASK 0x0000FFFF
201 e90e390c Edgar E. Iglesias
202 e90e390c Edgar E. Iglesias
// imm mask for barrel shifts
203 e90e390c Edgar E. Iglesias
#define IMM5_MASK 0x0000001F
204 e90e390c Edgar E. Iglesias
205 e90e390c Edgar E. Iglesias
206 6287462e Edgar E. Iglesias
// FSL imm mask for get, put instructions
207 6287462e Edgar E. Iglesias
#define  RFSL_MASK 0x000000F
208 e90e390c Edgar E. Iglesias
209 e90e390c Edgar E. Iglesias
// imm mask for msrset, msrclr instructions
210 6287462e Edgar E. Iglesias
#define  IMM15_MASK 0x00007FFF
211 e90e390c Edgar E. Iglesias
212 e90e390c Edgar E. Iglesias
#endif /* MICROBLAZE-OPCM */
213 e90e390c Edgar E. Iglesias
214 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD_R1_R2 0
215 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD_R1_IMM 1
216 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD_R1_UNSIGNED_IMM 2
217 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD_R1 3
218 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD_R2 4
219 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD_IMM 5
220 e90e390c Edgar E. Iglesias
#define INST_TYPE_R2 6
221 e90e390c Edgar E. Iglesias
#define INST_TYPE_R1_R2 7
222 e90e390c Edgar E. Iglesias
#define INST_TYPE_R1_IMM 8
223 e90e390c Edgar E. Iglesias
#define INST_TYPE_IMM 9
224 e90e390c Edgar E. Iglesias
#define INST_TYPE_SPECIAL_R1 10
225 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD_SPECIAL 11
226 e90e390c Edgar E. Iglesias
#define INST_TYPE_R1 12
227 e90e390c Edgar E. Iglesias
  // new instn type for barrel shift imms
228 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD_R1_IMM5  13
229 6287462e Edgar E. Iglesias
#define INST_TYPE_RD_RFSL    14
230 6287462e Edgar E. Iglesias
#define INST_TYPE_R1_RFSL    15
231 e90e390c Edgar E. Iglesias
232 e90e390c Edgar E. Iglesias
  // new insn type for insn cache
233 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD_R1_SPECIAL 16
234 e90e390c Edgar E. Iglesias
235 e90e390c Edgar E. Iglesias
// new insn type for msrclr, msrset insns.
236 6287462e Edgar E. Iglesias
#define INST_TYPE_RD_IMM15    17
237 e90e390c Edgar E. Iglesias
238 e90e390c Edgar E. Iglesias
// new insn type for tuqula rd - addik rd, r0, 42
239 e90e390c Edgar E. Iglesias
#define INST_TYPE_RD    18
240 e90e390c Edgar E. Iglesias
241 6287462e Edgar E. Iglesias
// new insn type for t*put
242 6287462e Edgar E. Iglesias
#define INST_TYPE_RFSL  19
243 6287462e Edgar E. Iglesias
244 e90e390c Edgar E. Iglesias
#define INST_TYPE_NONE 25
245 e90e390c Edgar E. Iglesias
246 e90e390c Edgar E. Iglesias
247 e90e390c Edgar E. Iglesias
248 e90e390c Edgar E. Iglesias
#define INST_PC_OFFSET 1 /* instructions where the label address is resolved as a PC offset (for branch label)*/
249 e90e390c Edgar E. Iglesias
#define INST_NO_OFFSET 0 /* instructions where the label address is resolved as an absolute value (for data mem or abs address)*/
250 e90e390c Edgar E. Iglesias
251 e90e390c Edgar E. Iglesias
#define IMMVAL_MASK_NON_SPECIAL 0x0000
252 e90e390c Edgar E. Iglesias
#define IMMVAL_MASK_MTS 0x4000
253 e90e390c Edgar E. Iglesias
#define IMMVAL_MASK_MFS 0x0000
254 e90e390c Edgar E. Iglesias
255 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H   0xFC000000 /* High 6 bits only */
256 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H1  0xFFE00000 /* High 11 bits */
257 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H2  0xFC1F0000 /* High 6 and bits 20-16 */
258 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H12 0xFFFF0000 /* High 16 */
259 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H4  0xFC0007FF /* High 6 and low 11 bits */
260 6287462e Edgar E. Iglesias
#define OPCODE_MASK_H13S 0xFFE0EFF0 /* High 11 and 15:1 bits and last nibble of last byte for spr */
261 6287462e Edgar E. Iglesias
#define OPCODE_MASK_H23S 0xFC1FC000 /* High 6, 20-16 and 15:1 bits and last nibble of last byte for spr */
262 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H34 0xFC00FFFF /* High 6 and low 16 bits */
263 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H14 0xFFE007FF /* High 11 and low 11 bits */
264 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H24 0xFC1F07FF /* High 6, bits 20-16 and low 11 bits */
265 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H124  0xFFFF07FF /* High 16, and low 11 bits */
266 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H1234 0xFFFFFFFF /* All 32 bits */
267 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H3  0xFC000600 /* High 6 bits and bits 21, 22 */  
268 6287462e Edgar E. Iglesias
#define OPCODE_MASK_H32 0xFC00FC00 /* High 6 bits and bit 16-21 */
269 e90e390c Edgar E. Iglesias
#define OPCODE_MASK_H34B   0xFC0000FF /* High 6 bits and low 8 bits */
270 6287462e Edgar E. Iglesias
#define OPCODE_MASK_H34C   0xFC0007E0 /* High 6 bits and bits 21-26 */
271 e90e390c Edgar E. Iglesias
272 e90e390c Edgar E. Iglesias
// New Mask for msrset, msrclr insns.
273 6287462e Edgar E. Iglesias
#define OPCODE_MASK_H23N  0xFC1F8000 /* High 6 and bits 11 - 16 */
274 e90e390c Edgar E. Iglesias
275 e90e390c Edgar E. Iglesias
#define DELAY_SLOT 1
276 e90e390c Edgar E. Iglesias
#define NO_DELAY_SLOT 0
277 e90e390c Edgar E. Iglesias
278 6287462e Edgar E. Iglesias
#define MAX_OPCODES 280
279 e90e390c Edgar E. Iglesias
280 e90e390c Edgar E. Iglesias
struct op_code_struct {
281 e90e390c Edgar E. Iglesias
  const char *name;
282 e90e390c Edgar E. Iglesias
  short inst_type; /* registers and immediate values involved */
283 e90e390c Edgar E. Iglesias
  short inst_offset_type; /* immediate vals offset from PC? (= 1 for branches) */
284 e90e390c Edgar E. Iglesias
  short delay_slots; /* info about delay slots needed after this instr. */
285 e90e390c Edgar E. Iglesias
  short immval_mask;
286 e90e390c Edgar E. Iglesias
  unsigned long bit_sequence; /* all the fixed bits for the op are set and all the variable bits (reg names, imm vals) are set to 0 */ 
287 e90e390c Edgar E. Iglesias
  unsigned long opcode_mask; /* which bits define the opcode */
288 e90e390c Edgar E. Iglesias
  enum microblaze_instr instr;
289 e90e390c Edgar E. Iglesias
  enum microblaze_instr_type instr_type;
290 e90e390c Edgar E. Iglesias
  /* more info about output format here */
291 e90e390c Edgar E. Iglesias
} opcodes[MAX_OPCODES] = 
292 e90e390c Edgar E. Iglesias
293 e90e390c Edgar E. Iglesias
{ 
294 e90e390c Edgar E. Iglesias
  {"add",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x00000000, OPCODE_MASK_H4, add, arithmetic_inst },
295 e90e390c Edgar E. Iglesias
  {"rsub",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x04000000, OPCODE_MASK_H4, rsub, arithmetic_inst },
296 e90e390c Edgar E. Iglesias
  {"addc",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x08000000, OPCODE_MASK_H4, addc, arithmetic_inst },
297 e90e390c Edgar E. Iglesias
  {"rsubc", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x0C000000, OPCODE_MASK_H4, rsubc, arithmetic_inst },
298 e90e390c Edgar E. Iglesias
  {"addk",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x10000000, OPCODE_MASK_H4, addk, arithmetic_inst },
299 e90e390c Edgar E. Iglesias
  {"rsubk", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000000, OPCODE_MASK_H4, rsubk, arithmetic_inst },
300 e90e390c Edgar E. Iglesias
  {"cmp",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000001, OPCODE_MASK_H4, cmp, arithmetic_inst },
301 e90e390c Edgar E. Iglesias
  {"cmpu",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x14000003, OPCODE_MASK_H4, cmpu, arithmetic_inst },
302 e90e390c Edgar E. Iglesias
  {"addkc", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x18000000, OPCODE_MASK_H4, addkc, arithmetic_inst },
303 e90e390c Edgar E. Iglesias
  {"rsubkc",INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x1C000000, OPCODE_MASK_H4, rsubkc, arithmetic_inst },
304 e90e390c Edgar E. Iglesias
  {"addi",  INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x20000000, OPCODE_MASK_H, addi, arithmetic_inst },
305 e90e390c Edgar E. Iglesias
  {"rsubi", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x24000000, OPCODE_MASK_H, rsubi, arithmetic_inst },
306 e90e390c Edgar E. Iglesias
  {"addic", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x28000000, OPCODE_MASK_H, addic, arithmetic_inst },
307 e90e390c Edgar E. Iglesias
  {"rsubic",INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x2C000000, OPCODE_MASK_H, rsubic, arithmetic_inst },
308 e90e390c Edgar E. Iglesias
  {"addik", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x30000000, OPCODE_MASK_H, addik, arithmetic_inst },
309 e90e390c Edgar E. Iglesias
  {"rsubik",INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x34000000, OPCODE_MASK_H, rsubik, arithmetic_inst },
310 e90e390c Edgar E. Iglesias
  {"addikc",INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x38000000, OPCODE_MASK_H, addikc, arithmetic_inst },
311 e90e390c Edgar E. Iglesias
  {"rsubikc",INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x3C000000, OPCODE_MASK_H, rsubikc, arithmetic_inst },
312 e90e390c Edgar E. Iglesias
  {"mul",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x40000000, OPCODE_MASK_H4, mul, mult_inst },
313 6287462e Edgar E. Iglesias
  {"mulh",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x40000001, OPCODE_MASK_H4, mulh, mult_inst },
314 6287462e Edgar E. Iglesias
  {"mulhu", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x40000003, OPCODE_MASK_H4, mulhu, mult_inst },
315 6287462e Edgar E. Iglesias
  {"mulhsu",INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x40000002, OPCODE_MASK_H4, mulhsu, mult_inst },
316 e90e390c Edgar E. Iglesias
  {"idiv",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x48000000, OPCODE_MASK_H4, idiv, div_inst },
317 e90e390c Edgar E. Iglesias
  {"idivu", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x48000002, OPCODE_MASK_H4, idivu, div_inst },
318 e90e390c Edgar E. Iglesias
  {"bsll",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x44000400, OPCODE_MASK_H3, bsll, barrel_shift_inst },
319 e90e390c Edgar E. Iglesias
  {"bsra",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x44000200, OPCODE_MASK_H3, bsra, barrel_shift_inst },
320 e90e390c Edgar E. Iglesias
  {"bsrl",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x44000000, OPCODE_MASK_H3, bsrl, barrel_shift_inst },
321 6287462e Edgar E. Iglesias
  {"get",   INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C000000, OPCODE_MASK_H32, get, anyware_inst },
322 6287462e Edgar E. Iglesias
  {"put",   INST_TYPE_R1_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C008000, OPCODE_MASK_H32, put, anyware_inst },
323 6287462e Edgar E. Iglesias
  {"nget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C004000, OPCODE_MASK_H32, nget, anyware_inst },
324 6287462e Edgar E. Iglesias
  {"nput",  INST_TYPE_R1_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00C000, OPCODE_MASK_H32, nput, anyware_inst },
325 6287462e Edgar E. Iglesias
  {"cget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C002000, OPCODE_MASK_H32, cget, anyware_inst },
326 6287462e Edgar E. Iglesias
  {"cput",  INST_TYPE_R1_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00A000, OPCODE_MASK_H32, cput, anyware_inst },
327 6287462e Edgar E. Iglesias
  {"ncget", INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C006000, OPCODE_MASK_H32, ncget, anyware_inst },
328 6287462e Edgar E. Iglesias
  {"ncput", INST_TYPE_R1_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00E000, OPCODE_MASK_H32, ncput, anyware_inst },
329 e90e390c Edgar E. Iglesias
  {"muli",  INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x60000000, OPCODE_MASK_H, muli, mult_inst },
330 e90e390c Edgar E. Iglesias
  {"bslli", INST_TYPE_RD_R1_IMM5, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x64000400, OPCODE_MASK_H3, bslli, barrel_shift_inst },
331 e90e390c Edgar E. Iglesias
  {"bsrai", INST_TYPE_RD_R1_IMM5, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x64000200, OPCODE_MASK_H3, bsrai, barrel_shift_inst },
332 e90e390c Edgar E. Iglesias
  {"bsrli", INST_TYPE_RD_R1_IMM5, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x64000000, OPCODE_MASK_H3, bsrli, barrel_shift_inst },
333 e90e390c Edgar E. Iglesias
  {"or",    INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x80000000, OPCODE_MASK_H4, or, logical_inst },
334 e90e390c Edgar E. Iglesias
  {"and",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x84000000, OPCODE_MASK_H4, and, logical_inst },
335 e90e390c Edgar E. Iglesias
  {"xor",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x88000000, OPCODE_MASK_H4, xor, logical_inst },
336 e90e390c Edgar E. Iglesias
  {"andn",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x8C000000, OPCODE_MASK_H4, andn, logical_inst },
337 e90e390c Edgar E. Iglesias
  {"pcmpbf",INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x80000400, OPCODE_MASK_H4, pcmpbf, logical_inst },
338 e90e390c Edgar E. Iglesias
  {"pcmpbc",INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x84000400, OPCODE_MASK_H4, pcmpbc, logical_inst },
339 e90e390c Edgar E. Iglesias
  {"pcmpeq",INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x88000400, OPCODE_MASK_H4, pcmpeq, logical_inst },
340 e90e390c Edgar E. Iglesias
  {"pcmpne",INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x8C000400, OPCODE_MASK_H4, pcmpne, logical_inst },
341 e90e390c Edgar E. Iglesias
  {"sra",   INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000001, OPCODE_MASK_H34, sra, logical_inst },
342 e90e390c Edgar E. Iglesias
  {"src",   INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000021, OPCODE_MASK_H34, src, logical_inst },
343 e90e390c Edgar E. Iglesias
  {"srl",   INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000041, OPCODE_MASK_H34, srl, logical_inst },
344 e90e390c Edgar E. Iglesias
  {"sext8", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000060, OPCODE_MASK_H34, sext8, logical_inst },
345 e90e390c Edgar E. Iglesias
  {"sext16",INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000061, OPCODE_MASK_H34, sext16, logical_inst },
346 e90e390c Edgar E. Iglesias
  {"wic",   INST_TYPE_RD_R1_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000068, OPCODE_MASK_H34B, wic, special_inst },
347 e90e390c Edgar E. Iglesias
  {"wdc",   INST_TYPE_RD_R1_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000064, OPCODE_MASK_H34B, wdc, special_inst },
348 6287462e Edgar E. Iglesias
  {"wdc.clear", INST_TYPE_RD_R1_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000066, OPCODE_MASK_H34B, wdcclear, special_inst },
349 6287462e Edgar E. Iglesias
  {"wdc.flush", INST_TYPE_RD_R1_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x90000074, OPCODE_MASK_H34B, wdcflush, special_inst },
350 e90e390c Edgar E. Iglesias
  {"mts",   INST_TYPE_SPECIAL_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_MTS, 0x9400C000, OPCODE_MASK_H13S, mts, special_inst },
351 e90e390c Edgar E. Iglesias
  {"mfs",   INST_TYPE_RD_SPECIAL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_MFS, 0x94008000, OPCODE_MASK_H23S, mfs, special_inst },
352 e90e390c Edgar E. Iglesias
  {"br",    INST_TYPE_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x98000000, OPCODE_MASK_H124, br, branch_inst },
353 e90e390c Edgar E. Iglesias
  {"brd",   INST_TYPE_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x98100000, OPCODE_MASK_H124, brd, branch_inst },
354 e90e390c Edgar E. Iglesias
  {"brld",  INST_TYPE_RD_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x98140000, OPCODE_MASK_H24, brld, branch_inst },
355 e90e390c Edgar E. Iglesias
  {"bra",   INST_TYPE_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x98080000, OPCODE_MASK_H124, bra, branch_inst },
356 e90e390c Edgar E. Iglesias
  {"brad",  INST_TYPE_R2, INST_NO_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x98180000, OPCODE_MASK_H124, brad, branch_inst },
357 e90e390c Edgar E. Iglesias
  {"brald", INST_TYPE_RD_R2, INST_NO_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x981C0000, OPCODE_MASK_H24, brald, branch_inst },
358 e90e390c Edgar E. Iglesias
  {"brk",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x980C0000, OPCODE_MASK_H24, microblaze_brk, branch_inst },
359 e90e390c Edgar E. Iglesias
  {"beq",   INST_TYPE_R1_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9C000000, OPCODE_MASK_H14, beq, branch_inst },
360 e90e390c Edgar E. Iglesias
  {"beqd",  INST_TYPE_R1_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9E000000, OPCODE_MASK_H14, beqd, branch_inst },
361 e90e390c Edgar E. Iglesias
  {"bne",   INST_TYPE_R1_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9C200000, OPCODE_MASK_H14, bne, branch_inst },
362 e90e390c Edgar E. Iglesias
  {"bned",  INST_TYPE_R1_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9E200000, OPCODE_MASK_H14, bned, branch_inst },
363 e90e390c Edgar E. Iglesias
  {"blt",   INST_TYPE_R1_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9C400000, OPCODE_MASK_H14, blt, branch_inst },
364 e90e390c Edgar E. Iglesias
  {"bltd",  INST_TYPE_R1_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9E400000, OPCODE_MASK_H14, bltd, branch_inst },
365 e90e390c Edgar E. Iglesias
  {"ble",   INST_TYPE_R1_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9C600000, OPCODE_MASK_H14, ble, branch_inst },
366 e90e390c Edgar E. Iglesias
  {"bled",  INST_TYPE_R1_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9E600000, OPCODE_MASK_H14, bled, branch_inst },
367 e90e390c Edgar E. Iglesias
  {"bgt",   INST_TYPE_R1_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9C800000, OPCODE_MASK_H14, bgt, branch_inst },
368 e90e390c Edgar E. Iglesias
  {"bgtd",  INST_TYPE_R1_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9E800000, OPCODE_MASK_H14, bgtd, branch_inst },
369 e90e390c Edgar E. Iglesias
  {"bge",   INST_TYPE_R1_R2, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9CA00000, OPCODE_MASK_H14, bge, branch_inst },
370 e90e390c Edgar E. Iglesias
  {"bged",  INST_TYPE_R1_R2, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x9EA00000, OPCODE_MASK_H14, bged, branch_inst },
371 e90e390c Edgar E. Iglesias
  {"ori",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xA0000000, OPCODE_MASK_H, ori, logical_inst },
372 e90e390c Edgar E. Iglesias
  {"andi",  INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xA4000000, OPCODE_MASK_H, andi, logical_inst },
373 e90e390c Edgar E. Iglesias
  {"xori",  INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xA8000000, OPCODE_MASK_H, xori, logical_inst },
374 e90e390c Edgar E. Iglesias
  {"andni", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xAC000000, OPCODE_MASK_H, andni, logical_inst },
375 e90e390c Edgar E. Iglesias
  {"imm",   INST_TYPE_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB0000000, OPCODE_MASK_H12, imm, immediate_inst },
376 e90e390c Edgar E. Iglesias
  {"rtsd",  INST_TYPE_R1_IMM, INST_NO_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB6000000, OPCODE_MASK_H1, rtsd, return_inst },
377 e90e390c Edgar E. Iglesias
  {"rtid",  INST_TYPE_R1_IMM, INST_NO_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB6200000, OPCODE_MASK_H1, rtid, return_inst },
378 e90e390c Edgar E. Iglesias
  {"rtbd",  INST_TYPE_R1_IMM, INST_NO_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB6400000, OPCODE_MASK_H1, rtbd, return_inst },
379 e90e390c Edgar E. Iglesias
  {"rted",  INST_TYPE_R1_IMM, INST_NO_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB6800000, OPCODE_MASK_H1, rted, return_inst },
380 e90e390c Edgar E. Iglesias
  {"bri",   INST_TYPE_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8000000, OPCODE_MASK_H12, bri, branch_inst },
381 e90e390c Edgar E. Iglesias
  {"brid",  INST_TYPE_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8100000, OPCODE_MASK_H12, brid, branch_inst },
382 e90e390c Edgar E. Iglesias
  {"brlid", INST_TYPE_RD_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8140000, OPCODE_MASK_H2, brlid, branch_inst },
383 e90e390c Edgar E. Iglesias
  {"brai",  INST_TYPE_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8080000, OPCODE_MASK_H12, brai, branch_inst },
384 e90e390c Edgar E. Iglesias
  {"braid", INST_TYPE_IMM, INST_NO_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB8180000, OPCODE_MASK_H12, braid, branch_inst },
385 e90e390c Edgar E. Iglesias
  {"bralid",INST_TYPE_RD_IMM, INST_NO_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB81C0000, OPCODE_MASK_H2, bralid, branch_inst },
386 e90e390c Edgar E. Iglesias
  {"brki",  INST_TYPE_RD_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB80C0000, OPCODE_MASK_H2, brki, branch_inst },
387 e90e390c Edgar E. Iglesias
  {"beqi",  INST_TYPE_R1_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBC000000, OPCODE_MASK_H1, beqi, branch_inst },
388 e90e390c Edgar E. Iglesias
  {"beqid", INST_TYPE_R1_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBE000000, OPCODE_MASK_H1, beqid, branch_inst },
389 e90e390c Edgar E. Iglesias
  {"bnei",  INST_TYPE_R1_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBC200000, OPCODE_MASK_H1, bnei, branch_inst },
390 e90e390c Edgar E. Iglesias
  {"bneid", INST_TYPE_R1_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBE200000, OPCODE_MASK_H1, bneid, branch_inst },
391 e90e390c Edgar E. Iglesias
  {"blti",  INST_TYPE_R1_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBC400000, OPCODE_MASK_H1, blti, branch_inst },
392 e90e390c Edgar E. Iglesias
  {"bltid", INST_TYPE_R1_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBE400000, OPCODE_MASK_H1, bltid, branch_inst },
393 e90e390c Edgar E. Iglesias
  {"blei",  INST_TYPE_R1_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBC600000, OPCODE_MASK_H1, blei, branch_inst },
394 e90e390c Edgar E. Iglesias
  {"bleid", INST_TYPE_R1_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBE600000, OPCODE_MASK_H1, bleid, branch_inst },
395 e90e390c Edgar E. Iglesias
  {"bgti",  INST_TYPE_R1_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBC800000, OPCODE_MASK_H1, bgti, branch_inst },
396 e90e390c Edgar E. Iglesias
  {"bgtid", INST_TYPE_R1_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBE800000, OPCODE_MASK_H1, bgtid, branch_inst },
397 e90e390c Edgar E. Iglesias
  {"bgei",  INST_TYPE_R1_IMM, INST_PC_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBCA00000, OPCODE_MASK_H1, bgei, branch_inst },
398 e90e390c Edgar E. Iglesias
  {"bgeid", INST_TYPE_R1_IMM, INST_PC_OFFSET, DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xBEA00000, OPCODE_MASK_H1, bgeid, branch_inst },
399 e90e390c Edgar E. Iglesias
  {"lbu",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xC0000000, OPCODE_MASK_H4, lbu, memory_load_inst },
400 e90e390c Edgar E. Iglesias
  {"lhu",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xC4000000, OPCODE_MASK_H4, lhu, memory_load_inst },
401 e90e390c Edgar E. Iglesias
  {"lw",    INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xC8000000, OPCODE_MASK_H4, lw, memory_load_inst },
402 6287462e Edgar E. Iglesias
  {"lwx",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xC8000400, OPCODE_MASK_H4, lwx, memory_load_inst },
403 e90e390c Edgar E. Iglesias
  {"sb",    INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xD0000000, OPCODE_MASK_H4, sb, memory_store_inst },
404 e90e390c Edgar E. Iglesias
  {"sh",    INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xD4000000, OPCODE_MASK_H4, sh, memory_store_inst },
405 e90e390c Edgar E. Iglesias
  {"sw",    INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xD8000000, OPCODE_MASK_H4, sw, memory_store_inst },
406 6287462e Edgar E. Iglesias
  {"swx",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xD8000400, OPCODE_MASK_H4, swx, memory_store_inst },
407 e90e390c Edgar E. Iglesias
  {"lbui",  INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE0000000, OPCODE_MASK_H, lbui, memory_load_inst },
408 e90e390c Edgar E. Iglesias
  {"lhui",  INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE4000000, OPCODE_MASK_H, lhui, memory_load_inst },
409 e90e390c Edgar E. Iglesias
  {"lwi",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE8000000, OPCODE_MASK_H, lwi, memory_load_inst },
410 e90e390c Edgar E. Iglesias
  {"sbi",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xF0000000, OPCODE_MASK_H, sbi, memory_store_inst },
411 e90e390c Edgar E. Iglesias
  {"shi",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xF4000000, OPCODE_MASK_H, shi, memory_store_inst },
412 e90e390c Edgar E. Iglesias
  {"swi",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xF8000000, OPCODE_MASK_H, swi, memory_store_inst },
413 e90e390c Edgar E. Iglesias
  {"nop",   INST_TYPE_NONE, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x80000000, OPCODE_MASK_H1234, invalid_inst, logical_inst }, /* translates to or r0, r0, r0 */
414 e90e390c Edgar E. Iglesias
  {"la",    INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x30000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* la translates to addik */
415 e90e390c Edgar E. Iglesias
  {"tuqula",INST_TYPE_RD, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x3000002A, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* tuqula rd translates to addik rd, r0, 42 */
416 e90e390c Edgar E. Iglesias
  {"not",   INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xA800FFFF, OPCODE_MASK_H34, invalid_inst, logical_inst }, /* not translates to xori rd,ra,-1 */
417 e90e390c Edgar E. Iglesias
  {"neg",   INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x04000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* neg translates to rsub rd, ra, r0 */
418 e90e390c Edgar E. Iglesias
  {"rtb",   INST_TYPE_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xB6000004, OPCODE_MASK_H1, invalid_inst, return_inst }, /* rtb translates to rts rd, 4 */
419 e90e390c Edgar E. Iglesias
  {"sub",   INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x04000000, OPCODE_MASK_H, invalid_inst, arithmetic_inst }, /* sub translates to rsub rd, rb, ra */
420 e90e390c Edgar E. Iglesias
  {"lmi",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xE8000000, OPCODE_MASK_H, invalid_inst, memory_load_inst },
421 e90e390c Edgar E. Iglesias
  {"smi",   INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xF8000000, OPCODE_MASK_H, invalid_inst, memory_store_inst },
422 6287462e Edgar E. Iglesias
  {"msrset",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94100000, OPCODE_MASK_H23N, msrset, special_inst },
423 6287462e Edgar E. Iglesias
  {"msrclr",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94110000, OPCODE_MASK_H23N, msrclr, special_inst },
424 e90e390c Edgar E. Iglesias
  {"fadd",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000000, OPCODE_MASK_H4, fadd, arithmetic_inst },
425 e90e390c Edgar E. Iglesias
  {"frsub",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000080, OPCODE_MASK_H4, frsub, arithmetic_inst },
426 e90e390c Edgar E. Iglesias
  {"fmul",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000100, OPCODE_MASK_H4, fmul, arithmetic_inst },
427 e90e390c Edgar E. Iglesias
  {"fdiv",  INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000180, OPCODE_MASK_H4, fdiv, arithmetic_inst },
428 e90e390c Edgar E. Iglesias
  {"fcmp.lt", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000210, OPCODE_MASK_H4, fcmp_lt, arithmetic_inst },
429 e90e390c Edgar E. Iglesias
  {"fcmp.eq", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000220, OPCODE_MASK_H4, fcmp_eq, arithmetic_inst },
430 e90e390c Edgar E. Iglesias
  {"fcmp.le", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000230, OPCODE_MASK_H4, fcmp_le, arithmetic_inst },
431 e90e390c Edgar E. Iglesias
  {"fcmp.gt", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000240, OPCODE_MASK_H4, fcmp_gt, arithmetic_inst },
432 e90e390c Edgar E. Iglesias
  {"fcmp.ne", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000250, OPCODE_MASK_H4, fcmp_ne, arithmetic_inst },
433 e90e390c Edgar E. Iglesias
  {"fcmp.ge", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000260, OPCODE_MASK_H4, fcmp_ge, arithmetic_inst },
434 e90e390c Edgar E. Iglesias
  {"fcmp.un", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000200, OPCODE_MASK_H4, fcmp_un, arithmetic_inst },
435 6287462e Edgar E. Iglesias
  {"flt",   INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000280, OPCODE_MASK_H4, flt,   arithmetic_inst },
436 6287462e Edgar E. Iglesias
  {"fint",  INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000300, OPCODE_MASK_H4, fint,  arithmetic_inst },
437 6287462e Edgar E. Iglesias
  {"fsqrt", INST_TYPE_RD_R1, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000380, OPCODE_MASK_H4, fsqrt, arithmetic_inst },
438 6287462e Edgar E. Iglesias
  {"tget",   INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C001000, OPCODE_MASK_H32, tget,   anyware_inst },
439 6287462e Edgar E. Iglesias
  {"tcget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C003000, OPCODE_MASK_H32, tcget,  anyware_inst },
440 6287462e Edgar E. Iglesias
  {"tnget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C005000, OPCODE_MASK_H32, tnget,  anyware_inst },
441 6287462e Edgar E. Iglesias
  {"tncget", INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C007000, OPCODE_MASK_H32, tncget, anyware_inst },
442 6287462e Edgar E. Iglesias
  {"tput",   INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C009000, OPCODE_MASK_H32, tput,   anyware_inst },
443 6287462e Edgar E. Iglesias
  {"tcput",  INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00B000, OPCODE_MASK_H32, tcput,  anyware_inst },
444 6287462e Edgar E. Iglesias
  {"tnput",  INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00D000, OPCODE_MASK_H32, tnput,  anyware_inst },
445 6287462e Edgar E. Iglesias
  {"tncput", INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00F000, OPCODE_MASK_H32, tncput, anyware_inst },
446 6287462e Edgar E. Iglesias
 
447 6287462e Edgar E. Iglesias
  {"eget",   INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C000400, OPCODE_MASK_H32, eget,   anyware_inst },
448 6287462e Edgar E. Iglesias
  {"ecget",  INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C002400, OPCODE_MASK_H32, ecget,  anyware_inst },
449 6287462e Edgar E. Iglesias
  {"neget",  INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C004400, OPCODE_MASK_H32, neget,  anyware_inst },
450 6287462e Edgar E. Iglesias
  {"necget", INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C006400, OPCODE_MASK_H32, necget, anyware_inst },
451 6287462e Edgar E. Iglesias
  {"eput",   INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C008400, OPCODE_MASK_H32, eput,   anyware_inst },
452 6287462e Edgar E. Iglesias
  {"ecput",  INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00A400, OPCODE_MASK_H32, ecput,  anyware_inst },
453 6287462e Edgar E. Iglesias
  {"neput",  INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00C400, OPCODE_MASK_H32, neput,  anyware_inst },
454 6287462e Edgar E. Iglesias
  {"necput", INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00E400, OPCODE_MASK_H32, necput, anyware_inst },
455 6287462e Edgar E. Iglesias
 
456 6287462e Edgar E. Iglesias
  {"teget",   INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C001400, OPCODE_MASK_H32, teget,   anyware_inst },
457 6287462e Edgar E. Iglesias
  {"tecget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C003400, OPCODE_MASK_H32, tecget,  anyware_inst },
458 6287462e Edgar E. Iglesias
  {"tneget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C005400, OPCODE_MASK_H32, tneget,  anyware_inst },
459 6287462e Edgar E. Iglesias
  {"tnecget", INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C007400, OPCODE_MASK_H32, tnecget, anyware_inst },
460 6287462e Edgar E. Iglesias
  {"teput",   INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C009400, OPCODE_MASK_H32, teput,   anyware_inst },
461 6287462e Edgar E. Iglesias
  {"tecput",  INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00B400, OPCODE_MASK_H32, tecput,  anyware_inst },
462 6287462e Edgar E. Iglesias
  {"tneput",  INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00D400, OPCODE_MASK_H32, tneput,  anyware_inst },
463 6287462e Edgar E. Iglesias
  {"tnecput", INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00F400, OPCODE_MASK_H32, tnecput, anyware_inst },
464 6287462e Edgar E. Iglesias
 
465 6287462e Edgar E. Iglesias
  {"aget",   INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C000800, OPCODE_MASK_H32, aget,   anyware_inst },
466 6287462e Edgar E. Iglesias
  {"caget",  INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C002800, OPCODE_MASK_H32, caget,  anyware_inst },
467 6287462e Edgar E. Iglesias
  {"naget",  INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C004800, OPCODE_MASK_H32, naget,  anyware_inst },
468 6287462e Edgar E. Iglesias
  {"ncaget", INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C006800, OPCODE_MASK_H32, ncaget, anyware_inst },
469 6287462e Edgar E. Iglesias
  {"aput",   INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C008800, OPCODE_MASK_H32, aput,   anyware_inst },
470 6287462e Edgar E. Iglesias
  {"caput",  INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00A800, OPCODE_MASK_H32, caput,  anyware_inst },
471 6287462e Edgar E. Iglesias
  {"naput",  INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00C800, OPCODE_MASK_H32, naput,  anyware_inst },
472 6287462e Edgar E. Iglesias
  {"ncaput", INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00E800, OPCODE_MASK_H32, ncaput, anyware_inst },
473 6287462e Edgar E. Iglesias
 
474 6287462e Edgar E. Iglesias
  {"taget",   INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C001800, OPCODE_MASK_H32, taget,   anyware_inst },
475 6287462e Edgar E. Iglesias
  {"tcaget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C003800, OPCODE_MASK_H32, tcaget,  anyware_inst },
476 6287462e Edgar E. Iglesias
  {"tnaget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C005800, OPCODE_MASK_H32, tnaget,  anyware_inst },
477 6287462e Edgar E. Iglesias
  {"tncaget", INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C007800, OPCODE_MASK_H32, tncaget, anyware_inst },
478 6287462e Edgar E. Iglesias
  {"taput",   INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C009800, OPCODE_MASK_H32, taput,   anyware_inst },
479 6287462e Edgar E. Iglesias
  {"tcaput",  INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00B800, OPCODE_MASK_H32, tcaput,  anyware_inst },
480 6287462e Edgar E. Iglesias
  {"tnaput",  INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00D800, OPCODE_MASK_H32, tnaput,  anyware_inst },
481 6287462e Edgar E. Iglesias
  {"tncaput", INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00F800, OPCODE_MASK_H32, tncaput, anyware_inst },
482 6287462e Edgar E. Iglesias
 
483 6287462e Edgar E. Iglesias
  {"eaget",   INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C000C00, OPCODE_MASK_H32, eget,   anyware_inst },
484 6287462e Edgar E. Iglesias
  {"ecaget",  INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C002C00, OPCODE_MASK_H32, ecget,  anyware_inst },
485 6287462e Edgar E. Iglesias
  {"neaget",  INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C004C00, OPCODE_MASK_H32, neget,  anyware_inst },
486 6287462e Edgar E. Iglesias
  {"necaget", INST_TYPE_RD_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C006C00, OPCODE_MASK_H32, necget, anyware_inst },
487 6287462e Edgar E. Iglesias
  {"eaput",   INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C008C00, OPCODE_MASK_H32, eput,   anyware_inst },
488 6287462e Edgar E. Iglesias
  {"ecaput",  INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00AC00, OPCODE_MASK_H32, ecput,  anyware_inst },
489 6287462e Edgar E. Iglesias
  {"neaput",  INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00CC00, OPCODE_MASK_H32, neput,  anyware_inst },
490 6287462e Edgar E. Iglesias
  {"necaput", INST_TYPE_R1_RFSL,  INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00EC00, OPCODE_MASK_H32, necput, anyware_inst },
491 6287462e Edgar E. Iglesias
 
492 6287462e Edgar E. Iglesias
  {"teaget",   INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C001C00, OPCODE_MASK_H32, teaget,   anyware_inst },
493 6287462e Edgar E. Iglesias
  {"tecaget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C003C00, OPCODE_MASK_H32, tecaget,  anyware_inst },
494 6287462e Edgar E. Iglesias
  {"tneaget",  INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C005C00, OPCODE_MASK_H32, tneaget,  anyware_inst },
495 6287462e Edgar E. Iglesias
  {"tnecaget", INST_TYPE_RD_RFSL, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C007C00, OPCODE_MASK_H32, tnecaget, anyware_inst },
496 6287462e Edgar E. Iglesias
  {"teaput",   INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C009C00, OPCODE_MASK_H32, teaput,   anyware_inst },
497 6287462e Edgar E. Iglesias
  {"tecaput",  INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00BC00, OPCODE_MASK_H32, tecaput,  anyware_inst },
498 6287462e Edgar E. Iglesias
  {"tneaput",  INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00DC00, OPCODE_MASK_H32, tneaput,  anyware_inst },
499 6287462e Edgar E. Iglesias
  {"tnecaput", INST_TYPE_RFSL,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x6C00FC00, OPCODE_MASK_H32, tnecaput, anyware_inst },
500 6287462e Edgar E. Iglesias
 
501 6287462e Edgar E. Iglesias
  {"getd",    INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000000, OPCODE_MASK_H34C, getd,    anyware_inst },
502 6287462e Edgar E. Iglesias
  {"tgetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000080, OPCODE_MASK_H34C, tgetd,   anyware_inst },
503 6287462e Edgar E. Iglesias
  {"cgetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000100, OPCODE_MASK_H34C, cgetd,   anyware_inst },
504 6287462e Edgar E. Iglesias
  {"tcgetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000180, OPCODE_MASK_H34C, tcgetd,  anyware_inst },
505 6287462e Edgar E. Iglesias
  {"ngetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000200, OPCODE_MASK_H34C, ngetd,   anyware_inst },
506 6287462e Edgar E. Iglesias
  {"tngetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000280, OPCODE_MASK_H34C, tngetd,  anyware_inst },
507 6287462e Edgar E. Iglesias
  {"ncgetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000300, OPCODE_MASK_H34C, ncgetd,  anyware_inst },
508 6287462e Edgar E. Iglesias
  {"tncgetd", INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000380, OPCODE_MASK_H34C, tncgetd, anyware_inst },
509 6287462e Edgar E. Iglesias
  {"putd",    INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000400, OPCODE_MASK_H34C, putd,    anyware_inst },
510 6287462e Edgar E. Iglesias
  {"tputd",   INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000480, OPCODE_MASK_H34C, tputd,   anyware_inst },
511 6287462e Edgar E. Iglesias
  {"cputd",   INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000500, OPCODE_MASK_H34C, cputd,   anyware_inst },
512 6287462e Edgar E. Iglesias
  {"tcputd",  INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000580, OPCODE_MASK_H34C, tcputd,  anyware_inst },
513 6287462e Edgar E. Iglesias
  {"nputd",   INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000600, OPCODE_MASK_H34C, nputd,   anyware_inst },
514 6287462e Edgar E. Iglesias
  {"tnputd",  INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000680, OPCODE_MASK_H34C, tnputd,  anyware_inst },
515 6287462e Edgar E. Iglesias
  {"ncputd",  INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000700, OPCODE_MASK_H34C, ncputd,  anyware_inst },
516 6287462e Edgar E. Iglesias
  {"tncputd", INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000780, OPCODE_MASK_H34C, tncputd, anyware_inst },
517 6287462e Edgar E. Iglesias
 
518 6287462e Edgar E. Iglesias
  {"egetd",    INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000020, OPCODE_MASK_H34C, egetd,    anyware_inst },
519 6287462e Edgar E. Iglesias
  {"tegetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0000A0, OPCODE_MASK_H34C, tegetd,   anyware_inst },
520 6287462e Edgar E. Iglesias
  {"ecgetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000120, OPCODE_MASK_H34C, ecgetd,   anyware_inst },
521 6287462e Edgar E. Iglesias
  {"tecgetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0001A0, OPCODE_MASK_H34C, tecgetd,  anyware_inst },
522 6287462e Edgar E. Iglesias
  {"negetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000220, OPCODE_MASK_H34C, negetd,   anyware_inst },
523 6287462e Edgar E. Iglesias
  {"tnegetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0002A0, OPCODE_MASK_H34C, tnegetd,  anyware_inst },
524 6287462e Edgar E. Iglesias
  {"necgetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000320, OPCODE_MASK_H34C, necgetd,  anyware_inst },
525 6287462e Edgar E. Iglesias
  {"tnecgetd", INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0003A0, OPCODE_MASK_H34C, tnecgetd, anyware_inst },
526 6287462e Edgar E. Iglesias
  {"eputd",    INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000420, OPCODE_MASK_H34C, eputd,    anyware_inst },
527 6287462e Edgar E. Iglesias
  {"teputd",   INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0004A0, OPCODE_MASK_H34C, teputd,   anyware_inst },
528 6287462e Edgar E. Iglesias
  {"ecputd",   INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000520, OPCODE_MASK_H34C, ecputd,   anyware_inst },
529 6287462e Edgar E. Iglesias
  {"tecputd",  INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0005A0, OPCODE_MASK_H34C, tecputd,  anyware_inst },
530 6287462e Edgar E. Iglesias
  {"neputd",   INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000620, OPCODE_MASK_H34C, neputd,   anyware_inst },
531 6287462e Edgar E. Iglesias
  {"tneputd",  INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0006A0, OPCODE_MASK_H34C, tneputd,  anyware_inst },
532 6287462e Edgar E. Iglesias
  {"necputd",  INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000720, OPCODE_MASK_H34C, necputd,  anyware_inst },
533 6287462e Edgar E. Iglesias
  {"tnecputd", INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0007A0, OPCODE_MASK_H34C, tnecputd, anyware_inst },
534 6287462e Edgar E. Iglesias
 
535 6287462e Edgar E. Iglesias
  {"agetd",    INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000040, OPCODE_MASK_H34C, agetd,    anyware_inst },
536 6287462e Edgar E. Iglesias
  {"tagetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0000C0, OPCODE_MASK_H34C, tagetd,   anyware_inst },
537 6287462e Edgar E. Iglesias
  {"cagetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000140, OPCODE_MASK_H34C, cagetd,   anyware_inst },
538 6287462e Edgar E. Iglesias
  {"tcagetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0001C0, OPCODE_MASK_H34C, tcagetd,  anyware_inst },
539 6287462e Edgar E. Iglesias
  {"nagetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000240, OPCODE_MASK_H34C, nagetd,   anyware_inst },
540 6287462e Edgar E. Iglesias
  {"tnagetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0002C0, OPCODE_MASK_H34C, tnagetd,  anyware_inst },
541 6287462e Edgar E. Iglesias
  {"ncagetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000340, OPCODE_MASK_H34C, ncagetd,  anyware_inst },
542 6287462e Edgar E. Iglesias
  {"tncagetd", INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0003C0, OPCODE_MASK_H34C, tncagetd, anyware_inst },
543 6287462e Edgar E. Iglesias
  {"aputd",    INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000440, OPCODE_MASK_H34C, aputd,    anyware_inst },
544 6287462e Edgar E. Iglesias
  {"taputd",   INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0004C0, OPCODE_MASK_H34C, taputd,   anyware_inst },
545 6287462e Edgar E. Iglesias
  {"caputd",   INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000540, OPCODE_MASK_H34C, caputd,   anyware_inst },
546 6287462e Edgar E. Iglesias
  {"tcaputd",  INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0005C0, OPCODE_MASK_H34C, tcaputd,  anyware_inst },
547 6287462e Edgar E. Iglesias
  {"naputd",   INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000640, OPCODE_MASK_H34C, naputd,   anyware_inst },
548 6287462e Edgar E. Iglesias
  {"tnaputd",  INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0006C0, OPCODE_MASK_H34C, tnaputd,  anyware_inst },
549 6287462e Edgar E. Iglesias
  {"ncaputd",  INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000740, OPCODE_MASK_H34C, ncaputd,  anyware_inst },
550 6287462e Edgar E. Iglesias
  {"tncaputd", INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0007C0, OPCODE_MASK_H34C, tncaputd, anyware_inst },
551 6287462e Edgar E. Iglesias
 
552 6287462e Edgar E. Iglesias
  {"eagetd",    INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000060, OPCODE_MASK_H34C, eagetd,    anyware_inst },
553 6287462e Edgar E. Iglesias
  {"teagetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0000E0, OPCODE_MASK_H34C, teagetd,   anyware_inst },
554 6287462e Edgar E. Iglesias
  {"ecagetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000160, OPCODE_MASK_H34C, ecagetd,   anyware_inst },
555 6287462e Edgar E. Iglesias
  {"tecagetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0001E0, OPCODE_MASK_H34C, tecagetd,  anyware_inst },
556 6287462e Edgar E. Iglesias
  {"neagetd",   INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000260, OPCODE_MASK_H34C, neagetd,   anyware_inst },
557 6287462e Edgar E. Iglesias
  {"tneagetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0002E0, OPCODE_MASK_H34C, tneagetd,  anyware_inst },
558 6287462e Edgar E. Iglesias
  {"necagetd",  INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000360, OPCODE_MASK_H34C, necagetd,  anyware_inst },
559 6287462e Edgar E. Iglesias
  {"tnecagetd", INST_TYPE_RD_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0003E0, OPCODE_MASK_H34C, tnecagetd, anyware_inst },
560 6287462e Edgar E. Iglesias
  {"eaputd",    INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000460, OPCODE_MASK_H34C, eaputd,    anyware_inst },
561 6287462e Edgar E. Iglesias
  {"teaputd",   INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0004E0, OPCODE_MASK_H34C, teaputd,   anyware_inst },
562 6287462e Edgar E. Iglesias
  {"ecaputd",   INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000560, OPCODE_MASK_H34C, ecaputd,   anyware_inst },
563 6287462e Edgar E. Iglesias
  {"tecaputd",  INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0005E0, OPCODE_MASK_H34C, tecaputd,  anyware_inst },
564 6287462e Edgar E. Iglesias
  {"neaputd",   INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000660, OPCODE_MASK_H34C, neaputd,   anyware_inst },
565 6287462e Edgar E. Iglesias
  {"tneaputd",  INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0006E0, OPCODE_MASK_H34C, tneaputd,  anyware_inst },
566 6287462e Edgar E. Iglesias
  {"necaputd",  INST_TYPE_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C000760, OPCODE_MASK_H34C, necaputd,  anyware_inst },
567 6287462e Edgar E. Iglesias
  {"tnecaputd", INST_TYPE_R2,    INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x4C0007E0, OPCODE_MASK_H34C, tnecaputd, anyware_inst },
568 6287462e Edgar E. Iglesias
  {"", 0, 0, 0, 0, 0, 0, 0, 0},
569 e90e390c Edgar E. Iglesias
};
570 e90e390c Edgar E. Iglesias
571 e90e390c Edgar E. Iglesias
/* prefix for register names */
572 e90e390c Edgar E. Iglesias
char register_prefix[] = "r";
573 e90e390c Edgar E. Iglesias
char special_register_prefix[] = "spr";
574 e90e390c Edgar E. Iglesias
char fsl_register_prefix[] = "rfsl";
575 6287462e Edgar E. Iglesias
char pvr_register_prefix[] = "rpvr";
576 e90e390c Edgar E. Iglesias
577 e90e390c Edgar E. Iglesias
578 e90e390c Edgar E. Iglesias
/* #defines for valid immediate range */
579 6287462e Edgar E. Iglesias
#define MIN_IMM  ((int) 0x80000000)
580 6287462e Edgar E. Iglesias
#define MAX_IMM  ((int) 0x7fffffff)
581 e90e390c Edgar E. Iglesias
582 6287462e Edgar E. Iglesias
#define MIN_IMM15 ((int) 0x0000)
583 6287462e Edgar E. Iglesias
#define MAX_IMM15 ((int) 0x7fff)
584 e90e390c Edgar E. Iglesias
585 e90e390c Edgar E. Iglesias
#endif /* MICROBLAZE_OPC */
586 e90e390c Edgar E. Iglesias
587 e90e390c Edgar E. Iglesias
#include "dis-asm.h"
588 e90e390c Edgar E. Iglesias
#include <strings.h>
589 e90e390c Edgar E. Iglesias
590 e90e390c Edgar E. Iglesias
#define get_field_rd(instr) get_field(instr, RD_MASK, RD_LOW)
591 e90e390c Edgar E. Iglesias
#define get_field_r1(instr) get_field(instr, RA_MASK, RA_LOW)
592 e90e390c Edgar E. Iglesias
#define get_field_r2(instr) get_field(instr, RB_MASK, RB_LOW)
593 e90e390c Edgar E. Iglesias
#define get_int_field_imm(instr) ((instr & IMM_MASK) >> IMM_LOW)
594 e90e390c Edgar E. Iglesias
#define get_int_field_r1(instr) ((instr & RA_MASK) >> RA_LOW)
595 e90e390c Edgar E. Iglesias
596 6287462e Edgar E. Iglesias
/* Local function prototypes. */
597 6287462e Edgar E. Iglesias
598 6287462e Edgar E. Iglesias
static char * get_field (long instr, long mask, unsigned short low);
599 6287462e Edgar E. Iglesias
static char * get_field_imm (long instr);
600 6287462e Edgar E. Iglesias
static char * get_field_imm5 (long instr);
601 6287462e Edgar E. Iglesias
static char * get_field_rfsl (long instr);
602 6287462e Edgar E. Iglesias
static char * get_field_imm15 (long instr);
603 6287462e Edgar E. Iglesias
#if 0
604 6287462e Edgar E. Iglesias
static char * get_field_unsigned_imm (long instr);
605 6287462e Edgar E. Iglesias
#endif
606 6287462e Edgar E. Iglesias
char * get_field_special (long instr, struct op_code_struct * op);
607 6287462e Edgar E. Iglesias
unsigned long read_insn_microblaze (bfd_vma memaddr, 
608 6287462e Edgar E. Iglesias
                      struct disassemble_info *info,
609 6287462e Edgar E. Iglesias
                      struct op_code_struct **opr);
610 6287462e Edgar E. Iglesias
enum microblaze_instr get_insn_microblaze (long inst,
611 6287462e Edgar E. Iglesias
                       bfd_boolean *isunsignedimm,
612 6287462e Edgar E. Iglesias
                       enum microblaze_instr_type *insn_type,
613 6287462e Edgar E. Iglesias
                       short *delay_slots);
614 6287462e Edgar E. Iglesias
short get_delay_slots_microblaze (long inst);
615 6287462e Edgar E. Iglesias
enum microblaze_instr microblaze_decode_insn (long insn,
616 6287462e Edgar E. Iglesias
                        int *rd, 
617 6287462e Edgar E. Iglesias
                        int *ra, 
618 6287462e Edgar E. Iglesias
                        int *rb, 
619 6287462e Edgar E. Iglesias
                        int *imm);
620 6287462e Edgar E. Iglesias
unsigned long
621 6287462e Edgar E. Iglesias
microblaze_get_target_address (long inst,
622 6287462e Edgar E. Iglesias
                               bfd_boolean immfound,
623 6287462e Edgar E. Iglesias
                               int immval,
624 6287462e Edgar E. Iglesias
                               long pcval,
625 6287462e Edgar E. Iglesias
                               long r1val,
626 6287462e Edgar E. Iglesias
                               long r2val,
627 6287462e Edgar E. Iglesias
                               bfd_boolean *targetvalid,
628 6287462e Edgar E. Iglesias
                               bfd_boolean *unconditionalbranch);
629 6287462e Edgar E. Iglesias
630 e90e390c Edgar E. Iglesias
static char *
631 6287462e Edgar E. Iglesias
get_field (long instr, long mask, unsigned short low)
632 e90e390c Edgar E. Iglesias
{
633 e90e390c Edgar E. Iglesias
  char tmpstr[25];
634 e90e390c Edgar E. Iglesias
  sprintf(tmpstr, "%s%d", register_prefix, (int)((instr & mask) >> low));
635 e90e390c Edgar E. Iglesias
  return(strdup(tmpstr));
636 e90e390c Edgar E. Iglesias
}
637 e90e390c Edgar E. Iglesias
638 e90e390c Edgar E. Iglesias
static char *
639 6287462e Edgar E. Iglesias
get_field_imm (long instr)
640 e90e390c Edgar E. Iglesias
{
641 e90e390c Edgar E. Iglesias
  char tmpstr[25];
642 e90e390c Edgar E. Iglesias
  sprintf(tmpstr, "%d", (short)((instr & IMM_MASK) >> IMM_LOW));
643 e90e390c Edgar E. Iglesias
  return(strdup(tmpstr));
644 e90e390c Edgar E. Iglesias
}
645 e90e390c Edgar E. Iglesias
646 e90e390c Edgar E. Iglesias
static char *
647 6287462e Edgar E. Iglesias
get_field_imm5 (long instr)
648 e90e390c Edgar E. Iglesias
{
649 e90e390c Edgar E. Iglesias
  char tmpstr[25];
650 e90e390c Edgar E. Iglesias
  sprintf(tmpstr, "%d", (short)((instr & IMM5_MASK) >> IMM_LOW));
651 e90e390c Edgar E. Iglesias
  return(strdup(tmpstr));
652 e90e390c Edgar E. Iglesias
}
653 e90e390c Edgar E. Iglesias
654 e90e390c Edgar E. Iglesias
static char *
655 6287462e Edgar E. Iglesias
get_field_rfsl (long instr)
656 e90e390c Edgar E. Iglesias
{
657 e90e390c Edgar E. Iglesias
  char tmpstr[25];
658 6287462e Edgar E. Iglesias
  sprintf(tmpstr, "%s%d", fsl_register_prefix, (short)((instr & RFSL_MASK) >> IMM_LOW));
659 e90e390c Edgar E. Iglesias
  return(strdup(tmpstr));
660 e90e390c Edgar E. Iglesias
}
661 e90e390c Edgar E. Iglesias
662 e90e390c Edgar E. Iglesias
static char *
663 6287462e Edgar E. Iglesias
get_field_imm15 (long instr)
664 e90e390c Edgar E. Iglesias
{
665 e90e390c Edgar E. Iglesias
  char tmpstr[25];
666 6287462e Edgar E. Iglesias
  sprintf(tmpstr, "%d", (short)((instr & IMM15_MASK) >> IMM_LOW));
667 e90e390c Edgar E. Iglesias
  return(strdup(tmpstr));
668 e90e390c Edgar E. Iglesias
}
669 e90e390c Edgar E. Iglesias
670 e90e390c Edgar E. Iglesias
#if 0
671 e90e390c Edgar E. Iglesias
static char *
672 6287462e Edgar E. Iglesias
get_field_unsigned_imm (long instr)
673 e90e390c Edgar E. Iglesias
{
674 e90e390c Edgar E. Iglesias
  char tmpstr[25];
675 e90e390c Edgar E. Iglesias
  sprintf(tmpstr, "%d", (int)((instr & IMM_MASK) >> IMM_LOW));
676 e90e390c Edgar E. Iglesias
  return(strdup(tmpstr));
677 e90e390c Edgar E. Iglesias
}
678 e90e390c Edgar E. Iglesias
#endif
679 e90e390c Edgar E. Iglesias
680 e90e390c Edgar E. Iglesias
/*
681 e90e390c Edgar E. Iglesias
  char *
682 e90e390c Edgar E. Iglesias
  get_field_special (instr) 
683 e90e390c Edgar E. Iglesias
  long instr;
684 e90e390c Edgar E. Iglesias
  {
685 e90e390c Edgar E. Iglesias
  char tmpstr[25];
686 e90e390c Edgar E. Iglesias
  
687 e90e390c Edgar E. Iglesias
  sprintf(tmpstr, "%s%s", register_prefix, (((instr & IMM_MASK) >> IMM_LOW) & REG_MSR_MASK) == 0 ? "pc" : "msr");
688 e90e390c Edgar E. Iglesias
  
689 e90e390c Edgar E. Iglesias
  return(strdup(tmpstr));
690 e90e390c Edgar E. Iglesias
  }
691 e90e390c Edgar E. Iglesias
*/
692 e90e390c Edgar E. Iglesias
693 6287462e Edgar E. Iglesias
char *
694 6287462e Edgar E. Iglesias
get_field_special (long instr, struct op_code_struct * op)
695 e90e390c Edgar E. Iglesias
{
696 e90e390c Edgar E. Iglesias
   char tmpstr[25];
697 6287462e Edgar E. Iglesias
   char spr[6];
698 e90e390c Edgar E. Iglesias
699 e90e390c Edgar E. Iglesias
   switch ( (((instr & IMM_MASK) >> IMM_LOW) ^ op->immval_mask) ) {
700 6287462e Edgar E. Iglesias
701 e90e390c Edgar E. Iglesias
   case REG_MSR_MASK :
702 e90e390c Edgar E. Iglesias
      strcpy(spr, "msr");
703 e90e390c Edgar E. Iglesias
      break;
704 e90e390c Edgar E. Iglesias
   case REG_PC_MASK :
705 e90e390c Edgar E. Iglesias
      strcpy(spr, "pc");
706 e90e390c Edgar E. Iglesias
      break;
707 e90e390c Edgar E. Iglesias
   case REG_EAR_MASK :
708 e90e390c Edgar E. Iglesias
      strcpy(spr, "ear");
709 e90e390c Edgar E. Iglesias
      break;
710 e90e390c Edgar E. Iglesias
   case REG_ESR_MASK :
711 e90e390c Edgar E. Iglesias
      strcpy(spr, "esr");
712 e90e390c Edgar E. Iglesias
      break;
713 e90e390c Edgar E. Iglesias
   case REG_FSR_MASK :
714 e90e390c Edgar E. Iglesias
      strcpy(spr, "fsr");
715 6287462e Edgar E. Iglesias
      break;
716 6287462e Edgar E. Iglesias
   case REG_BTR_MASK :
717 6287462e Edgar E. Iglesias
      strcpy(spr, "btr");
718 e90e390c Edgar E. Iglesias
      break;      
719 6287462e Edgar E. Iglesias
   case REG_EDR_MASK :
720 6287462e Edgar E. Iglesias
      strcpy(spr, "edr");
721 6287462e Edgar E. Iglesias
      break;
722 6287462e Edgar E. Iglesias
   case REG_PID_MASK :
723 6287462e Edgar E. Iglesias
      strcpy(spr, "pid");
724 6287462e Edgar E. Iglesias
      break;
725 6287462e Edgar E. Iglesias
   case REG_ZPR_MASK :
726 6287462e Edgar E. Iglesias
      strcpy(spr, "zpr");
727 6287462e Edgar E. Iglesias
      break;
728 6287462e Edgar E. Iglesias
   case REG_TLBX_MASK :
729 6287462e Edgar E. Iglesias
      strcpy(spr, "tlbx");
730 6287462e Edgar E. Iglesias
      break;
731 6287462e Edgar E. Iglesias
   case REG_TLBLO_MASK :
732 6287462e Edgar E. Iglesias
      strcpy(spr, "tlblo");
733 e90e390c Edgar E. Iglesias
      break;
734 6287462e Edgar E. Iglesias
   case REG_TLBHI_MASK :
735 6287462e Edgar E. Iglesias
      strcpy(spr, "tlbhi");
736 6287462e Edgar E. Iglesias
      break;
737 6287462e Edgar E. Iglesias
   case REG_TLBSX_MASK :
738 6287462e Edgar E. Iglesias
      strcpy(spr, "tlbsx");
739 6287462e Edgar E. Iglesias
      break;
740 6287462e Edgar E. Iglesias
   default :
741 6287462e Edgar E. Iglesias
     {
742 6287462e Edgar E. Iglesias
       if ( ((((instr & IMM_MASK) >> IMM_LOW) ^ op->immval_mask) & 0xE000) == REG_PVR_MASK) {
743 6287462e Edgar E. Iglesias
         sprintf(tmpstr, "%spvr%d", register_prefix, (unsigned short)(((instr & IMM_MASK) >> IMM_LOW) ^ op->immval_mask) ^ REG_PVR_MASK);
744 6287462e Edgar E. Iglesias
         return(strdup(tmpstr));
745 6287462e Edgar E. Iglesias
       } else {
746 6287462e Edgar E. Iglesias
         strcpy(spr, "pc");
747 6287462e Edgar E. Iglesias
       }
748 6287462e Edgar E. Iglesias
     }
749 6287462e Edgar E. Iglesias
     break;
750 e90e390c Edgar E. Iglesias
   }
751 e90e390c Edgar E. Iglesias
   
752 e90e390c Edgar E. Iglesias
   sprintf(tmpstr, "%s%s", register_prefix, spr);
753 e90e390c Edgar E. Iglesias
   return(strdup(tmpstr));
754 e90e390c Edgar E. Iglesias
}
755 e90e390c Edgar E. Iglesias
756 6287462e Edgar E. Iglesias
unsigned long
757 6287462e Edgar E. Iglesias
read_insn_microblaze (bfd_vma memaddr, 
758 6287462e Edgar E. Iglesias
                      struct disassemble_info *info,
759 6287462e Edgar E. Iglesias
                      struct op_code_struct **opr)
760 e90e390c Edgar E. Iglesias
{
761 e90e390c Edgar E. Iglesias
  unsigned char       ibytes[4];
762 e90e390c Edgar E. Iglesias
  int                 status;
763 e90e390c Edgar E. Iglesias
  struct op_code_struct * op;
764 e90e390c Edgar E. Iglesias
  unsigned long inst;
765 e90e390c Edgar E. Iglesias
766 e90e390c Edgar E. Iglesias
  status = info->read_memory_func (memaddr, ibytes, 4, info);
767 e90e390c Edgar E. Iglesias
768 e90e390c Edgar E. Iglesias
  if (status != 0) 
769 e90e390c Edgar E. Iglesias
    {
770 e90e390c Edgar E. Iglesias
      info->memory_error_func (status, memaddr, info);
771 e90e390c Edgar E. Iglesias
      return 0;
772 e90e390c Edgar E. Iglesias
    }
773 e90e390c Edgar E. Iglesias
774 e90e390c Edgar E. Iglesias
  if (info->endian == BFD_ENDIAN_BIG)
775 e90e390c Edgar E. Iglesias
    inst = (ibytes[0] << 24) | (ibytes[1] << 16) | (ibytes[2] << 8) | ibytes[3];
776 e90e390c Edgar E. Iglesias
  else if (info->endian == BFD_ENDIAN_LITTLE)
777 e90e390c Edgar E. Iglesias
    inst = (ibytes[3] << 24) | (ibytes[2] << 16) | (ibytes[1] << 8) | ibytes[0];
778 e90e390c Edgar E. Iglesias
  else
779 e90e390c Edgar E. Iglesias
    abort ();
780 e90e390c Edgar E. Iglesias
781 e90e390c Edgar E. Iglesias
  /* Just a linear search of the table.  */
782 e90e390c Edgar E. Iglesias
  for (op = opcodes; op->name != 0; op ++)
783 e90e390c Edgar E. Iglesias
    if (op->bit_sequence == (inst & op->opcode_mask))
784 e90e390c Edgar E. Iglesias
      break;
785 e90e390c Edgar E. Iglesias
786 e90e390c Edgar E. Iglesias
  *opr = op;
787 e90e390c Edgar E. Iglesias
  return inst;
788 e90e390c Edgar E. Iglesias
}
789 e90e390c Edgar E. Iglesias
790 e90e390c Edgar E. Iglesias
791 e90e390c Edgar E. Iglesias
int 
792 e90e390c Edgar E. Iglesias
print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
793 e90e390c Edgar E. Iglesias
{
794 e90e390c Edgar E. Iglesias
  fprintf_ftype       fprintf = info->fprintf_func;
795 e90e390c Edgar E. Iglesias
  void *              stream = info->stream;
796 e90e390c Edgar E. Iglesias
  unsigned long       inst, prev_inst;
797 e90e390c Edgar E. Iglesias
  struct op_code_struct * op, *pop;
798 e90e390c Edgar E. Iglesias
  int                 immval = 0;
799 6287462e Edgar E. Iglesias
  bfd_boolean         immfound = FALSE;
800 e90e390c Edgar E. Iglesias
  static bfd_vma prev_insn_addr = -1; /*init the prev insn addr */
801 e90e390c Edgar E. Iglesias
  static int     prev_insn_vma = -1;  /*init the prev insn vma */
802 e90e390c Edgar E. Iglesias
  int            curr_insn_vma = info->buffer_vma;
803 e90e390c Edgar E. Iglesias
804 e90e390c Edgar E. Iglesias
  info->bytes_per_chunk = 4;
805 e90e390c Edgar E. Iglesias
806 e90e390c Edgar E. Iglesias
  inst = read_insn_microblaze (memaddr, info, &op);
807 6287462e Edgar E. Iglesias
  if (inst == 0) {
808 e90e390c Edgar E. Iglesias
    return -1;
809 6287462e Edgar E. Iglesias
  }
810 e90e390c Edgar E. Iglesias
  
811 e90e390c Edgar E. Iglesias
  if (prev_insn_vma == curr_insn_vma) {
812 e90e390c Edgar E. Iglesias
  if (memaddr-(info->bytes_per_chunk) == prev_insn_addr) {
813 e90e390c Edgar E. Iglesias
    prev_inst = read_insn_microblaze (prev_insn_addr, info, &pop);
814 e90e390c Edgar E. Iglesias
    if (prev_inst == 0)
815 e90e390c Edgar E. Iglesias
      return -1;
816 e90e390c Edgar E. Iglesias
    if (pop->instr == imm) {
817 e90e390c Edgar E. Iglesias
      immval = (get_int_field_imm(prev_inst) << 16) & 0xffff0000;
818 6287462e Edgar E. Iglesias
      immfound = TRUE;
819 e90e390c Edgar E. Iglesias
    }
820 e90e390c Edgar E. Iglesias
    else {
821 e90e390c Edgar E. Iglesias
      immval = 0;
822 6287462e Edgar E. Iglesias
      immfound = FALSE;
823 e90e390c Edgar E. Iglesias
    }
824 e90e390c Edgar E. Iglesias
  }
825 e90e390c Edgar E. Iglesias
  }
826 e90e390c Edgar E. Iglesias
  /* make curr insn as prev insn */
827 e90e390c Edgar E. Iglesias
  prev_insn_addr = memaddr;
828 e90e390c Edgar E. Iglesias
  prev_insn_vma = curr_insn_vma;
829 e90e390c Edgar E. Iglesias
830 6287462e Edgar E. Iglesias
  if (op->name == 0) {
831 e90e390c Edgar E. Iglesias
    fprintf (stream, ".short 0x%04x", inst);
832 6287462e Edgar E. Iglesias
  }
833 e90e390c Edgar E. Iglesias
  else
834 e90e390c Edgar E. Iglesias
    {
835 e90e390c Edgar E. Iglesias
      fprintf (stream, "%s", op->name);
836 e90e390c Edgar E. Iglesias
      
837 e90e390c Edgar E. Iglesias
      switch (op->inst_type)
838 e90e390c Edgar E. Iglesias
        {
839 e90e390c Edgar E. Iglesias
  case INST_TYPE_RD_R1_R2:
840 e90e390c Edgar E. Iglesias
     fprintf(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_r2(inst));
841 e90e390c Edgar E. Iglesias
     break;
842 e90e390c Edgar E. Iglesias
        case INST_TYPE_RD_R1_IMM:
843 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm(inst));
844 e90e390c Edgar E. Iglesias
          if (info->print_address_func && get_int_field_r1(inst) == 0 && info->symbol_at_address_func) {
845 e90e390c Edgar E. Iglesias
            if (immfound)
846 e90e390c Edgar E. Iglesias
              immval |= (get_int_field_imm(inst) & 0x0000ffff);
847 e90e390c Edgar E. Iglesias
            else {
848 e90e390c Edgar E. Iglesias
              immval = get_int_field_imm(inst);
849 e90e390c Edgar E. Iglesias
              if (immval & 0x8000)
850 e90e390c Edgar E. Iglesias
                immval |= 0xFFFF0000;
851 e90e390c Edgar E. Iglesias
            }
852 e90e390c Edgar E. Iglesias
            if (immval > 0 && info->symbol_at_address_func(immval, info)) {
853 e90e390c Edgar E. Iglesias
              fprintf (stream, "\t// ");
854 e90e390c Edgar E. Iglesias
              info->print_address_func (immval, info);
855 e90e390c Edgar E. Iglesias
            }
856 e90e390c Edgar E. Iglesias
          }
857 e90e390c Edgar E. Iglesias
          break;
858 e90e390c Edgar E. Iglesias
        case INST_TYPE_RD_R1_IMM5:
859 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm5(inst));
860 e90e390c Edgar E. Iglesias
          break;
861 6287462e Edgar E. Iglesias
        case INST_TYPE_RD_RFSL:
862 6287462e Edgar E. Iglesias
          fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_rfsl(inst));
863 e90e390c Edgar E. Iglesias
          break;
864 6287462e Edgar E. Iglesias
        case INST_TYPE_R1_RFSL:
865 6287462e Edgar E. Iglesias
          fprintf(stream, "\t%s, %s", get_field_r1(inst), get_field_rfsl(inst));
866 e90e390c Edgar E. Iglesias
          break;
867 e90e390c Edgar E. Iglesias
        case INST_TYPE_RD_SPECIAL:
868 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_special(inst, op));
869 e90e390c Edgar E. Iglesias
          break;
870 e90e390c Edgar E. Iglesias
        case INST_TYPE_SPECIAL_R1:
871 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s, %s", get_field_special(inst, op), get_field_r1(inst));
872 e90e390c Edgar E. Iglesias
          break;
873 e90e390c Edgar E. Iglesias
        case INST_TYPE_RD_R1:
874 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_r1(inst));
875 e90e390c Edgar E. Iglesias
          break;
876 e90e390c Edgar E. Iglesias
        case INST_TYPE_R1_R2:
877 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s, %s", get_field_r1(inst), get_field_r2(inst));
878 e90e390c Edgar E. Iglesias
          break;
879 e90e390c Edgar E. Iglesias
        case INST_TYPE_R1_IMM:
880 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s, %s", get_field_r1(inst), get_field_imm(inst));
881 e90e390c Edgar E. Iglesias
          /* The non-pc relative instructions are returns, which shouldn't 
882 e90e390c Edgar E. Iglesias
             have a label printed */
883 e90e390c Edgar E. Iglesias
          if (info->print_address_func && op->inst_offset_type == INST_PC_OFFSET && info->symbol_at_address_func) {
884 e90e390c Edgar E. Iglesias
            if (immfound)
885 e90e390c Edgar E. Iglesias
              immval |= (get_int_field_imm(inst) & 0x0000ffff);
886 e90e390c Edgar E. Iglesias
            else {
887 e90e390c Edgar E. Iglesias
              immval = get_int_field_imm(inst);
888 e90e390c Edgar E. Iglesias
              if (immval & 0x8000)
889 e90e390c Edgar E. Iglesias
                immval |= 0xFFFF0000;
890 e90e390c Edgar E. Iglesias
            }
891 e90e390c Edgar E. Iglesias
            immval += memaddr;
892 e90e390c Edgar E. Iglesias
            if (immval > 0 && info->symbol_at_address_func(immval, info)) {
893 e90e390c Edgar E. Iglesias
              fprintf (stream, "\t// ");
894 e90e390c Edgar E. Iglesias
              info->print_address_func (immval, info);
895 e90e390c Edgar E. Iglesias
            } else {
896 e90e390c Edgar E. Iglesias
              fprintf (stream, "\t\t// ");
897 e90e390c Edgar E. Iglesias
              fprintf (stream, "%x", immval);
898 e90e390c Edgar E. Iglesias
            }
899 e90e390c Edgar E. Iglesias
          }
900 e90e390c Edgar E. Iglesias
          break;
901 e90e390c Edgar E. Iglesias
        case INST_TYPE_RD_IMM:
902 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_imm(inst));
903 e90e390c Edgar E. Iglesias
          if (info->print_address_func && info->symbol_at_address_func) {
904 e90e390c Edgar E. Iglesias
            if (immfound)
905 e90e390c Edgar E. Iglesias
              immval |= (get_int_field_imm(inst) & 0x0000ffff);
906 e90e390c Edgar E. Iglesias
            else {
907 e90e390c Edgar E. Iglesias
              immval = get_int_field_imm(inst);
908 e90e390c Edgar E. Iglesias
              if (immval & 0x8000)
909 e90e390c Edgar E. Iglesias
                immval |= 0xFFFF0000;
910 e90e390c Edgar E. Iglesias
            }
911 e90e390c Edgar E. Iglesias
            if (op->inst_offset_type == INST_PC_OFFSET)
912 e90e390c Edgar E. Iglesias
              immval += (int) memaddr;
913 e90e390c Edgar E. Iglesias
            if (info->symbol_at_address_func(immval, info)) {
914 e90e390c Edgar E. Iglesias
              fprintf (stream, "\t// ");
915 e90e390c Edgar E. Iglesias
              info->print_address_func (immval, info);
916 e90e390c Edgar E. Iglesias
            } 
917 e90e390c Edgar E. Iglesias
          }
918 e90e390c Edgar E. Iglesias
          break;
919 e90e390c Edgar E. Iglesias
        case INST_TYPE_IMM:
920 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s", get_field_imm(inst));
921 e90e390c Edgar E. Iglesias
          if (info->print_address_func && info->symbol_at_address_func && op->instr != imm) {
922 e90e390c Edgar E. Iglesias
            if (immfound)
923 e90e390c Edgar E. Iglesias
              immval |= (get_int_field_imm(inst) & 0x0000ffff);
924 e90e390c Edgar E. Iglesias
            else {
925 e90e390c Edgar E. Iglesias
              immval = get_int_field_imm(inst);
926 e90e390c Edgar E. Iglesias
              if (immval & 0x8000)
927 e90e390c Edgar E. Iglesias
                immval |= 0xFFFF0000;
928 e90e390c Edgar E. Iglesias
            }
929 e90e390c Edgar E. Iglesias
            if (op->inst_offset_type == INST_PC_OFFSET)
930 e90e390c Edgar E. Iglesias
              immval += (int) memaddr;
931 e90e390c Edgar E. Iglesias
            if (immval > 0 && info->symbol_at_address_func(immval, info)) {
932 e90e390c Edgar E. Iglesias
              fprintf (stream, "\t// ");
933 e90e390c Edgar E. Iglesias
              info->print_address_func (immval, info);
934 e90e390c Edgar E. Iglesias
            } else if (op->inst_offset_type == INST_PC_OFFSET) {
935 e90e390c Edgar E. Iglesias
              fprintf (stream, "\t\t// ");
936 e90e390c Edgar E. Iglesias
              fprintf (stream, "%x", immval);
937 e90e390c Edgar E. Iglesias
            }
938 e90e390c Edgar E. Iglesias
          }
939 e90e390c Edgar E. Iglesias
          break;
940 e90e390c Edgar E. Iglesias
        case INST_TYPE_RD_R2:
941 e90e390c Edgar E. Iglesias
          fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
942 e90e390c Edgar E. Iglesias
          break;
943 e90e390c Edgar E. Iglesias
  case INST_TYPE_R2:
944 e90e390c Edgar E. Iglesias
     fprintf(stream, "\t%s", get_field_r2(inst));
945 e90e390c Edgar E. Iglesias
     break;
946 e90e390c Edgar E. Iglesias
  case INST_TYPE_R1:
947 e90e390c Edgar E. Iglesias
     fprintf(stream, "\t%s", get_field_r1(inst));
948 e90e390c Edgar E. Iglesias
     break;
949 e90e390c Edgar E. Iglesias
  case INST_TYPE_RD_R1_SPECIAL:
950 e90e390c Edgar E. Iglesias
     fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
951 e90e390c Edgar E. Iglesias
     break;
952 6287462e Edgar E. Iglesias
  case INST_TYPE_RD_IMM15:
953 6287462e Edgar E. Iglesias
     fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_imm15(inst));
954 e90e390c Edgar E. Iglesias
     break;
955 e90e390c Edgar E. Iglesias
     /* For tuqula instruction */
956 e90e390c Edgar E. Iglesias
  case INST_TYPE_RD:
957 e90e390c Edgar E. Iglesias
     fprintf(stream, "\t%s", get_field_rd(inst));
958 e90e390c Edgar E. Iglesias
     break;
959 6287462e Edgar E. Iglesias
  case INST_TYPE_RFSL:
960 6287462e Edgar E. Iglesias
     fprintf(stream, "\t%s", get_field_rfsl(inst));
961 6287462e Edgar E. Iglesias
     break;
962 e90e390c Edgar E. Iglesias
  default:
963 e90e390c Edgar E. Iglesias
          /* if the disassembler lags the instruction set */
964 e90e390c Edgar E. Iglesias
          fprintf (stream, "\tundecoded operands, inst is 0x%04x", inst);
965 e90e390c Edgar E. Iglesias
          break;
966 e90e390c Edgar E. Iglesias
        }
967 e90e390c Edgar E. Iglesias
    }
968 e90e390c Edgar E. Iglesias
  
969 e90e390c Edgar E. Iglesias
  /* Say how many bytes we consumed? */
970 e90e390c Edgar E. Iglesias
  return 4;
971 e90e390c Edgar E. Iglesias
}
972 e90e390c Edgar E. Iglesias
973 6287462e Edgar E. Iglesias
enum microblaze_instr
974 6287462e Edgar E. Iglesias
get_insn_microblaze (long inst,
975 6287462e Edgar E. Iglesias
                       bfd_boolean *isunsignedimm,
976 6287462e Edgar E. Iglesias
                       enum microblaze_instr_type *insn_type,
977 6287462e Edgar E. Iglesias
                       short *delay_slots)
978 e90e390c Edgar E. Iglesias
{
979 e90e390c Edgar E. Iglesias
  struct op_code_struct * op;
980 6287462e Edgar E. Iglesias
  *isunsignedimm = FALSE;
981 e90e390c Edgar E. Iglesias
982 e90e390c Edgar E. Iglesias
  /* Just a linear search of the table.  */
983 e90e390c Edgar E. Iglesias
  for (op = opcodes; op->name != 0; op ++)
984 e90e390c Edgar E. Iglesias
    if (op->bit_sequence == (inst & op->opcode_mask))
985 e90e390c Edgar E. Iglesias
      break;
986 e90e390c Edgar E. Iglesias
987 e90e390c Edgar E. Iglesias
  if (op->name == 0)
988 e90e390c Edgar E. Iglesias
    return invalid_inst;
989 e90e390c Edgar E. Iglesias
  else {
990 e90e390c Edgar E. Iglesias
    *isunsignedimm = (op->inst_type == INST_TYPE_RD_R1_UNSIGNED_IMM);
991 e90e390c Edgar E. Iglesias
    *insn_type = op->instr_type;
992 e90e390c Edgar E. Iglesias
    *delay_slots = op->delay_slots;
993 e90e390c Edgar E. Iglesias
    return op->instr;
994 e90e390c Edgar E. Iglesias
  }
995 e90e390c Edgar E. Iglesias
}
996 e90e390c Edgar E. Iglesias
997 6287462e Edgar E. Iglesias
short
998 6287462e Edgar E. Iglesias
get_delay_slots_microblaze (long inst)
999 e90e390c Edgar E. Iglesias
{
1000 6287462e Edgar E. Iglesias
  bfd_boolean isunsignedimm;
1001 e90e390c Edgar E. Iglesias
  enum microblaze_instr_type insn_type;
1002 e90e390c Edgar E. Iglesias
  enum microblaze_instr op;
1003 e90e390c Edgar E. Iglesias
  short delay_slots;
1004 e90e390c Edgar E. Iglesias
1005 e90e390c Edgar E. Iglesias
  op = get_insn_microblaze( inst, &isunsignedimm, &insn_type, &delay_slots);
1006 e90e390c Edgar E. Iglesias
  if (op == invalid_inst)
1007 e90e390c Edgar E. Iglesias
    return 0;
1008 e90e390c Edgar E. Iglesias
  else 
1009 e90e390c Edgar E. Iglesias
    return delay_slots;
1010 e90e390c Edgar E. Iglesias
}
1011 e90e390c Edgar E. Iglesias
1012 6287462e Edgar E. Iglesias
enum microblaze_instr
1013 6287462e Edgar E. Iglesias
microblaze_decode_insn (long insn,
1014 6287462e Edgar E. Iglesias
                        int *rd, 
1015 6287462e Edgar E. Iglesias
                        int *ra, 
1016 6287462e Edgar E. Iglesias
                        int *rb, 
1017 6287462e Edgar E. Iglesias
                        int *imm)
1018 e90e390c Edgar E. Iglesias
{
1019 e90e390c Edgar E. Iglesias
  enum microblaze_instr op;
1020 6287462e Edgar E. Iglesias
  bfd_boolean t1;
1021 e90e390c Edgar E. Iglesias
  enum microblaze_instr_type t2;
1022 e90e390c Edgar E. Iglesias
  short t3;
1023 e90e390c Edgar E. Iglesias
1024 e90e390c Edgar E. Iglesias
  op = get_insn_microblaze(insn, &t1, &t2, &t3);
1025 e90e390c Edgar E. Iglesias
  *rd = (insn & RD_MASK) >> RD_LOW;
1026 e90e390c Edgar E. Iglesias
  *ra = (insn & RA_MASK) >> RA_LOW;
1027 e90e390c Edgar E. Iglesias
  *rb = (insn & RB_MASK) >> RB_LOW;
1028 e90e390c Edgar E. Iglesias
  t3 = (insn & IMM_MASK) >> IMM_LOW;
1029 e90e390c Edgar E. Iglesias
  *imm = (int) t3;
1030 e90e390c Edgar E. Iglesias
  return (op);
1031 e90e390c Edgar E. Iglesias
}
1032 e90e390c Edgar E. Iglesias
1033 6287462e Edgar E. Iglesias
unsigned long
1034 6287462e Edgar E. Iglesias
microblaze_get_target_address (long inst,
1035 6287462e Edgar E. Iglesias
                               bfd_boolean immfound,
1036 6287462e Edgar E. Iglesias
                               int immval,
1037 6287462e Edgar E. Iglesias
                               long pcval,
1038 6287462e Edgar E. Iglesias
                               long r1val,
1039 6287462e Edgar E. Iglesias
                               long r2val,
1040 6287462e Edgar E. Iglesias
                               bfd_boolean *targetvalid,
1041 6287462e Edgar E. Iglesias
                               bfd_boolean *unconditionalbranch)
1042 e90e390c Edgar E. Iglesias
{
1043 e90e390c Edgar E. Iglesias
  struct op_code_struct * op;
1044 e90e390c Edgar E. Iglesias
  long targetaddr = 0;
1045 e90e390c Edgar E. Iglesias
1046 6287462e Edgar E. Iglesias
  *unconditionalbranch = FALSE;
1047 e90e390c Edgar E. Iglesias
  /* Just a linear search of the table.  */
1048 e90e390c Edgar E. Iglesias
  for (op = opcodes; op->name != 0; op ++)
1049 e90e390c Edgar E. Iglesias
    if (op->bit_sequence == (inst & op->opcode_mask))
1050 e90e390c Edgar E. Iglesias
      break;
1051 e90e390c Edgar E. Iglesias
1052 e90e390c Edgar E. Iglesias
  if (op->name == 0) {
1053 6287462e Edgar E. Iglesias
    *targetvalid = FALSE;
1054 e90e390c Edgar E. Iglesias
  } else if (op->instr_type == branch_inst) {
1055 e90e390c Edgar E. Iglesias
    switch (op->inst_type) {
1056 e90e390c Edgar E. Iglesias
    case INST_TYPE_R2:
1057 6287462e Edgar E. Iglesias
      *unconditionalbranch = TRUE;
1058 e90e390c Edgar E. Iglesias
      /* fallthru */
1059 e90e390c Edgar E. Iglesias
    case INST_TYPE_RD_R2:
1060 e90e390c Edgar E. Iglesias
    case INST_TYPE_R1_R2:
1061 e90e390c Edgar E. Iglesias
      targetaddr = r2val;
1062 6287462e Edgar E. Iglesias
      *targetvalid = TRUE;
1063 e90e390c Edgar E. Iglesias
      if (op->inst_offset_type == INST_PC_OFFSET)
1064 e90e390c Edgar E. Iglesias
        targetaddr += pcval;
1065 e90e390c Edgar E. Iglesias
      break;
1066 e90e390c Edgar E. Iglesias
    case INST_TYPE_IMM:
1067 6287462e Edgar E. Iglesias
      *unconditionalbranch = TRUE;
1068 e90e390c Edgar E. Iglesias
      /* fallthru */
1069 e90e390c Edgar E. Iglesias
    case INST_TYPE_RD_IMM:
1070 e90e390c Edgar E. Iglesias
    case INST_TYPE_R1_IMM:
1071 e90e390c Edgar E. Iglesias
      if (immfound) {
1072 e90e390c Edgar E. Iglesias
        targetaddr = (immval << 16) & 0xffff0000;
1073 e90e390c Edgar E. Iglesias
        targetaddr |= (get_int_field_imm(inst) & 0x0000ffff);
1074 e90e390c Edgar E. Iglesias
      } else {
1075 e90e390c Edgar E. Iglesias
        targetaddr = get_int_field_imm(inst);
1076 e90e390c Edgar E. Iglesias
        if (targetaddr & 0x8000)
1077 e90e390c Edgar E. Iglesias
          targetaddr |= 0xFFFF0000;
1078 e90e390c Edgar E. Iglesias
      }
1079 e90e390c Edgar E. Iglesias
      if (op->inst_offset_type == INST_PC_OFFSET)
1080 e90e390c Edgar E. Iglesias
        targetaddr += pcval;
1081 6287462e Edgar E. Iglesias
      *targetvalid = TRUE;
1082 e90e390c Edgar E. Iglesias
      break;
1083 e90e390c Edgar E. Iglesias
    default:
1084 6287462e Edgar E. Iglesias
      *targetvalid = FALSE;
1085 e90e390c Edgar E. Iglesias
      break;
1086 e90e390c Edgar E. Iglesias
    }
1087 e90e390c Edgar E. Iglesias
  } else if (op->instr_type == return_inst) {
1088 e90e390c Edgar E. Iglesias
      if (immfound) {
1089 e90e390c Edgar E. Iglesias
        targetaddr = (immval << 16) & 0xffff0000;
1090 e90e390c Edgar E. Iglesias
        targetaddr |= (get_int_field_imm(inst) & 0x0000ffff);
1091 e90e390c Edgar E. Iglesias
      } else {
1092 e90e390c Edgar E. Iglesias
        targetaddr = get_int_field_imm(inst);
1093 e90e390c Edgar E. Iglesias
        if (targetaddr & 0x8000)
1094 e90e390c Edgar E. Iglesias
          targetaddr |= 0xFFFF0000;
1095 e90e390c Edgar E. Iglesias
      }
1096 e90e390c Edgar E. Iglesias
      targetaddr += r1val;
1097 6287462e Edgar E. Iglesias
      *targetvalid = TRUE;
1098 e90e390c Edgar E. Iglesias
  } else {
1099 6287462e Edgar E. Iglesias
    *targetvalid = FALSE;
1100 e90e390c Edgar E. Iglesias
  }
1101 e90e390c Edgar E. Iglesias
  return targetaddr;
1102 e90e390c Edgar E. Iglesias
}