Statistics
| Branch: | Revision:

root / microblaze-dis.c @ a5fd2c34

History | View | Annotate | Download (62.1 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 70539e18 Blue Swirl
along with this program; if not, see <http://www.gnu.org/licenses/>. */
16 e90e390c Edgar E. Iglesias
17 e90e390c Edgar E. Iglesias
/*
18 e90e390c Edgar E. Iglesias
 * Copyright (c) 2001 Xilinx, Inc.  All rights reserved. 
19 e90e390c Edgar E. Iglesias
 *
20 e90e390c Edgar E. Iglesias
 * Redistribution and use in source and binary forms are permitted
21 e90e390c Edgar E. Iglesias
 * provided that the above copyright notice and this paragraph are
22 e90e390c Edgar E. Iglesias
 * duplicated in all such forms and that any documentation,
23 e90e390c Edgar E. Iglesias
 * advertising materials, and other materials related to such
24 e90e390c Edgar E. Iglesias
 * distribution and use acknowledge that the software was developed
25 e90e390c Edgar E. Iglesias
 * by Xilinx, Inc.  The name of the Company may not be used to endorse 
26 e90e390c Edgar E. Iglesias
 * or promote products derived from this software without specific prior 
27 e90e390c Edgar E. Iglesias
 * written permission.
28 e90e390c Edgar E. Iglesias
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
29 e90e390c Edgar E. Iglesias
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
30 e90e390c Edgar E. Iglesias
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
31 e90e390c Edgar E. Iglesias
 *
32 e90e390c Edgar E. Iglesias
 *        Xilinx, Inc.
33 e90e390c Edgar E. Iglesias
 */
34 e90e390c Edgar E. Iglesias
35 e90e390c Edgar E. Iglesias
36 e90e390c Edgar E. Iglesias
#include <stdio.h>
37 e90e390c Edgar E. Iglesias
#define STATIC_TABLE
38 e90e390c Edgar E. Iglesias
#define DEFINE_TABLE
39 e90e390c Edgar E. Iglesias
40 6287462e Edgar E. Iglesias
#define TRUE   1
41 6287462e Edgar E. Iglesias
#define FALSE  0
42 6287462e Edgar E. Iglesias
43 e90e390c Edgar E. Iglesias
#ifndef MICROBLAZE_OPC
44 e90e390c Edgar E. Iglesias
#define MICROBLAZE_OPC
45 e90e390c Edgar E. Iglesias
/* Assembler instructions for Xilinx's microblaze processor
46 e90e390c Edgar E. Iglesias
   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
47 e90e390c Edgar E. Iglesias

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

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

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