* Makefile.in (MAIN_INCLUDE_DEPS): Delete.
[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 m32rxf
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_EMPTY, FMT_ADD, FMT_ADD3, FMT_AND3
308 , FMT_OR3, FMT_ADDI, FMT_ADDV, FMT_ADDV3
309 , FMT_ADDX, FMT_BC8, FMT_BC24, FMT_BEQ
310 , FMT_BEQZ, FMT_BL8, FMT_BL24, FMT_BCL8
311 , FMT_BCL24, FMT_BRA8, FMT_BRA24, FMT_CMP
312 , FMT_CMPI, FMT_CMPZ, FMT_DIV, FMT_JC
313 , FMT_JL, FMT_JMP, FMT_LD, FMT_LD_D
314 , FMT_LDB, FMT_LDB_D, FMT_LDH, FMT_LDH_D
315 , FMT_LD_PLUS, FMT_LD24, FMT_LDI8, FMT_LDI16
316 , FMT_LOCK, FMT_MACHI_A, FMT_MULHI_A, FMT_MV
317 , FMT_MVFACHI_A, FMT_MVFC, FMT_MVTACHI_A, FMT_MVTC
318 , FMT_NOP, FMT_RAC_DSI, FMT_RTE, FMT_SETH
319 , FMT_SLL3, FMT_SLLI, FMT_ST, FMT_ST_D
320 , FMT_STB, FMT_STB_D, FMT_STH, FMT_STH_D
321 , FMT_ST_PLUS, FMT_TRAP, FMT_UNLOCK, FMT_SATB
322 , FMT_SAT, FMT_SADD, FMT_MACWU1, FMT_MSBLO
323 , FMT_MULWU1, 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_EMPTY) :
851 {
852 CGEN_INSN_INT insn = entire_insn;
853 #define FLD(f) abuf->fields.fmt_empty.f
854 EXTRACT_FMT_EMPTY_VARS /* */
855
856 EXTRACT_FMT_EMPTY_CODE
857
858 /* Record the fields for the semantic handler. */
859 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_empty", (char *) 0));
860
861 #undef FLD
862 BREAK (ex);
863 }
864
865 CASE (ex, FMT_ADD) :
866 {
867 CGEN_INSN_INT insn = entire_insn;
868 #define FLD(f) abuf->fields.fmt_add.f
869 EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
870
871 EXTRACT_FMT_ADD_CODE
872
873 /* Record the fields for the semantic handler. */
874 FLD (i_dr) = & CPU (h_gr)[f_r1];
875 FLD (i_sr) = & CPU (h_gr)[f_r2];
876 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_add", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
877
878 #if WITH_PROFILE_MODEL_P
879 /* Record the fields for profiling. */
880 if (PROFILE_MODEL_P (current_cpu))
881 {
882 FLD (in_dr) = f_r1;
883 FLD (in_sr) = f_r2;
884 FLD (out_dr) = f_r1;
885 }
886 #endif
887 #undef FLD
888 BREAK (ex);
889 }
890
891 CASE (ex, FMT_ADD3) :
892 {
893 CGEN_INSN_INT insn = entire_insn;
894 #define FLD(f) abuf->fields.fmt_add3.f
895 EXTRACT_FMT_ADD3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
896
897 EXTRACT_FMT_ADD3_CODE
898
899 /* Record the fields for the semantic handler. */
900 FLD (f_simm16) = f_simm16;
901 FLD (i_sr) = & CPU (h_gr)[f_r2];
902 FLD (i_dr) = & CPU (h_gr)[f_r1];
903 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_add3", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
904
905 #if WITH_PROFILE_MODEL_P
906 /* Record the fields for profiling. */
907 if (PROFILE_MODEL_P (current_cpu))
908 {
909 FLD (in_sr) = f_r2;
910 FLD (out_dr) = f_r1;
911 }
912 #endif
913 #undef FLD
914 BREAK (ex);
915 }
916
917 CASE (ex, FMT_AND3) :
918 {
919 CGEN_INSN_INT insn = entire_insn;
920 #define FLD(f) abuf->fields.fmt_and3.f
921 EXTRACT_FMT_AND3_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
922
923 EXTRACT_FMT_AND3_CODE
924
925 /* Record the fields for the semantic handler. */
926 FLD (f_uimm16) = f_uimm16;
927 FLD (i_sr) = & CPU (h_gr)[f_r2];
928 FLD (i_dr) = & CPU (h_gr)[f_r1];
929 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_and3", "f_uimm16 0x%x", 'x', f_uimm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
930
931 #if WITH_PROFILE_MODEL_P
932 /* Record the fields for profiling. */
933 if (PROFILE_MODEL_P (current_cpu))
934 {
935 FLD (in_sr) = f_r2;
936 FLD (out_dr) = f_r1;
937 }
938 #endif
939 #undef FLD
940 BREAK (ex);
941 }
942
943 CASE (ex, FMT_OR3) :
944 {
945 CGEN_INSN_INT insn = entire_insn;
946 #define FLD(f) abuf->fields.fmt_or3.f
947 EXTRACT_FMT_OR3_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
948
949 EXTRACT_FMT_OR3_CODE
950
951 /* Record the fields for the semantic handler. */
952 FLD (f_uimm16) = f_uimm16;
953 FLD (i_sr) = & CPU (h_gr)[f_r2];
954 FLD (i_dr) = & CPU (h_gr)[f_r1];
955 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_or3", "f_uimm16 0x%x", 'x', f_uimm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
956
957 #if WITH_PROFILE_MODEL_P
958 /* Record the fields for profiling. */
959 if (PROFILE_MODEL_P (current_cpu))
960 {
961 FLD (in_sr) = f_r2;
962 FLD (out_dr) = f_r1;
963 }
964 #endif
965 #undef FLD
966 BREAK (ex);
967 }
968
969 CASE (ex, FMT_ADDI) :
970 {
971 CGEN_INSN_INT insn = entire_insn;
972 #define FLD(f) abuf->fields.fmt_addi.f
973 EXTRACT_FMT_ADDI_VARS /* f-op1 f-r1 f-simm8 */
974
975 EXTRACT_FMT_ADDI_CODE
976
977 /* Record the fields for the semantic handler. */
978 FLD (f_simm8) = f_simm8;
979 FLD (i_dr) = & CPU (h_gr)[f_r1];
980 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_addi", "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
981
982 #if WITH_PROFILE_MODEL_P
983 /* Record the fields for profiling. */
984 if (PROFILE_MODEL_P (current_cpu))
985 {
986 FLD (in_dr) = f_r1;
987 FLD (out_dr) = f_r1;
988 }
989 #endif
990 #undef FLD
991 BREAK (ex);
992 }
993
994 CASE (ex, FMT_ADDV) :
995 {
996 CGEN_INSN_INT insn = entire_insn;
997 #define FLD(f) abuf->fields.fmt_addv.f
998 EXTRACT_FMT_ADDV_VARS /* f-op1 f-r1 f-op2 f-r2 */
999
1000 EXTRACT_FMT_ADDV_CODE
1001
1002 /* Record the fields for the semantic handler. */
1003 FLD (i_dr) = & CPU (h_gr)[f_r1];
1004 FLD (i_sr) = & CPU (h_gr)[f_r2];
1005 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_addv", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1006
1007 #if WITH_PROFILE_MODEL_P
1008 /* Record the fields for profiling. */
1009 if (PROFILE_MODEL_P (current_cpu))
1010 {
1011 FLD (in_dr) = f_r1;
1012 FLD (in_sr) = f_r2;
1013 FLD (out_dr) = f_r1;
1014 }
1015 #endif
1016 #undef FLD
1017 BREAK (ex);
1018 }
1019
1020 CASE (ex, FMT_ADDV3) :
1021 {
1022 CGEN_INSN_INT insn = entire_insn;
1023 #define FLD(f) abuf->fields.fmt_addv3.f
1024 EXTRACT_FMT_ADDV3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1025
1026 EXTRACT_FMT_ADDV3_CODE
1027
1028 /* Record the fields for the semantic handler. */
1029 FLD (f_simm16) = f_simm16;
1030 FLD (i_sr) = & CPU (h_gr)[f_r2];
1031 FLD (i_dr) = & CPU (h_gr)[f_r1];
1032 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_addv3", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1033
1034 #if WITH_PROFILE_MODEL_P
1035 /* Record the fields for profiling. */
1036 if (PROFILE_MODEL_P (current_cpu))
1037 {
1038 FLD (in_sr) = f_r2;
1039 FLD (out_dr) = f_r1;
1040 }
1041 #endif
1042 #undef FLD
1043 BREAK (ex);
1044 }
1045
1046 CASE (ex, FMT_ADDX) :
1047 {
1048 CGEN_INSN_INT insn = entire_insn;
1049 #define FLD(f) abuf->fields.fmt_addx.f
1050 EXTRACT_FMT_ADDX_VARS /* f-op1 f-r1 f-op2 f-r2 */
1051
1052 EXTRACT_FMT_ADDX_CODE
1053
1054 /* Record the fields for the semantic handler. */
1055 FLD (i_dr) = & CPU (h_gr)[f_r1];
1056 FLD (i_sr) = & CPU (h_gr)[f_r2];
1057 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_addx", "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1058
1059 #if WITH_PROFILE_MODEL_P
1060 /* Record the fields for profiling. */
1061 if (PROFILE_MODEL_P (current_cpu))
1062 {
1063 FLD (in_dr) = f_r1;
1064 FLD (in_sr) = f_r2;
1065 FLD (out_dr) = f_r1;
1066 }
1067 #endif
1068 #undef FLD
1069 BREAK (ex);
1070 }
1071
1072 CASE (ex, FMT_BC8) :
1073 {
1074 CGEN_INSN_INT insn = entire_insn;
1075 #define FLD(f) abuf->fields.cti.fields.fmt_bc8.f
1076 EXTRACT_FMT_BC8_VARS /* f-op1 f-r1 f-disp8 */
1077
1078 EXTRACT_FMT_BC8_CODE
1079
1080 /* Record the fields for the semantic handler. */
1081 FLD (i_disp8) = f_disp8;
1082 SEM_BRANCH_INIT_EXTRACT (abuf);
1083 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1084
1085 #if WITH_PROFILE_MODEL_P
1086 /* Record the fields for profiling. */
1087 if (PROFILE_MODEL_P (current_cpu))
1088 {
1089 }
1090 #endif
1091 #undef FLD
1092 BREAK (ex);
1093 }
1094
1095 CASE (ex, FMT_BC24) :
1096 {
1097 CGEN_INSN_INT insn = entire_insn;
1098 #define FLD(f) abuf->fields.cti.fields.fmt_bc24.f
1099 EXTRACT_FMT_BC24_VARS /* f-op1 f-r1 f-disp24 */
1100
1101 EXTRACT_FMT_BC24_CODE
1102
1103 /* Record the fields for the semantic handler. */
1104 FLD (i_disp24) = f_disp24;
1105 SEM_BRANCH_INIT_EXTRACT (abuf);
1106 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1107
1108 #if WITH_PROFILE_MODEL_P
1109 /* Record the fields for profiling. */
1110 if (PROFILE_MODEL_P (current_cpu))
1111 {
1112 }
1113 #endif
1114 #undef FLD
1115 BREAK (ex);
1116 }
1117
1118 CASE (ex, FMT_BEQ) :
1119 {
1120 CGEN_INSN_INT insn = entire_insn;
1121 #define FLD(f) abuf->fields.cti.fields.fmt_beq.f
1122 EXTRACT_FMT_BEQ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
1123
1124 EXTRACT_FMT_BEQ_CODE
1125
1126 /* Record the fields for the semantic handler. */
1127 FLD (i_src1) = & CPU (h_gr)[f_r1];
1128 FLD (i_src2) = & CPU (h_gr)[f_r2];
1129 FLD (i_disp16) = f_disp16;
1130 SEM_BRANCH_INIT_EXTRACT (abuf);
1131 TRACE_EXTRACT (current_cpu, abuf, (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));
1132
1133 #if WITH_PROFILE_MODEL_P
1134 /* Record the fields for profiling. */
1135 if (PROFILE_MODEL_P (current_cpu))
1136 {
1137 FLD (in_src1) = f_r1;
1138 FLD (in_src2) = f_r2;
1139 }
1140 #endif
1141 #undef FLD
1142 BREAK (ex);
1143 }
1144
1145 CASE (ex, FMT_BEQZ) :
1146 {
1147 CGEN_INSN_INT insn = entire_insn;
1148 #define FLD(f) abuf->fields.cti.fields.fmt_beqz.f
1149 EXTRACT_FMT_BEQZ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
1150
1151 EXTRACT_FMT_BEQZ_CODE
1152
1153 /* Record the fields for the semantic handler. */
1154 FLD (i_src2) = & CPU (h_gr)[f_r2];
1155 FLD (i_disp16) = f_disp16;
1156 SEM_BRANCH_INIT_EXTRACT (abuf);
1157 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_beqz", "src2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, (char *) 0));
1158
1159 #if WITH_PROFILE_MODEL_P
1160 /* Record the fields for profiling. */
1161 if (PROFILE_MODEL_P (current_cpu))
1162 {
1163 FLD (in_src2) = f_r2;
1164 }
1165 #endif
1166 #undef FLD
1167 BREAK (ex);
1168 }
1169
1170 CASE (ex, FMT_BL8) :
1171 {
1172 CGEN_INSN_INT insn = entire_insn;
1173 #define FLD(f) abuf->fields.cti.fields.fmt_bl8.f
1174 EXTRACT_FMT_BL8_VARS /* f-op1 f-r1 f-disp8 */
1175
1176 EXTRACT_FMT_BL8_CODE
1177
1178 /* Record the fields for the semantic handler. */
1179 FLD (i_disp8) = f_disp8;
1180 SEM_BRANCH_INIT_EXTRACT (abuf);
1181 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1182
1183 #if WITH_PROFILE_MODEL_P
1184 /* Record the fields for profiling. */
1185 if (PROFILE_MODEL_P (current_cpu))
1186 {
1187 FLD (out_h_gr_14) = 14;
1188 }
1189 #endif
1190 #undef FLD
1191 BREAK (ex);
1192 }
1193
1194 CASE (ex, FMT_BL24) :
1195 {
1196 CGEN_INSN_INT insn = entire_insn;
1197 #define FLD(f) abuf->fields.cti.fields.fmt_bl24.f
1198 EXTRACT_FMT_BL24_VARS /* f-op1 f-r1 f-disp24 */
1199
1200 EXTRACT_FMT_BL24_CODE
1201
1202 /* Record the fields for the semantic handler. */
1203 FLD (i_disp24) = f_disp24;
1204 SEM_BRANCH_INIT_EXTRACT (abuf);
1205 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1206
1207 #if WITH_PROFILE_MODEL_P
1208 /* Record the fields for profiling. */
1209 if (PROFILE_MODEL_P (current_cpu))
1210 {
1211 FLD (out_h_gr_14) = 14;
1212 }
1213 #endif
1214 #undef FLD
1215 BREAK (ex);
1216 }
1217
1218 CASE (ex, FMT_BCL8) :
1219 {
1220 CGEN_INSN_INT insn = entire_insn;
1221 #define FLD(f) abuf->fields.cti.fields.fmt_bcl8.f
1222 EXTRACT_FMT_BCL8_VARS /* f-op1 f-r1 f-disp8 */
1223
1224 EXTRACT_FMT_BCL8_CODE
1225
1226 /* Record the fields for the semantic handler. */
1227 FLD (i_disp8) = f_disp8;
1228 SEM_BRANCH_INIT_EXTRACT (abuf);
1229 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bcl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1230
1231 #if WITH_PROFILE_MODEL_P
1232 /* Record the fields for profiling. */
1233 if (PROFILE_MODEL_P (current_cpu))
1234 {
1235 FLD (out_h_gr_14) = 14;
1236 }
1237 #endif
1238 #undef FLD
1239 BREAK (ex);
1240 }
1241
1242 CASE (ex, FMT_BCL24) :
1243 {
1244 CGEN_INSN_INT insn = entire_insn;
1245 #define FLD(f) abuf->fields.cti.fields.fmt_bcl24.f
1246 EXTRACT_FMT_BCL24_VARS /* f-op1 f-r1 f-disp24 */
1247
1248 EXTRACT_FMT_BCL24_CODE
1249
1250 /* Record the fields for the semantic handler. */
1251 FLD (i_disp24) = f_disp24;
1252 SEM_BRANCH_INIT_EXTRACT (abuf);
1253 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bcl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1254
1255 #if WITH_PROFILE_MODEL_P
1256 /* Record the fields for profiling. */
1257 if (PROFILE_MODEL_P (current_cpu))
1258 {
1259 FLD (out_h_gr_14) = 14;
1260 }
1261 #endif
1262 #undef FLD
1263 BREAK (ex);
1264 }
1265
1266 CASE (ex, FMT_BRA8) :
1267 {
1268 CGEN_INSN_INT insn = entire_insn;
1269 #define FLD(f) abuf->fields.cti.fields.fmt_bra8.f
1270 EXTRACT_FMT_BRA8_VARS /* f-op1 f-r1 f-disp8 */
1271
1272 EXTRACT_FMT_BRA8_CODE
1273
1274 /* Record the fields for the semantic handler. */
1275 FLD (i_disp8) = f_disp8;
1276 SEM_BRANCH_INIT_EXTRACT (abuf);
1277 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1278
1279 #if WITH_PROFILE_MODEL_P
1280 /* Record the fields for profiling. */
1281 if (PROFILE_MODEL_P (current_cpu))
1282 {
1283 }
1284 #endif
1285 #undef FLD
1286 BREAK (ex);
1287 }
1288
1289 CASE (ex, FMT_BRA24) :
1290 {
1291 CGEN_INSN_INT insn = entire_insn;
1292 #define FLD(f) abuf->fields.cti.fields.fmt_bra24.f
1293 EXTRACT_FMT_BRA24_VARS /* f-op1 f-r1 f-disp24 */
1294
1295 EXTRACT_FMT_BRA24_CODE
1296
1297 /* Record the fields for the semantic handler. */
1298 FLD (i_disp24) = f_disp24;
1299 SEM_BRANCH_INIT_EXTRACT (abuf);
1300 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1301
1302 #if WITH_PROFILE_MODEL_P
1303 /* Record the fields for profiling. */
1304 if (PROFILE_MODEL_P (current_cpu))
1305 {
1306 }
1307 #endif
1308 #undef FLD
1309 BREAK (ex);
1310 }
1311
1312 CASE (ex, FMT_CMP) :
1313 {
1314 CGEN_INSN_INT insn = entire_insn;
1315 #define FLD(f) abuf->fields.fmt_cmp.f
1316 EXTRACT_FMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1317
1318 EXTRACT_FMT_CMP_CODE
1319
1320 /* Record the fields for the semantic handler. */
1321 FLD (i_src1) = & CPU (h_gr)[f_r1];
1322 FLD (i_src2) = & CPU (h_gr)[f_r2];
1323 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_cmp", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1324
1325 #if WITH_PROFILE_MODEL_P
1326 /* Record the fields for profiling. */
1327 if (PROFILE_MODEL_P (current_cpu))
1328 {
1329 FLD (in_src1) = f_r1;
1330 FLD (in_src2) = f_r2;
1331 }
1332 #endif
1333 #undef FLD
1334 BREAK (ex);
1335 }
1336
1337 CASE (ex, FMT_CMPI) :
1338 {
1339 CGEN_INSN_INT insn = entire_insn;
1340 #define FLD(f) abuf->fields.fmt_cmpi.f
1341 EXTRACT_FMT_CMPI_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1342
1343 EXTRACT_FMT_CMPI_CODE
1344
1345 /* Record the fields for the semantic handler. */
1346 FLD (f_simm16) = f_simm16;
1347 FLD (i_src2) = & CPU (h_gr)[f_r2];
1348 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_cmpi", "f_simm16 0x%x", 'x', f_simm16, "src2 0x%x", 'x', f_r2, (char *) 0));
1349
1350 #if WITH_PROFILE_MODEL_P
1351 /* Record the fields for profiling. */
1352 if (PROFILE_MODEL_P (current_cpu))
1353 {
1354 FLD (in_src2) = f_r2;
1355 }
1356 #endif
1357 #undef FLD
1358 BREAK (ex);
1359 }
1360
1361 CASE (ex, FMT_CMPZ) :
1362 {
1363 CGEN_INSN_INT insn = entire_insn;
1364 #define FLD(f) abuf->fields.fmt_cmpz.f
1365 EXTRACT_FMT_CMPZ_VARS /* f-op1 f-r1 f-op2 f-r2 */
1366
1367 EXTRACT_FMT_CMPZ_CODE
1368
1369 /* Record the fields for the semantic handler. */
1370 FLD (i_src2) = & CPU (h_gr)[f_r2];
1371 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_cmpz", "src2 0x%x", 'x', f_r2, (char *) 0));
1372
1373 #if WITH_PROFILE_MODEL_P
1374 /* Record the fields for profiling. */
1375 if (PROFILE_MODEL_P (current_cpu))
1376 {
1377 FLD (in_src2) = f_r2;
1378 }
1379 #endif
1380 #undef FLD
1381 BREAK (ex);
1382 }
1383
1384 CASE (ex, FMT_DIV) :
1385 {
1386 CGEN_INSN_INT insn = entire_insn;
1387 #define FLD(f) abuf->fields.fmt_div.f
1388 EXTRACT_FMT_DIV_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1389
1390 EXTRACT_FMT_DIV_CODE
1391
1392 /* Record the fields for the semantic handler. */
1393 FLD (i_sr) = & CPU (h_gr)[f_r2];
1394 FLD (i_dr) = & CPU (h_gr)[f_r1];
1395 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_div", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1396
1397 #if WITH_PROFILE_MODEL_P
1398 /* Record the fields for profiling. */
1399 if (PROFILE_MODEL_P (current_cpu))
1400 {
1401 FLD (in_sr) = f_r2;
1402 FLD (in_dr) = f_r1;
1403 FLD (out_dr) = f_r1;
1404 }
1405 #endif
1406 #undef FLD
1407 BREAK (ex);
1408 }
1409
1410 CASE (ex, FMT_JC) :
1411 {
1412 CGEN_INSN_INT insn = entire_insn;
1413 #define FLD(f) abuf->fields.cti.fields.fmt_jc.f
1414 EXTRACT_FMT_JC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1415
1416 EXTRACT_FMT_JC_CODE
1417
1418 /* Record the fields for the semantic handler. */
1419 FLD (i_sr) = & CPU (h_gr)[f_r2];
1420 SEM_BRANCH_INIT_EXTRACT (abuf);
1421 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_jc", "sr 0x%x", 'x', f_r2, (char *) 0));
1422
1423 #if WITH_PROFILE_MODEL_P
1424 /* Record the fields for profiling. */
1425 if (PROFILE_MODEL_P (current_cpu))
1426 {
1427 FLD (in_sr) = f_r2;
1428 }
1429 #endif
1430 #undef FLD
1431 BREAK (ex);
1432 }
1433
1434 CASE (ex, FMT_JL) :
1435 {
1436 CGEN_INSN_INT insn = entire_insn;
1437 #define FLD(f) abuf->fields.cti.fields.fmt_jl.f
1438 EXTRACT_FMT_JL_VARS /* f-op1 f-r1 f-op2 f-r2 */
1439
1440 EXTRACT_FMT_JL_CODE
1441
1442 /* Record the fields for the semantic handler. */
1443 FLD (i_sr) = & CPU (h_gr)[f_r2];
1444 SEM_BRANCH_INIT_EXTRACT (abuf);
1445 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_jl", "sr 0x%x", 'x', f_r2, (char *) 0));
1446
1447 #if WITH_PROFILE_MODEL_P
1448 /* Record the fields for profiling. */
1449 if (PROFILE_MODEL_P (current_cpu))
1450 {
1451 FLD (in_sr) = f_r2;
1452 FLD (out_h_gr_14) = 14;
1453 }
1454 #endif
1455 #undef FLD
1456 BREAK (ex);
1457 }
1458
1459 CASE (ex, FMT_JMP) :
1460 {
1461 CGEN_INSN_INT insn = entire_insn;
1462 #define FLD(f) abuf->fields.cti.fields.fmt_jmp.f
1463 EXTRACT_FMT_JMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1464
1465 EXTRACT_FMT_JMP_CODE
1466
1467 /* Record the fields for the semantic handler. */
1468 FLD (i_sr) = & CPU (h_gr)[f_r2];
1469 SEM_BRANCH_INIT_EXTRACT (abuf);
1470 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_jmp", "sr 0x%x", 'x', f_r2, (char *) 0));
1471
1472 #if WITH_PROFILE_MODEL_P
1473 /* Record the fields for profiling. */
1474 if (PROFILE_MODEL_P (current_cpu))
1475 {
1476 FLD (in_sr) = f_r2;
1477 }
1478 #endif
1479 #undef FLD
1480 BREAK (ex);
1481 }
1482
1483 CASE (ex, FMT_LD) :
1484 {
1485 CGEN_INSN_INT insn = entire_insn;
1486 #define FLD(f) abuf->fields.fmt_ld.f
1487 EXTRACT_FMT_LD_VARS /* f-op1 f-r1 f-op2 f-r2 */
1488
1489 EXTRACT_FMT_LD_CODE
1490
1491 /* Record the fields for the semantic handler. */
1492 FLD (i_sr) = & CPU (h_gr)[f_r2];
1493 FLD (i_dr) = & CPU (h_gr)[f_r1];
1494 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ld", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1495
1496 #if WITH_PROFILE_MODEL_P
1497 /* Record the fields for profiling. */
1498 if (PROFILE_MODEL_P (current_cpu))
1499 {
1500 FLD (in_sr) = f_r2;
1501 FLD (out_dr) = f_r1;
1502 }
1503 #endif
1504 #undef FLD
1505 BREAK (ex);
1506 }
1507
1508 CASE (ex, FMT_LD_D) :
1509 {
1510 CGEN_INSN_INT insn = entire_insn;
1511 #define FLD(f) abuf->fields.fmt_ld_d.f
1512 EXTRACT_FMT_LD_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1513
1514 EXTRACT_FMT_LD_D_CODE
1515
1516 /* Record the fields for the semantic handler. */
1517 FLD (f_simm16) = f_simm16;
1518 FLD (i_sr) = & CPU (h_gr)[f_r2];
1519 FLD (i_dr) = & CPU (h_gr)[f_r1];
1520 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ld_d", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1521
1522 #if WITH_PROFILE_MODEL_P
1523 /* Record the fields for profiling. */
1524 if (PROFILE_MODEL_P (current_cpu))
1525 {
1526 FLD (in_sr) = f_r2;
1527 FLD (out_dr) = f_r1;
1528 }
1529 #endif
1530 #undef FLD
1531 BREAK (ex);
1532 }
1533
1534 CASE (ex, FMT_LDB) :
1535 {
1536 CGEN_INSN_INT insn = entire_insn;
1537 #define FLD(f) abuf->fields.fmt_ldb.f
1538 EXTRACT_FMT_LDB_VARS /* f-op1 f-r1 f-op2 f-r2 */
1539
1540 EXTRACT_FMT_LDB_CODE
1541
1542 /* Record the fields for the semantic handler. */
1543 FLD (i_sr) = & CPU (h_gr)[f_r2];
1544 FLD (i_dr) = & CPU (h_gr)[f_r1];
1545 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldb", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1546
1547 #if WITH_PROFILE_MODEL_P
1548 /* Record the fields for profiling. */
1549 if (PROFILE_MODEL_P (current_cpu))
1550 {
1551 FLD (in_sr) = f_r2;
1552 FLD (out_dr) = f_r1;
1553 }
1554 #endif
1555 #undef FLD
1556 BREAK (ex);
1557 }
1558
1559 CASE (ex, FMT_LDB_D) :
1560 {
1561 CGEN_INSN_INT insn = entire_insn;
1562 #define FLD(f) abuf->fields.fmt_ldb_d.f
1563 EXTRACT_FMT_LDB_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1564
1565 EXTRACT_FMT_LDB_D_CODE
1566
1567 /* Record the fields for the semantic handler. */
1568 FLD (f_simm16) = f_simm16;
1569 FLD (i_sr) = & CPU (h_gr)[f_r2];
1570 FLD (i_dr) = & CPU (h_gr)[f_r1];
1571 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldb_d", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1572
1573 #if WITH_PROFILE_MODEL_P
1574 /* Record the fields for profiling. */
1575 if (PROFILE_MODEL_P (current_cpu))
1576 {
1577 FLD (in_sr) = f_r2;
1578 FLD (out_dr) = f_r1;
1579 }
1580 #endif
1581 #undef FLD
1582 BREAK (ex);
1583 }
1584
1585 CASE (ex, FMT_LDH) :
1586 {
1587 CGEN_INSN_INT insn = entire_insn;
1588 #define FLD(f) abuf->fields.fmt_ldh.f
1589 EXTRACT_FMT_LDH_VARS /* f-op1 f-r1 f-op2 f-r2 */
1590
1591 EXTRACT_FMT_LDH_CODE
1592
1593 /* Record the fields for the semantic handler. */
1594 FLD (i_sr) = & CPU (h_gr)[f_r2];
1595 FLD (i_dr) = & CPU (h_gr)[f_r1];
1596 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldh", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1597
1598 #if WITH_PROFILE_MODEL_P
1599 /* Record the fields for profiling. */
1600 if (PROFILE_MODEL_P (current_cpu))
1601 {
1602 FLD (in_sr) = f_r2;
1603 FLD (out_dr) = f_r1;
1604 }
1605 #endif
1606 #undef FLD
1607 BREAK (ex);
1608 }
1609
1610 CASE (ex, FMT_LDH_D) :
1611 {
1612 CGEN_INSN_INT insn = entire_insn;
1613 #define FLD(f) abuf->fields.fmt_ldh_d.f
1614 EXTRACT_FMT_LDH_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1615
1616 EXTRACT_FMT_LDH_D_CODE
1617
1618 /* Record the fields for the semantic handler. */
1619 FLD (f_simm16) = f_simm16;
1620 FLD (i_sr) = & CPU (h_gr)[f_r2];
1621 FLD (i_dr) = & CPU (h_gr)[f_r1];
1622 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldh_d", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1623
1624 #if WITH_PROFILE_MODEL_P
1625 /* Record the fields for profiling. */
1626 if (PROFILE_MODEL_P (current_cpu))
1627 {
1628 FLD (in_sr) = f_r2;
1629 FLD (out_dr) = f_r1;
1630 }
1631 #endif
1632 #undef FLD
1633 BREAK (ex);
1634 }
1635
1636 CASE (ex, FMT_LD_PLUS) :
1637 {
1638 CGEN_INSN_INT insn = entire_insn;
1639 #define FLD(f) abuf->fields.fmt_ld_plus.f
1640 EXTRACT_FMT_LD_PLUS_VARS /* f-op1 f-r1 f-op2 f-r2 */
1641
1642 EXTRACT_FMT_LD_PLUS_CODE
1643
1644 /* Record the fields for the semantic handler. */
1645 FLD (i_sr) = & CPU (h_gr)[f_r2];
1646 FLD (i_dr) = & CPU (h_gr)[f_r1];
1647 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ld_plus", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1648
1649 #if WITH_PROFILE_MODEL_P
1650 /* Record the fields for profiling. */
1651 if (PROFILE_MODEL_P (current_cpu))
1652 {
1653 FLD (in_sr) = f_r2;
1654 FLD (out_dr) = f_r1;
1655 FLD (out_sr) = f_r2;
1656 }
1657 #endif
1658 #undef FLD
1659 BREAK (ex);
1660 }
1661
1662 CASE (ex, FMT_LD24) :
1663 {
1664 CGEN_INSN_INT insn = entire_insn;
1665 #define FLD(f) abuf->fields.fmt_ld24.f
1666 EXTRACT_FMT_LD24_VARS /* f-op1 f-r1 f-uimm24 */
1667
1668 EXTRACT_FMT_LD24_CODE
1669
1670 /* Record the fields for the semantic handler. */
1671 FLD (i_uimm24) = f_uimm24;
1672 FLD (i_dr) = & CPU (h_gr)[f_r1];
1673 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ld24", "uimm24 0x%x", 'x', f_uimm24, "dr 0x%x", 'x', f_r1, (char *) 0));
1674
1675 #if WITH_PROFILE_MODEL_P
1676 /* Record the fields for profiling. */
1677 if (PROFILE_MODEL_P (current_cpu))
1678 {
1679 FLD (out_dr) = f_r1;
1680 }
1681 #endif
1682 #undef FLD
1683 BREAK (ex);
1684 }
1685
1686 CASE (ex, FMT_LDI8) :
1687 {
1688 CGEN_INSN_INT insn = entire_insn;
1689 #define FLD(f) abuf->fields.fmt_ldi8.f
1690 EXTRACT_FMT_LDI8_VARS /* f-op1 f-r1 f-simm8 */
1691
1692 EXTRACT_FMT_LDI8_CODE
1693
1694 /* Record the fields for the semantic handler. */
1695 FLD (f_simm8) = f_simm8;
1696 FLD (i_dr) = & CPU (h_gr)[f_r1];
1697 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldi8", "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
1698
1699 #if WITH_PROFILE_MODEL_P
1700 /* Record the fields for profiling. */
1701 if (PROFILE_MODEL_P (current_cpu))
1702 {
1703 FLD (out_dr) = f_r1;
1704 }
1705 #endif
1706 #undef FLD
1707 BREAK (ex);
1708 }
1709
1710 CASE (ex, FMT_LDI16) :
1711 {
1712 CGEN_INSN_INT insn = entire_insn;
1713 #define FLD(f) abuf->fields.fmt_ldi16.f
1714 EXTRACT_FMT_LDI16_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1715
1716 EXTRACT_FMT_LDI16_CODE
1717
1718 /* Record the fields for the semantic handler. */
1719 FLD (f_simm16) = f_simm16;
1720 FLD (i_dr) = & CPU (h_gr)[f_r1];
1721 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_ldi16", "f_simm16 0x%x", 'x', f_simm16, "dr 0x%x", 'x', f_r1, (char *) 0));
1722
1723 #if WITH_PROFILE_MODEL_P
1724 /* Record the fields for profiling. */
1725 if (PROFILE_MODEL_P (current_cpu))
1726 {
1727 FLD (out_dr) = f_r1;
1728 }
1729 #endif
1730 #undef FLD
1731 BREAK (ex);
1732 }
1733
1734 CASE (ex, FMT_LOCK) :
1735 {
1736 CGEN_INSN_INT insn = entire_insn;
1737 #define FLD(f) abuf->fields.fmt_lock.f
1738 EXTRACT_FMT_LOCK_VARS /* f-op1 f-r1 f-op2 f-r2 */
1739
1740 EXTRACT_FMT_LOCK_CODE
1741
1742 /* Record the fields for the semantic handler. */
1743 FLD (i_sr) = & CPU (h_gr)[f_r2];
1744 FLD (i_dr) = & CPU (h_gr)[f_r1];
1745 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_lock", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1746
1747 #if WITH_PROFILE_MODEL_P
1748 /* Record the fields for profiling. */
1749 if (PROFILE_MODEL_P (current_cpu))
1750 {
1751 FLD (in_sr) = f_r2;
1752 FLD (out_dr) = f_r1;
1753 }
1754 #endif
1755 #undef FLD
1756 BREAK (ex);
1757 }
1758
1759 CASE (ex, FMT_MACHI_A) :
1760 {
1761 CGEN_INSN_INT insn = entire_insn;
1762 #define FLD(f) abuf->fields.fmt_machi_a.f
1763 EXTRACT_FMT_MACHI_A_VARS /* f-op1 f-r1 f-acc f-op23 f-r2 */
1764
1765 EXTRACT_FMT_MACHI_A_CODE
1766
1767 /* Record the fields for the semantic handler. */
1768 FLD (f_acc) = f_acc;
1769 FLD (i_src1) = & CPU (h_gr)[f_r1];
1770 FLD (i_src2) = & CPU (h_gr)[f_r2];
1771 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_machi_a", "f_acc 0x%x", 'x', f_acc, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1772
1773 #if WITH_PROFILE_MODEL_P
1774 /* Record the fields for profiling. */
1775 if (PROFILE_MODEL_P (current_cpu))
1776 {
1777 FLD (in_src1) = f_r1;
1778 FLD (in_src2) = f_r2;
1779 }
1780 #endif
1781 #undef FLD
1782 BREAK (ex);
1783 }
1784
1785 CASE (ex, FMT_MULHI_A) :
1786 {
1787 CGEN_INSN_INT insn = entire_insn;
1788 #define FLD(f) abuf->fields.fmt_mulhi_a.f
1789 EXTRACT_FMT_MULHI_A_VARS /* f-op1 f-r1 f-acc f-op23 f-r2 */
1790
1791 EXTRACT_FMT_MULHI_A_CODE
1792
1793 /* Record the fields for the semantic handler. */
1794 FLD (f_acc) = f_acc;
1795 FLD (i_src1) = & CPU (h_gr)[f_r1];
1796 FLD (i_src2) = & CPU (h_gr)[f_r2];
1797 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mulhi_a", "f_acc 0x%x", 'x', f_acc, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1798
1799 #if WITH_PROFILE_MODEL_P
1800 /* Record the fields for profiling. */
1801 if (PROFILE_MODEL_P (current_cpu))
1802 {
1803 FLD (in_src1) = f_r1;
1804 FLD (in_src2) = f_r2;
1805 }
1806 #endif
1807 #undef FLD
1808 BREAK (ex);
1809 }
1810
1811 CASE (ex, FMT_MV) :
1812 {
1813 CGEN_INSN_INT insn = entire_insn;
1814 #define FLD(f) abuf->fields.fmt_mv.f
1815 EXTRACT_FMT_MV_VARS /* f-op1 f-r1 f-op2 f-r2 */
1816
1817 EXTRACT_FMT_MV_CODE
1818
1819 /* Record the fields for the semantic handler. */
1820 FLD (i_sr) = & CPU (h_gr)[f_r2];
1821 FLD (i_dr) = & CPU (h_gr)[f_r1];
1822 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mv", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1823
1824 #if WITH_PROFILE_MODEL_P
1825 /* Record the fields for profiling. */
1826 if (PROFILE_MODEL_P (current_cpu))
1827 {
1828 FLD (in_sr) = f_r2;
1829 FLD (out_dr) = f_r1;
1830 }
1831 #endif
1832 #undef FLD
1833 BREAK (ex);
1834 }
1835
1836 CASE (ex, FMT_MVFACHI_A) :
1837 {
1838 CGEN_INSN_INT insn = entire_insn;
1839 #define FLD(f) abuf->fields.fmt_mvfachi_a.f
1840 EXTRACT_FMT_MVFACHI_A_VARS /* f-op1 f-r1 f-op2 f-accs f-op3 */
1841
1842 EXTRACT_FMT_MVFACHI_A_CODE
1843
1844 /* Record the fields for the semantic handler. */
1845 FLD (f_accs) = f_accs;
1846 FLD (i_dr) = & CPU (h_gr)[f_r1];
1847 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mvfachi_a", "f_accs 0x%x", 'x', f_accs, "dr 0x%x", 'x', f_r1, (char *) 0));
1848
1849 #if WITH_PROFILE_MODEL_P
1850 /* Record the fields for profiling. */
1851 if (PROFILE_MODEL_P (current_cpu))
1852 {
1853 FLD (out_dr) = f_r1;
1854 }
1855 #endif
1856 #undef FLD
1857 BREAK (ex);
1858 }
1859
1860 CASE (ex, FMT_MVFC) :
1861 {
1862 CGEN_INSN_INT insn = entire_insn;
1863 #define FLD(f) abuf->fields.fmt_mvfc.f
1864 EXTRACT_FMT_MVFC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1865
1866 EXTRACT_FMT_MVFC_CODE
1867
1868 /* Record the fields for the semantic handler. */
1869 FLD (f_r2) = f_r2;
1870 FLD (i_dr) = & CPU (h_gr)[f_r1];
1871 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mvfc", "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1872
1873 #if WITH_PROFILE_MODEL_P
1874 /* Record the fields for profiling. */
1875 if (PROFILE_MODEL_P (current_cpu))
1876 {
1877 FLD (out_dr) = f_r1;
1878 }
1879 #endif
1880 #undef FLD
1881 BREAK (ex);
1882 }
1883
1884 CASE (ex, FMT_MVTACHI_A) :
1885 {
1886 CGEN_INSN_INT insn = entire_insn;
1887 #define FLD(f) abuf->fields.fmt_mvtachi_a.f
1888 EXTRACT_FMT_MVTACHI_A_VARS /* f-op1 f-r1 f-op2 f-accs f-op3 */
1889
1890 EXTRACT_FMT_MVTACHI_A_CODE
1891
1892 /* Record the fields for the semantic handler. */
1893 FLD (f_accs) = f_accs;
1894 FLD (i_src1) = & CPU (h_gr)[f_r1];
1895 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mvtachi_a", "f_accs 0x%x", 'x', f_accs, "src1 0x%x", 'x', f_r1, (char *) 0));
1896
1897 #if WITH_PROFILE_MODEL_P
1898 /* Record the fields for profiling. */
1899 if (PROFILE_MODEL_P (current_cpu))
1900 {
1901 FLD (in_src1) = f_r1;
1902 }
1903 #endif
1904 #undef FLD
1905 BREAK (ex);
1906 }
1907
1908 CASE (ex, FMT_MVTC) :
1909 {
1910 CGEN_INSN_INT insn = entire_insn;
1911 #define FLD(f) abuf->fields.fmt_mvtc.f
1912 EXTRACT_FMT_MVTC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1913
1914 EXTRACT_FMT_MVTC_CODE
1915
1916 /* Record the fields for the semantic handler. */
1917 FLD (f_r1) = f_r1;
1918 FLD (i_sr) = & CPU (h_gr)[f_r2];
1919 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mvtc", "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1920
1921 #if WITH_PROFILE_MODEL_P
1922 /* Record the fields for profiling. */
1923 if (PROFILE_MODEL_P (current_cpu))
1924 {
1925 FLD (in_sr) = f_r2;
1926 }
1927 #endif
1928 #undef FLD
1929 BREAK (ex);
1930 }
1931
1932 CASE (ex, FMT_NOP) :
1933 {
1934 CGEN_INSN_INT insn = entire_insn;
1935 #define FLD(f) abuf->fields.fmt_nop.f
1936 EXTRACT_FMT_NOP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1937
1938 EXTRACT_FMT_NOP_CODE
1939
1940 /* Record the fields for the semantic handler. */
1941 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_nop", (char *) 0));
1942
1943 #undef FLD
1944 BREAK (ex);
1945 }
1946
1947 CASE (ex, FMT_RAC_DSI) :
1948 {
1949 CGEN_INSN_INT insn = entire_insn;
1950 #define FLD(f) abuf->fields.fmt_rac_dsi.f
1951 EXTRACT_FMT_RAC_DSI_VARS /* f-op1 f-accd f-bits67 f-op2 f-accs f-bit14 f-imm1 */
1952
1953 EXTRACT_FMT_RAC_DSI_CODE
1954
1955 /* Record the fields for the semantic handler. */
1956 FLD (f_accs) = f_accs;
1957 FLD (f_imm1) = f_imm1;
1958 FLD (f_accd) = f_accd;
1959 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_rac_dsi", "f_accs 0x%x", 'x', f_accs, "f_imm1 0x%x", 'x', f_imm1, "f_accd 0x%x", 'x', f_accd, (char *) 0));
1960
1961 #undef FLD
1962 BREAK (ex);
1963 }
1964
1965 CASE (ex, FMT_RTE) :
1966 {
1967 CGEN_INSN_INT insn = entire_insn;
1968 #define FLD(f) abuf->fields.cti.fields.fmt_rte.f
1969 EXTRACT_FMT_RTE_VARS /* f-op1 f-r1 f-op2 f-r2 */
1970
1971 EXTRACT_FMT_RTE_CODE
1972
1973 /* Record the fields for the semantic handler. */
1974 SEM_BRANCH_INIT_EXTRACT (abuf);
1975 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_rte", (char *) 0));
1976
1977 #if WITH_PROFILE_MODEL_P
1978 /* Record the fields for profiling. */
1979 if (PROFILE_MODEL_P (current_cpu))
1980 {
1981 }
1982 #endif
1983 #undef FLD
1984 BREAK (ex);
1985 }
1986
1987 CASE (ex, FMT_SETH) :
1988 {
1989 CGEN_INSN_INT insn = entire_insn;
1990 #define FLD(f) abuf->fields.fmt_seth.f
1991 EXTRACT_FMT_SETH_VARS /* f-op1 f-r1 f-op2 f-r2 f-hi16 */
1992
1993 EXTRACT_FMT_SETH_CODE
1994
1995 /* Record the fields for the semantic handler. */
1996 FLD (f_hi16) = f_hi16;
1997 FLD (i_dr) = & CPU (h_gr)[f_r1];
1998 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_seth", "f_hi16 0x%x", 'x', f_hi16, "dr 0x%x", 'x', f_r1, (char *) 0));
1999
2000 #if WITH_PROFILE_MODEL_P
2001 /* Record the fields for profiling. */
2002 if (PROFILE_MODEL_P (current_cpu))
2003 {
2004 FLD (out_dr) = f_r1;
2005 }
2006 #endif
2007 #undef FLD
2008 BREAK (ex);
2009 }
2010
2011 CASE (ex, FMT_SLL3) :
2012 {
2013 CGEN_INSN_INT insn = entire_insn;
2014 #define FLD(f) abuf->fields.fmt_sll3.f
2015 EXTRACT_FMT_SLL3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2016
2017 EXTRACT_FMT_SLL3_CODE
2018
2019 /* Record the fields for the semantic handler. */
2020 FLD (f_simm16) = f_simm16;
2021 FLD (i_sr) = & CPU (h_gr)[f_r2];
2022 FLD (i_dr) = & CPU (h_gr)[f_r1];
2023 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_sll3", "f_simm16 0x%x", 'x', f_simm16, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
2024
2025 #if WITH_PROFILE_MODEL_P
2026 /* Record the fields for profiling. */
2027 if (PROFILE_MODEL_P (current_cpu))
2028 {
2029 FLD (in_sr) = f_r2;
2030 FLD (out_dr) = f_r1;
2031 }
2032 #endif
2033 #undef FLD
2034 BREAK (ex);
2035 }
2036
2037 CASE (ex, FMT_SLLI) :
2038 {
2039 CGEN_INSN_INT insn = entire_insn;
2040 #define FLD(f) abuf->fields.fmt_slli.f
2041 EXTRACT_FMT_SLLI_VARS /* f-op1 f-r1 f-shift-op2 f-uimm5 */
2042
2043 EXTRACT_FMT_SLLI_CODE
2044
2045 /* Record the fields for the semantic handler. */
2046 FLD (f_uimm5) = f_uimm5;
2047 FLD (i_dr) = & CPU (h_gr)[f_r1];
2048 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_slli", "f_uimm5 0x%x", 'x', f_uimm5, "dr 0x%x", 'x', f_r1, (char *) 0));
2049
2050 #if WITH_PROFILE_MODEL_P
2051 /* Record the fields for profiling. */
2052 if (PROFILE_MODEL_P (current_cpu))
2053 {
2054 FLD (in_dr) = f_r1;
2055 FLD (out_dr) = f_r1;
2056 }
2057 #endif
2058 #undef FLD
2059 BREAK (ex);
2060 }
2061
2062 CASE (ex, FMT_ST) :
2063 {
2064 CGEN_INSN_INT insn = entire_insn;
2065 #define FLD(f) abuf->fields.fmt_st.f
2066 EXTRACT_FMT_ST_VARS /* f-op1 f-r1 f-op2 f-r2 */
2067
2068 EXTRACT_FMT_ST_CODE
2069
2070 /* Record the fields for the semantic handler. */
2071 FLD (i_src2) = & CPU (h_gr)[f_r2];
2072 FLD (i_src1) = & CPU (h_gr)[f_r1];
2073 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_st", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2074
2075 #if WITH_PROFILE_MODEL_P
2076 /* Record the fields for profiling. */
2077 if (PROFILE_MODEL_P (current_cpu))
2078 {
2079 FLD (in_src2) = f_r2;
2080 FLD (in_src1) = f_r1;
2081 }
2082 #endif
2083 #undef FLD
2084 BREAK (ex);
2085 }
2086
2087 CASE (ex, FMT_ST_D) :
2088 {
2089 CGEN_INSN_INT insn = entire_insn;
2090 #define FLD(f) abuf->fields.fmt_st_d.f
2091 EXTRACT_FMT_ST_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2092
2093 EXTRACT_FMT_ST_D_CODE
2094
2095 /* Record the fields for the semantic handler. */
2096 FLD (f_simm16) = f_simm16;
2097 FLD (i_src2) = & CPU (h_gr)[f_r2];
2098 FLD (i_src1) = & CPU (h_gr)[f_r1];
2099 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_st_d", "f_simm16 0x%x", 'x', f_simm16, "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2100
2101 #if WITH_PROFILE_MODEL_P
2102 /* Record the fields for profiling. */
2103 if (PROFILE_MODEL_P (current_cpu))
2104 {
2105 FLD (in_src2) = f_r2;
2106 FLD (in_src1) = f_r1;
2107 }
2108 #endif
2109 #undef FLD
2110 BREAK (ex);
2111 }
2112
2113 CASE (ex, FMT_STB) :
2114 {
2115 CGEN_INSN_INT insn = entire_insn;
2116 #define FLD(f) abuf->fields.fmt_stb.f
2117 EXTRACT_FMT_STB_VARS /* f-op1 f-r1 f-op2 f-r2 */
2118
2119 EXTRACT_FMT_STB_CODE
2120
2121 /* Record the fields for the semantic handler. */
2122 FLD (i_src2) = & CPU (h_gr)[f_r2];
2123 FLD (i_src1) = & CPU (h_gr)[f_r1];
2124 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_stb", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2125
2126 #if WITH_PROFILE_MODEL_P
2127 /* Record the fields for profiling. */
2128 if (PROFILE_MODEL_P (current_cpu))
2129 {
2130 FLD (in_src2) = f_r2;
2131 FLD (in_src1) = f_r1;
2132 }
2133 #endif
2134 #undef FLD
2135 BREAK (ex);
2136 }
2137
2138 CASE (ex, FMT_STB_D) :
2139 {
2140 CGEN_INSN_INT insn = entire_insn;
2141 #define FLD(f) abuf->fields.fmt_stb_d.f
2142 EXTRACT_FMT_STB_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2143
2144 EXTRACT_FMT_STB_D_CODE
2145
2146 /* Record the fields for the semantic handler. */
2147 FLD (f_simm16) = f_simm16;
2148 FLD (i_src2) = & CPU (h_gr)[f_r2];
2149 FLD (i_src1) = & CPU (h_gr)[f_r1];
2150 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_stb_d", "f_simm16 0x%x", 'x', f_simm16, "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2151
2152 #if WITH_PROFILE_MODEL_P
2153 /* Record the fields for profiling. */
2154 if (PROFILE_MODEL_P (current_cpu))
2155 {
2156 FLD (in_src2) = f_r2;
2157 FLD (in_src1) = f_r1;
2158 }
2159 #endif
2160 #undef FLD
2161 BREAK (ex);
2162 }
2163
2164 CASE (ex, FMT_STH) :
2165 {
2166 CGEN_INSN_INT insn = entire_insn;
2167 #define FLD(f) abuf->fields.fmt_sth.f
2168 EXTRACT_FMT_STH_VARS /* f-op1 f-r1 f-op2 f-r2 */
2169
2170 EXTRACT_FMT_STH_CODE
2171
2172 /* Record the fields for the semantic handler. */
2173 FLD (i_src2) = & CPU (h_gr)[f_r2];
2174 FLD (i_src1) = & CPU (h_gr)[f_r1];
2175 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_sth", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2176
2177 #if WITH_PROFILE_MODEL_P
2178 /* Record the fields for profiling. */
2179 if (PROFILE_MODEL_P (current_cpu))
2180 {
2181 FLD (in_src2) = f_r2;
2182 FLD (in_src1) = f_r1;
2183 }
2184 #endif
2185 #undef FLD
2186 BREAK (ex);
2187 }
2188
2189 CASE (ex, FMT_STH_D) :
2190 {
2191 CGEN_INSN_INT insn = entire_insn;
2192 #define FLD(f) abuf->fields.fmt_sth_d.f
2193 EXTRACT_FMT_STH_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2194
2195 EXTRACT_FMT_STH_D_CODE
2196
2197 /* Record the fields for the semantic handler. */
2198 FLD (f_simm16) = f_simm16;
2199 FLD (i_src2) = & CPU (h_gr)[f_r2];
2200 FLD (i_src1) = & CPU (h_gr)[f_r1];
2201 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_sth_d", "f_simm16 0x%x", 'x', f_simm16, "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2202
2203 #if WITH_PROFILE_MODEL_P
2204 /* Record the fields for profiling. */
2205 if (PROFILE_MODEL_P (current_cpu))
2206 {
2207 FLD (in_src2) = f_r2;
2208 FLD (in_src1) = f_r1;
2209 }
2210 #endif
2211 #undef FLD
2212 BREAK (ex);
2213 }
2214
2215 CASE (ex, FMT_ST_PLUS) :
2216 {
2217 CGEN_INSN_INT insn = entire_insn;
2218 #define FLD(f) abuf->fields.fmt_st_plus.f
2219 EXTRACT_FMT_ST_PLUS_VARS /* f-op1 f-r1 f-op2 f-r2 */
2220
2221 EXTRACT_FMT_ST_PLUS_CODE
2222
2223 /* Record the fields for the semantic handler. */
2224 FLD (i_src2) = & CPU (h_gr)[f_r2];
2225 FLD (i_src1) = & CPU (h_gr)[f_r1];
2226 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_st_plus", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2227
2228 #if WITH_PROFILE_MODEL_P
2229 /* Record the fields for profiling. */
2230 if (PROFILE_MODEL_P (current_cpu))
2231 {
2232 FLD (in_src2) = f_r2;
2233 FLD (in_src1) = f_r1;
2234 FLD (out_src2) = f_r2;
2235 }
2236 #endif
2237 #undef FLD
2238 BREAK (ex);
2239 }
2240
2241 CASE (ex, FMT_TRAP) :
2242 {
2243 CGEN_INSN_INT insn = entire_insn;
2244 #define FLD(f) abuf->fields.cti.fields.fmt_trap.f
2245 EXTRACT_FMT_TRAP_VARS /* f-op1 f-r1 f-op2 f-uimm4 */
2246
2247 EXTRACT_FMT_TRAP_CODE
2248
2249 /* Record the fields for the semantic handler. */
2250 FLD (f_uimm4) = f_uimm4;
2251 SEM_BRANCH_INIT_EXTRACT (abuf);
2252 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0));
2253
2254 #if WITH_PROFILE_MODEL_P
2255 /* Record the fields for profiling. */
2256 if (PROFILE_MODEL_P (current_cpu))
2257 {
2258 }
2259 #endif
2260 #undef FLD
2261 BREAK (ex);
2262 }
2263
2264 CASE (ex, FMT_UNLOCK) :
2265 {
2266 CGEN_INSN_INT insn = entire_insn;
2267 #define FLD(f) abuf->fields.fmt_unlock.f
2268 EXTRACT_FMT_UNLOCK_VARS /* f-op1 f-r1 f-op2 f-r2 */
2269
2270 EXTRACT_FMT_UNLOCK_CODE
2271
2272 /* Record the fields for the semantic handler. */
2273 FLD (i_src2) = & CPU (h_gr)[f_r2];
2274 FLD (i_src1) = & CPU (h_gr)[f_r1];
2275 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_unlock", "src2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, (char *) 0));
2276
2277 #if WITH_PROFILE_MODEL_P
2278 /* Record the fields for profiling. */
2279 if (PROFILE_MODEL_P (current_cpu))
2280 {
2281 FLD (in_src2) = f_r2;
2282 FLD (in_src1) = f_r1;
2283 }
2284 #endif
2285 #undef FLD
2286 BREAK (ex);
2287 }
2288
2289 CASE (ex, FMT_SATB) :
2290 {
2291 CGEN_INSN_INT insn = entire_insn;
2292 #define FLD(f) abuf->fields.fmt_satb.f
2293 EXTRACT_FMT_SATB_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
2294
2295 EXTRACT_FMT_SATB_CODE
2296
2297 /* Record the fields for the semantic handler. */
2298 FLD (i_sr) = & CPU (h_gr)[f_r2];
2299 FLD (i_dr) = & CPU (h_gr)[f_r1];
2300 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_satb", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
2301
2302 #if WITH_PROFILE_MODEL_P
2303 /* Record the fields for profiling. */
2304 if (PROFILE_MODEL_P (current_cpu))
2305 {
2306 FLD (in_sr) = f_r2;
2307 FLD (out_dr) = f_r1;
2308 }
2309 #endif
2310 #undef FLD
2311 BREAK (ex);
2312 }
2313
2314 CASE (ex, FMT_SAT) :
2315 {
2316 CGEN_INSN_INT insn = entire_insn;
2317 #define FLD(f) abuf->fields.fmt_sat.f
2318 EXTRACT_FMT_SAT_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
2319
2320 EXTRACT_FMT_SAT_CODE
2321
2322 /* Record the fields for the semantic handler. */
2323 FLD (i_sr) = & CPU (h_gr)[f_r2];
2324 FLD (i_dr) = & CPU (h_gr)[f_r1];
2325 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_sat", "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
2326
2327 #if WITH_PROFILE_MODEL_P
2328 /* Record the fields for profiling. */
2329 if (PROFILE_MODEL_P (current_cpu))
2330 {
2331 FLD (in_sr) = f_r2;
2332 FLD (out_dr) = f_r1;
2333 }
2334 #endif
2335 #undef FLD
2336 BREAK (ex);
2337 }
2338
2339 CASE (ex, FMT_SADD) :
2340 {
2341 CGEN_INSN_INT insn = entire_insn;
2342 #define FLD(f) abuf->fields.fmt_sadd.f
2343 EXTRACT_FMT_SADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
2344
2345 EXTRACT_FMT_SADD_CODE
2346
2347 /* Record the fields for the semantic handler. */
2348 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_sadd", (char *) 0));
2349
2350 #undef FLD
2351 BREAK (ex);
2352 }
2353
2354 CASE (ex, FMT_MACWU1) :
2355 {
2356 CGEN_INSN_INT insn = entire_insn;
2357 #define FLD(f) abuf->fields.fmt_macwu1.f
2358 EXTRACT_FMT_MACWU1_VARS /* f-op1 f-r1 f-op2 f-r2 */
2359
2360 EXTRACT_FMT_MACWU1_CODE
2361
2362 /* Record the fields for the semantic handler. */
2363 FLD (i_src1) = & CPU (h_gr)[f_r1];
2364 FLD (i_src2) = & CPU (h_gr)[f_r2];
2365 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_macwu1", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2366
2367 #if WITH_PROFILE_MODEL_P
2368 /* Record the fields for profiling. */
2369 if (PROFILE_MODEL_P (current_cpu))
2370 {
2371 FLD (in_src1) = f_r1;
2372 FLD (in_src2) = f_r2;
2373 }
2374 #endif
2375 #undef FLD
2376 BREAK (ex);
2377 }
2378
2379 CASE (ex, FMT_MSBLO) :
2380 {
2381 CGEN_INSN_INT insn = entire_insn;
2382 #define FLD(f) abuf->fields.fmt_msblo.f
2383 EXTRACT_FMT_MSBLO_VARS /* f-op1 f-r1 f-op2 f-r2 */
2384
2385 EXTRACT_FMT_MSBLO_CODE
2386
2387 /* Record the fields for the semantic handler. */
2388 FLD (i_src1) = & CPU (h_gr)[f_r1];
2389 FLD (i_src2) = & CPU (h_gr)[f_r2];
2390 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_msblo", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2391
2392 #if WITH_PROFILE_MODEL_P
2393 /* Record the fields for profiling. */
2394 if (PROFILE_MODEL_P (current_cpu))
2395 {
2396 FLD (in_src1) = f_r1;
2397 FLD (in_src2) = f_r2;
2398 }
2399 #endif
2400 #undef FLD
2401 BREAK (ex);
2402 }
2403
2404 CASE (ex, FMT_MULWU1) :
2405 {
2406 CGEN_INSN_INT insn = entire_insn;
2407 #define FLD(f) abuf->fields.fmt_mulwu1.f
2408 EXTRACT_FMT_MULWU1_VARS /* f-op1 f-r1 f-op2 f-r2 */
2409
2410 EXTRACT_FMT_MULWU1_CODE
2411
2412 /* Record the fields for the semantic handler. */
2413 FLD (i_src1) = & CPU (h_gr)[f_r1];
2414 FLD (i_src2) = & CPU (h_gr)[f_r2];
2415 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_mulwu1", "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2416
2417 #if WITH_PROFILE_MODEL_P
2418 /* Record the fields for profiling. */
2419 if (PROFILE_MODEL_P (current_cpu))
2420 {
2421 FLD (in_src1) = f_r1;
2422 FLD (in_src2) = f_r2;
2423 }
2424 #endif
2425 #undef FLD
2426 BREAK (ex);
2427 }
2428
2429 CASE (ex, FMT_SC) :
2430 {
2431 CGEN_INSN_INT insn = entire_insn;
2432 #define FLD(f) abuf->fields.cti.fields.fmt_sc.f
2433 EXTRACT_FMT_SC_VARS /* f-op1 f-r1 f-op2 f-r2 */
2434
2435 EXTRACT_FMT_SC_CODE
2436
2437 /* Record the fields for the semantic handler. */
2438 SEM_BRANCH_INIT_EXTRACT (abuf);
2439 TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "fmt_sc", (char *) 0));
2440
2441 #undef FLD
2442 BREAK (ex);
2443 }
2444
2445
2446 }
2447 ENDSWITCH (ex)
2448
2449 }
2450
2451 return idecode->idesc;
2452 }