* cpu.h,decode.c,sem-switch.c,sem.c: Regenerate.
[binutils-gdb.git] / sim / m32r / decodex.c
1 /* Simulator instruction decoder for m32rxf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
6
7 This file is part of the GNU Simulators.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23 */
24
25 #define WANT_CPU
26 #define WANT_CPU_M32RXF
27
28 #include "sim-main.h"
29 #include "sim-assert.h"
30
31 #ifdef __GNUC__
32 #define FMT(n)
33 #else
34 #define FMT(n) CONCAT2 (M32RXF_,n) ,
35 #endif
36
37 /* FIXME: Need to review choices for the following. */
38
39 #if WITH_SEM_SWITCH_FULL
40 #define FULL(fn)
41 #else
42 #define FULL(fn) CONCAT3 (m32rxf,_sem_,fn) ,
43 #endif
44
45 #if WITH_FAST
46 #if WITH_SEM_SWITCH_FAST
47 #define FAST(fn)
48 #else
49 #define FAST(fn) CONCAT3 (m32rxf,_semf_,fn) , /* f for fast */
50 #endif
51 #else
52 #define FAST(fn)
53 #endif
54
55 /* The instruction descriptor array.
56 This is computed at runtime. Space for it is not malloc'd to save a
57 teensy bit of cpu in the decoder. Moving it to malloc space is trivial
58 but won't be done until necessary (we don't currently support the runtime
59 addition of instructions nor an SMP machine with different cpus). */
60 static IDESC m32rxf_insn_data[M32RXF_INSN_MAX];
61
62 /* Instruction semantic handlers and support.
63 This struct defines the part of an IDESC that can be computed at
64 compile time. */
65
66 struct insn_sem {
67 /* The instruction type (a number that identifies each insn over the
68 entire architecture). */
69 CGEN_INSN_TYPE type;
70
71 /* Index in IDESC table. */
72 int index;
73
74 /* Index in IDESC table of parallel handler. */
75 int par_index;
76
77 /* Index in IDESC table of writeback handler. */
78 int write_index;
79
80 /* Routines to execute the insn.
81 The full version has all features (profiling,tracing) compiled in.
82 The fast version has none of that. */
83 #if ! WITH_SEM_SWITCH_FULL
84 SEMANTIC_FN *sem_full;
85 #endif
86 #if WITH_FAST && ! WITH_SEM_SWITCH_FAST
87 SEMANTIC_FN *sem_fast;
88 #endif
89
90 };
91 /* The INSN_ prefix is not here and is instead part of the `insn' argument
92 to avoid collisions with header files (e.g. `AND' in ansidecl.h). */
93 #define IDX(insn) CONCAT2 (M32RXF_,insn)
94 #define TYPE(insn) CONCAT2 (M32R_,insn)
95
96 /* Insn can't be executed in parallel.
97 Or is that "do NOt Pass to Air defense Radar"? :-) */
98 #define NOPAR (-1)
99
100 /* Commas between elements are contained in the macros.
101 Some of these are conditionally compiled out. */
102
103 static const struct insn_sem m32rxf_insn_sem[] =
104 {
105 { VIRTUAL_INSN_X_INVALID, IDX (INSN_X_INVALID), NOPAR, NOPAR, FULL (x_invalid) FAST (x_invalid) },
106 { VIRTUAL_INSN_X_AFTER, IDX (INSN_X_AFTER), NOPAR, NOPAR, FULL (x_after) FAST (x_after) },
107 { VIRTUAL_INSN_X_BEFORE, IDX (INSN_X_BEFORE), NOPAR, NOPAR, FULL (x_before) FAST (x_before) },
108 { VIRTUAL_INSN_X_CTI_CHAIN, IDX (INSN_X_CTI_CHAIN), NOPAR, NOPAR, FULL (x_cti_chain) FAST (x_cti_chain) },
109 { VIRTUAL_INSN_X_CHAIN, IDX (INSN_X_CHAIN), NOPAR, NOPAR, FULL (x_chain) FAST (x_chain) },
110 { VIRTUAL_INSN_X_BEGIN, IDX (INSN_X_BEGIN), NOPAR, NOPAR, FULL (x_begin) FAST (x_begin) },
111 { TYPE (INSN_ADD), IDX (INSN_ADD), IDX (INSN_PAR_ADD), IDX (INSN_WRITE_ADD), FULL (add) FAST (add) },
112 { TYPE (INSN_ADD3), IDX (INSN_ADD3), NOPAR, NOPAR, FULL (add3) FAST (add3) },
113 { TYPE (INSN_AND), IDX (INSN_AND), IDX (INSN_PAR_AND), IDX (INSN_WRITE_AND), FULL (and) FAST (and) },
114 { TYPE (INSN_AND3), IDX (INSN_AND3), NOPAR, NOPAR, FULL (and3) FAST (and3) },
115 { TYPE (INSN_OR), IDX (INSN_OR), IDX (INSN_PAR_OR), IDX (INSN_WRITE_OR), FULL (or) FAST (or) },
116 { TYPE (INSN_OR3), IDX (INSN_OR3), NOPAR, NOPAR, FULL (or3) FAST (or3) },
117 { TYPE (INSN_XOR), IDX (INSN_XOR), IDX (INSN_PAR_XOR), IDX (INSN_WRITE_XOR), FULL (xor) FAST (xor) },
118 { TYPE (INSN_XOR3), IDX (INSN_XOR3), NOPAR, NOPAR, FULL (xor3) FAST (xor3) },
119 { TYPE (INSN_ADDI), IDX (INSN_ADDI), IDX (INSN_PAR_ADDI), IDX (INSN_WRITE_ADDI), FULL (addi) FAST (addi) },
120 { TYPE (INSN_ADDV), IDX (INSN_ADDV), IDX (INSN_PAR_ADDV), IDX (INSN_WRITE_ADDV), FULL (addv) FAST (addv) },
121 { TYPE (INSN_ADDV3), IDX (INSN_ADDV3), NOPAR, NOPAR, FULL (addv3) FAST (addv3) },
122 { TYPE (INSN_ADDX), IDX (INSN_ADDX), IDX (INSN_PAR_ADDX), IDX (INSN_WRITE_ADDX), FULL (addx) FAST (addx) },
123 { TYPE (INSN_BC8), IDX (INSN_BC8), IDX (INSN_PAR_BC8), IDX (INSN_WRITE_BC8), FULL (bc8) FAST (bc8) },
124 { TYPE (INSN_BC24), IDX (INSN_BC24), NOPAR, NOPAR, FULL (bc24) FAST (bc24) },
125 { TYPE (INSN_BEQ), IDX (INSN_BEQ), NOPAR, NOPAR, FULL (beq) FAST (beq) },
126 { TYPE (INSN_BEQZ), IDX (INSN_BEQZ), NOPAR, NOPAR, FULL (beqz) FAST (beqz) },
127 { TYPE (INSN_BGEZ), IDX (INSN_BGEZ), NOPAR, NOPAR, FULL (bgez) FAST (bgez) },
128 { TYPE (INSN_BGTZ), IDX (INSN_BGTZ), NOPAR, NOPAR, FULL (bgtz) FAST (bgtz) },
129 { TYPE (INSN_BLEZ), IDX (INSN_BLEZ), NOPAR, NOPAR, FULL (blez) FAST (blez) },
130 { TYPE (INSN_BLTZ), IDX (INSN_BLTZ), NOPAR, NOPAR, FULL (bltz) FAST (bltz) },
131 { TYPE (INSN_BNEZ), IDX (INSN_BNEZ), NOPAR, NOPAR, FULL (bnez) FAST (bnez) },
132 { TYPE (INSN_BL8), IDX (INSN_BL8), IDX (INSN_PAR_BL8), IDX (INSN_WRITE_BL8), FULL (bl8) FAST (bl8) },
133 { TYPE (INSN_BL24), IDX (INSN_BL24), NOPAR, NOPAR, FULL (bl24) FAST (bl24) },
134 { TYPE (INSN_BCL8), IDX (INSN_BCL8), IDX (INSN_PAR_BCL8), IDX (INSN_WRITE_BCL8), FULL (bcl8) FAST (bcl8) },
135 { TYPE (INSN_BCL24), IDX (INSN_BCL24), NOPAR, NOPAR, FULL (bcl24) FAST (bcl24) },
136 { TYPE (INSN_BNC8), IDX (INSN_BNC8), IDX (INSN_PAR_BNC8), IDX (INSN_WRITE_BNC8), FULL (bnc8) FAST (bnc8) },
137 { TYPE (INSN_BNC24), IDX (INSN_BNC24), NOPAR, NOPAR, FULL (bnc24) FAST (bnc24) },
138 { TYPE (INSN_BNE), IDX (INSN_BNE), NOPAR, NOPAR, FULL (bne) FAST (bne) },
139 { TYPE (INSN_BRA8), IDX (INSN_BRA8), IDX (INSN_PAR_BRA8), IDX (INSN_WRITE_BRA8), FULL (bra8) FAST (bra8) },
140 { TYPE (INSN_BRA24), IDX (INSN_BRA24), NOPAR, NOPAR, FULL (bra24) FAST (bra24) },
141 { TYPE (INSN_BNCL8), IDX (INSN_BNCL8), IDX (INSN_PAR_BNCL8), IDX (INSN_WRITE_BNCL8), FULL (bncl8) FAST (bncl8) },
142 { TYPE (INSN_BNCL24), IDX (INSN_BNCL24), NOPAR, NOPAR, FULL (bncl24) FAST (bncl24) },
143 { TYPE (INSN_CMP), IDX (INSN_CMP), IDX (INSN_PAR_CMP), IDX (INSN_WRITE_CMP), FULL (cmp) FAST (cmp) },
144 { TYPE (INSN_CMPI), IDX (INSN_CMPI), NOPAR, NOPAR, FULL (cmpi) FAST (cmpi) },
145 { TYPE (INSN_CMPU), IDX (INSN_CMPU), IDX (INSN_PAR_CMPU), IDX (INSN_WRITE_CMPU), FULL (cmpu) FAST (cmpu) },
146 { TYPE (INSN_CMPUI), IDX (INSN_CMPUI), NOPAR, NOPAR, FULL (cmpui) FAST (cmpui) },
147 { TYPE (INSN_CMPEQ), IDX (INSN_CMPEQ), IDX (INSN_PAR_CMPEQ), IDX (INSN_WRITE_CMPEQ), FULL (cmpeq) FAST (cmpeq) },
148 { TYPE (INSN_CMPZ), IDX (INSN_CMPZ), IDX (INSN_PAR_CMPZ), IDX (INSN_WRITE_CMPZ), FULL (cmpz) FAST (cmpz) },
149 { TYPE (INSN_DIV), IDX (INSN_DIV), NOPAR, NOPAR, FULL (div) FAST (div) },
150 { TYPE (INSN_DIVU), IDX (INSN_DIVU), NOPAR, NOPAR, FULL (divu) FAST (divu) },
151 { TYPE (INSN_REM), IDX (INSN_REM), NOPAR, NOPAR, FULL (rem) FAST (rem) },
152 { TYPE (INSN_REMU), IDX (INSN_REMU), NOPAR, NOPAR, FULL (remu) FAST (remu) },
153 { TYPE (INSN_DIVH), IDX (INSN_DIVH), NOPAR, NOPAR, FULL (divh) FAST (divh) },
154 { TYPE (INSN_JC), IDX (INSN_JC), IDX (INSN_PAR_JC), IDX (INSN_WRITE_JC), FULL (jc) FAST (jc) },
155 { TYPE (INSN_JNC), IDX (INSN_JNC), IDX (INSN_PAR_JNC), IDX (INSN_WRITE_JNC), FULL (jnc) FAST (jnc) },
156 { TYPE (INSN_JL), IDX (INSN_JL), IDX (INSN_PAR_JL), IDX (INSN_WRITE_JL), FULL (jl) FAST (jl) },
157 { TYPE (INSN_JMP), IDX (INSN_JMP), IDX (INSN_PAR_JMP), IDX (INSN_WRITE_JMP), FULL (jmp) FAST (jmp) },
158 { TYPE (INSN_LD), IDX (INSN_LD), IDX (INSN_PAR_LD), IDX (INSN_WRITE_LD), FULL (ld) FAST (ld) },
159 { TYPE (INSN_LD_D), IDX (INSN_LD_D), NOPAR, NOPAR, FULL (ld_d) FAST (ld_d) },
160 { TYPE (INSN_LDB), IDX (INSN_LDB), IDX (INSN_PAR_LDB), IDX (INSN_WRITE_LDB), FULL (ldb) FAST (ldb) },
161 { TYPE (INSN_LDB_D), IDX (INSN_LDB_D), NOPAR, NOPAR, FULL (ldb_d) FAST (ldb_d) },
162 { TYPE (INSN_LDH), IDX (INSN_LDH), IDX (INSN_PAR_LDH), IDX (INSN_WRITE_LDH), FULL (ldh) FAST (ldh) },
163 { TYPE (INSN_LDH_D), IDX (INSN_LDH_D), NOPAR, NOPAR, FULL (ldh_d) FAST (ldh_d) },
164 { TYPE (INSN_LDUB), IDX (INSN_LDUB), IDX (INSN_PAR_LDUB), IDX (INSN_WRITE_LDUB), FULL (ldub) FAST (ldub) },
165 { TYPE (INSN_LDUB_D), IDX (INSN_LDUB_D), NOPAR, NOPAR, FULL (ldub_d) FAST (ldub_d) },
166 { TYPE (INSN_LDUH), IDX (INSN_LDUH), IDX (INSN_PAR_LDUH), IDX (INSN_WRITE_LDUH), FULL (lduh) FAST (lduh) },
167 { TYPE (INSN_LDUH_D), IDX (INSN_LDUH_D), NOPAR, NOPAR, FULL (lduh_d) FAST (lduh_d) },
168 { TYPE (INSN_LD_PLUS), IDX (INSN_LD_PLUS), IDX (INSN_PAR_LD_PLUS), IDX (INSN_WRITE_LD_PLUS), FULL (ld_plus) FAST (ld_plus) },
169 { TYPE (INSN_LD24), IDX (INSN_LD24), NOPAR, NOPAR, FULL (ld24) FAST (ld24) },
170 { TYPE (INSN_LDI8), IDX (INSN_LDI8), IDX (INSN_PAR_LDI8), IDX (INSN_WRITE_LDI8), FULL (ldi8) FAST (ldi8) },
171 { TYPE (INSN_LDI16), IDX (INSN_LDI16), NOPAR, NOPAR, FULL (ldi16) FAST (ldi16) },
172 { TYPE (INSN_LOCK), IDX (INSN_LOCK), IDX (INSN_PAR_LOCK), IDX (INSN_WRITE_LOCK), FULL (lock) FAST (lock) },
173 { TYPE (INSN_MACHI_A), IDX (INSN_MACHI_A), IDX (INSN_PAR_MACHI_A), IDX (INSN_WRITE_MACHI_A), FULL (machi_a) FAST (machi_a) },
174 { TYPE (INSN_MACLO_A), IDX (INSN_MACLO_A), IDX (INSN_PAR_MACLO_A), IDX (INSN_WRITE_MACLO_A), FULL (maclo_a) FAST (maclo_a) },
175 { TYPE (INSN_MACWHI_A), IDX (INSN_MACWHI_A), IDX (INSN_PAR_MACWHI_A), IDX (INSN_WRITE_MACWHI_A), FULL (macwhi_a) FAST (macwhi_a) },
176 { TYPE (INSN_MACWLO_A), IDX (INSN_MACWLO_A), IDX (INSN_PAR_MACWLO_A), IDX (INSN_WRITE_MACWLO_A), FULL (macwlo_a) FAST (macwlo_a) },
177 { TYPE (INSN_MUL), IDX (INSN_MUL), IDX (INSN_PAR_MUL), IDX (INSN_WRITE_MUL), FULL (mul) FAST (mul) },
178 { TYPE (INSN_MULHI_A), IDX (INSN_MULHI_A), IDX (INSN_PAR_MULHI_A), IDX (INSN_WRITE_MULHI_A), FULL (mulhi_a) FAST (mulhi_a) },
179 { TYPE (INSN_MULLO_A), IDX (INSN_MULLO_A), IDX (INSN_PAR_MULLO_A), IDX (INSN_WRITE_MULLO_A), FULL (mullo_a) FAST (mullo_a) },
180 { TYPE (INSN_MULWHI_A), IDX (INSN_MULWHI_A), IDX (INSN_PAR_MULWHI_A), IDX (INSN_WRITE_MULWHI_A), FULL (mulwhi_a) FAST (mulwhi_a) },
181 { TYPE (INSN_MULWLO_A), IDX (INSN_MULWLO_A), IDX (INSN_PAR_MULWLO_A), IDX (INSN_WRITE_MULWLO_A), FULL (mulwlo_a) FAST (mulwlo_a) },
182 { TYPE (INSN_MV), IDX (INSN_MV), IDX (INSN_PAR_MV), IDX (INSN_WRITE_MV), FULL (mv) FAST (mv) },
183 { TYPE (INSN_MVFACHI_A), IDX (INSN_MVFACHI_A), IDX (INSN_PAR_MVFACHI_A), IDX (INSN_WRITE_MVFACHI_A), FULL (mvfachi_a) FAST (mvfachi_a) },
184 { TYPE (INSN_MVFACLO_A), IDX (INSN_MVFACLO_A), IDX (INSN_PAR_MVFACLO_A), IDX (INSN_WRITE_MVFACLO_A), FULL (mvfaclo_a) FAST (mvfaclo_a) },
185 { TYPE (INSN_MVFACMI_A), IDX (INSN_MVFACMI_A), IDX (INSN_PAR_MVFACMI_A), IDX (INSN_WRITE_MVFACMI_A), FULL (mvfacmi_a) FAST (mvfacmi_a) },
186 { TYPE (INSN_MVFC), IDX (INSN_MVFC), IDX (INSN_PAR_MVFC), IDX (INSN_WRITE_MVFC), FULL (mvfc) FAST (mvfc) },
187 { TYPE (INSN_MVTACHI_A), IDX (INSN_MVTACHI_A), IDX (INSN_PAR_MVTACHI_A), IDX (INSN_WRITE_MVTACHI_A), FULL (mvtachi_a) FAST (mvtachi_a) },
188 { TYPE (INSN_MVTACLO_A), IDX (INSN_MVTACLO_A), IDX (INSN_PAR_MVTACLO_A), IDX (INSN_WRITE_MVTACLO_A), FULL (mvtaclo_a) FAST (mvtaclo_a) },
189 { TYPE (INSN_MVTC), IDX (INSN_MVTC), IDX (INSN_PAR_MVTC), IDX (INSN_WRITE_MVTC), FULL (mvtc) FAST (mvtc) },
190 { TYPE (INSN_NEG), IDX (INSN_NEG), IDX (INSN_PAR_NEG), IDX (INSN_WRITE_NEG), FULL (neg) FAST (neg) },
191 { TYPE (INSN_NOP), IDX (INSN_NOP), IDX (INSN_PAR_NOP), IDX (INSN_WRITE_NOP), FULL (nop) FAST (nop) },
192 { TYPE (INSN_NOT), IDX (INSN_NOT), IDX (INSN_PAR_NOT), IDX (INSN_WRITE_NOT), FULL (not) FAST (not) },
193 { TYPE (INSN_RAC_DSI), IDX (INSN_RAC_DSI), IDX (INSN_PAR_RAC_DSI), IDX (INSN_WRITE_RAC_DSI), FULL (rac_dsi) FAST (rac_dsi) },
194 { TYPE (INSN_RACH_DSI), IDX (INSN_RACH_DSI), IDX (INSN_PAR_RACH_DSI), IDX (INSN_WRITE_RACH_DSI), FULL (rach_dsi) FAST (rach_dsi) },
195 { TYPE (INSN_RTE), IDX (INSN_RTE), IDX (INSN_PAR_RTE), IDX (INSN_WRITE_RTE), FULL (rte) FAST (rte) },
196 { TYPE (INSN_SETH), IDX (INSN_SETH), NOPAR, NOPAR, FULL (seth) FAST (seth) },
197 { TYPE (INSN_SLL), IDX (INSN_SLL), IDX (INSN_PAR_SLL), IDX (INSN_WRITE_SLL), FULL (sll) FAST (sll) },
198 { TYPE (INSN_SLL3), IDX (INSN_SLL3), NOPAR, NOPAR, FULL (sll3) FAST (sll3) },
199 { TYPE (INSN_SLLI), IDX (INSN_SLLI), IDX (INSN_PAR_SLLI), IDX (INSN_WRITE_SLLI), FULL (slli) FAST (slli) },
200 { TYPE (INSN_SRA), IDX (INSN_SRA), IDX (INSN_PAR_SRA), IDX (INSN_WRITE_SRA), FULL (sra) FAST (sra) },
201 { TYPE (INSN_SRA3), IDX (INSN_SRA3), NOPAR, NOPAR, FULL (sra3) FAST (sra3) },
202 { TYPE (INSN_SRAI), IDX (INSN_SRAI), IDX (INSN_PAR_SRAI), IDX (INSN_WRITE_SRAI), FULL (srai) FAST (srai) },
203 { TYPE (INSN_SRL), IDX (INSN_SRL), IDX (INSN_PAR_SRL), IDX (INSN_WRITE_SRL), FULL (srl) FAST (srl) },
204 { TYPE (INSN_SRL3), IDX (INSN_SRL3), NOPAR, NOPAR, FULL (srl3) FAST (srl3) },
205 { TYPE (INSN_SRLI), IDX (INSN_SRLI), IDX (INSN_PAR_SRLI), IDX (INSN_WRITE_SRLI), FULL (srli) FAST (srli) },
206 { TYPE (INSN_ST), IDX (INSN_ST), IDX (INSN_PAR_ST), IDX (INSN_WRITE_ST), FULL (st) FAST (st) },
207 { TYPE (INSN_ST_D), IDX (INSN_ST_D), NOPAR, NOPAR, FULL (st_d) FAST (st_d) },
208 { TYPE (INSN_STB), IDX (INSN_STB), IDX (INSN_PAR_STB), IDX (INSN_WRITE_STB), FULL (stb) FAST (stb) },
209 { TYPE (INSN_STB_D), IDX (INSN_STB_D), NOPAR, NOPAR, FULL (stb_d) FAST (stb_d) },
210 { TYPE (INSN_STH), IDX (INSN_STH), IDX (INSN_PAR_STH), IDX (INSN_WRITE_STH), FULL (sth) FAST (sth) },
211 { TYPE (INSN_STH_D), IDX (INSN_STH_D), NOPAR, NOPAR, FULL (sth_d) FAST (sth_d) },
212 { TYPE (INSN_ST_PLUS), IDX (INSN_ST_PLUS), IDX (INSN_PAR_ST_PLUS), IDX (INSN_WRITE_ST_PLUS), FULL (st_plus) FAST (st_plus) },
213 { TYPE (INSN_ST_MINUS), IDX (INSN_ST_MINUS), IDX (INSN_PAR_ST_MINUS), IDX (INSN_WRITE_ST_MINUS), FULL (st_minus) FAST (st_minus) },
214 { TYPE (INSN_SUB), IDX (INSN_SUB), IDX (INSN_PAR_SUB), IDX (INSN_WRITE_SUB), FULL (sub) FAST (sub) },
215 { TYPE (INSN_SUBV), IDX (INSN_SUBV), IDX (INSN_PAR_SUBV), IDX (INSN_WRITE_SUBV), FULL (subv) FAST (subv) },
216 { TYPE (INSN_SUBX), IDX (INSN_SUBX), IDX (INSN_PAR_SUBX), IDX (INSN_WRITE_SUBX), FULL (subx) FAST (subx) },
217 { TYPE (INSN_TRAP), IDX (INSN_TRAP), IDX (INSN_PAR_TRAP), IDX (INSN_WRITE_TRAP), FULL (trap) FAST (trap) },
218 { TYPE (INSN_UNLOCK), IDX (INSN_UNLOCK), IDX (INSN_PAR_UNLOCK), IDX (INSN_WRITE_UNLOCK), FULL (unlock) FAST (unlock) },
219 { TYPE (INSN_SATB), IDX (INSN_SATB), NOPAR, NOPAR, FULL (satb) FAST (satb) },
220 { TYPE (INSN_SATH), IDX (INSN_SATH), NOPAR, NOPAR, FULL (sath) FAST (sath) },
221 { TYPE (INSN_SAT), IDX (INSN_SAT), NOPAR, NOPAR, FULL (sat) FAST (sat) },
222 { TYPE (INSN_PCMPBZ), IDX (INSN_PCMPBZ), IDX (INSN_PAR_PCMPBZ), IDX (INSN_WRITE_PCMPBZ), FULL (pcmpbz) FAST (pcmpbz) },
223 { TYPE (INSN_SADD), IDX (INSN_SADD), IDX (INSN_PAR_SADD), IDX (INSN_WRITE_SADD), FULL (sadd) FAST (sadd) },
224 { TYPE (INSN_MACWU1), IDX (INSN_MACWU1), IDX (INSN_PAR_MACWU1), IDX (INSN_WRITE_MACWU1), FULL (macwu1) FAST (macwu1) },
225 { TYPE (INSN_MSBLO), IDX (INSN_MSBLO), IDX (INSN_PAR_MSBLO), IDX (INSN_WRITE_MSBLO), FULL (msblo) FAST (msblo) },
226 { TYPE (INSN_MULWU1), IDX (INSN_MULWU1), IDX (INSN_PAR_MULWU1), IDX (INSN_WRITE_MULWU1), FULL (mulwu1) FAST (mulwu1) },
227 { TYPE (INSN_MACLH1), IDX (INSN_MACLH1), IDX (INSN_PAR_MACLH1), IDX (INSN_WRITE_MACLH1), FULL (maclh1) FAST (maclh1) },
228 { TYPE (INSN_SC), IDX (INSN_SC), IDX (INSN_PAR_SC), IDX (INSN_WRITE_SC), FULL (sc) FAST (sc) },
229 { TYPE (INSN_SNC), IDX (INSN_SNC), IDX (INSN_PAR_SNC), IDX (INSN_WRITE_SNC), FULL (snc) FAST (snc) },
230 };
231
232 static const struct insn_sem m32rxf_insn_sem_invalid =
233 {
234 VIRTUAL_INSN_X_INVALID, IDX (INSN_X_INVALID), IDX (INSN_X_INVALID), 0 /*unused*/, FULL (x_invalid) FAST (x_invalid)
235 };
236
237 #undef IDX
238 #undef TYPE
239
240 /* Initialize an IDESC from the compile-time computable parts. */
241
242 static INLINE void
243 init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
244 {
245 const CGEN_INSN *opcode_table = m32r_cgen_insn_table_entries;
246
247 id->num = t->index;
248 if ((int) t->type <= 0)
249 id->opcode = & cgen_virtual_opcode_table[- t->type];
250 else
251 id->opcode = & opcode_table[t->type];
252 #if ! WITH_SEM_SWITCH_FULL
253 id->sem_full = t->sem_full;
254 #endif
255 #if WITH_FAST && ! WITH_SEM_SWITCH_FAST
256 id->sem_fast = t->sem_fast;
257 #endif
258 #if WITH_PROFILE_MODEL_P
259 id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
260 {
261 SIM_DESC sd = CPU_STATE (cpu);
262 SIM_ASSERT (t->index == id->timing->num);
263 }
264 #endif
265 }
266
267 /* Initialize the instruction descriptor table. */
268
269 void
270 m32rxf_init_idesc_table (SIM_CPU *cpu)
271 {
272 IDESC *id,*tabend;
273 const struct insn_sem *t,*tend;
274 int tabsize = M32RXF_INSN_MAX;
275 IDESC *table = m32rxf_insn_data;
276
277 memset (table, 0, tabsize * sizeof (IDESC));
278
279 /* First set all entries to the `invalid insn'. */
280 t = & m32rxf_insn_sem_invalid;
281 for (id = table, tabend = table + tabsize; id < tabend; ++id)
282 init_idesc (cpu, id, t);
283
284 /* Now fill in the values for the chosen cpu. */
285 for (t = m32rxf_insn_sem, tend = t + sizeof (m32rxf_insn_sem) / sizeof (*t);
286 t != tend; ++t)
287 {
288 init_idesc (cpu, & table[t->index], t);
289 if (t->par_index != NOPAR)
290 {
291 init_idesc (cpu, &table[t->par_index], t);
292 table[t->index].par_idesc = &table[t->par_index];
293 }
294 if (t->par_index != NOPAR)
295 {
296 init_idesc (cpu, &table[t->write_index], t);
297 table[t->par_index].par_idesc = &table[t->write_index];
298 }
299 }
300
301 /* Link the IDESC table into the cpu. */
302 CPU_IDESC (cpu) = table;
303 }
304
305 /* Enum declaration for all instruction formats. */
306 typedef enum ifmt {
307 FMT_ADD, FMT_ADD3, FMT_AND3, FMT_OR3
308 , FMT_ADDI, FMT_ADDV, FMT_ADDV3, FMT_ADDX
309 , FMT_BC8, FMT_BC24, FMT_BEQ, FMT_BEQZ
310 , FMT_BL8, FMT_BL24, FMT_BCL8, FMT_BCL24
311 , FMT_BRA8, FMT_BRA24, FMT_CMP, FMT_CMPI
312 , FMT_CMPZ, FMT_DIV, FMT_JC, FMT_JL
313 , FMT_JMP, FMT_LD, FMT_LD_D, FMT_LDB
314 , FMT_LDB_D, FMT_LDH, FMT_LDH_D, FMT_LD_PLUS
315 , FMT_LD24, FMT_LDI8, FMT_LDI16, FMT_LOCK
316 , FMT_MACHI_A, FMT_MULHI_A, FMT_MV, FMT_MVFACHI_A
317 , FMT_MVFC, FMT_MVTACHI_A, FMT_MVTC, FMT_NOP
318 , FMT_RAC_DSI, FMT_RTE, FMT_SETH, FMT_SLL3
319 , FMT_SLLI, FMT_ST, FMT_ST_D, FMT_STB
320 , FMT_STB_D, FMT_STH, FMT_STH_D, FMT_ST_PLUS
321 , FMT_TRAP, FMT_UNLOCK, FMT_SATB, FMT_SAT
322 , FMT_SADD, FMT_MACWU1, FMT_MSBLO, FMT_MULWU1
323 , FMT_SC
324 } IFMT;
325
326 /* The decoder uses this to record insns and direct extraction handling. */
327
328 typedef struct {
329 const IDESC *idesc;
330 #ifdef __GNUC__
331 void *ifmt;
332 #else
333 enum ifmt ifmt;
334 #endif
335 } DECODE_DESC;
336
337 /* Macro to go from decode phase to extraction phase. */
338
339 #ifdef __GNUC__
340 #define GOTO_EXTRACT(id) goto *(id)->ifmt
341 #else
342 #define GOTO_EXTRACT(id) goto extract
343 #endif
344
345 /* The decoder needs a slightly different computed goto switch control. */
346 #ifdef __GNUC__
347 #define DECODE_SWITCH(N, X) goto *labels_##N[X];
348 #else
349 #define DECODE_SWITCH(N, X) switch (X)
350 #endif
351
352 /* Given an instruction, return a pointer to its IDESC entry. */
353
354 const IDESC *
355 m32rxf_decode (SIM_CPU *current_cpu, PCADDR pc,
356 CGEN_INSN_INT base_insn, CGEN_INSN_INT entire_insn,
357 ARGBUF *abuf)
358 {
359 /* Result of decoder, used by extractor. */
360 const DECODE_DESC *idecode;
361
362 /* First decode the instruction. */
363
364 {
365 #define I(insn) & m32rxf_insn_data[CONCAT2 (M32RXF_,insn)]
366 #ifdef __GNUC__
367 #define E(fmt) && case_ex_##fmt
368 #else
369 #define E(fmt) fmt
370 #endif
371 CGEN_INSN_INT insn = base_insn;
372 static const DECODE_DESC idecode_invalid = { I (INSN_X_INVALID), E (FMT_EMPTY) };
373 {
374 #ifdef __GNUC__
375 static const void *labels_0[256] = {
376 && default_0, && default_0, && default_0, && default_0,
377 && default_0, && default_0, && default_0, && case_0_7,
378 && default_0, && default_0, && default_0, && default_0,
379 && default_0, && default_0, && default_0, && default_0,
380 && default_0, && default_0, && default_0, && default_0,
381 && default_0, && default_0, && default_0, && default_0,
382 && default_0, && default_0, && default_0, && default_0,
383 && case_0_28, && default_0, && default_0, && default_0,
384 && default_0, && default_0, && default_0, && default_0,
385 && default_0, && default_0, && default_0, && default_0,
386 && default_0, && default_0, && default_0, && default_0,
387 && default_0, && default_0, && default_0, && default_0,
388 && default_0, && default_0, && default_0, && default_0,
389 && default_0, && default_0, && default_0, && default_0,
390 && default_0, && default_0, && default_0, && default_0,
391 && default_0, && default_0, && default_0, && default_0,
392 && default_0, && default_0, && default_0, && default_0,
393 && default_0, && default_0, && default_0, && default_0,
394 && default_0, && default_0, && default_0, && default_0,
395 && default_0, && default_0, && default_0, && default_0,
396 && default_0, && default_0, && default_0, && default_0,
397 && default_0, && default_0, && default_0, && case_0_87,
398 && default_0, && default_0, && default_0, && default_0,
399 && default_0, && default_0, && default_0, && case_0_95,
400 && default_0, && default_0, && default_0, && default_0,
401 && default_0, && default_0, && default_0, && default_0,
402 && default_0, && default_0, && default_0, && default_0,
403 && default_0, && default_0, && default_0, && default_0,
404 && case_0_112, && case_0_113, && case_0_114, && case_0_115,
405 && case_0_116, && case_0_117, && case_0_118, && case_0_119,
406 && case_0_120, && case_0_121, && case_0_122, && case_0_123,
407 && case_0_124, && case_0_125, && case_0_126, && case_0_127,
408 && default_0, && default_0, && default_0, && default_0,
409 && default_0, && default_0, && case_0_134, && default_0,
410 && default_0, && default_0, && default_0, && default_0,
411 && default_0, && default_0, && default_0, && default_0,
412 && case_0_144, && default_0, && default_0, && default_0,
413 && default_0, && default_0, && default_0, && default_0,
414 && default_0, && default_0, && default_0, && default_0,
415 && default_0, && default_0, && default_0, && default_0,
416 && default_0, && default_0, && default_0, && default_0,
417 && default_0, && default_0, && default_0, && default_0,
418 && default_0, && default_0, && default_0, && default_0,
419 && default_0, && default_0, && default_0, && default_0,
420 && default_0, && default_0, && default_0, && default_0,
421 && default_0, && default_0, && default_0, && default_0,
422 && default_0, && default_0, && default_0, && default_0,
423 && default_0, && default_0, && default_0, && default_0,
424 && default_0, && default_0, && default_0, && default_0,
425 && default_0, && default_0, && default_0, && default_0,
426 && default_0, && default_0, && default_0, && default_0,
427 && default_0, && default_0, && default_0, && default_0,
428 && default_0, && default_0, && default_0, && default_0,
429 && default_0, && default_0, && default_0, && default_0,
430 && default_0, && default_0, && default_0, && default_0,
431 && default_0, && default_0, && default_0, && default_0,
432 && default_0, && default_0, && default_0, && default_0,
433 && default_0, && default_0, && default_0, && default_0,
434 && default_0, && default_0, && default_0, && default_0,
435 && default_0, && default_0, && default_0, && default_0,
436 && case_0_240, && case_0_241, && case_0_242, && case_0_243,
437 && case_0_244, && case_0_245, && case_0_246, && case_0_247,
438 && case_0_248, && case_0_249, && case_0_250, && case_0_251,
439 && case_0_252, && case_0_253, && case_0_254, && case_0_255,
440 };
441 #endif
442 static const DECODE_DESC insns[256] = {
443 { I (INSN_SUBV), E (FMT_ADDV) }, { I (INSN_SUBX), E (FMT_ADDX) },
444 { I (INSN_SUB), E (FMT_ADD) }, { I (INSN_NEG), E (FMT_MV) },
445 { I (INSN_CMP), E (FMT_CMP) }, { I (INSN_CMPU), E (FMT_CMP) },
446 { I (INSN_CMPEQ), E (FMT_CMP) }, { 0 },
447 { I (INSN_ADDV), E (FMT_ADDV) }, { I (INSN_ADDX), E (FMT_ADDX) },
448 { I (INSN_ADD), E (FMT_ADD) }, { I (INSN_NOT), E (FMT_MV) },
449 { I (INSN_AND), E (FMT_ADD) }, { I (INSN_XOR), E (FMT_ADD) },
450 { I (INSN_OR), E (FMT_ADD) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
451 { I (INSN_SRL), E (FMT_ADD) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
452 { I (INSN_SRA), E (FMT_ADD) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
453 { I (INSN_SLL), E (FMT_ADD) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
454 { I (INSN_MUL), E (FMT_ADD) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
455 { I (INSN_MV), E (FMT_MV) }, { I (INSN_MVFC), E (FMT_MVFC) },
456 { I (INSN_MVTC), E (FMT_MVTC) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
457 { 0 }, { I (INSN_RTE), E (FMT_RTE) },
458 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_TRAP), E (FMT_TRAP) },
459 { I (INSN_STB), E (FMT_STB) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
460 { I (INSN_STH), E (FMT_STH) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
461 { I (INSN_ST), E (FMT_ST) }, { I (INSN_UNLOCK), E (FMT_UNLOCK) },
462 { I (INSN_ST_PLUS), E (FMT_ST_PLUS) }, { I (INSN_ST_MINUS), E (FMT_ST_PLUS) },
463 { I (INSN_LDB), E (FMT_LDB) }, { I (INSN_LDUB), E (FMT_LDB) },
464 { I (INSN_LDH), E (FMT_LDH) }, { I (INSN_LDUH), E (FMT_LDH) },
465 { I (INSN_LD), E (FMT_LD) }, { I (INSN_LOCK), E (FMT_LOCK) },
466 { I (INSN_LD_PLUS), E (FMT_LD_PLUS) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
467 { I (INSN_MULHI_A), E (FMT_MULHI_A) }, { I (INSN_MULLO_A), E (FMT_MULHI_A) },
468 { I (INSN_MULWHI_A), E (FMT_MULHI_A) }, { I (INSN_MULWLO_A), E (FMT_MULHI_A) },
469 { I (INSN_MACHI_A), E (FMT_MACHI_A) }, { I (INSN_MACLO_A), E (FMT_MACHI_A) },
470 { I (INSN_MACWHI_A), E (FMT_MACHI_A) }, { I (INSN_MACWLO_A), E (FMT_MACHI_A) },
471 { I (INSN_MULHI_A), E (FMT_MULHI_A) }, { I (INSN_MULLO_A), E (FMT_MULHI_A) },
472 { I (INSN_MULWHI_A), E (FMT_MULHI_A) }, { I (INSN_MULWLO_A), E (FMT_MULHI_A) },
473 { I (INSN_MACHI_A), E (FMT_MACHI_A) }, { I (INSN_MACLO_A), E (FMT_MACHI_A) },
474 { I (INSN_MACWHI_A), E (FMT_MACHI_A) }, { I (INSN_MACWLO_A), E (FMT_MACHI_A) },
475 { I (INSN_ADDI), E (FMT_ADDI) }, { I (INSN_ADDI), E (FMT_ADDI) },
476 { I (INSN_ADDI), E (FMT_ADDI) }, { I (INSN_ADDI), E (FMT_ADDI) },
477 { I (INSN_ADDI), E (FMT_ADDI) }, { I (INSN_ADDI), E (FMT_ADDI) },
478 { I (INSN_ADDI), E (FMT_ADDI) }, { I (INSN_ADDI), E (FMT_ADDI) },
479 { I (INSN_ADDI), E (FMT_ADDI) }, { I (INSN_ADDI), E (FMT_ADDI) },
480 { I (INSN_ADDI), E (FMT_ADDI) }, { I (INSN_ADDI), E (FMT_ADDI) },
481 { I (INSN_ADDI), E (FMT_ADDI) }, { I (INSN_ADDI), E (FMT_ADDI) },
482 { I (INSN_ADDI), E (FMT_ADDI) }, { I (INSN_ADDI), E (FMT_ADDI) },
483 { I (INSN_SRLI), E (FMT_SLLI) }, { I (INSN_SRLI), E (FMT_SLLI) },
484 { I (INSN_SRAI), E (FMT_SLLI) }, { I (INSN_SRAI), E (FMT_SLLI) },
485 { I (INSN_SLLI), E (FMT_SLLI) }, { I (INSN_SLLI), E (FMT_SLLI) },
486 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { 0 },
487 { I (INSN_RACH_DSI), E (FMT_RAC_DSI) }, { I (INSN_RAC_DSI), E (FMT_RAC_DSI) },
488 { I (INSN_MULWU1), E (FMT_MULWU1) }, { I (INSN_MACWU1), E (FMT_MACWU1) },
489 { I (INSN_MACLH1), E (FMT_MACWU1) }, { I (INSN_MSBLO), E (FMT_MSBLO) },
490 { I (INSN_SADD), E (FMT_SADD) }, { 0 },
491 { I (INSN_LDI8), E (FMT_LDI8) }, { I (INSN_LDI8), E (FMT_LDI8) },
492 { I (INSN_LDI8), E (FMT_LDI8) }, { I (INSN_LDI8), E (FMT_LDI8) },
493 { I (INSN_LDI8), E (FMT_LDI8) }, { I (INSN_LDI8), E (FMT_LDI8) },
494 { I (INSN_LDI8), E (FMT_LDI8) }, { I (INSN_LDI8), E (FMT_LDI8) },
495 { I (INSN_LDI8), E (FMT_LDI8) }, { I (INSN_LDI8), E (FMT_LDI8) },
496 { I (INSN_LDI8), E (FMT_LDI8) }, { I (INSN_LDI8), E (FMT_LDI8) },
497 { I (INSN_LDI8), E (FMT_LDI8) }, { I (INSN_LDI8), E (FMT_LDI8) },
498 { I (INSN_LDI8), E (FMT_LDI8) }, { I (INSN_LDI8), E (FMT_LDI8) },
499 { 0 }, { 0 },
500 { 0 }, { 0 },
501 { 0 }, { 0 },
502 { 0 }, { 0 },
503 { 0 }, { 0 },
504 { 0 }, { 0 },
505 { 0 }, { 0 },
506 { 0 }, { 0 },
507 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
508 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
509 { I (INSN_CMPI), E (FMT_CMPI) }, { I (INSN_CMPUI), E (FMT_CMPI) },
510 { 0 }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
511 { I (INSN_ADDV3), E (FMT_ADDV3) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
512 { I (INSN_ADD3), E (FMT_ADD3) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
513 { I (INSN_AND3), E (FMT_AND3) }, { I (INSN_XOR3), E (FMT_AND3) },
514 { I (INSN_OR3), E (FMT_OR3) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
515 { 0 }, { I (INSN_DIVU), E (FMT_DIV) },
516 { I (INSN_REM), E (FMT_DIV) }, { I (INSN_REMU), E (FMT_DIV) },
517 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
518 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
519 { I (INSN_SRL3), E (FMT_SLL3) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
520 { I (INSN_SRA3), E (FMT_SLL3) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
521 { I (INSN_SLL3), E (FMT_SLL3) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
522 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_LDI16), E (FMT_LDI16) },
523 { I (INSN_STB_D), E (FMT_STB_D) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
524 { I (INSN_STH_D), E (FMT_STH_D) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
525 { I (INSN_ST_D), E (FMT_ST_D) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
526 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
527 { I (INSN_LDB_D), E (FMT_LDB_D) }, { I (INSN_LDUB_D), E (FMT_LDB_D) },
528 { I (INSN_LDH_D), E (FMT_LDH_D) }, { I (INSN_LDUH_D), E (FMT_LDH_D) },
529 { I (INSN_LD_D), E (FMT_LD_D) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
530 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
531 { I (INSN_BEQ), E (FMT_BEQ) }, { I (INSN_BNE), E (FMT_BEQ) },
532 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
533 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
534 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
535 { I (INSN_BEQZ), E (FMT_BEQZ) }, { I (INSN_BNEZ), E (FMT_BEQZ) },
536 { I (INSN_BLTZ), E (FMT_BEQZ) }, { I (INSN_BGEZ), E (FMT_BEQZ) },
537 { I (INSN_BLEZ), E (FMT_BEQZ) }, { I (INSN_BGTZ), E (FMT_BEQZ) },
538 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
539 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
540 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
541 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
542 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
543 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
544 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
545 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
546 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
547 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
548 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
549 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
550 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
551 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
552 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
553 { I (INSN_SETH), E (FMT_SETH) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
554 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
555 { I (INSN_LD24), E (FMT_LD24) }, { I (INSN_LD24), E (FMT_LD24) },
556 { I (INSN_LD24), E (FMT_LD24) }, { I (INSN_LD24), E (FMT_LD24) },
557 { I (INSN_LD24), E (FMT_LD24) }, { I (INSN_LD24), E (FMT_LD24) },
558 { I (INSN_LD24), E (FMT_LD24) }, { I (INSN_LD24), E (FMT_LD24) },
559 { I (INSN_LD24), E (FMT_LD24) }, { I (INSN_LD24), E (FMT_LD24) },
560 { I (INSN_LD24), E (FMT_LD24) }, { I (INSN_LD24), E (FMT_LD24) },
561 { I (INSN_LD24), E (FMT_LD24) }, { I (INSN_LD24), E (FMT_LD24) },
562 { I (INSN_LD24), E (FMT_LD24) }, { I (INSN_LD24), E (FMT_LD24) },
563 { 0 }, { 0 },
564 { 0 }, { 0 },
565 { 0 }, { 0 },
566 { 0 }, { 0 },
567 { 0 }, { 0 },
568 { 0 }, { 0 },
569 { 0 }, { 0 },
570 { 0 }, { 0 },
571 };
572 unsigned int val;
573 val = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0)));
574 DECODE_SWITCH (0, val)
575 {
576 CASE (0, 7) :
577 {
578 static const DECODE_DESC insns[16] = {
579 { I (INSN_CMPZ), E (FMT_CMPZ) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
580 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_PCMPBZ), E (FMT_CMPZ) },
581 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
582 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
583 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
584 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
585 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
586 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
587 };
588 unsigned int val = (((insn >> 8) & (15 << 0)));
589 idecode = &insns[val];
590 GOTO_EXTRACT (idecode);
591 }
592 CASE (0, 28) :
593 {
594 static const DECODE_DESC insns[16] = {
595 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
596 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
597 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
598 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
599 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
600 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
601 { I (INSN_JC), E (FMT_JC) }, { I (INSN_JNC), E (FMT_JC) },
602 { I (INSN_JL), E (FMT_JL) }, { I (INSN_JMP), E (FMT_JMP) },
603 };
604 unsigned int val = (((insn >> 8) & (15 << 0)));
605 idecode = &insns[val];
606 GOTO_EXTRACT (idecode);
607 }
608 CASE (0, 87) :
609 {
610 static const DECODE_DESC insns[4] = {
611 { I (INSN_MVTACHI_A), E (FMT_MVTACHI_A) }, { I (INSN_MVTACLO_A), E (FMT_MVTACHI_A) },
612 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
613 };
614 unsigned int val = (((insn >> 0) & (3 << 0)));
615 idecode = &insns[val];
616 GOTO_EXTRACT (idecode);
617 }
618 CASE (0, 95) :
619 {
620 static const DECODE_DESC insns[4] = {
621 { I (INSN_MVFACHI_A), E (FMT_MVFACHI_A) }, { I (INSN_MVFACLO_A), E (FMT_MVFACHI_A) },
622 { I (INSN_MVFACMI_A), E (FMT_MVFACHI_A) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
623 };
624 unsigned int val = (((insn >> 0) & (3 << 0)));
625 idecode = &insns[val];
626 GOTO_EXTRACT (idecode);
627 }
628 CASE (0, 112) :
629 {
630 static const DECODE_DESC insns[16] = {
631 { I (INSN_NOP), E (FMT_NOP) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
632 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
633 { I (INSN_SC), E (FMT_SC) }, { I (INSN_SNC), E (FMT_SC) },
634 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
635 { I (INSN_BCL8), E (FMT_BCL8) }, { I (INSN_BNCL8), E (FMT_BCL8) },
636 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
637 { I (INSN_BC8), E (FMT_BC8) }, { I (INSN_BNC8), E (FMT_BC8) },
638 { I (INSN_BL8), E (FMT_BL8) }, { I (INSN_BRA8), E (FMT_BRA8) },
639 };
640 unsigned int val = (((insn >> 8) & (15 << 0)));
641 idecode = &insns[val];
642 GOTO_EXTRACT (idecode);
643 }
644 CASE (0, 113) : /* fall through */
645 CASE (0, 114) : /* fall through */
646 CASE (0, 115) : /* fall through */
647 CASE (0, 116) : /* fall through */
648 CASE (0, 117) : /* fall through */
649 CASE (0, 118) : /* fall through */
650 CASE (0, 119) : /* fall through */
651 CASE (0, 120) : /* fall through */
652 CASE (0, 121) : /* fall through */
653 CASE (0, 122) : /* fall through */
654 CASE (0, 123) : /* fall through */
655 CASE (0, 124) : /* fall through */
656 CASE (0, 125) : /* fall through */
657 CASE (0, 126) : /* fall through */
658 CASE (0, 127) :
659 {
660 static const DECODE_DESC insns[16] = {
661 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
662 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
663 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
664 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
665 { I (INSN_BCL8), E (FMT_BCL8) }, { I (INSN_BNCL8), E (FMT_BCL8) },
666 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
667 { I (INSN_BC8), E (FMT_BC8) }, { I (INSN_BNC8), E (FMT_BC8) },
668 { I (INSN_BL8), E (FMT_BL8) }, { I (INSN_BRA8), E (FMT_BRA8) },
669 };
670 unsigned int val = (((insn >> 8) & (15 << 0)));
671 idecode = &insns[val];
672 GOTO_EXTRACT (idecode);
673 }
674 CASE (0, 134) :
675 {
676 #ifdef __GNUC__
677 static const void *labels_0_134[16] = {
678 && case_0_134_0, && default_0_134, && default_0_134, && default_0_134,
679 && default_0_134, && default_0_134, && default_0_134, && default_0_134,
680 && default_0_134, && default_0_134, && default_0_134, && default_0_134,
681 && default_0_134, && default_0_134, && default_0_134, && default_0_134,
682 };
683 #endif
684 static const DECODE_DESC insns[16] = {
685 { 0 }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
686 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
687 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
688 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
689 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
690 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
691 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
692 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
693 };
694 unsigned int val;
695 /* Must fetch more bits. */
696 insn = GETIMEMUHI (current_cpu, pc + 2);
697 val = (((insn >> 12) & (15 << 0)));
698 DECODE_SWITCH (0_134, val)
699 {
700 CASE (0_134, 0) :
701 {
702 static const DECODE_DESC insns[16] = {
703 { I (INSN_SAT), E (FMT_SAT) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
704 { I (INSN_SATH), E (FMT_SATB) }, { I (INSN_SATB), E (FMT_SATB) },
705 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
706 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
707 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
708 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
709 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
710 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
711 };
712 unsigned int val = (((insn >> 8) & (15 << 0)));
713 idecode = &insns[val];
714 GOTO_EXTRACT (idecode);
715 }
716 DEFAULT (0_134) :
717 idecode = &insns[val];
718 GOTO_EXTRACT (idecode);
719 }
720 ENDSWITCH (0_134)
721 }
722 CASE (0, 144) :
723 {
724 #ifdef __GNUC__
725 static const void *labels_0_144[16] = {
726 && case_0_144_0, && default_0_144, && default_0_144, && default_0_144,
727 && default_0_144, && default_0_144, && default_0_144, && default_0_144,
728 && default_0_144, && default_0_144, && default_0_144, && default_0_144,
729 && default_0_144, && default_0_144, && default_0_144, && default_0_144,
730 };
731 #endif
732 static const DECODE_DESC insns[16] = {
733 { 0 }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
734 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
735 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
736 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
737 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
738 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
739 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
740 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
741 };
742 unsigned int val;
743 /* Must fetch more bits. */
744 insn = GETIMEMUHI (current_cpu, pc + 2);
745 val = (((insn >> 12) & (15 << 0)));
746 DECODE_SWITCH (0_144, val)
747 {
748 CASE (0_144, 0) :
749 {
750 #ifdef __GNUC__
751 static const void *labels_0_144_0[16] = {
752 && case_0_144_0_0, && default_0_144_0, && default_0_144_0, && default_0_144_0,
753 && default_0_144_0, && default_0_144_0, && default_0_144_0, && default_0_144_0,
754 && default_0_144_0, && default_0_144_0, && default_0_144_0, && default_0_144_0,
755 && default_0_144_0, && default_0_144_0, && default_0_144_0, && default_0_144_0,
756 };
757 #endif
758 static const DECODE_DESC insns[16] = {
759 { 0 }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
760 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
761 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
762 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
763 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
764 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
765 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
766 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
767 };
768 unsigned int val;
769 val = (((insn >> 8) & (15 << 0)));
770 DECODE_SWITCH (0_144_0, val)
771 {
772 CASE (0_144_0, 0) :
773 {
774 static const DECODE_DESC insns[16] = {
775 { I (INSN_DIV), E (FMT_DIV) }, { I (INSN_DIVH), E (FMT_DIV) },
776 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
777 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
778 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
779 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
780 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
781 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
782 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
783 };
784 unsigned int val = (((insn >> 4) & (15 << 0)));
785 idecode = &insns[val];
786 GOTO_EXTRACT (idecode);
787 }
788 DEFAULT (0_144_0) :
789 idecode = &insns[val];
790 GOTO_EXTRACT (idecode);
791 }
792 ENDSWITCH (0_144_0)
793 }
794 DEFAULT (0_144) :
795 idecode = &insns[val];
796 GOTO_EXTRACT (idecode);
797 }
798 ENDSWITCH (0_144)
799 }
800 CASE (0, 240) : /* fall through */
801 CASE (0, 241) : /* fall through */
802 CASE (0, 242) : /* fall through */
803 CASE (0, 243) : /* fall through */
804 CASE (0, 244) : /* fall through */
805 CASE (0, 245) : /* fall through */
806 CASE (0, 246) : /* fall through */
807 CASE (0, 247) : /* fall through */
808 CASE (0, 248) : /* fall through */
809 CASE (0, 249) : /* fall through */
810 CASE (0, 250) : /* fall through */
811 CASE (0, 251) : /* fall through */
812 CASE (0, 252) : /* fall through */
813 CASE (0, 253) : /* fall through */
814 CASE (0, 254) : /* fall through */
815 CASE (0, 255) :
816 {
817 static const DECODE_DESC insns[16] = {
818 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
819 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
820 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
821 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
822 { I (INSN_BCL24), E (FMT_BCL24) }, { I (INSN_BNCL24), E (FMT_BCL24) },
823 { I (INSN_X_INVALID), E (FMT_EMPTY) }, { I (INSN_X_INVALID), E (FMT_EMPTY) },
824 { I (INSN_BC24), E (FMT_BC24) }, { I (INSN_BNC24), E (FMT_BC24) },
825 { I (INSN_BL24), E (FMT_BL24) }, { I (INSN_BRA24), E (FMT_BRA24) },
826 };
827 unsigned int val = (((insn >> 8) & (15 << 0)));
828 idecode = &insns[val];
829 GOTO_EXTRACT (idecode);
830 }
831 DEFAULT (0) :
832 idecode = &insns[val];
833 GOTO_EXTRACT (idecode);
834 }
835 ENDSWITCH (0)
836 }
837 #undef I
838 #undef E
839 }
840
841 /* The instruction has been decoded, now extract the fields. */
842
843 extract:
844 {
845 #ifndef __GNUC__
846 switch (idecode->ifmt)
847 #endif
848 {
849
850 CASE (ex, FMT_ADD) :
851 {
852 CGEN_INSN_INT insn = entire_insn;
853 #define FLD(f) abuf->fields.fmt_add.f
854 EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
855
856 EXTRACT_FMT_ADD_CODE
857
858 /* Record the fields for the semantic handler. */
859 FLD (i_dr) = & CPU (h_gr)[f_r1];
860 FLD (i_sr) = & CPU (h_gr)[f_r2];
861 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_add", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
862
863 #if WITH_PROFILE_MODEL_P
864 /* Record the fields for profiling. */
865 if (PROFILE_MODEL_P (current_cpu))
866 {
867 FLD (in_dr) = f_r1;
868 FLD (in_sr) = f_r2;
869 FLD (out_dr) = f_r1;
870 }
871 #endif
872 #undef FLD
873 BREAK (ex);
874 }
875
876 CASE (ex, FMT_ADD3) :
877 {
878 CGEN_INSN_INT insn = entire_insn;
879 #define FLD(f) abuf->fields.fmt_add3.f
880 EXTRACT_FMT_ADD3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
881
882 EXTRACT_FMT_ADD3_CODE
883
884 /* Record the fields for the semantic handler. */
885 FLD (i_sr) = & CPU (h_gr)[f_r2];
886 FLD (f_simm16) = f_simm16;
887 FLD (i_dr) = & CPU (h_gr)[f_r1];
888 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_add3", "sr 0x%x", 'x', f_r2, "slo16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
889
890 #if WITH_PROFILE_MODEL_P
891 /* Record the fields for profiling. */
892 if (PROFILE_MODEL_P (current_cpu))
893 {
894 FLD (in_sr) = f_r2;
895 FLD (out_dr) = f_r1;
896 }
897 #endif
898 #undef FLD
899 BREAK (ex);
900 }
901
902 CASE (ex, FMT_AND3) :
903 {
904 CGEN_INSN_INT insn = entire_insn;
905 #define FLD(f) abuf->fields.fmt_and3.f
906 EXTRACT_FMT_AND3_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
907
908 EXTRACT_FMT_AND3_CODE
909
910 /* Record the fields for the semantic handler. */
911 FLD (i_sr) = & CPU (h_gr)[f_r2];
912 FLD (f_uimm16) = f_uimm16;
913 FLD (i_dr) = & CPU (h_gr)[f_r1];
914 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_and3", "sr 0x%x", 'x', f_r2, "uimm16 0x%x", 'x', f_uimm16, "dr 0x%x", 'x', f_r1, (char *) 0));
915
916 #if WITH_PROFILE_MODEL_P
917 /* Record the fields for profiling. */
918 if (PROFILE_MODEL_P (current_cpu))
919 {
920 FLD (in_sr) = f_r2;
921 FLD (out_dr) = f_r1;
922 }
923 #endif
924 #undef FLD
925 BREAK (ex);
926 }
927
928 CASE (ex, FMT_OR3) :
929 {
930 CGEN_INSN_INT insn = entire_insn;
931 #define FLD(f) abuf->fields.fmt_or3.f
932 EXTRACT_FMT_OR3_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
933
934 EXTRACT_FMT_OR3_CODE
935
936 /* Record the fields for the semantic handler. */
937 FLD (i_sr) = & CPU (h_gr)[f_r2];
938 FLD (f_uimm16) = f_uimm16;
939 FLD (i_dr) = & CPU (h_gr)[f_r1];
940 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_or3", "sr 0x%x", 'x', f_r2, "ulo16 0x%x", 'x', f_uimm16, "dr 0x%x", 'x', f_r1, (char *) 0));
941
942 #if WITH_PROFILE_MODEL_P
943 /* Record the fields for profiling. */
944 if (PROFILE_MODEL_P (current_cpu))
945 {
946 FLD (in_sr) = f_r2;
947 FLD (out_dr) = f_r1;
948 }
949 #endif
950 #undef FLD
951 BREAK (ex);
952 }
953
954 CASE (ex, FMT_ADDI) :
955 {
956 CGEN_INSN_INT insn = entire_insn;
957 #define FLD(f) abuf->fields.fmt_addi.f
958 EXTRACT_FMT_ADDI_VARS /* f-op1 f-r1 f-simm8 */
959
960 EXTRACT_FMT_ADDI_CODE
961
962 /* Record the fields for the semantic handler. */
963 FLD (i_dr) = & CPU (h_gr)[f_r1];
964 FLD (f_simm8) = f_simm8;
965 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_addi", "dr 0x%x", 'x', f_r1, "simm8 0x%x", 'x', f_simm8, (char *) 0));
966
967 #if WITH_PROFILE_MODEL_P
968 /* Record the fields for profiling. */
969 if (PROFILE_MODEL_P (current_cpu))
970 {
971 FLD (in_dr) = f_r1;
972 FLD (out_dr) = f_r1;
973 }
974 #endif
975 #undef FLD
976 BREAK (ex);
977 }
978
979 CASE (ex, FMT_ADDV) :
980 {
981 CGEN_INSN_INT insn = entire_insn;
982 #define FLD(f) abuf->fields.fmt_addv.f
983 EXTRACT_FMT_ADDV_VARS /* f-op1 f-r1 f-op2 f-r2 */
984
985 EXTRACT_FMT_ADDV_CODE
986
987 /* Record the fields for the semantic handler. */
988 FLD (i_dr) = & CPU (h_gr)[f_r1];
989 FLD (i_sr) = & CPU (h_gr)[f_r2];
990 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_addv", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
991
992 #if WITH_PROFILE_MODEL_P
993 /* Record the fields for profiling. */
994 if (PROFILE_MODEL_P (current_cpu))
995 {
996 FLD (in_dr) = f_r1;
997 FLD (in_sr) = f_r2;
998 FLD (out_dr) = f_r1;
999 }
1000 #endif
1001 #undef FLD
1002 BREAK (ex);
1003 }
1004
1005 CASE (ex, FMT_ADDV3) :
1006 {
1007 CGEN_INSN_INT insn = entire_insn;
1008 #define FLD(f) abuf->fields.fmt_addv3.f
1009 EXTRACT_FMT_ADDV3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1010
1011 EXTRACT_FMT_ADDV3_CODE
1012
1013 /* Record the fields for the semantic handler. */
1014 FLD (i_sr) = & CPU (h_gr)[f_r2];
1015 FLD (f_simm16) = f_simm16;
1016 FLD (i_dr) = & CPU (h_gr)[f_r1];
1017 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_addv3", "sr 0x%x", 'x', f_r2, "simm16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
1018
1019 #if WITH_PROFILE_MODEL_P
1020 /* Record the fields for profiling. */
1021 if (PROFILE_MODEL_P (current_cpu))
1022 {
1023 FLD (in_sr) = f_r2;
1024 FLD (out_dr) = f_r1;
1025 }
1026 #endif
1027 #undef FLD
1028 BREAK (ex);
1029 }
1030
1031 CASE (ex, FMT_ADDX) :
1032 {
1033 CGEN_INSN_INT insn = entire_insn;
1034 #define FLD(f) abuf->fields.fmt_addx.f
1035 EXTRACT_FMT_ADDX_VARS /* f-op1 f-r1 f-op2 f-r2 */
1036
1037 EXTRACT_FMT_ADDX_CODE
1038
1039 /* Record the fields for the semantic handler. */
1040 FLD (i_dr) = & CPU (h_gr)[f_r1];
1041 FLD (i_sr) = & CPU (h_gr)[f_r2];
1042 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_addx", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1043
1044 #if WITH_PROFILE_MODEL_P
1045 /* Record the fields for profiling. */
1046 if (PROFILE_MODEL_P (current_cpu))
1047 {
1048 FLD (in_dr) = f_r1;
1049 FLD (in_sr) = f_r2;
1050 FLD (out_dr) = f_r1;
1051 }
1052 #endif
1053 #undef FLD
1054 BREAK (ex);
1055 }
1056
1057 CASE (ex, FMT_BC8) :
1058 {
1059 CGEN_INSN_INT insn = entire_insn;
1060 #define FLD(f) abuf->fields.cti.fields.fmt_bc8.f
1061 EXTRACT_FMT_BC8_VARS /* f-op1 f-r1 f-disp8 */
1062
1063 EXTRACT_FMT_BC8_CODE
1064
1065 /* Record the fields for the semantic handler. */
1066 FLD (f_disp8) = f_disp8;
1067 SEM_BRANCH_INIT_EXTRACT (abuf);
1068 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1069
1070 #if WITH_PROFILE_MODEL_P
1071 /* Record the fields for profiling. */
1072 if (PROFILE_MODEL_P (current_cpu))
1073 {
1074 }
1075 #endif
1076 #undef FLD
1077 BREAK (ex);
1078 }
1079
1080 CASE (ex, FMT_BC24) :
1081 {
1082 CGEN_INSN_INT insn = entire_insn;
1083 #define FLD(f) abuf->fields.cti.fields.fmt_bc24.f
1084 EXTRACT_FMT_BC24_VARS /* f-op1 f-r1 f-disp24 */
1085
1086 EXTRACT_FMT_BC24_CODE
1087
1088 /* Record the fields for the semantic handler. */
1089 FLD (f_disp24) = f_disp24;
1090 SEM_BRANCH_INIT_EXTRACT (abuf);
1091 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1092
1093 #if WITH_PROFILE_MODEL_P
1094 /* Record the fields for profiling. */
1095 if (PROFILE_MODEL_P (current_cpu))
1096 {
1097 }
1098 #endif
1099 #undef FLD
1100 BREAK (ex);
1101 }
1102
1103 CASE (ex, FMT_BEQ) :
1104 {
1105 CGEN_INSN_INT insn = entire_insn;
1106 #define FLD(f) abuf->fields.cti.fields.fmt_beq.f
1107 EXTRACT_FMT_BEQ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
1108
1109 EXTRACT_FMT_BEQ_CODE
1110
1111 /* Record the fields for the semantic handler. */
1112 FLD (i_src1) = & CPU (h_gr)[f_r1];
1113 FLD (i_src2) = & CPU (h_gr)[f_r2];
1114 FLD (f_disp16) = f_disp16;
1115 SEM_BRANCH_INIT_EXTRACT (abuf);
1116 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_beq", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, (char *) 0));
1117
1118 #if WITH_PROFILE_MODEL_P
1119 /* Record the fields for profiling. */
1120 if (PROFILE_MODEL_P (current_cpu))
1121 {
1122 FLD (in_src1) = f_r1;
1123 FLD (in_src2) = f_r2;
1124 }
1125 #endif
1126 #undef FLD
1127 BREAK (ex);
1128 }
1129
1130 CASE (ex, FMT_BEQZ) :
1131 {
1132 CGEN_INSN_INT insn = entire_insn;
1133 #define FLD(f) abuf->fields.cti.fields.fmt_beqz.f
1134 EXTRACT_FMT_BEQZ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
1135
1136 EXTRACT_FMT_BEQZ_CODE
1137
1138 /* Record the fields for the semantic handler. */
1139 FLD (i_src2) = & CPU (h_gr)[f_r2];
1140 FLD (f_disp16) = f_disp16;
1141 SEM_BRANCH_INIT_EXTRACT (abuf);
1142 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_beqz", "src2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, (char *) 0));
1143
1144 #if WITH_PROFILE_MODEL_P
1145 /* Record the fields for profiling. */
1146 if (PROFILE_MODEL_P (current_cpu))
1147 {
1148 FLD (in_src2) = f_r2;
1149 }
1150 #endif
1151 #undef FLD
1152 BREAK (ex);
1153 }
1154
1155 CASE (ex, FMT_BL8) :
1156 {
1157 CGEN_INSN_INT insn = entire_insn;
1158 #define FLD(f) abuf->fields.cti.fields.fmt_bl8.f
1159 EXTRACT_FMT_BL8_VARS /* f-op1 f-r1 f-disp8 */
1160
1161 EXTRACT_FMT_BL8_CODE
1162
1163 /* Record the fields for the semantic handler. */
1164 FLD (f_disp8) = f_disp8;
1165 SEM_BRANCH_INIT_EXTRACT (abuf);
1166 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1167
1168 #if WITH_PROFILE_MODEL_P
1169 /* Record the fields for profiling. */
1170 if (PROFILE_MODEL_P (current_cpu))
1171 {
1172 FLD (out_h_gr_14) = 14;
1173 }
1174 #endif
1175 #undef FLD
1176 BREAK (ex);
1177 }
1178
1179 CASE (ex, FMT_BL24) :
1180 {
1181 CGEN_INSN_INT insn = entire_insn;
1182 #define FLD(f) abuf->fields.cti.fields.fmt_bl24.f
1183 EXTRACT_FMT_BL24_VARS /* f-op1 f-r1 f-disp24 */
1184
1185 EXTRACT_FMT_BL24_CODE
1186
1187 /* Record the fields for the semantic handler. */
1188 FLD (f_disp24) = f_disp24;
1189 SEM_BRANCH_INIT_EXTRACT (abuf);
1190 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1191
1192 #if WITH_PROFILE_MODEL_P
1193 /* Record the fields for profiling. */
1194 if (PROFILE_MODEL_P (current_cpu))
1195 {
1196 FLD (out_h_gr_14) = 14;
1197 }
1198 #endif
1199 #undef FLD
1200 BREAK (ex);
1201 }
1202
1203 CASE (ex, FMT_BCL8) :
1204 {
1205 CGEN_INSN_INT insn = entire_insn;
1206 #define FLD(f) abuf->fields.cti.fields.fmt_bcl8.f
1207 EXTRACT_FMT_BCL8_VARS /* f-op1 f-r1 f-disp8 */
1208
1209 EXTRACT_FMT_BCL8_CODE
1210
1211 /* Record the fields for the semantic handler. */
1212 FLD (f_disp8) = f_disp8;
1213 SEM_BRANCH_INIT_EXTRACT (abuf);
1214 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_bcl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1215
1216 #if WITH_PROFILE_MODEL_P
1217 /* Record the fields for profiling. */
1218 if (PROFILE_MODEL_P (current_cpu))
1219 {
1220 FLD (out_h_gr_14) = 14;
1221 }
1222 #endif
1223 #undef FLD
1224 BREAK (ex);
1225 }
1226
1227 CASE (ex, FMT_BCL24) :
1228 {
1229 CGEN_INSN_INT insn = entire_insn;
1230 #define FLD(f) abuf->fields.cti.fields.fmt_bcl24.f
1231 EXTRACT_FMT_BCL24_VARS /* f-op1 f-r1 f-disp24 */
1232
1233 EXTRACT_FMT_BCL24_CODE
1234
1235 /* Record the fields for the semantic handler. */
1236 FLD (f_disp24) = f_disp24;
1237 SEM_BRANCH_INIT_EXTRACT (abuf);
1238 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_bcl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1239
1240 #if WITH_PROFILE_MODEL_P
1241 /* Record the fields for profiling. */
1242 if (PROFILE_MODEL_P (current_cpu))
1243 {
1244 FLD (out_h_gr_14) = 14;
1245 }
1246 #endif
1247 #undef FLD
1248 BREAK (ex);
1249 }
1250
1251 CASE (ex, FMT_BRA8) :
1252 {
1253 CGEN_INSN_INT insn = entire_insn;
1254 #define FLD(f) abuf->fields.cti.fields.fmt_bra8.f
1255 EXTRACT_FMT_BRA8_VARS /* f-op1 f-r1 f-disp8 */
1256
1257 EXTRACT_FMT_BRA8_CODE
1258
1259 /* Record the fields for the semantic handler. */
1260 FLD (f_disp8) = f_disp8;
1261 SEM_BRANCH_INIT_EXTRACT (abuf);
1262 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1263
1264 #if WITH_PROFILE_MODEL_P
1265 /* Record the fields for profiling. */
1266 if (PROFILE_MODEL_P (current_cpu))
1267 {
1268 }
1269 #endif
1270 #undef FLD
1271 BREAK (ex);
1272 }
1273
1274 CASE (ex, FMT_BRA24) :
1275 {
1276 CGEN_INSN_INT insn = entire_insn;
1277 #define FLD(f) abuf->fields.cti.fields.fmt_bra24.f
1278 EXTRACT_FMT_BRA24_VARS /* f-op1 f-r1 f-disp24 */
1279
1280 EXTRACT_FMT_BRA24_CODE
1281
1282 /* Record the fields for the semantic handler. */
1283 FLD (f_disp24) = f_disp24;
1284 SEM_BRANCH_INIT_EXTRACT (abuf);
1285 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1286
1287 #if WITH_PROFILE_MODEL_P
1288 /* Record the fields for profiling. */
1289 if (PROFILE_MODEL_P (current_cpu))
1290 {
1291 }
1292 #endif
1293 #undef FLD
1294 BREAK (ex);
1295 }
1296
1297 CASE (ex, FMT_CMP) :
1298 {
1299 CGEN_INSN_INT insn = entire_insn;
1300 #define FLD(f) abuf->fields.fmt_cmp.f
1301 EXTRACT_FMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1302
1303 EXTRACT_FMT_CMP_CODE
1304
1305 /* Record the fields for the semantic handler. */
1306 FLD (i_src1) = & CPU (h_gr)[f_r1];
1307 FLD (i_src2) = & CPU (h_gr)[f_r2];
1308 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_cmp", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1309
1310 #if WITH_PROFILE_MODEL_P
1311 /* Record the fields for profiling. */
1312 if (PROFILE_MODEL_P (current_cpu))
1313 {
1314 FLD (in_src1) = f_r1;
1315 FLD (in_src2) = f_r2;
1316 }
1317 #endif
1318 #undef FLD
1319 BREAK (ex);
1320 }
1321
1322 CASE (ex, FMT_CMPI) :
1323 {
1324 CGEN_INSN_INT insn = entire_insn;
1325 #define FLD(f) abuf->fields.fmt_cmpi.f
1326 EXTRACT_FMT_CMPI_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1327
1328 EXTRACT_FMT_CMPI_CODE
1329
1330 /* Record the fields for the semantic handler. */
1331 FLD (i_src2) = & CPU (h_gr)[f_r2];
1332 FLD (f_simm16) = f_simm16;
1333 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_cmpi", "src2 0x%x", 'x', f_r2, "simm16 0x%x", 'x', f_simm16, (char *) 0));
1334
1335 #if WITH_PROFILE_MODEL_P
1336 /* Record the fields for profiling. */
1337 if (PROFILE_MODEL_P (current_cpu))
1338 {
1339 FLD (in_src2) = f_r2;
1340 }
1341 #endif
1342 #undef FLD
1343 BREAK (ex);
1344 }
1345
1346 CASE (ex, FMT_CMPZ) :
1347 {
1348 CGEN_INSN_INT insn = entire_insn;
1349 #define FLD(f) abuf->fields.fmt_cmpz.f
1350 EXTRACT_FMT_CMPZ_VARS /* f-op1 f-r1 f-op2 f-r2 */
1351
1352 EXTRACT_FMT_CMPZ_CODE
1353
1354 /* Record the fields for the semantic handler. */
1355 FLD (i_src2) = & CPU (h_gr)[f_r2];
1356 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_cmpz", "src2 0x%x", 'x', f_r2, (char *) 0));
1357
1358 #if WITH_PROFILE_MODEL_P
1359 /* Record the fields for profiling. */
1360 if (PROFILE_MODEL_P (current_cpu))
1361 {
1362 FLD (in_src2) = f_r2;
1363 }
1364 #endif
1365 #undef FLD
1366 BREAK (ex);
1367 }
1368
1369 CASE (ex, FMT_DIV) :
1370 {
1371 CGEN_INSN_INT insn = entire_insn;
1372 #define FLD(f) abuf->fields.fmt_div.f
1373 EXTRACT_FMT_DIV_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1374
1375 EXTRACT_FMT_DIV_CODE
1376
1377 /* Record the fields for the semantic handler. */
1378 FLD (i_sr) = & CPU (h_gr)[f_r2];
1379 FLD (i_dr) = & CPU (h_gr)[f_r1];
1380 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_div", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1381
1382 #if WITH_PROFILE_MODEL_P
1383 /* Record the fields for profiling. */
1384 if (PROFILE_MODEL_P (current_cpu))
1385 {
1386 FLD (in_sr) = f_r2;
1387 FLD (in_dr) = f_r1;
1388 FLD (out_dr) = f_r1;
1389 }
1390 #endif
1391 #undef FLD
1392 BREAK (ex);
1393 }
1394
1395 CASE (ex, FMT_JC) :
1396 {
1397 CGEN_INSN_INT insn = entire_insn;
1398 #define FLD(f) abuf->fields.cti.fields.fmt_jc.f
1399 EXTRACT_FMT_JC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1400
1401 EXTRACT_FMT_JC_CODE
1402
1403 /* Record the fields for the semantic handler. */
1404 FLD (i_sr) = & CPU (h_gr)[f_r2];
1405 SEM_BRANCH_INIT_EXTRACT (abuf);
1406 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_jc", "sr 0x%x", 'x', f_r2, (char *) 0));
1407
1408 #if WITH_PROFILE_MODEL_P
1409 /* Record the fields for profiling. */
1410 if (PROFILE_MODEL_P (current_cpu))
1411 {
1412 FLD (in_sr) = f_r2;
1413 }
1414 #endif
1415 #undef FLD
1416 BREAK (ex);
1417 }
1418
1419 CASE (ex, FMT_JL) :
1420 {
1421 CGEN_INSN_INT insn = entire_insn;
1422 #define FLD(f) abuf->fields.cti.fields.fmt_jl.f
1423 EXTRACT_FMT_JL_VARS /* f-op1 f-r1 f-op2 f-r2 */
1424
1425 EXTRACT_FMT_JL_CODE
1426
1427 /* Record the fields for the semantic handler. */
1428 FLD (i_sr) = & CPU (h_gr)[f_r2];
1429 SEM_BRANCH_INIT_EXTRACT (abuf);
1430 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_jl", "sr 0x%x", 'x', f_r2, (char *) 0));
1431
1432 #if WITH_PROFILE_MODEL_P
1433 /* Record the fields for profiling. */
1434 if (PROFILE_MODEL_P (current_cpu))
1435 {
1436 FLD (in_sr) = f_r2;
1437 FLD (out_h_gr_14) = 14;
1438 }
1439 #endif
1440 #undef FLD
1441 BREAK (ex);
1442 }
1443
1444 CASE (ex, FMT_JMP) :
1445 {
1446 CGEN_INSN_INT insn = entire_insn;
1447 #define FLD(f) abuf->fields.cti.fields.fmt_jmp.f
1448 EXTRACT_FMT_JMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1449
1450 EXTRACT_FMT_JMP_CODE
1451
1452 /* Record the fields for the semantic handler. */
1453 FLD (i_sr) = & CPU (h_gr)[f_r2];
1454 SEM_BRANCH_INIT_EXTRACT (abuf);
1455 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_jmp", "sr 0x%x", 'x', f_r2, (char *) 0));
1456
1457 #if WITH_PROFILE_MODEL_P
1458 /* Record the fields for profiling. */
1459 if (PROFILE_MODEL_P (current_cpu))
1460 {
1461 FLD (in_sr) = f_r2;
1462 }
1463 #endif
1464 #undef FLD
1465 BREAK (ex);
1466 }
1467
1468 CASE (ex, FMT_LD) :
1469 {
1470 CGEN_INSN_INT insn = entire_insn;
1471 #define FLD(f) abuf->fields.fmt_ld.f
1472 EXTRACT_FMT_LD_VARS /* f-op1 f-r1 f-op2 f-r2 */
1473
1474 EXTRACT_FMT_LD_CODE
1475
1476 /* Record the fields for the semantic handler. */
1477 FLD (i_sr) = & CPU (h_gr)[f_r2];
1478 FLD (i_dr) = & CPU (h_gr)[f_r1];
1479 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ld", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1480
1481 #if WITH_PROFILE_MODEL_P
1482 /* Record the fields for profiling. */
1483 if (PROFILE_MODEL_P (current_cpu))
1484 {
1485 FLD (in_sr) = f_r2;
1486 FLD (out_dr) = f_r1;
1487 }
1488 #endif
1489 #undef FLD
1490 BREAK (ex);
1491 }
1492
1493 CASE (ex, FMT_LD_D) :
1494 {
1495 CGEN_INSN_INT insn = entire_insn;
1496 #define FLD(f) abuf->fields.fmt_ld_d.f
1497 EXTRACT_FMT_LD_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1498
1499 EXTRACT_FMT_LD_D_CODE
1500
1501 /* Record the fields for the semantic handler. */
1502 FLD (i_sr) = & CPU (h_gr)[f_r2];
1503 FLD (f_simm16) = f_simm16;
1504 FLD (i_dr) = & CPU (h_gr)[f_r1];
1505 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ld_d", "sr 0x%x", 'x', f_r2, "slo16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
1506
1507 #if WITH_PROFILE_MODEL_P
1508 /* Record the fields for profiling. */
1509 if (PROFILE_MODEL_P (current_cpu))
1510 {
1511 FLD (in_sr) = f_r2;
1512 FLD (out_dr) = f_r1;
1513 }
1514 #endif
1515 #undef FLD
1516 BREAK (ex);
1517 }
1518
1519 CASE (ex, FMT_LDB) :
1520 {
1521 CGEN_INSN_INT insn = entire_insn;
1522 #define FLD(f) abuf->fields.fmt_ldb.f
1523 EXTRACT_FMT_LDB_VARS /* f-op1 f-r1 f-op2 f-r2 */
1524
1525 EXTRACT_FMT_LDB_CODE
1526
1527 /* Record the fields for the semantic handler. */
1528 FLD (i_sr) = & CPU (h_gr)[f_r2];
1529 FLD (i_dr) = & CPU (h_gr)[f_r1];
1530 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ldb", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1531
1532 #if WITH_PROFILE_MODEL_P
1533 /* Record the fields for profiling. */
1534 if (PROFILE_MODEL_P (current_cpu))
1535 {
1536 FLD (in_sr) = f_r2;
1537 FLD (out_dr) = f_r1;
1538 }
1539 #endif
1540 #undef FLD
1541 BREAK (ex);
1542 }
1543
1544 CASE (ex, FMT_LDB_D) :
1545 {
1546 CGEN_INSN_INT insn = entire_insn;
1547 #define FLD(f) abuf->fields.fmt_ldb_d.f
1548 EXTRACT_FMT_LDB_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1549
1550 EXTRACT_FMT_LDB_D_CODE
1551
1552 /* Record the fields for the semantic handler. */
1553 FLD (i_sr) = & CPU (h_gr)[f_r2];
1554 FLD (f_simm16) = f_simm16;
1555 FLD (i_dr) = & CPU (h_gr)[f_r1];
1556 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ldb_d", "sr 0x%x", 'x', f_r2, "slo16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
1557
1558 #if WITH_PROFILE_MODEL_P
1559 /* Record the fields for profiling. */
1560 if (PROFILE_MODEL_P (current_cpu))
1561 {
1562 FLD (in_sr) = f_r2;
1563 FLD (out_dr) = f_r1;
1564 }
1565 #endif
1566 #undef FLD
1567 BREAK (ex);
1568 }
1569
1570 CASE (ex, FMT_LDH) :
1571 {
1572 CGEN_INSN_INT insn = entire_insn;
1573 #define FLD(f) abuf->fields.fmt_ldh.f
1574 EXTRACT_FMT_LDH_VARS /* f-op1 f-r1 f-op2 f-r2 */
1575
1576 EXTRACT_FMT_LDH_CODE
1577
1578 /* Record the fields for the semantic handler. */
1579 FLD (i_sr) = & CPU (h_gr)[f_r2];
1580 FLD (i_dr) = & CPU (h_gr)[f_r1];
1581 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ldh", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1582
1583 #if WITH_PROFILE_MODEL_P
1584 /* Record the fields for profiling. */
1585 if (PROFILE_MODEL_P (current_cpu))
1586 {
1587 FLD (in_sr) = f_r2;
1588 FLD (out_dr) = f_r1;
1589 }
1590 #endif
1591 #undef FLD
1592 BREAK (ex);
1593 }
1594
1595 CASE (ex, FMT_LDH_D) :
1596 {
1597 CGEN_INSN_INT insn = entire_insn;
1598 #define FLD(f) abuf->fields.fmt_ldh_d.f
1599 EXTRACT_FMT_LDH_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1600
1601 EXTRACT_FMT_LDH_D_CODE
1602
1603 /* Record the fields for the semantic handler. */
1604 FLD (i_sr) = & CPU (h_gr)[f_r2];
1605 FLD (f_simm16) = f_simm16;
1606 FLD (i_dr) = & CPU (h_gr)[f_r1];
1607 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ldh_d", "sr 0x%x", 'x', f_r2, "slo16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
1608
1609 #if WITH_PROFILE_MODEL_P
1610 /* Record the fields for profiling. */
1611 if (PROFILE_MODEL_P (current_cpu))
1612 {
1613 FLD (in_sr) = f_r2;
1614 FLD (out_dr) = f_r1;
1615 }
1616 #endif
1617 #undef FLD
1618 BREAK (ex);
1619 }
1620
1621 CASE (ex, FMT_LD_PLUS) :
1622 {
1623 CGEN_INSN_INT insn = entire_insn;
1624 #define FLD(f) abuf->fields.fmt_ld_plus.f
1625 EXTRACT_FMT_LD_PLUS_VARS /* f-op1 f-r1 f-op2 f-r2 */
1626
1627 EXTRACT_FMT_LD_PLUS_CODE
1628
1629 /* Record the fields for the semantic handler. */
1630 FLD (i_sr) = & CPU (h_gr)[f_r2];
1631 FLD (i_dr) = & CPU (h_gr)[f_r1];
1632 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ld_plus", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1633
1634 #if WITH_PROFILE_MODEL_P
1635 /* Record the fields for profiling. */
1636 if (PROFILE_MODEL_P (current_cpu))
1637 {
1638 FLD (in_sr) = f_r2;
1639 FLD (out_dr) = f_r1;
1640 FLD (out_sr) = f_r2;
1641 }
1642 #endif
1643 #undef FLD
1644 BREAK (ex);
1645 }
1646
1647 CASE (ex, FMT_LD24) :
1648 {
1649 CGEN_INSN_INT insn = entire_insn;
1650 #define FLD(f) abuf->fields.fmt_ld24.f
1651 EXTRACT_FMT_LD24_VARS /* f-op1 f-r1 f-uimm24 */
1652
1653 EXTRACT_FMT_LD24_CODE
1654
1655 /* Record the fields for the semantic handler. */
1656 FLD (f_uimm24) = f_uimm24;
1657 FLD (i_dr) = & CPU (h_gr)[f_r1];
1658 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ld24", "uimm24 0x%x", 'x', f_uimm24, "dr 0x%x", 'x', f_r1, (char *) 0));
1659
1660 #if WITH_PROFILE_MODEL_P
1661 /* Record the fields for profiling. */
1662 if (PROFILE_MODEL_P (current_cpu))
1663 {
1664 FLD (out_dr) = f_r1;
1665 }
1666 #endif
1667 #undef FLD
1668 BREAK (ex);
1669 }
1670
1671 CASE (ex, FMT_LDI8) :
1672 {
1673 CGEN_INSN_INT insn = entire_insn;
1674 #define FLD(f) abuf->fields.fmt_ldi8.f
1675 EXTRACT_FMT_LDI8_VARS /* f-op1 f-r1 f-simm8 */
1676
1677 EXTRACT_FMT_LDI8_CODE
1678
1679 /* Record the fields for the semantic handler. */
1680 FLD (f_simm8) = f_simm8;
1681 FLD (i_dr) = & CPU (h_gr)[f_r1];
1682 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ldi8", "simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
1683
1684 #if WITH_PROFILE_MODEL_P
1685 /* Record the fields for profiling. */
1686 if (PROFILE_MODEL_P (current_cpu))
1687 {
1688 FLD (out_dr) = f_r1;
1689 }
1690 #endif
1691 #undef FLD
1692 BREAK (ex);
1693 }
1694
1695 CASE (ex, FMT_LDI16) :
1696 {
1697 CGEN_INSN_INT insn = entire_insn;
1698 #define FLD(f) abuf->fields.fmt_ldi16.f
1699 EXTRACT_FMT_LDI16_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1700
1701 EXTRACT_FMT_LDI16_CODE
1702
1703 /* Record the fields for the semantic handler. */
1704 FLD (f_simm16) = f_simm16;
1705 FLD (i_dr) = & CPU (h_gr)[f_r1];
1706 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_ldi16", "slo16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
1707
1708 #if WITH_PROFILE_MODEL_P
1709 /* Record the fields for profiling. */
1710 if (PROFILE_MODEL_P (current_cpu))
1711 {
1712 FLD (out_dr) = f_r1;
1713 }
1714 #endif
1715 #undef FLD
1716 BREAK (ex);
1717 }
1718
1719 CASE (ex, FMT_LOCK) :
1720 {
1721 CGEN_INSN_INT insn = entire_insn;
1722 #define FLD(f) abuf->fields.fmt_lock.f
1723 EXTRACT_FMT_LOCK_VARS /* f-op1 f-r1 f-op2 f-r2 */
1724
1725 EXTRACT_FMT_LOCK_CODE
1726
1727 /* Record the fields for the semantic handler. */
1728 FLD (i_sr) = & CPU (h_gr)[f_r2];
1729 FLD (i_dr) = & CPU (h_gr)[f_r1];
1730 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_lock", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1731
1732 #if WITH_PROFILE_MODEL_P
1733 /* Record the fields for profiling. */
1734 if (PROFILE_MODEL_P (current_cpu))
1735 {
1736 FLD (in_sr) = f_r2;
1737 FLD (out_dr) = f_r1;
1738 }
1739 #endif
1740 #undef FLD
1741 BREAK (ex);
1742 }
1743
1744 CASE (ex, FMT_MACHI_A) :
1745 {
1746 CGEN_INSN_INT insn = entire_insn;
1747 #define FLD(f) abuf->fields.fmt_machi_a.f
1748 EXTRACT_FMT_MACHI_A_VARS /* f-op1 f-r1 f-acc f-op23 f-r2 */
1749
1750 EXTRACT_FMT_MACHI_A_CODE
1751
1752 /* Record the fields for the semantic handler. */
1753 FLD (f_acc) = f_acc;
1754 FLD (i_src1) = & CPU (h_gr)[f_r1];
1755 FLD (i_src2) = & CPU (h_gr)[f_r2];
1756 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_machi_a", "acc 0x%x", 'x', f_acc, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1757
1758 #if WITH_PROFILE_MODEL_P
1759 /* Record the fields for profiling. */
1760 if (PROFILE_MODEL_P (current_cpu))
1761 {
1762 FLD (in_src1) = f_r1;
1763 FLD (in_src2) = f_r2;
1764 }
1765 #endif
1766 #undef FLD
1767 BREAK (ex);
1768 }
1769
1770 CASE (ex, FMT_MULHI_A) :
1771 {
1772 CGEN_INSN_INT insn = entire_insn;
1773 #define FLD(f) abuf->fields.fmt_mulhi_a.f
1774 EXTRACT_FMT_MULHI_A_VARS /* f-op1 f-r1 f-acc f-op23 f-r2 */
1775
1776 EXTRACT_FMT_MULHI_A_CODE
1777
1778 /* Record the fields for the semantic handler. */
1779 FLD (i_src1) = & CPU (h_gr)[f_r1];
1780 FLD (i_src2) = & CPU (h_gr)[f_r2];
1781 FLD (f_acc) = f_acc;
1782 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_mulhi_a", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, "acc 0x%x", 'x', f_acc, (char *) 0));
1783
1784 #if WITH_PROFILE_MODEL_P
1785 /* Record the fields for profiling. */
1786 if (PROFILE_MODEL_P (current_cpu))
1787 {
1788 FLD (in_src1) = f_r1;
1789 FLD (in_src2) = f_r2;
1790 }
1791 #endif
1792 #undef FLD
1793 BREAK (ex);
1794 }
1795
1796 CASE (ex, FMT_MV) :
1797 {
1798 CGEN_INSN_INT insn = entire_insn;
1799 #define FLD(f) abuf->fields.fmt_mv.f
1800 EXTRACT_FMT_MV_VARS /* f-op1 f-r1 f-op2 f-r2 */
1801
1802 EXTRACT_FMT_MV_CODE
1803
1804 /* Record the fields for the semantic handler. */
1805 FLD (i_sr) = & CPU (h_gr)[f_r2];
1806 FLD (i_dr) = & CPU (h_gr)[f_r1];
1807 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_mv", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1808
1809 #if WITH_PROFILE_MODEL_P
1810 /* Record the fields for profiling. */
1811 if (PROFILE_MODEL_P (current_cpu))
1812 {
1813 FLD (in_sr) = f_r2;
1814 FLD (out_dr) = f_r1;
1815 }
1816 #endif
1817 #undef FLD
1818 BREAK (ex);
1819 }
1820
1821 CASE (ex, FMT_MVFACHI_A) :
1822 {
1823 CGEN_INSN_INT insn = entire_insn;
1824 #define FLD(f) abuf->fields.fmt_mvfachi_a.f
1825 EXTRACT_FMT_MVFACHI_A_VARS /* f-op1 f-r1 f-op2 f-accs f-op3 */
1826
1827 EXTRACT_FMT_MVFACHI_A_CODE
1828
1829 /* Record the fields for the semantic handler. */
1830 FLD (f_accs) = f_accs;
1831 FLD (i_dr) = & CPU (h_gr)[f_r1];
1832 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_mvfachi_a", "accs 0x%x", 'x', f_accs, "dr 0x%x", 'x', f_r1, (char *) 0));
1833
1834 #if WITH_PROFILE_MODEL_P
1835 /* Record the fields for profiling. */
1836 if (PROFILE_MODEL_P (current_cpu))
1837 {
1838 FLD (out_dr) = f_r1;
1839 }
1840 #endif
1841 #undef FLD
1842 BREAK (ex);
1843 }
1844
1845 CASE (ex, FMT_MVFC) :
1846 {
1847 CGEN_INSN_INT insn = entire_insn;
1848 #define FLD(f) abuf->fields.fmt_mvfc.f
1849 EXTRACT_FMT_MVFC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1850
1851 EXTRACT_FMT_MVFC_CODE
1852
1853 /* Record the fields for the semantic handler. */
1854 FLD (f_r2) = f_r2;
1855 FLD (i_dr) = & CPU (h_gr)[f_r1];
1856 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_mvfc", "scr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1857
1858 #if WITH_PROFILE_MODEL_P
1859 /* Record the fields for profiling. */
1860 if (PROFILE_MODEL_P (current_cpu))
1861 {
1862 FLD (out_dr) = f_r1;
1863 }
1864 #endif
1865 #undef FLD
1866 BREAK (ex);
1867 }
1868
1869 CASE (ex, FMT_MVTACHI_A) :
1870 {
1871 CGEN_INSN_INT insn = entire_insn;
1872 #define FLD(f) abuf->fields.fmt_mvtachi_a.f
1873 EXTRACT_FMT_MVTACHI_A_VARS /* f-op1 f-r1 f-op2 f-accs f-op3 */
1874
1875 EXTRACT_FMT_MVTACHI_A_CODE
1876
1877 /* Record the fields for the semantic handler. */
1878 FLD (f_accs) = f_accs;
1879 FLD (i_src1) = & CPU (h_gr)[f_r1];
1880 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_mvtachi_a", "accs 0x%x", 'x', f_accs, "src1 0x%x", 'x', f_r1, (char *) 0));
1881
1882 #if WITH_PROFILE_MODEL_P
1883 /* Record the fields for profiling. */
1884 if (PROFILE_MODEL_P (current_cpu))
1885 {
1886 FLD (in_src1) = f_r1;
1887 }
1888 #endif
1889 #undef FLD
1890 BREAK (ex);
1891 }
1892
1893 CASE (ex, FMT_MVTC) :
1894 {
1895 CGEN_INSN_INT insn = entire_insn;
1896 #define FLD(f) abuf->fields.fmt_mvtc.f
1897 EXTRACT_FMT_MVTC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1898
1899 EXTRACT_FMT_MVTC_CODE
1900
1901 /* Record the fields for the semantic handler. */
1902 FLD (i_sr) = & CPU (h_gr)[f_r2];
1903 FLD (f_r1) = f_r1;
1904 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_mvtc", "sr 0x%x", 'x', f_r2, "dcr 0x%x", 'x', f_r1, (char *) 0));
1905
1906 #if WITH_PROFILE_MODEL_P
1907 /* Record the fields for profiling. */
1908 if (PROFILE_MODEL_P (current_cpu))
1909 {
1910 FLD (in_sr) = f_r2;
1911 }
1912 #endif
1913 #undef FLD
1914 BREAK (ex);
1915 }
1916
1917 CASE (ex, FMT_NOP) :
1918 {
1919 CGEN_INSN_INT insn = entire_insn;
1920 #define FLD(f) abuf->fields.fmt_nop.f
1921 EXTRACT_FMT_NOP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1922
1923 EXTRACT_FMT_NOP_CODE
1924
1925 /* Record the fields for the semantic handler. */
1926 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_nop", (char *) 0));
1927
1928 #undef FLD
1929 BREAK (ex);
1930 }
1931
1932 CASE (ex, FMT_RAC_DSI) :
1933 {
1934 CGEN_INSN_INT insn = entire_insn;
1935 #define FLD(f) abuf->fields.fmt_rac_dsi.f
1936 EXTRACT_FMT_RAC_DSI_VARS /* f-op1 f-accd f-bits67 f-op2 f-accs f-bit14 f-imm1 */
1937
1938 EXTRACT_FMT_RAC_DSI_CODE
1939
1940 /* Record the fields for the semantic handler. */
1941 FLD (f_accs) = f_accs;
1942 FLD (f_imm1) = f_imm1;
1943 FLD (f_accd) = f_accd;
1944 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_rac_dsi", "accs 0x%x", 'x', f_accs, "imm1 0x%x", 'x', f_imm1, "accd 0x%x", 'x', f_accd, (char *) 0));
1945
1946 #undef FLD
1947 BREAK (ex);
1948 }
1949
1950 CASE (ex, FMT_RTE) :
1951 {
1952 CGEN_INSN_INT insn = entire_insn;
1953 #define FLD(f) abuf->fields.cti.fields.fmt_rte.f
1954 EXTRACT_FMT_RTE_VARS /* f-op1 f-r1 f-op2 f-r2 */
1955
1956 EXTRACT_FMT_RTE_CODE
1957
1958 /* Record the fields for the semantic handler. */
1959 SEM_BRANCH_INIT_EXTRACT (abuf);
1960 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_rte", (char *) 0));
1961
1962 #if WITH_PROFILE_MODEL_P
1963 /* Record the fields for profiling. */
1964 if (PROFILE_MODEL_P (current_cpu))
1965 {
1966 }
1967 #endif
1968 #undef FLD
1969 BREAK (ex);
1970 }
1971
1972 CASE (ex, FMT_SETH) :
1973 {
1974 CGEN_INSN_INT insn = entire_insn;
1975 #define FLD(f) abuf->fields.fmt_seth.f
1976 EXTRACT_FMT_SETH_VARS /* f-op1 f-r1 f-op2 f-r2 f-hi16 */
1977
1978 EXTRACT_FMT_SETH_CODE
1979
1980 /* Record the fields for the semantic handler. */
1981 FLD (f_hi16) = f_hi16;
1982 FLD (i_dr) = & CPU (h_gr)[f_r1];
1983 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_seth", "hi16 0x%x", 'x', f_hi16, "dr 0x%x", 'x', f_r1, (char *) 0));
1984
1985 #if WITH_PROFILE_MODEL_P
1986 /* Record the fields for profiling. */
1987 if (PROFILE_MODEL_P (current_cpu))
1988 {
1989 FLD (out_dr) = f_r1;
1990 }
1991 #endif
1992 #undef FLD
1993 BREAK (ex);
1994 }
1995
1996 CASE (ex, FMT_SLL3) :
1997 {
1998 CGEN_INSN_INT insn = entire_insn;
1999 #define FLD(f) abuf->fields.fmt_sll3.f
2000 EXTRACT_FMT_SLL3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2001
2002 EXTRACT_FMT_SLL3_CODE
2003
2004 /* Record the fields for the semantic handler. */
2005 FLD (i_sr) = & CPU (h_gr)[f_r2];
2006 FLD (f_simm16) = f_simm16;
2007 FLD (i_dr) = & CPU (h_gr)[f_r1];
2008 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_sll3", "sr 0x%x", 'x', f_r2, "simm16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
2009
2010 #if WITH_PROFILE_MODEL_P
2011 /* Record the fields for profiling. */
2012 if (PROFILE_MODEL_P (current_cpu))
2013 {
2014 FLD (in_sr) = f_r2;
2015 FLD (out_dr) = f_r1;
2016 }
2017 #endif
2018 #undef FLD
2019 BREAK (ex);
2020 }
2021
2022 CASE (ex, FMT_SLLI) :
2023 {
2024 CGEN_INSN_INT insn = entire_insn;
2025 #define FLD(f) abuf->fields.fmt_slli.f
2026 EXTRACT_FMT_SLLI_VARS /* f-op1 f-r1 f-shift-op2 f-uimm5 */
2027
2028 EXTRACT_FMT_SLLI_CODE
2029
2030 /* Record the fields for the semantic handler. */
2031 FLD (i_dr) = & CPU (h_gr)[f_r1];
2032 FLD (f_uimm5) = f_uimm5;
2033 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_slli", "dr 0x%x", 'x', f_r1, "uimm5 0x%x", 'x', f_uimm5, (char *) 0));
2034
2035 #if WITH_PROFILE_MODEL_P
2036 /* Record the fields for profiling. */
2037 if (PROFILE_MODEL_P (current_cpu))
2038 {
2039 FLD (in_dr) = f_r1;
2040 FLD (out_dr) = f_r1;
2041 }
2042 #endif
2043 #undef FLD
2044 BREAK (ex);
2045 }
2046
2047 CASE (ex, FMT_ST) :
2048 {
2049 CGEN_INSN_INT insn = entire_insn;
2050 #define FLD(f) abuf->fields.fmt_st.f
2051 EXTRACT_FMT_ST_VARS /* f-op1 f-r1 f-op2 f-r2 */
2052
2053 EXTRACT_FMT_ST_CODE
2054
2055 /* Record the fields for the semantic handler. */
2056 FLD (i_src2) = & CPU (h_gr)[f_r2];
2057 FLD (i_src1) = & CPU (h_gr)[f_r1];
2058 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_st", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2059
2060 #if WITH_PROFILE_MODEL_P
2061 /* Record the fields for profiling. */
2062 if (PROFILE_MODEL_P (current_cpu))
2063 {
2064 FLD (in_src2) = f_r2;
2065 FLD (in_src1) = f_r1;
2066 }
2067 #endif
2068 #undef FLD
2069 BREAK (ex);
2070 }
2071
2072 CASE (ex, FMT_ST_D) :
2073 {
2074 CGEN_INSN_INT insn = entire_insn;
2075 #define FLD(f) abuf->fields.fmt_st_d.f
2076 EXTRACT_FMT_ST_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2077
2078 EXTRACT_FMT_ST_D_CODE
2079
2080 /* Record the fields for the semantic handler. */
2081 FLD (i_src2) = & CPU (h_gr)[f_r2];
2082 FLD (f_simm16) = f_simm16;
2083 FLD (i_src1) = & CPU (h_gr)[f_r1];
2084 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_st_d", "src2 0x%x", 'x', f_r2, "slo16 0x%x", 'x', f_simm16, "src1 0x%x", 'x', f_r1, (char *) 0));
2085
2086 #if WITH_PROFILE_MODEL_P
2087 /* Record the fields for profiling. */
2088 if (PROFILE_MODEL_P (current_cpu))
2089 {
2090 FLD (in_src2) = f_r2;
2091 FLD (in_src1) = f_r1;
2092 }
2093 #endif
2094 #undef FLD
2095 BREAK (ex);
2096 }
2097
2098 CASE (ex, FMT_STB) :
2099 {
2100 CGEN_INSN_INT insn = entire_insn;
2101 #define FLD(f) abuf->fields.fmt_stb.f
2102 EXTRACT_FMT_STB_VARS /* f-op1 f-r1 f-op2 f-r2 */
2103
2104 EXTRACT_FMT_STB_CODE
2105
2106 /* Record the fields for the semantic handler. */
2107 FLD (i_src2) = & CPU (h_gr)[f_r2];
2108 FLD (i_src1) = & CPU (h_gr)[f_r1];
2109 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_stb", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2110
2111 #if WITH_PROFILE_MODEL_P
2112 /* Record the fields for profiling. */
2113 if (PROFILE_MODEL_P (current_cpu))
2114 {
2115 FLD (in_src2) = f_r2;
2116 FLD (in_src1) = f_r1;
2117 }
2118 #endif
2119 #undef FLD
2120 BREAK (ex);
2121 }
2122
2123 CASE (ex, FMT_STB_D) :
2124 {
2125 CGEN_INSN_INT insn = entire_insn;
2126 #define FLD(f) abuf->fields.fmt_stb_d.f
2127 EXTRACT_FMT_STB_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2128
2129 EXTRACT_FMT_STB_D_CODE
2130
2131 /* Record the fields for the semantic handler. */
2132 FLD (i_src2) = & CPU (h_gr)[f_r2];
2133 FLD (f_simm16) = f_simm16;
2134 FLD (i_src1) = & CPU (h_gr)[f_r1];
2135 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_stb_d", "src2 0x%x", 'x', f_r2, "slo16 0x%x", 'x', f_simm16, "src1 0x%x", 'x', f_r1, (char *) 0));
2136
2137 #if WITH_PROFILE_MODEL_P
2138 /* Record the fields for profiling. */
2139 if (PROFILE_MODEL_P (current_cpu))
2140 {
2141 FLD (in_src2) = f_r2;
2142 FLD (in_src1) = f_r1;
2143 }
2144 #endif
2145 #undef FLD
2146 BREAK (ex);
2147 }
2148
2149 CASE (ex, FMT_STH) :
2150 {
2151 CGEN_INSN_INT insn = entire_insn;
2152 #define FLD(f) abuf->fields.fmt_sth.f
2153 EXTRACT_FMT_STH_VARS /* f-op1 f-r1 f-op2 f-r2 */
2154
2155 EXTRACT_FMT_STH_CODE
2156
2157 /* Record the fields for the semantic handler. */
2158 FLD (i_src2) = & CPU (h_gr)[f_r2];
2159 FLD (i_src1) = & CPU (h_gr)[f_r1];
2160 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_sth", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2161
2162 #if WITH_PROFILE_MODEL_P
2163 /* Record the fields for profiling. */
2164 if (PROFILE_MODEL_P (current_cpu))
2165 {
2166 FLD (in_src2) = f_r2;
2167 FLD (in_src1) = f_r1;
2168 }
2169 #endif
2170 #undef FLD
2171 BREAK (ex);
2172 }
2173
2174 CASE (ex, FMT_STH_D) :
2175 {
2176 CGEN_INSN_INT insn = entire_insn;
2177 #define FLD(f) abuf->fields.fmt_sth_d.f
2178 EXTRACT_FMT_STH_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2179
2180 EXTRACT_FMT_STH_D_CODE
2181
2182 /* Record the fields for the semantic handler. */
2183 FLD (i_src2) = & CPU (h_gr)[f_r2];
2184 FLD (f_simm16) = f_simm16;
2185 FLD (i_src1) = & CPU (h_gr)[f_r1];
2186 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_sth_d", "src2 0x%x", 'x', f_r2, "slo16 0x%x", 'x', f_simm16, "src1 0x%x", 'x', f_r1, (char *) 0));
2187
2188 #if WITH_PROFILE_MODEL_P
2189 /* Record the fields for profiling. */
2190 if (PROFILE_MODEL_P (current_cpu))
2191 {
2192 FLD (in_src2) = f_r2;
2193 FLD (in_src1) = f_r1;
2194 }
2195 #endif
2196 #undef FLD
2197 BREAK (ex);
2198 }
2199
2200 CASE (ex, FMT_ST_PLUS) :
2201 {
2202 CGEN_INSN_INT insn = entire_insn;
2203 #define FLD(f) abuf->fields.fmt_st_plus.f
2204 EXTRACT_FMT_ST_PLUS_VARS /* f-op1 f-r1 f-op2 f-r2 */
2205
2206 EXTRACT_FMT_ST_PLUS_CODE
2207
2208 /* Record the fields for the semantic handler. */
2209 FLD (i_src2) = & CPU (h_gr)[f_r2];
2210 FLD (i_src1) = & CPU (h_gr)[f_r1];
2211 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_st_plus", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2212
2213 #if WITH_PROFILE_MODEL_P
2214 /* Record the fields for profiling. */
2215 if (PROFILE_MODEL_P (current_cpu))
2216 {
2217 FLD (in_src2) = f_r2;
2218 FLD (in_src1) = f_r1;
2219 FLD (out_src2) = f_r2;
2220 }
2221 #endif
2222 #undef FLD
2223 BREAK (ex);
2224 }
2225
2226 CASE (ex, FMT_TRAP) :
2227 {
2228 CGEN_INSN_INT insn = entire_insn;
2229 #define FLD(f) abuf->fields.cti.fields.fmt_trap.f
2230 EXTRACT_FMT_TRAP_VARS /* f-op1 f-r1 f-op2 f-uimm4 */
2231
2232 EXTRACT_FMT_TRAP_CODE
2233
2234 /* Record the fields for the semantic handler. */
2235 FLD (f_uimm4) = f_uimm4;
2236 SEM_BRANCH_INIT_EXTRACT (abuf);
2237 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_trap", "uimm4 0x%x", 'x', f_uimm4, (char *) 0));
2238
2239 #if WITH_PROFILE_MODEL_P
2240 /* Record the fields for profiling. */
2241 if (PROFILE_MODEL_P (current_cpu))
2242 {
2243 }
2244 #endif
2245 #undef FLD
2246 BREAK (ex);
2247 }
2248
2249 CASE (ex, FMT_UNLOCK) :
2250 {
2251 CGEN_INSN_INT insn = entire_insn;
2252 #define FLD(f) abuf->fields.fmt_unlock.f
2253 EXTRACT_FMT_UNLOCK_VARS /* f-op1 f-r1 f-op2 f-r2 */
2254
2255 EXTRACT_FMT_UNLOCK_CODE
2256
2257 /* Record the fields for the semantic handler. */
2258 FLD (i_src2) = & CPU (h_gr)[f_r2];
2259 FLD (i_src1) = & CPU (h_gr)[f_r1];
2260 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_unlock", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2261
2262 #if WITH_PROFILE_MODEL_P
2263 /* Record the fields for profiling. */
2264 if (PROFILE_MODEL_P (current_cpu))
2265 {
2266 FLD (in_src2) = f_r2;
2267 FLD (in_src1) = f_r1;
2268 }
2269 #endif
2270 #undef FLD
2271 BREAK (ex);
2272 }
2273
2274 CASE (ex, FMT_SATB) :
2275 {
2276 CGEN_INSN_INT insn = entire_insn;
2277 #define FLD(f) abuf->fields.fmt_satb.f
2278 EXTRACT_FMT_SATB_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
2279
2280 EXTRACT_FMT_SATB_CODE
2281
2282 /* Record the fields for the semantic handler. */
2283 FLD (i_sr) = & CPU (h_gr)[f_r2];
2284 FLD (i_dr) = & CPU (h_gr)[f_r1];
2285 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_satb", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
2286
2287 #if WITH_PROFILE_MODEL_P
2288 /* Record the fields for profiling. */
2289 if (PROFILE_MODEL_P (current_cpu))
2290 {
2291 FLD (in_sr) = f_r2;
2292 FLD (out_dr) = f_r1;
2293 }
2294 #endif
2295 #undef FLD
2296 BREAK (ex);
2297 }
2298
2299 CASE (ex, FMT_SAT) :
2300 {
2301 CGEN_INSN_INT insn = entire_insn;
2302 #define FLD(f) abuf->fields.fmt_sat.f
2303 EXTRACT_FMT_SAT_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
2304
2305 EXTRACT_FMT_SAT_CODE
2306
2307 /* Record the fields for the semantic handler. */
2308 FLD (i_sr) = & CPU (h_gr)[f_r2];
2309 FLD (i_dr) = & CPU (h_gr)[f_r1];
2310 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_sat", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
2311
2312 #if WITH_PROFILE_MODEL_P
2313 /* Record the fields for profiling. */
2314 if (PROFILE_MODEL_P (current_cpu))
2315 {
2316 FLD (in_sr) = f_r2;
2317 FLD (out_dr) = f_r1;
2318 }
2319 #endif
2320 #undef FLD
2321 BREAK (ex);
2322 }
2323
2324 CASE (ex, FMT_SADD) :
2325 {
2326 CGEN_INSN_INT insn = entire_insn;
2327 #define FLD(f) abuf->fields.fmt_sadd.f
2328 EXTRACT_FMT_SADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
2329
2330 EXTRACT_FMT_SADD_CODE
2331
2332 /* Record the fields for the semantic handler. */
2333 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_sadd", (char *) 0));
2334
2335 #undef FLD
2336 BREAK (ex);
2337 }
2338
2339 CASE (ex, FMT_MACWU1) :
2340 {
2341 CGEN_INSN_INT insn = entire_insn;
2342 #define FLD(f) abuf->fields.fmt_macwu1.f
2343 EXTRACT_FMT_MACWU1_VARS /* f-op1 f-r1 f-op2 f-r2 */
2344
2345 EXTRACT_FMT_MACWU1_CODE
2346
2347 /* Record the fields for the semantic handler. */
2348 FLD (i_src1) = & CPU (h_gr)[f_r1];
2349 FLD (i_src2) = & CPU (h_gr)[f_r2];
2350 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_macwu1", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2351
2352 #if WITH_PROFILE_MODEL_P
2353 /* Record the fields for profiling. */
2354 if (PROFILE_MODEL_P (current_cpu))
2355 {
2356 FLD (in_src1) = f_r1;
2357 FLD (in_src2) = f_r2;
2358 }
2359 #endif
2360 #undef FLD
2361 BREAK (ex);
2362 }
2363
2364 CASE (ex, FMT_MSBLO) :
2365 {
2366 CGEN_INSN_INT insn = entire_insn;
2367 #define FLD(f) abuf->fields.fmt_msblo.f
2368 EXTRACT_FMT_MSBLO_VARS /* f-op1 f-r1 f-op2 f-r2 */
2369
2370 EXTRACT_FMT_MSBLO_CODE
2371
2372 /* Record the fields for the semantic handler. */
2373 FLD (i_src1) = & CPU (h_gr)[f_r1];
2374 FLD (i_src2) = & CPU (h_gr)[f_r2];
2375 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_msblo", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2376
2377 #if WITH_PROFILE_MODEL_P
2378 /* Record the fields for profiling. */
2379 if (PROFILE_MODEL_P (current_cpu))
2380 {
2381 FLD (in_src1) = f_r1;
2382 FLD (in_src2) = f_r2;
2383 }
2384 #endif
2385 #undef FLD
2386 BREAK (ex);
2387 }
2388
2389 CASE (ex, FMT_MULWU1) :
2390 {
2391 CGEN_INSN_INT insn = entire_insn;
2392 #define FLD(f) abuf->fields.fmt_mulwu1.f
2393 EXTRACT_FMT_MULWU1_VARS /* f-op1 f-r1 f-op2 f-r2 */
2394
2395 EXTRACT_FMT_MULWU1_CODE
2396
2397 /* Record the fields for the semantic handler. */
2398 FLD (i_src1) = & CPU (h_gr)[f_r1];
2399 FLD (i_src2) = & CPU (h_gr)[f_r2];
2400 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_mulwu1", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2401
2402 #if WITH_PROFILE_MODEL_P
2403 /* Record the fields for profiling. */
2404 if (PROFILE_MODEL_P (current_cpu))
2405 {
2406 FLD (in_src1) = f_r1;
2407 FLD (in_src2) = f_r2;
2408 }
2409 #endif
2410 #undef FLD
2411 BREAK (ex);
2412 }
2413
2414 CASE (ex, FMT_SC) :
2415 {
2416 CGEN_INSN_INT insn = entire_insn;
2417 #define FLD(f) abuf->fields.cti.fields.fmt_sc.f
2418 EXTRACT_FMT_SC_VARS /* f-op1 f-r1 f-op2 f-r2 */
2419
2420 EXTRACT_FMT_SC_CODE
2421
2422 /* Record the fields for the semantic handler. */
2423 SEM_BRANCH_INIT_EXTRACT (abuf);
2424 TRACE_EXTRACT (current_cpu, (current_cpu, pc, "fmt_sc", (char *) 0));
2425
2426 #undef FLD
2427 BREAK (ex);
2428 }
2429
2430 CASE (ex, FMT_EMPTY) :
2431 BREAK (ex);
2432
2433 }
2434 ENDSWITCH (ex)
2435
2436 return idecode->idesc;
2437 }
2438 }