decode.c revision 1.1.1.11 1 1.1 christos /* Simulator instruction decoder for m32rbf.
2 1.1 christos
3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
4 1.1 christos
5 1.1.1.11 christos Copyright (C) 1996-2024 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This file is part of the GNU simulators.
8 1.1 christos
9 1.1 christos This file is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3, or (at your option)
12 1.1 christos any later version.
13 1.1 christos
14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 1.1 christos License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License along
20 1.1.1.11 christos with this program; if not, write to the Free Software Foundation, Inc.,
21 1.1.1.11 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22 1.1 christos
23 1.1 christos */
24 1.1 christos
25 1.1 christos #define WANT_CPU m32rbf
26 1.1 christos #define WANT_CPU_M32RBF
27 1.1 christos
28 1.1 christos #include "sim-main.h"
29 1.1 christos #include "sim-assert.h"
30 1.1.1.11 christos #include "cgen-mem.h"
31 1.1.1.11 christos #include "cgen-ops.h"
32 1.1 christos
33 1.1 christos /* The instruction descriptor array.
34 1.1 christos This is computed at runtime. Space for it is not malloc'd to save a
35 1.1 christos teensy bit of cpu in the decoder. Moving it to malloc space is trivial
36 1.1 christos but won't be done until necessary (we don't currently support the runtime
37 1.1 christos addition of instructions nor an SMP machine with different cpus). */
38 1.1 christos static IDESC m32rbf_insn_data[M32RBF_INSN__MAX];
39 1.1 christos
40 1.1 christos /* Commas between elements are contained in the macros.
41 1.1 christos Some of these are conditionally compiled out. */
42 1.1 christos
43 1.1 christos static const struct insn_sem m32rbf_insn_sem[] =
44 1.1 christos {
45 1.1 christos { VIRTUAL_INSN_X_INVALID, M32RBF_INSN_X_INVALID, M32RBF_SFMT_EMPTY },
46 1.1 christos { VIRTUAL_INSN_X_AFTER, M32RBF_INSN_X_AFTER, M32RBF_SFMT_EMPTY },
47 1.1 christos { VIRTUAL_INSN_X_BEFORE, M32RBF_INSN_X_BEFORE, M32RBF_SFMT_EMPTY },
48 1.1 christos { VIRTUAL_INSN_X_CTI_CHAIN, M32RBF_INSN_X_CTI_CHAIN, M32RBF_SFMT_EMPTY },
49 1.1 christos { VIRTUAL_INSN_X_CHAIN, M32RBF_INSN_X_CHAIN, M32RBF_SFMT_EMPTY },
50 1.1 christos { VIRTUAL_INSN_X_BEGIN, M32RBF_INSN_X_BEGIN, M32RBF_SFMT_EMPTY },
51 1.1 christos { M32R_INSN_ADD, M32RBF_INSN_ADD, M32RBF_SFMT_ADD },
52 1.1 christos { M32R_INSN_ADD3, M32RBF_INSN_ADD3, M32RBF_SFMT_ADD3 },
53 1.1 christos { M32R_INSN_AND, M32RBF_INSN_AND, M32RBF_SFMT_ADD },
54 1.1 christos { M32R_INSN_AND3, M32RBF_INSN_AND3, M32RBF_SFMT_AND3 },
55 1.1 christos { M32R_INSN_OR, M32RBF_INSN_OR, M32RBF_SFMT_ADD },
56 1.1 christos { M32R_INSN_OR3, M32RBF_INSN_OR3, M32RBF_SFMT_OR3 },
57 1.1 christos { M32R_INSN_XOR, M32RBF_INSN_XOR, M32RBF_SFMT_ADD },
58 1.1 christos { M32R_INSN_XOR3, M32RBF_INSN_XOR3, M32RBF_SFMT_AND3 },
59 1.1 christos { M32R_INSN_ADDI, M32RBF_INSN_ADDI, M32RBF_SFMT_ADDI },
60 1.1 christos { M32R_INSN_ADDV, M32RBF_INSN_ADDV, M32RBF_SFMT_ADDV },
61 1.1 christos { M32R_INSN_ADDV3, M32RBF_INSN_ADDV3, M32RBF_SFMT_ADDV3 },
62 1.1 christos { M32R_INSN_ADDX, M32RBF_INSN_ADDX, M32RBF_SFMT_ADDX },
63 1.1 christos { M32R_INSN_BC8, M32RBF_INSN_BC8, M32RBF_SFMT_BC8 },
64 1.1 christos { M32R_INSN_BC24, M32RBF_INSN_BC24, M32RBF_SFMT_BC24 },
65 1.1 christos { M32R_INSN_BEQ, M32RBF_INSN_BEQ, M32RBF_SFMT_BEQ },
66 1.1 christos { M32R_INSN_BEQZ, M32RBF_INSN_BEQZ, M32RBF_SFMT_BEQZ },
67 1.1 christos { M32R_INSN_BGEZ, M32RBF_INSN_BGEZ, M32RBF_SFMT_BEQZ },
68 1.1 christos { M32R_INSN_BGTZ, M32RBF_INSN_BGTZ, M32RBF_SFMT_BEQZ },
69 1.1 christos { M32R_INSN_BLEZ, M32RBF_INSN_BLEZ, M32RBF_SFMT_BEQZ },
70 1.1 christos { M32R_INSN_BLTZ, M32RBF_INSN_BLTZ, M32RBF_SFMT_BEQZ },
71 1.1 christos { M32R_INSN_BNEZ, M32RBF_INSN_BNEZ, M32RBF_SFMT_BEQZ },
72 1.1 christos { M32R_INSN_BL8, M32RBF_INSN_BL8, M32RBF_SFMT_BL8 },
73 1.1 christos { M32R_INSN_BL24, M32RBF_INSN_BL24, M32RBF_SFMT_BL24 },
74 1.1 christos { M32R_INSN_BNC8, M32RBF_INSN_BNC8, M32RBF_SFMT_BC8 },
75 1.1 christos { M32R_INSN_BNC24, M32RBF_INSN_BNC24, M32RBF_SFMT_BC24 },
76 1.1 christos { M32R_INSN_BNE, M32RBF_INSN_BNE, M32RBF_SFMT_BEQ },
77 1.1 christos { M32R_INSN_BRA8, M32RBF_INSN_BRA8, M32RBF_SFMT_BRA8 },
78 1.1 christos { M32R_INSN_BRA24, M32RBF_INSN_BRA24, M32RBF_SFMT_BRA24 },
79 1.1 christos { M32R_INSN_CMP, M32RBF_INSN_CMP, M32RBF_SFMT_CMP },
80 1.1 christos { M32R_INSN_CMPI, M32RBF_INSN_CMPI, M32RBF_SFMT_CMPI },
81 1.1 christos { M32R_INSN_CMPU, M32RBF_INSN_CMPU, M32RBF_SFMT_CMP },
82 1.1 christos { M32R_INSN_CMPUI, M32RBF_INSN_CMPUI, M32RBF_SFMT_CMPI },
83 1.1 christos { M32R_INSN_DIV, M32RBF_INSN_DIV, M32RBF_SFMT_DIV },
84 1.1 christos { M32R_INSN_DIVU, M32RBF_INSN_DIVU, M32RBF_SFMT_DIV },
85 1.1 christos { M32R_INSN_REM, M32RBF_INSN_REM, M32RBF_SFMT_DIV },
86 1.1 christos { M32R_INSN_REMU, M32RBF_INSN_REMU, M32RBF_SFMT_DIV },
87 1.1 christos { M32R_INSN_JL, M32RBF_INSN_JL, M32RBF_SFMT_JL },
88 1.1 christos { M32R_INSN_JMP, M32RBF_INSN_JMP, M32RBF_SFMT_JMP },
89 1.1 christos { M32R_INSN_LD, M32RBF_INSN_LD, M32RBF_SFMT_LD },
90 1.1 christos { M32R_INSN_LD_D, M32RBF_INSN_LD_D, M32RBF_SFMT_LD_D },
91 1.1 christos { M32R_INSN_LDB, M32RBF_INSN_LDB, M32RBF_SFMT_LDB },
92 1.1 christos { M32R_INSN_LDB_D, M32RBF_INSN_LDB_D, M32RBF_SFMT_LDB_D },
93 1.1 christos { M32R_INSN_LDH, M32RBF_INSN_LDH, M32RBF_SFMT_LDH },
94 1.1 christos { M32R_INSN_LDH_D, M32RBF_INSN_LDH_D, M32RBF_SFMT_LDH_D },
95 1.1 christos { M32R_INSN_LDUB, M32RBF_INSN_LDUB, M32RBF_SFMT_LDB },
96 1.1 christos { M32R_INSN_LDUB_D, M32RBF_INSN_LDUB_D, M32RBF_SFMT_LDB_D },
97 1.1 christos { M32R_INSN_LDUH, M32RBF_INSN_LDUH, M32RBF_SFMT_LDH },
98 1.1 christos { M32R_INSN_LDUH_D, M32RBF_INSN_LDUH_D, M32RBF_SFMT_LDH_D },
99 1.1 christos { M32R_INSN_LD_PLUS, M32RBF_INSN_LD_PLUS, M32RBF_SFMT_LD_PLUS },
100 1.1 christos { M32R_INSN_LD24, M32RBF_INSN_LD24, M32RBF_SFMT_LD24 },
101 1.1 christos { M32R_INSN_LDI8, M32RBF_INSN_LDI8, M32RBF_SFMT_LDI8 },
102 1.1 christos { M32R_INSN_LDI16, M32RBF_INSN_LDI16, M32RBF_SFMT_LDI16 },
103 1.1 christos { M32R_INSN_LOCK, M32RBF_INSN_LOCK, M32RBF_SFMT_LOCK },
104 1.1 christos { M32R_INSN_MACHI, M32RBF_INSN_MACHI, M32RBF_SFMT_MACHI },
105 1.1 christos { M32R_INSN_MACLO, M32RBF_INSN_MACLO, M32RBF_SFMT_MACHI },
106 1.1 christos { M32R_INSN_MACWHI, M32RBF_INSN_MACWHI, M32RBF_SFMT_MACHI },
107 1.1 christos { M32R_INSN_MACWLO, M32RBF_INSN_MACWLO, M32RBF_SFMT_MACHI },
108 1.1 christos { M32R_INSN_MUL, M32RBF_INSN_MUL, M32RBF_SFMT_ADD },
109 1.1 christos { M32R_INSN_MULHI, M32RBF_INSN_MULHI, M32RBF_SFMT_MULHI },
110 1.1 christos { M32R_INSN_MULLO, M32RBF_INSN_MULLO, M32RBF_SFMT_MULHI },
111 1.1 christos { M32R_INSN_MULWHI, M32RBF_INSN_MULWHI, M32RBF_SFMT_MULHI },
112 1.1 christos { M32R_INSN_MULWLO, M32RBF_INSN_MULWLO, M32RBF_SFMT_MULHI },
113 1.1 christos { M32R_INSN_MV, M32RBF_INSN_MV, M32RBF_SFMT_MV },
114 1.1 christos { M32R_INSN_MVFACHI, M32RBF_INSN_MVFACHI, M32RBF_SFMT_MVFACHI },
115 1.1 christos { M32R_INSN_MVFACLO, M32RBF_INSN_MVFACLO, M32RBF_SFMT_MVFACHI },
116 1.1 christos { M32R_INSN_MVFACMI, M32RBF_INSN_MVFACMI, M32RBF_SFMT_MVFACHI },
117 1.1 christos { M32R_INSN_MVFC, M32RBF_INSN_MVFC, M32RBF_SFMT_MVFC },
118 1.1 christos { M32R_INSN_MVTACHI, M32RBF_INSN_MVTACHI, M32RBF_SFMT_MVTACHI },
119 1.1 christos { M32R_INSN_MVTACLO, M32RBF_INSN_MVTACLO, M32RBF_SFMT_MVTACHI },
120 1.1 christos { M32R_INSN_MVTC, M32RBF_INSN_MVTC, M32RBF_SFMT_MVTC },
121 1.1 christos { M32R_INSN_NEG, M32RBF_INSN_NEG, M32RBF_SFMT_MV },
122 1.1 christos { M32R_INSN_NOP, M32RBF_INSN_NOP, M32RBF_SFMT_NOP },
123 1.1 christos { M32R_INSN_NOT, M32RBF_INSN_NOT, M32RBF_SFMT_MV },
124 1.1 christos { M32R_INSN_RAC, M32RBF_INSN_RAC, M32RBF_SFMT_RAC },
125 1.1 christos { M32R_INSN_RACH, M32RBF_INSN_RACH, M32RBF_SFMT_RAC },
126 1.1 christos { M32R_INSN_RTE, M32RBF_INSN_RTE, M32RBF_SFMT_RTE },
127 1.1 christos { M32R_INSN_SETH, M32RBF_INSN_SETH, M32RBF_SFMT_SETH },
128 1.1 christos { M32R_INSN_SLL, M32RBF_INSN_SLL, M32RBF_SFMT_ADD },
129 1.1 christos { M32R_INSN_SLL3, M32RBF_INSN_SLL3, M32RBF_SFMT_SLL3 },
130 1.1 christos { M32R_INSN_SLLI, M32RBF_INSN_SLLI, M32RBF_SFMT_SLLI },
131 1.1 christos { M32R_INSN_SRA, M32RBF_INSN_SRA, M32RBF_SFMT_ADD },
132 1.1 christos { M32R_INSN_SRA3, M32RBF_INSN_SRA3, M32RBF_SFMT_SLL3 },
133 1.1 christos { M32R_INSN_SRAI, M32RBF_INSN_SRAI, M32RBF_SFMT_SLLI },
134 1.1 christos { M32R_INSN_SRL, M32RBF_INSN_SRL, M32RBF_SFMT_ADD },
135 1.1 christos { M32R_INSN_SRL3, M32RBF_INSN_SRL3, M32RBF_SFMT_SLL3 },
136 1.1 christos { M32R_INSN_SRLI, M32RBF_INSN_SRLI, M32RBF_SFMT_SLLI },
137 1.1 christos { M32R_INSN_ST, M32RBF_INSN_ST, M32RBF_SFMT_ST },
138 1.1 christos { M32R_INSN_ST_D, M32RBF_INSN_ST_D, M32RBF_SFMT_ST_D },
139 1.1 christos { M32R_INSN_STB, M32RBF_INSN_STB, M32RBF_SFMT_STB },
140 1.1 christos { M32R_INSN_STB_D, M32RBF_INSN_STB_D, M32RBF_SFMT_STB_D },
141 1.1 christos { M32R_INSN_STH, M32RBF_INSN_STH, M32RBF_SFMT_STH },
142 1.1 christos { M32R_INSN_STH_D, M32RBF_INSN_STH_D, M32RBF_SFMT_STH_D },
143 1.1 christos { M32R_INSN_ST_PLUS, M32RBF_INSN_ST_PLUS, M32RBF_SFMT_ST_PLUS },
144 1.1 christos { M32R_INSN_ST_MINUS, M32RBF_INSN_ST_MINUS, M32RBF_SFMT_ST_PLUS },
145 1.1 christos { M32R_INSN_SUB, M32RBF_INSN_SUB, M32RBF_SFMT_ADD },
146 1.1 christos { M32R_INSN_SUBV, M32RBF_INSN_SUBV, M32RBF_SFMT_ADDV },
147 1.1 christos { M32R_INSN_SUBX, M32RBF_INSN_SUBX, M32RBF_SFMT_ADDX },
148 1.1 christos { M32R_INSN_TRAP, M32RBF_INSN_TRAP, M32RBF_SFMT_TRAP },
149 1.1 christos { M32R_INSN_UNLOCK, M32RBF_INSN_UNLOCK, M32RBF_SFMT_UNLOCK },
150 1.1 christos { M32R_INSN_CLRPSW, M32RBF_INSN_CLRPSW, M32RBF_SFMT_CLRPSW },
151 1.1 christos { M32R_INSN_SETPSW, M32RBF_INSN_SETPSW, M32RBF_SFMT_SETPSW },
152 1.1 christos { M32R_INSN_BSET, M32RBF_INSN_BSET, M32RBF_SFMT_BSET },
153 1.1 christos { M32R_INSN_BCLR, M32RBF_INSN_BCLR, M32RBF_SFMT_BSET },
154 1.1 christos { M32R_INSN_BTST, M32RBF_INSN_BTST, M32RBF_SFMT_BTST },
155 1.1 christos };
156 1.1 christos
157 1.1 christos static const struct insn_sem m32rbf_insn_sem_invalid =
158 1.1 christos {
159 1.1 christos VIRTUAL_INSN_X_INVALID, M32RBF_INSN_X_INVALID, M32RBF_SFMT_EMPTY
160 1.1 christos };
161 1.1 christos
162 1.1 christos /* Initialize an IDESC from the compile-time computable parts. */
163 1.1 christos
164 1.1 christos static INLINE void
165 1.1 christos init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
166 1.1 christos {
167 1.1 christos const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries;
168 1.1 christos
169 1.1 christos id->num = t->index;
170 1.1 christos id->sfmt = t->sfmt;
171 1.1 christos if ((int) t->type <= 0)
172 1.1 christos id->idata = & cgen_virtual_insn_table[- (int) t->type];
173 1.1 christos else
174 1.1 christos id->idata = & insn_table[t->type];
175 1.1 christos id->attrs = CGEN_INSN_ATTRS (id->idata);
176 1.1 christos /* Oh my god, a magic number. */
177 1.1 christos id->length = CGEN_INSN_BITSIZE (id->idata) / 8;
178 1.1 christos
179 1.1 christos #if WITH_PROFILE_MODEL_P
180 1.1 christos id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
181 1.1 christos {
182 1.1 christos SIM_DESC sd = CPU_STATE (cpu);
183 1.1 christos SIM_ASSERT (t->index == id->timing->num);
184 1.1 christos }
185 1.1 christos #endif
186 1.1 christos
187 1.1 christos /* Semantic pointers are initialized elsewhere. */
188 1.1 christos }
189 1.1 christos
190 1.1 christos /* Initialize the instruction descriptor table. */
191 1.1 christos
192 1.1 christos void
193 1.1 christos m32rbf_init_idesc_table (SIM_CPU *cpu)
194 1.1 christos {
195 1.1 christos IDESC *id,*tabend;
196 1.1 christos const struct insn_sem *t,*tend;
197 1.1 christos int tabsize = M32RBF_INSN__MAX;
198 1.1 christos IDESC *table = m32rbf_insn_data;
199 1.1 christos
200 1.1 christos memset (table, 0, tabsize * sizeof (IDESC));
201 1.1 christos
202 1.1 christos /* First set all entries to the `invalid insn'. */
203 1.1 christos t = & m32rbf_insn_sem_invalid;
204 1.1 christos for (id = table, tabend = table + tabsize; id < tabend; ++id)
205 1.1 christos init_idesc (cpu, id, t);
206 1.1 christos
207 1.1 christos /* Now fill in the values for the chosen cpu. */
208 1.1.1.7 christos for (t = m32rbf_insn_sem, tend = t + ARRAY_SIZE (m32rbf_insn_sem);
209 1.1 christos t != tend; ++t)
210 1.1 christos {
211 1.1 christos init_idesc (cpu, & table[t->index], t);
212 1.1 christos }
213 1.1 christos
214 1.1 christos /* Link the IDESC table into the cpu. */
215 1.1 christos CPU_IDESC (cpu) = table;
216 1.1 christos }
217 1.1 christos
218 1.1 christos /* Given an instruction, return a pointer to its IDESC entry. */
219 1.1 christos
220 1.1 christos const IDESC *
221 1.1 christos m32rbf_decode (SIM_CPU *current_cpu, IADDR pc,
222 1.1 christos CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn,
223 1.1 christos ARGBUF *abuf)
224 1.1 christos {
225 1.1 christos /* Result of decoder. */
226 1.1 christos M32RBF_INSN_TYPE itype;
227 1.1 christos
228 1.1 christos {
229 1.1 christos CGEN_INSN_WORD insn = base_insn;
230 1.1 christos
231 1.1 christos {
232 1.1.1.11 christos unsigned int val0 = (((insn >> 8) & (15 << 4)) | ((insn >> 4) & (15 << 0)));
233 1.1.1.11 christos switch (val0)
234 1.1 christos {
235 1.1.1.11 christos case 0: itype = M32RBF_INSN_SUBV; goto extract_sfmt_addv;
236 1.1.1.11 christos case 1: itype = M32RBF_INSN_SUBX; goto extract_sfmt_addx;
237 1.1.1.11 christos case 2: itype = M32RBF_INSN_SUB; goto extract_sfmt_add;
238 1.1.1.11 christos case 3: itype = M32RBF_INSN_NEG; goto extract_sfmt_mv;
239 1.1.1.11 christos case 4: itype = M32RBF_INSN_CMP; goto extract_sfmt_cmp;
240 1.1.1.11 christos case 5: itype = M32RBF_INSN_CMPU; goto extract_sfmt_cmp;
241 1.1.1.11 christos case 8: itype = M32RBF_INSN_ADDV; goto extract_sfmt_addv;
242 1.1.1.11 christos case 9: itype = M32RBF_INSN_ADDX; goto extract_sfmt_addx;
243 1.1.1.11 christos case 10: itype = M32RBF_INSN_ADD; goto extract_sfmt_add;
244 1.1.1.11 christos case 11: itype = M32RBF_INSN_NOT; goto extract_sfmt_mv;
245 1.1.1.11 christos case 12: itype = M32RBF_INSN_AND; goto extract_sfmt_add;
246 1.1.1.11 christos case 13: itype = M32RBF_INSN_XOR; goto extract_sfmt_add;
247 1.1.1.11 christos case 14: itype = M32RBF_INSN_OR; goto extract_sfmt_add;
248 1.1.1.11 christos case 15:
249 1.1 christos if ((entire_insn & 0xf8f0) == 0xf0)
250 1.1 christos { itype = M32RBF_INSN_BTST; goto extract_sfmt_btst; }
251 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
252 1.1.1.11 christos case 16: itype = M32RBF_INSN_SRL; goto extract_sfmt_add;
253 1.1.1.11 christos case 18: itype = M32RBF_INSN_SRA; goto extract_sfmt_add;
254 1.1.1.11 christos case 20: itype = M32RBF_INSN_SLL; goto extract_sfmt_add;
255 1.1.1.11 christos case 22: itype = M32RBF_INSN_MUL; goto extract_sfmt_add;
256 1.1.1.11 christos case 24: itype = M32RBF_INSN_MV; goto extract_sfmt_mv;
257 1.1.1.11 christos case 25: itype = M32RBF_INSN_MVFC; goto extract_sfmt_mvfc;
258 1.1.1.11 christos case 26: itype = M32RBF_INSN_MVTC; goto extract_sfmt_mvtc;
259 1.1.1.11 christos case 28:
260 1.1 christos {
261 1.1.1.11 christos unsigned int val1 = (((insn >> 8) & (1 << 0)));
262 1.1.1.11 christos switch (val1)
263 1.1 christos {
264 1.1.1.11 christos case 0:
265 1.1 christos if ((entire_insn & 0xfff0) == 0x1ec0)
266 1.1 christos { itype = M32RBF_INSN_JL; goto extract_sfmt_jl; }
267 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
268 1.1.1.11 christos case 1:
269 1.1 christos if ((entire_insn & 0xfff0) == 0x1fc0)
270 1.1 christos { itype = M32RBF_INSN_JMP; goto extract_sfmt_jmp; }
271 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
272 1.1.1.11 christos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
273 1.1 christos }
274 1.1 christos }
275 1.1.1.11 christos case 29:
276 1.1 christos if ((entire_insn & 0xffff) == 0x10d6)
277 1.1 christos { itype = M32RBF_INSN_RTE; goto extract_sfmt_rte; }
278 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
279 1.1.1.11 christos case 31:
280 1.1 christos if ((entire_insn & 0xfff0) == 0x10f0)
281 1.1 christos { itype = M32RBF_INSN_TRAP; goto extract_sfmt_trap; }
282 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
283 1.1.1.11 christos case 32: itype = M32RBF_INSN_STB; goto extract_sfmt_stb;
284 1.1.1.11 christos case 34: itype = M32RBF_INSN_STH; goto extract_sfmt_sth;
285 1.1.1.11 christos case 36: itype = M32RBF_INSN_ST; goto extract_sfmt_st;
286 1.1.1.11 christos case 37: itype = M32RBF_INSN_UNLOCK; goto extract_sfmt_unlock;
287 1.1.1.11 christos case 38: itype = M32RBF_INSN_ST_PLUS; goto extract_sfmt_st_plus;
288 1.1.1.11 christos case 39: itype = M32RBF_INSN_ST_MINUS; goto extract_sfmt_st_plus;
289 1.1.1.11 christos case 40: itype = M32RBF_INSN_LDB; goto extract_sfmt_ldb;
290 1.1.1.11 christos case 41: itype = M32RBF_INSN_LDUB; goto extract_sfmt_ldb;
291 1.1.1.11 christos case 42: itype = M32RBF_INSN_LDH; goto extract_sfmt_ldh;
292 1.1.1.11 christos case 43: itype = M32RBF_INSN_LDUH; goto extract_sfmt_ldh;
293 1.1.1.11 christos case 44: itype = M32RBF_INSN_LD; goto extract_sfmt_ld;
294 1.1.1.11 christos case 45: itype = M32RBF_INSN_LOCK; goto extract_sfmt_lock;
295 1.1.1.11 christos case 46: itype = M32RBF_INSN_LD_PLUS; goto extract_sfmt_ld_plus;
296 1.1.1.11 christos case 48: itype = M32RBF_INSN_MULHI; goto extract_sfmt_mulhi;
297 1.1.1.11 christos case 49: itype = M32RBF_INSN_MULLO; goto extract_sfmt_mulhi;
298 1.1.1.11 christos case 50: itype = M32RBF_INSN_MULWHI; goto extract_sfmt_mulhi;
299 1.1.1.11 christos case 51: itype = M32RBF_INSN_MULWLO; goto extract_sfmt_mulhi;
300 1.1.1.11 christos case 52: itype = M32RBF_INSN_MACHI; goto extract_sfmt_machi;
301 1.1.1.11 christos case 53: itype = M32RBF_INSN_MACLO; goto extract_sfmt_machi;
302 1.1.1.11 christos case 54: itype = M32RBF_INSN_MACWHI; goto extract_sfmt_machi;
303 1.1.1.11 christos case 55: itype = M32RBF_INSN_MACWLO; goto extract_sfmt_machi;
304 1.1.1.11 christos case 64:
305 1.1.1.11 christos case 65:
306 1.1.1.11 christos case 66:
307 1.1.1.11 christos case 67:
308 1.1.1.11 christos case 68:
309 1.1.1.11 christos case 69:
310 1.1.1.11 christos case 70:
311 1.1.1.11 christos case 71:
312 1.1.1.11 christos case 72:
313 1.1.1.11 christos case 73:
314 1.1.1.11 christos case 74:
315 1.1.1.11 christos case 75:
316 1.1.1.11 christos case 76:
317 1.1.1.11 christos case 77:
318 1.1.1.11 christos case 78:
319 1.1.1.11 christos case 79: itype = M32RBF_INSN_ADDI; goto extract_sfmt_addi;
320 1.1.1.11 christos case 80:
321 1.1.1.11 christos case 81: itype = M32RBF_INSN_SRLI; goto extract_sfmt_slli;
322 1.1.1.11 christos case 82:
323 1.1.1.11 christos case 83: itype = M32RBF_INSN_SRAI; goto extract_sfmt_slli;
324 1.1.1.11 christos case 84:
325 1.1.1.11 christos case 85: itype = M32RBF_INSN_SLLI; goto extract_sfmt_slli;
326 1.1.1.11 christos case 87:
327 1.1 christos {
328 1.1.1.11 christos unsigned int val1 = (((insn >> 0) & (1 << 0)));
329 1.1.1.11 christos switch (val1)
330 1.1 christos {
331 1.1.1.11 christos case 0:
332 1.1 christos if ((entire_insn & 0xf0ff) == 0x5070)
333 1.1 christos { itype = M32RBF_INSN_MVTACHI; goto extract_sfmt_mvtachi; }
334 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
335 1.1.1.11 christos case 1:
336 1.1 christos if ((entire_insn & 0xf0ff) == 0x5071)
337 1.1 christos { itype = M32RBF_INSN_MVTACLO; goto extract_sfmt_mvtachi; }
338 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
339 1.1.1.11 christos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
340 1.1 christos }
341 1.1 christos }
342 1.1.1.11 christos case 88:
343 1.1 christos if ((entire_insn & 0xffff) == 0x5080)
344 1.1 christos { itype = M32RBF_INSN_RACH; goto extract_sfmt_rac; }
345 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
346 1.1.1.11 christos case 89:
347 1.1 christos if ((entire_insn & 0xffff) == 0x5090)
348 1.1 christos { itype = M32RBF_INSN_RAC; goto extract_sfmt_rac; }
349 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
350 1.1.1.11 christos case 95:
351 1.1 christos {
352 1.1.1.11 christos unsigned int val1 = (((insn >> 0) & (3 << 0)));
353 1.1.1.11 christos switch (val1)
354 1.1 christos {
355 1.1.1.11 christos case 0:
356 1.1 christos if ((entire_insn & 0xf0ff) == 0x50f0)
357 1.1 christos { itype = M32RBF_INSN_MVFACHI; goto extract_sfmt_mvfachi; }
358 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
359 1.1.1.11 christos case 1:
360 1.1 christos if ((entire_insn & 0xf0ff) == 0x50f1)
361 1.1 christos { itype = M32RBF_INSN_MVFACLO; goto extract_sfmt_mvfachi; }
362 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
363 1.1.1.11 christos case 2:
364 1.1 christos if ((entire_insn & 0xf0ff) == 0x50f2)
365 1.1 christos { itype = M32RBF_INSN_MVFACMI; goto extract_sfmt_mvfachi; }
366 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
367 1.1.1.11 christos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
368 1.1 christos }
369 1.1 christos }
370 1.1.1.11 christos case 96:
371 1.1.1.11 christos case 97:
372 1.1.1.11 christos case 98:
373 1.1.1.11 christos case 99:
374 1.1.1.11 christos case 100:
375 1.1.1.11 christos case 101:
376 1.1.1.11 christos case 102:
377 1.1.1.11 christos case 103:
378 1.1.1.11 christos case 104:
379 1.1.1.11 christos case 105:
380 1.1.1.11 christos case 106:
381 1.1.1.11 christos case 107:
382 1.1.1.11 christos case 108:
383 1.1.1.11 christos case 109:
384 1.1.1.11 christos case 110:
385 1.1.1.11 christos case 111: itype = M32RBF_INSN_LDI8; goto extract_sfmt_ldi8;
386 1.1.1.11 christos case 112:
387 1.1 christos {
388 1.1.1.11 christos unsigned int val1 = (((insn >> 8) & (15 << 0)));
389 1.1.1.11 christos switch (val1)
390 1.1 christos {
391 1.1.1.11 christos case 0:
392 1.1 christos if ((entire_insn & 0xffff) == 0x7000)
393 1.1 christos { itype = M32RBF_INSN_NOP; goto extract_sfmt_nop; }
394 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
395 1.1.1.11 christos case 1: itype = M32RBF_INSN_SETPSW; goto extract_sfmt_setpsw;
396 1.1.1.11 christos case 2: itype = M32RBF_INSN_CLRPSW; goto extract_sfmt_clrpsw;
397 1.1.1.11 christos case 12: itype = M32RBF_INSN_BC8; goto extract_sfmt_bc8;
398 1.1.1.11 christos case 13: itype = M32RBF_INSN_BNC8; goto extract_sfmt_bc8;
399 1.1.1.11 christos case 14: itype = M32RBF_INSN_BL8; goto extract_sfmt_bl8;
400 1.1.1.11 christos case 15: itype = M32RBF_INSN_BRA8; goto extract_sfmt_bra8;
401 1.1.1.11 christos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
402 1.1 christos }
403 1.1 christos }
404 1.1.1.11 christos case 113:
405 1.1.1.11 christos case 114:
406 1.1.1.11 christos case 115:
407 1.1.1.11 christos case 116:
408 1.1.1.11 christos case 117:
409 1.1.1.11 christos case 118:
410 1.1.1.11 christos case 119:
411 1.1.1.11 christos case 120:
412 1.1.1.11 christos case 121:
413 1.1.1.11 christos case 122:
414 1.1.1.11 christos case 123:
415 1.1.1.11 christos case 124:
416 1.1.1.11 christos case 125:
417 1.1.1.11 christos case 126:
418 1.1.1.11 christos case 127:
419 1.1 christos {
420 1.1.1.11 christos unsigned int val1 = (((insn >> 8) & (15 << 0)));
421 1.1.1.11 christos switch (val1)
422 1.1 christos {
423 1.1.1.11 christos case 1: itype = M32RBF_INSN_SETPSW; goto extract_sfmt_setpsw;
424 1.1.1.11 christos case 2: itype = M32RBF_INSN_CLRPSW; goto extract_sfmt_clrpsw;
425 1.1.1.11 christos case 12: itype = M32RBF_INSN_BC8; goto extract_sfmt_bc8;
426 1.1.1.11 christos case 13: itype = M32RBF_INSN_BNC8; goto extract_sfmt_bc8;
427 1.1.1.11 christos case 14: itype = M32RBF_INSN_BL8; goto extract_sfmt_bl8;
428 1.1.1.11 christos case 15: itype = M32RBF_INSN_BRA8; goto extract_sfmt_bra8;
429 1.1.1.11 christos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
430 1.1 christos }
431 1.1 christos }
432 1.1.1.11 christos case 132:
433 1.1 christos if ((entire_insn & 0xfff00000) == 0x80400000)
434 1.1 christos { itype = M32RBF_INSN_CMPI; goto extract_sfmt_cmpi; }
435 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
436 1.1.1.11 christos case 133:
437 1.1 christos if ((entire_insn & 0xfff00000) == 0x80500000)
438 1.1 christos { itype = M32RBF_INSN_CMPUI; goto extract_sfmt_cmpi; }
439 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
440 1.1.1.11 christos case 136: itype = M32RBF_INSN_ADDV3; goto extract_sfmt_addv3;
441 1.1.1.11 christos case 138: itype = M32RBF_INSN_ADD3; goto extract_sfmt_add3;
442 1.1.1.11 christos case 140: itype = M32RBF_INSN_AND3; goto extract_sfmt_and3;
443 1.1.1.11 christos case 141: itype = M32RBF_INSN_XOR3; goto extract_sfmt_and3;
444 1.1.1.11 christos case 142: itype = M32RBF_INSN_OR3; goto extract_sfmt_or3;
445 1.1.1.11 christos case 144:
446 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90000000)
447 1.1 christos { itype = M32RBF_INSN_DIV; goto extract_sfmt_div; }
448 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
449 1.1.1.11 christos case 145:
450 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90100000)
451 1.1 christos { itype = M32RBF_INSN_DIVU; goto extract_sfmt_div; }
452 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
453 1.1.1.11 christos case 146:
454 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90200000)
455 1.1 christos { itype = M32RBF_INSN_REM; goto extract_sfmt_div; }
456 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
457 1.1.1.11 christos case 147:
458 1.1 christos if ((entire_insn & 0xf0f0ffff) == 0x90300000)
459 1.1 christos { itype = M32RBF_INSN_REMU; goto extract_sfmt_div; }
460 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
461 1.1.1.11 christos case 152: itype = M32RBF_INSN_SRL3; goto extract_sfmt_sll3;
462 1.1.1.11 christos case 154: itype = M32RBF_INSN_SRA3; goto extract_sfmt_sll3;
463 1.1.1.11 christos case 156: itype = M32RBF_INSN_SLL3; goto extract_sfmt_sll3;
464 1.1.1.11 christos case 159:
465 1.1 christos if ((entire_insn & 0xf0ff0000) == 0x90f00000)
466 1.1 christos { itype = M32RBF_INSN_LDI16; goto extract_sfmt_ldi16; }
467 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
468 1.1.1.11 christos case 160: itype = M32RBF_INSN_STB_D; goto extract_sfmt_stb_d;
469 1.1.1.11 christos case 162: itype = M32RBF_INSN_STH_D; goto extract_sfmt_sth_d;
470 1.1.1.11 christos case 164: itype = M32RBF_INSN_ST_D; goto extract_sfmt_st_d;
471 1.1.1.11 christos case 166:
472 1.1 christos if ((entire_insn & 0xf8f00000) == 0xa0600000)
473 1.1 christos { itype = M32RBF_INSN_BSET; goto extract_sfmt_bset; }
474 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
475 1.1.1.11 christos case 167:
476 1.1 christos if ((entire_insn & 0xf8f00000) == 0xa0700000)
477 1.1 christos { itype = M32RBF_INSN_BCLR; goto extract_sfmt_bset; }
478 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
479 1.1.1.11 christos case 168: itype = M32RBF_INSN_LDB_D; goto extract_sfmt_ldb_d;
480 1.1.1.11 christos case 169: itype = M32RBF_INSN_LDUB_D; goto extract_sfmt_ldb_d;
481 1.1.1.11 christos case 170: itype = M32RBF_INSN_LDH_D; goto extract_sfmt_ldh_d;
482 1.1.1.11 christos case 171: itype = M32RBF_INSN_LDUH_D; goto extract_sfmt_ldh_d;
483 1.1.1.11 christos case 172: itype = M32RBF_INSN_LD_D; goto extract_sfmt_ld_d;
484 1.1.1.11 christos case 176: itype = M32RBF_INSN_BEQ; goto extract_sfmt_beq;
485 1.1.1.11 christos case 177: itype = M32RBF_INSN_BNE; goto extract_sfmt_beq;
486 1.1.1.11 christos case 184:
487 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0800000)
488 1.1 christos { itype = M32RBF_INSN_BEQZ; goto extract_sfmt_beqz; }
489 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
490 1.1.1.11 christos case 185:
491 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0900000)
492 1.1 christos { itype = M32RBF_INSN_BNEZ; goto extract_sfmt_beqz; }
493 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
494 1.1.1.11 christos case 186:
495 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0a00000)
496 1.1 christos { itype = M32RBF_INSN_BLTZ; goto extract_sfmt_beqz; }
497 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
498 1.1.1.11 christos case 187:
499 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0b00000)
500 1.1 christos { itype = M32RBF_INSN_BGEZ; goto extract_sfmt_beqz; }
501 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
502 1.1.1.11 christos case 188:
503 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0c00000)
504 1.1 christos { itype = M32RBF_INSN_BLEZ; goto extract_sfmt_beqz; }
505 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
506 1.1.1.11 christos case 189:
507 1.1 christos if ((entire_insn & 0xfff00000) == 0xb0d00000)
508 1.1 christos { itype = M32RBF_INSN_BGTZ; goto extract_sfmt_beqz; }
509 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
510 1.1.1.11 christos case 220:
511 1.1 christos if ((entire_insn & 0xf0ff0000) == 0xd0c00000)
512 1.1 christos { itype = M32RBF_INSN_SETH; goto extract_sfmt_seth; }
513 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
514 1.1.1.11 christos case 224:
515 1.1.1.11 christos case 225:
516 1.1.1.11 christos case 226:
517 1.1.1.11 christos case 227:
518 1.1.1.11 christos case 228:
519 1.1.1.11 christos case 229:
520 1.1.1.11 christos case 230:
521 1.1.1.11 christos case 231:
522 1.1.1.11 christos case 232:
523 1.1.1.11 christos case 233:
524 1.1.1.11 christos case 234:
525 1.1.1.11 christos case 235:
526 1.1.1.11 christos case 236:
527 1.1.1.11 christos case 237:
528 1.1.1.11 christos case 238:
529 1.1.1.11 christos case 239: itype = M32RBF_INSN_LD24; goto extract_sfmt_ld24;
530 1.1.1.11 christos case 240:
531 1.1.1.11 christos case 241:
532 1.1.1.11 christos case 242:
533 1.1.1.11 christos case 243:
534 1.1.1.11 christos case 244:
535 1.1.1.11 christos case 245:
536 1.1.1.11 christos case 246:
537 1.1.1.11 christos case 247:
538 1.1.1.11 christos case 248:
539 1.1.1.11 christos case 249:
540 1.1.1.11 christos case 250:
541 1.1.1.11 christos case 251:
542 1.1.1.11 christos case 252:
543 1.1.1.11 christos case 253:
544 1.1.1.11 christos case 254:
545 1.1.1.11 christos case 255:
546 1.1 christos {
547 1.1.1.11 christos unsigned int val1 = (((insn >> 8) & (3 << 0)));
548 1.1.1.11 christos switch (val1)
549 1.1 christos {
550 1.1.1.11 christos case 0:
551 1.1 christos if ((entire_insn & 0xff000000) == 0xfc000000)
552 1.1 christos { itype = M32RBF_INSN_BC24; goto extract_sfmt_bc24; }
553 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
554 1.1.1.11 christos case 1:
555 1.1 christos if ((entire_insn & 0xff000000) == 0xfd000000)
556 1.1 christos { itype = M32RBF_INSN_BNC24; goto extract_sfmt_bc24; }
557 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
558 1.1.1.11 christos case 2:
559 1.1 christos if ((entire_insn & 0xff000000) == 0xfe000000)
560 1.1 christos { itype = M32RBF_INSN_BL24; goto extract_sfmt_bl24; }
561 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
562 1.1.1.11 christos case 3:
563 1.1 christos if ((entire_insn & 0xff000000) == 0xff000000)
564 1.1 christos { itype = M32RBF_INSN_BRA24; goto extract_sfmt_bra24; }
565 1.1 christos itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
566 1.1.1.11 christos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
567 1.1 christos }
568 1.1 christos }
569 1.1.1.11 christos default: itype = M32RBF_INSN_X_INVALID; goto extract_sfmt_empty;
570 1.1 christos }
571 1.1 christos }
572 1.1 christos }
573 1.1 christos
574 1.1 christos /* The instruction has been decoded, now extract the fields. */
575 1.1 christos
576 1.1 christos extract_sfmt_empty:
577 1.1 christos {
578 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
579 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
580 1.1 christos
581 1.1 christos
582 1.1 christos /* Record the fields for the semantic handler. */
583 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0));
584 1.1 christos
585 1.1 christos #undef FLD
586 1.1 christos return idesc;
587 1.1 christos }
588 1.1 christos
589 1.1 christos extract_sfmt_add:
590 1.1 christos {
591 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
592 1.1 christos CGEN_INSN_WORD insn = entire_insn;
593 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
594 1.1 christos UINT f_r1;
595 1.1 christos UINT f_r2;
596 1.1 christos
597 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
598 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
599 1.1 christos
600 1.1 christos /* Record the fields for the semantic handler. */
601 1.1 christos FLD (f_r1) = f_r1;
602 1.1 christos FLD (f_r2) = f_r2;
603 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
604 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
605 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
606 1.1 christos
607 1.1 christos #if WITH_PROFILE_MODEL_P
608 1.1 christos /* Record the fields for profiling. */
609 1.1 christos if (PROFILE_MODEL_P (current_cpu))
610 1.1 christos {
611 1.1 christos FLD (in_dr) = f_r1;
612 1.1 christos FLD (in_sr) = f_r2;
613 1.1 christos FLD (out_dr) = f_r1;
614 1.1 christos }
615 1.1 christos #endif
616 1.1 christos #undef FLD
617 1.1 christos return idesc;
618 1.1 christos }
619 1.1 christos
620 1.1 christos extract_sfmt_add3:
621 1.1 christos {
622 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
623 1.1 christos CGEN_INSN_WORD insn = entire_insn;
624 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
625 1.1 christos UINT f_r1;
626 1.1 christos UINT f_r2;
627 1.1 christos INT f_simm16;
628 1.1 christos
629 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
630 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
631 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
632 1.1 christos
633 1.1 christos /* Record the fields for the semantic handler. */
634 1.1 christos FLD (f_simm16) = f_simm16;
635 1.1 christos FLD (f_r2) = f_r2;
636 1.1 christos FLD (f_r1) = f_r1;
637 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
638 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
639 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
640 1.1 christos
641 1.1 christos #if WITH_PROFILE_MODEL_P
642 1.1 christos /* Record the fields for profiling. */
643 1.1 christos if (PROFILE_MODEL_P (current_cpu))
644 1.1 christos {
645 1.1 christos FLD (in_sr) = f_r2;
646 1.1 christos FLD (out_dr) = f_r1;
647 1.1 christos }
648 1.1 christos #endif
649 1.1 christos #undef FLD
650 1.1 christos return idesc;
651 1.1 christos }
652 1.1 christos
653 1.1 christos extract_sfmt_and3:
654 1.1 christos {
655 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
656 1.1 christos CGEN_INSN_WORD insn = entire_insn;
657 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f
658 1.1 christos UINT f_r1;
659 1.1 christos UINT f_r2;
660 1.1 christos UINT f_uimm16;
661 1.1 christos
662 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
663 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
664 1.1 christos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
665 1.1 christos
666 1.1 christos /* Record the fields for the semantic handler. */
667 1.1 christos FLD (f_r2) = f_r2;
668 1.1 christos FLD (f_uimm16) = f_uimm16;
669 1.1 christos FLD (f_r1) = f_r1;
670 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
671 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
672 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and3", "f_r2 0x%x", 'x', f_r2, "f_uimm16 0x%x", 'x', f_uimm16, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
673 1.1 christos
674 1.1 christos #if WITH_PROFILE_MODEL_P
675 1.1 christos /* Record the fields for profiling. */
676 1.1 christos if (PROFILE_MODEL_P (current_cpu))
677 1.1 christos {
678 1.1 christos FLD (in_sr) = f_r2;
679 1.1 christos FLD (out_dr) = f_r1;
680 1.1 christos }
681 1.1 christos #endif
682 1.1 christos #undef FLD
683 1.1 christos return idesc;
684 1.1 christos }
685 1.1 christos
686 1.1 christos extract_sfmt_or3:
687 1.1 christos {
688 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
689 1.1 christos CGEN_INSN_WORD insn = entire_insn;
690 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f
691 1.1 christos UINT f_r1;
692 1.1 christos UINT f_r2;
693 1.1 christos UINT f_uimm16;
694 1.1 christos
695 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
696 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
697 1.1 christos f_uimm16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
698 1.1 christos
699 1.1 christos /* Record the fields for the semantic handler. */
700 1.1 christos FLD (f_r2) = f_r2;
701 1.1 christos FLD (f_uimm16) = f_uimm16;
702 1.1 christos FLD (f_r1) = f_r1;
703 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
704 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
705 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_or3", "f_r2 0x%x", 'x', f_r2, "f_uimm16 0x%x", 'x', f_uimm16, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
706 1.1 christos
707 1.1 christos #if WITH_PROFILE_MODEL_P
708 1.1 christos /* Record the fields for profiling. */
709 1.1 christos if (PROFILE_MODEL_P (current_cpu))
710 1.1 christos {
711 1.1 christos FLD (in_sr) = f_r2;
712 1.1 christos FLD (out_dr) = f_r1;
713 1.1 christos }
714 1.1 christos #endif
715 1.1 christos #undef FLD
716 1.1 christos return idesc;
717 1.1 christos }
718 1.1 christos
719 1.1 christos extract_sfmt_addi:
720 1.1 christos {
721 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
722 1.1 christos CGEN_INSN_WORD insn = entire_insn;
723 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f
724 1.1 christos UINT f_r1;
725 1.1 christos INT f_simm8;
726 1.1 christos
727 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
728 1.1 christos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8);
729 1.1 christos
730 1.1 christos /* Record the fields for the semantic handler. */
731 1.1 christos FLD (f_r1) = f_r1;
732 1.1 christos FLD (f_simm8) = f_simm8;
733 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
734 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addi", "f_r1 0x%x", 'x', f_r1, "f_simm8 0x%x", 'x', f_simm8, "dr 0x%x", 'x', f_r1, (char *) 0));
735 1.1 christos
736 1.1 christos #if WITH_PROFILE_MODEL_P
737 1.1 christos /* Record the fields for profiling. */
738 1.1 christos if (PROFILE_MODEL_P (current_cpu))
739 1.1 christos {
740 1.1 christos FLD (in_dr) = f_r1;
741 1.1 christos FLD (out_dr) = f_r1;
742 1.1 christos }
743 1.1 christos #endif
744 1.1 christos #undef FLD
745 1.1 christos return idesc;
746 1.1 christos }
747 1.1 christos
748 1.1 christos extract_sfmt_addv:
749 1.1 christos {
750 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
751 1.1 christos CGEN_INSN_WORD insn = entire_insn;
752 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
753 1.1 christos UINT f_r1;
754 1.1 christos UINT f_r2;
755 1.1 christos
756 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
757 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
758 1.1 christos
759 1.1 christos /* Record the fields for the semantic handler. */
760 1.1 christos FLD (f_r1) = f_r1;
761 1.1 christos FLD (f_r2) = f_r2;
762 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
763 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
764 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
765 1.1 christos
766 1.1 christos #if WITH_PROFILE_MODEL_P
767 1.1 christos /* Record the fields for profiling. */
768 1.1 christos if (PROFILE_MODEL_P (current_cpu))
769 1.1 christos {
770 1.1 christos FLD (in_dr) = f_r1;
771 1.1 christos FLD (in_sr) = f_r2;
772 1.1 christos FLD (out_dr) = f_r1;
773 1.1 christos }
774 1.1 christos #endif
775 1.1 christos #undef FLD
776 1.1 christos return idesc;
777 1.1 christos }
778 1.1 christos
779 1.1 christos extract_sfmt_addv3:
780 1.1 christos {
781 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
782 1.1 christos CGEN_INSN_WORD insn = entire_insn;
783 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
784 1.1 christos UINT f_r1;
785 1.1 christos UINT f_r2;
786 1.1 christos INT f_simm16;
787 1.1 christos
788 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
789 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
790 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
791 1.1 christos
792 1.1 christos /* Record the fields for the semantic handler. */
793 1.1 christos FLD (f_simm16) = f_simm16;
794 1.1 christos FLD (f_r2) = f_r2;
795 1.1 christos FLD (f_r1) = f_r1;
796 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
797 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
798 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addv3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
799 1.1 christos
800 1.1 christos #if WITH_PROFILE_MODEL_P
801 1.1 christos /* Record the fields for profiling. */
802 1.1 christos if (PROFILE_MODEL_P (current_cpu))
803 1.1 christos {
804 1.1 christos FLD (in_sr) = f_r2;
805 1.1 christos FLD (out_dr) = f_r1;
806 1.1 christos }
807 1.1 christos #endif
808 1.1 christos #undef FLD
809 1.1 christos return idesc;
810 1.1 christos }
811 1.1 christos
812 1.1 christos extract_sfmt_addx:
813 1.1 christos {
814 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
815 1.1 christos CGEN_INSN_WORD insn = entire_insn;
816 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
817 1.1 christos UINT f_r1;
818 1.1 christos UINT f_r2;
819 1.1 christos
820 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
821 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
822 1.1 christos
823 1.1 christos /* Record the fields for the semantic handler. */
824 1.1 christos FLD (f_r1) = f_r1;
825 1.1 christos FLD (f_r2) = f_r2;
826 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
827 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
828 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addx", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
829 1.1 christos
830 1.1 christos #if WITH_PROFILE_MODEL_P
831 1.1 christos /* Record the fields for profiling. */
832 1.1 christos if (PROFILE_MODEL_P (current_cpu))
833 1.1 christos {
834 1.1 christos FLD (in_dr) = f_r1;
835 1.1 christos FLD (in_sr) = f_r2;
836 1.1 christos FLD (out_dr) = f_r1;
837 1.1 christos }
838 1.1 christos #endif
839 1.1 christos #undef FLD
840 1.1 christos return idesc;
841 1.1 christos }
842 1.1 christos
843 1.1 christos extract_sfmt_bc8:
844 1.1 christos {
845 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
846 1.1 christos CGEN_INSN_WORD insn = entire_insn;
847 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
848 1.1 christos SI f_disp8;
849 1.1 christos
850 1.1.1.11 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4))));
851 1.1 christos
852 1.1 christos /* Record the fields for the semantic handler. */
853 1.1 christos FLD (i_disp8) = f_disp8;
854 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
855 1.1 christos
856 1.1 christos #if WITH_PROFILE_MODEL_P
857 1.1 christos /* Record the fields for profiling. */
858 1.1 christos if (PROFILE_MODEL_P (current_cpu))
859 1.1 christos {
860 1.1 christos }
861 1.1 christos #endif
862 1.1 christos #undef FLD
863 1.1 christos return idesc;
864 1.1 christos }
865 1.1 christos
866 1.1 christos extract_sfmt_bc24:
867 1.1 christos {
868 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
869 1.1 christos CGEN_INSN_WORD insn = entire_insn;
870 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
871 1.1 christos SI f_disp24;
872 1.1 christos
873 1.1.1.11 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc));
874 1.1 christos
875 1.1 christos /* Record the fields for the semantic handler. */
876 1.1 christos FLD (i_disp24) = f_disp24;
877 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bc24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
878 1.1 christos
879 1.1 christos #if WITH_PROFILE_MODEL_P
880 1.1 christos /* Record the fields for profiling. */
881 1.1 christos if (PROFILE_MODEL_P (current_cpu))
882 1.1 christos {
883 1.1 christos }
884 1.1 christos #endif
885 1.1 christos #undef FLD
886 1.1 christos return idesc;
887 1.1 christos }
888 1.1 christos
889 1.1 christos extract_sfmt_beq:
890 1.1 christos {
891 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
892 1.1 christos CGEN_INSN_WORD insn = entire_insn;
893 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
894 1.1 christos UINT f_r1;
895 1.1 christos UINT f_r2;
896 1.1 christos SI f_disp16;
897 1.1 christos
898 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
899 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
900 1.1.1.11 christos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc));
901 1.1 christos
902 1.1 christos /* Record the fields for the semantic handler. */
903 1.1 christos FLD (f_r1) = f_r1;
904 1.1 christos FLD (f_r2) = f_r2;
905 1.1 christos FLD (i_disp16) = f_disp16;
906 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
907 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
908 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beq", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
909 1.1 christos
910 1.1 christos #if WITH_PROFILE_MODEL_P
911 1.1 christos /* Record the fields for profiling. */
912 1.1 christos if (PROFILE_MODEL_P (current_cpu))
913 1.1 christos {
914 1.1 christos FLD (in_src1) = f_r1;
915 1.1 christos FLD (in_src2) = f_r2;
916 1.1 christos }
917 1.1 christos #endif
918 1.1 christos #undef FLD
919 1.1 christos return idesc;
920 1.1 christos }
921 1.1 christos
922 1.1 christos extract_sfmt_beqz:
923 1.1 christos {
924 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
925 1.1 christos CGEN_INSN_WORD insn = entire_insn;
926 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
927 1.1 christos UINT f_r2;
928 1.1 christos SI f_disp16;
929 1.1 christos
930 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
931 1.1.1.11 christos f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 16, 16)) * (4))) + (pc));
932 1.1 christos
933 1.1 christos /* Record the fields for the semantic handler. */
934 1.1 christos FLD (f_r2) = f_r2;
935 1.1 christos FLD (i_disp16) = f_disp16;
936 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
937 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beqz", "f_r2 0x%x", 'x', f_r2, "disp16 0x%x", 'x', f_disp16, "src2 0x%x", 'x', f_r2, (char *) 0));
938 1.1 christos
939 1.1 christos #if WITH_PROFILE_MODEL_P
940 1.1 christos /* Record the fields for profiling. */
941 1.1 christos if (PROFILE_MODEL_P (current_cpu))
942 1.1 christos {
943 1.1 christos FLD (in_src2) = f_r2;
944 1.1 christos }
945 1.1 christos #endif
946 1.1 christos #undef FLD
947 1.1 christos return idesc;
948 1.1 christos }
949 1.1 christos
950 1.1 christos extract_sfmt_bl8:
951 1.1 christos {
952 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
953 1.1 christos CGEN_INSN_WORD insn = entire_insn;
954 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
955 1.1 christos SI f_disp8;
956 1.1 christos
957 1.1.1.11 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4))));
958 1.1 christos
959 1.1 christos /* Record the fields for the semantic handler. */
960 1.1 christos FLD (i_disp8) = f_disp8;
961 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
962 1.1 christos
963 1.1 christos #if WITH_PROFILE_MODEL_P
964 1.1 christos /* Record the fields for profiling. */
965 1.1 christos if (PROFILE_MODEL_P (current_cpu))
966 1.1 christos {
967 1.1 christos FLD (out_h_gr_SI_14) = 14;
968 1.1 christos }
969 1.1 christos #endif
970 1.1 christos #undef FLD
971 1.1 christos return idesc;
972 1.1 christos }
973 1.1 christos
974 1.1 christos extract_sfmt_bl24:
975 1.1 christos {
976 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
977 1.1 christos CGEN_INSN_WORD insn = entire_insn;
978 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
979 1.1 christos SI f_disp24;
980 1.1 christos
981 1.1.1.11 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc));
982 1.1 christos
983 1.1 christos /* Record the fields for the semantic handler. */
984 1.1 christos FLD (i_disp24) = f_disp24;
985 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bl24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
986 1.1 christos
987 1.1 christos #if WITH_PROFILE_MODEL_P
988 1.1 christos /* Record the fields for profiling. */
989 1.1 christos if (PROFILE_MODEL_P (current_cpu))
990 1.1 christos {
991 1.1 christos FLD (out_h_gr_SI_14) = 14;
992 1.1 christos }
993 1.1 christos #endif
994 1.1 christos #undef FLD
995 1.1 christos return idesc;
996 1.1 christos }
997 1.1 christos
998 1.1 christos extract_sfmt_bra8:
999 1.1 christos {
1000 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1001 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1002 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
1003 1.1 christos SI f_disp8;
1004 1.1 christos
1005 1.1.1.11 christos f_disp8 = ((((EXTRACT_MSB0_SINT (insn, 16, 8, 8)) * (4))) + (((pc) & (-4))));
1006 1.1 christos
1007 1.1 christos /* Record the fields for the semantic handler. */
1008 1.1 christos FLD (i_disp8) = f_disp8;
1009 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra8", "disp8 0x%x", 'x', f_disp8, (char *) 0));
1010 1.1 christos
1011 1.1 christos #if WITH_PROFILE_MODEL_P
1012 1.1 christos /* Record the fields for profiling. */
1013 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1014 1.1 christos {
1015 1.1 christos }
1016 1.1 christos #endif
1017 1.1 christos #undef FLD
1018 1.1 christos return idesc;
1019 1.1 christos }
1020 1.1 christos
1021 1.1 christos extract_sfmt_bra24:
1022 1.1 christos {
1023 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1024 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1025 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
1026 1.1 christos SI f_disp24;
1027 1.1 christos
1028 1.1.1.11 christos f_disp24 = ((((EXTRACT_MSB0_SINT (insn, 32, 8, 24)) * (4))) + (pc));
1029 1.1 christos
1030 1.1 christos /* Record the fields for the semantic handler. */
1031 1.1 christos FLD (i_disp24) = f_disp24;
1032 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra24", "disp24 0x%x", 'x', f_disp24, (char *) 0));
1033 1.1 christos
1034 1.1 christos #if WITH_PROFILE_MODEL_P
1035 1.1 christos /* Record the fields for profiling. */
1036 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1037 1.1 christos {
1038 1.1 christos }
1039 1.1 christos #endif
1040 1.1 christos #undef FLD
1041 1.1 christos return idesc;
1042 1.1 christos }
1043 1.1 christos
1044 1.1 christos extract_sfmt_cmp:
1045 1.1 christos {
1046 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1047 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1048 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
1049 1.1 christos UINT f_r1;
1050 1.1 christos UINT f_r2;
1051 1.1 christos
1052 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1053 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1054 1.1 christos
1055 1.1 christos /* Record the fields for the semantic handler. */
1056 1.1 christos FLD (f_r1) = f_r1;
1057 1.1 christos FLD (f_r2) = f_r2;
1058 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1059 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1060 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmp", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1061 1.1 christos
1062 1.1 christos #if WITH_PROFILE_MODEL_P
1063 1.1 christos /* Record the fields for profiling. */
1064 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1065 1.1 christos {
1066 1.1 christos FLD (in_src1) = f_r1;
1067 1.1 christos FLD (in_src2) = f_r2;
1068 1.1 christos }
1069 1.1 christos #endif
1070 1.1 christos #undef FLD
1071 1.1 christos return idesc;
1072 1.1 christos }
1073 1.1 christos
1074 1.1 christos extract_sfmt_cmpi:
1075 1.1 christos {
1076 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1077 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1078 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
1079 1.1 christos UINT f_r2;
1080 1.1 christos INT f_simm16;
1081 1.1 christos
1082 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1083 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1084 1.1 christos
1085 1.1 christos /* Record the fields for the semantic handler. */
1086 1.1 christos FLD (f_simm16) = f_simm16;
1087 1.1 christos FLD (f_r2) = f_r2;
1088 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1089 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpi", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "src2 0x%x", 'x', f_r2, (char *) 0));
1090 1.1 christos
1091 1.1 christos #if WITH_PROFILE_MODEL_P
1092 1.1 christos /* Record the fields for profiling. */
1093 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1094 1.1 christos {
1095 1.1 christos FLD (in_src2) = f_r2;
1096 1.1 christos }
1097 1.1 christos #endif
1098 1.1 christos #undef FLD
1099 1.1 christos return idesc;
1100 1.1 christos }
1101 1.1 christos
1102 1.1 christos extract_sfmt_div:
1103 1.1 christos {
1104 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1105 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1106 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
1107 1.1 christos UINT f_r1;
1108 1.1 christos UINT f_r2;
1109 1.1 christos
1110 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1111 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1112 1.1 christos
1113 1.1 christos /* Record the fields for the semantic handler. */
1114 1.1 christos FLD (f_r1) = f_r1;
1115 1.1 christos FLD (f_r2) = f_r2;
1116 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1117 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1118 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_div", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1119 1.1 christos
1120 1.1 christos #if WITH_PROFILE_MODEL_P
1121 1.1 christos /* Record the fields for profiling. */
1122 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1123 1.1 christos {
1124 1.1 christos FLD (in_dr) = f_r1;
1125 1.1 christos FLD (in_sr) = f_r2;
1126 1.1 christos FLD (out_dr) = f_r1;
1127 1.1 christos }
1128 1.1 christos #endif
1129 1.1 christos #undef FLD
1130 1.1 christos return idesc;
1131 1.1 christos }
1132 1.1 christos
1133 1.1 christos extract_sfmt_jl:
1134 1.1 christos {
1135 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1136 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1137 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f
1138 1.1 christos UINT f_r2;
1139 1.1 christos
1140 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1141 1.1 christos
1142 1.1 christos /* Record the fields for the semantic handler. */
1143 1.1 christos FLD (f_r2) = f_r2;
1144 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1145 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jl", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0));
1146 1.1 christos
1147 1.1 christos #if WITH_PROFILE_MODEL_P
1148 1.1 christos /* Record the fields for profiling. */
1149 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1150 1.1 christos {
1151 1.1 christos FLD (in_sr) = f_r2;
1152 1.1 christos FLD (out_h_gr_SI_14) = 14;
1153 1.1 christos }
1154 1.1 christos #endif
1155 1.1 christos #undef FLD
1156 1.1 christos return idesc;
1157 1.1 christos }
1158 1.1 christos
1159 1.1 christos extract_sfmt_jmp:
1160 1.1 christos {
1161 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1162 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1163 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f
1164 1.1 christos UINT f_r2;
1165 1.1 christos
1166 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1167 1.1 christos
1168 1.1 christos /* Record the fields for the semantic handler. */
1169 1.1 christos FLD (f_r2) = f_r2;
1170 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1171 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jmp", "f_r2 0x%x", 'x', f_r2, "sr 0x%x", 'x', f_r2, (char *) 0));
1172 1.1 christos
1173 1.1 christos #if WITH_PROFILE_MODEL_P
1174 1.1 christos /* Record the fields for profiling. */
1175 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1176 1.1 christos {
1177 1.1 christos FLD (in_sr) = f_r2;
1178 1.1 christos }
1179 1.1 christos #endif
1180 1.1 christos #undef FLD
1181 1.1 christos return idesc;
1182 1.1 christos }
1183 1.1 christos
1184 1.1 christos extract_sfmt_ld:
1185 1.1 christos {
1186 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1187 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1188 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1189 1.1 christos UINT f_r1;
1190 1.1 christos UINT f_r2;
1191 1.1 christos
1192 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1193 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1194 1.1 christos
1195 1.1 christos /* Record the fields for the semantic handler. */
1196 1.1 christos FLD (f_r2) = f_r2;
1197 1.1 christos FLD (f_r1) = f_r1;
1198 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1199 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1200 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1201 1.1 christos
1202 1.1 christos #if WITH_PROFILE_MODEL_P
1203 1.1 christos /* Record the fields for profiling. */
1204 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1205 1.1 christos {
1206 1.1 christos FLD (in_sr) = f_r2;
1207 1.1 christos FLD (out_dr) = f_r1;
1208 1.1 christos }
1209 1.1 christos #endif
1210 1.1 christos #undef FLD
1211 1.1 christos return idesc;
1212 1.1 christos }
1213 1.1 christos
1214 1.1 christos extract_sfmt_ld_d:
1215 1.1 christos {
1216 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1217 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1218 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1219 1.1 christos UINT f_r1;
1220 1.1 christos UINT f_r2;
1221 1.1 christos INT f_simm16;
1222 1.1 christos
1223 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1224 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1225 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1226 1.1 christos
1227 1.1 christos /* Record the fields for the semantic handler. */
1228 1.1 christos FLD (f_simm16) = f_simm16;
1229 1.1 christos FLD (f_r2) = f_r2;
1230 1.1 christos FLD (f_r1) = f_r1;
1231 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1232 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1233 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1234 1.1 christos
1235 1.1 christos #if WITH_PROFILE_MODEL_P
1236 1.1 christos /* Record the fields for profiling. */
1237 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1238 1.1 christos {
1239 1.1 christos FLD (in_sr) = f_r2;
1240 1.1 christos FLD (out_dr) = f_r1;
1241 1.1 christos }
1242 1.1 christos #endif
1243 1.1 christos #undef FLD
1244 1.1 christos return idesc;
1245 1.1 christos }
1246 1.1 christos
1247 1.1 christos extract_sfmt_ldb:
1248 1.1 christos {
1249 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1250 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1251 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1252 1.1 christos UINT f_r1;
1253 1.1 christos UINT f_r2;
1254 1.1 christos
1255 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1256 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1257 1.1 christos
1258 1.1 christos /* Record the fields for the semantic handler. */
1259 1.1 christos FLD (f_r2) = f_r2;
1260 1.1 christos FLD (f_r1) = f_r1;
1261 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1262 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1263 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1264 1.1 christos
1265 1.1 christos #if WITH_PROFILE_MODEL_P
1266 1.1 christos /* Record the fields for profiling. */
1267 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1268 1.1 christos {
1269 1.1 christos FLD (in_sr) = f_r2;
1270 1.1 christos FLD (out_dr) = f_r1;
1271 1.1 christos }
1272 1.1 christos #endif
1273 1.1 christos #undef FLD
1274 1.1 christos return idesc;
1275 1.1 christos }
1276 1.1 christos
1277 1.1 christos extract_sfmt_ldb_d:
1278 1.1 christos {
1279 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1280 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1281 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1282 1.1 christos UINT f_r1;
1283 1.1 christos UINT f_r2;
1284 1.1 christos INT f_simm16;
1285 1.1 christos
1286 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1287 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1288 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1289 1.1 christos
1290 1.1 christos /* Record the fields for the semantic handler. */
1291 1.1 christos FLD (f_simm16) = f_simm16;
1292 1.1 christos FLD (f_r2) = f_r2;
1293 1.1 christos FLD (f_r1) = f_r1;
1294 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1295 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1296 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldb_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1297 1.1 christos
1298 1.1 christos #if WITH_PROFILE_MODEL_P
1299 1.1 christos /* Record the fields for profiling. */
1300 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1301 1.1 christos {
1302 1.1 christos FLD (in_sr) = f_r2;
1303 1.1 christos FLD (out_dr) = f_r1;
1304 1.1 christos }
1305 1.1 christos #endif
1306 1.1 christos #undef FLD
1307 1.1 christos return idesc;
1308 1.1 christos }
1309 1.1 christos
1310 1.1 christos extract_sfmt_ldh:
1311 1.1 christos {
1312 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1313 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1314 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1315 1.1 christos UINT f_r1;
1316 1.1 christos UINT f_r2;
1317 1.1 christos
1318 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1319 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1320 1.1 christos
1321 1.1 christos /* Record the fields for the semantic handler. */
1322 1.1 christos FLD (f_r2) = f_r2;
1323 1.1 christos FLD (f_r1) = f_r1;
1324 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1325 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1326 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1327 1.1 christos
1328 1.1 christos #if WITH_PROFILE_MODEL_P
1329 1.1 christos /* Record the fields for profiling. */
1330 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1331 1.1 christos {
1332 1.1 christos FLD (in_sr) = f_r2;
1333 1.1 christos FLD (out_dr) = f_r1;
1334 1.1 christos }
1335 1.1 christos #endif
1336 1.1 christos #undef FLD
1337 1.1 christos return idesc;
1338 1.1 christos }
1339 1.1 christos
1340 1.1 christos extract_sfmt_ldh_d:
1341 1.1 christos {
1342 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1343 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1344 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1345 1.1 christos UINT f_r1;
1346 1.1 christos UINT f_r2;
1347 1.1 christos INT f_simm16;
1348 1.1 christos
1349 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1350 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1351 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1352 1.1 christos
1353 1.1 christos /* Record the fields for the semantic handler. */
1354 1.1 christos FLD (f_simm16) = f_simm16;
1355 1.1 christos FLD (f_r2) = f_r2;
1356 1.1 christos FLD (f_r1) = f_r1;
1357 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1358 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1359 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldh_d", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1360 1.1 christos
1361 1.1 christos #if WITH_PROFILE_MODEL_P
1362 1.1 christos /* Record the fields for profiling. */
1363 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1364 1.1 christos {
1365 1.1 christos FLD (in_sr) = f_r2;
1366 1.1 christos FLD (out_dr) = f_r1;
1367 1.1 christos }
1368 1.1 christos #endif
1369 1.1 christos #undef FLD
1370 1.1 christos return idesc;
1371 1.1 christos }
1372 1.1 christos
1373 1.1 christos extract_sfmt_ld_plus:
1374 1.1 christos {
1375 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1376 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1377 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1378 1.1 christos UINT f_r1;
1379 1.1 christos UINT f_r2;
1380 1.1 christos
1381 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1382 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1383 1.1 christos
1384 1.1 christos /* Record the fields for the semantic handler. */
1385 1.1 christos FLD (f_r2) = f_r2;
1386 1.1 christos FLD (f_r1) = f_r1;
1387 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1388 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1389 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld_plus", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1390 1.1 christos
1391 1.1 christos #if WITH_PROFILE_MODEL_P
1392 1.1 christos /* Record the fields for profiling. */
1393 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1394 1.1 christos {
1395 1.1 christos FLD (in_sr) = f_r2;
1396 1.1 christos FLD (out_dr) = f_r1;
1397 1.1 christos FLD (out_sr) = f_r2;
1398 1.1 christos }
1399 1.1 christos #endif
1400 1.1 christos #undef FLD
1401 1.1 christos return idesc;
1402 1.1 christos }
1403 1.1 christos
1404 1.1 christos extract_sfmt_ld24:
1405 1.1 christos {
1406 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1407 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1408 1.1 christos #define FLD(f) abuf->fields.sfmt_ld24.f
1409 1.1 christos UINT f_r1;
1410 1.1 christos UINT f_uimm24;
1411 1.1 christos
1412 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1413 1.1 christos f_uimm24 = EXTRACT_MSB0_UINT (insn, 32, 8, 24);
1414 1.1 christos
1415 1.1 christos /* Record the fields for the semantic handler. */
1416 1.1 christos FLD (f_r1) = f_r1;
1417 1.1 christos FLD (i_uimm24) = f_uimm24;
1418 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1419 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ld24", "f_r1 0x%x", 'x', f_r1, "uimm24 0x%x", 'x', f_uimm24, "dr 0x%x", 'x', f_r1, (char *) 0));
1420 1.1 christos
1421 1.1 christos #if WITH_PROFILE_MODEL_P
1422 1.1 christos /* Record the fields for profiling. */
1423 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1424 1.1 christos {
1425 1.1 christos FLD (out_dr) = f_r1;
1426 1.1 christos }
1427 1.1 christos #endif
1428 1.1 christos #undef FLD
1429 1.1 christos return idesc;
1430 1.1 christos }
1431 1.1 christos
1432 1.1 christos extract_sfmt_ldi8:
1433 1.1 christos {
1434 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1435 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1436 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f
1437 1.1 christos UINT f_r1;
1438 1.1 christos INT f_simm8;
1439 1.1 christos
1440 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1441 1.1 christos f_simm8 = EXTRACT_MSB0_SINT (insn, 16, 8, 8);
1442 1.1 christos
1443 1.1 christos /* Record the fields for the semantic handler. */
1444 1.1 christos FLD (f_simm8) = f_simm8;
1445 1.1 christos FLD (f_r1) = f_r1;
1446 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1447 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi8", "f_simm8 0x%x", 'x', f_simm8, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
1448 1.1 christos
1449 1.1 christos #if WITH_PROFILE_MODEL_P
1450 1.1 christos /* Record the fields for profiling. */
1451 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1452 1.1 christos {
1453 1.1 christos FLD (out_dr) = f_r1;
1454 1.1 christos }
1455 1.1 christos #endif
1456 1.1 christos #undef FLD
1457 1.1 christos return idesc;
1458 1.1 christos }
1459 1.1 christos
1460 1.1 christos extract_sfmt_ldi16:
1461 1.1 christos {
1462 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1463 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1464 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1465 1.1 christos UINT f_r1;
1466 1.1 christos INT f_simm16;
1467 1.1 christos
1468 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1469 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1470 1.1 christos
1471 1.1 christos /* Record the fields for the semantic handler. */
1472 1.1 christos FLD (f_simm16) = f_simm16;
1473 1.1 christos FLD (f_r1) = f_r1;
1474 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1475 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldi16", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
1476 1.1 christos
1477 1.1 christos #if WITH_PROFILE_MODEL_P
1478 1.1 christos /* Record the fields for profiling. */
1479 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1480 1.1 christos {
1481 1.1 christos FLD (out_dr) = f_r1;
1482 1.1 christos }
1483 1.1 christos #endif
1484 1.1 christos #undef FLD
1485 1.1 christos return idesc;
1486 1.1 christos }
1487 1.1 christos
1488 1.1 christos extract_sfmt_lock:
1489 1.1 christos {
1490 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1491 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1492 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1493 1.1 christos UINT f_r1;
1494 1.1 christos UINT f_r2;
1495 1.1 christos
1496 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1497 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1498 1.1 christos
1499 1.1 christos /* Record the fields for the semantic handler. */
1500 1.1 christos FLD (f_r2) = f_r2;
1501 1.1 christos FLD (f_r1) = f_r1;
1502 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1503 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1504 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lock", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1505 1.1 christos
1506 1.1 christos #if WITH_PROFILE_MODEL_P
1507 1.1 christos /* Record the fields for profiling. */
1508 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1509 1.1 christos {
1510 1.1 christos FLD (in_sr) = f_r2;
1511 1.1 christos FLD (out_dr) = f_r1;
1512 1.1 christos }
1513 1.1 christos #endif
1514 1.1 christos #undef FLD
1515 1.1 christos return idesc;
1516 1.1 christos }
1517 1.1 christos
1518 1.1 christos extract_sfmt_machi:
1519 1.1 christos {
1520 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1521 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1522 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
1523 1.1 christos UINT f_r1;
1524 1.1 christos UINT f_r2;
1525 1.1 christos
1526 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1527 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1528 1.1 christos
1529 1.1 christos /* Record the fields for the semantic handler. */
1530 1.1 christos FLD (f_r1) = f_r1;
1531 1.1 christos FLD (f_r2) = f_r2;
1532 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1533 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1534 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_machi", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1535 1.1 christos
1536 1.1 christos #if WITH_PROFILE_MODEL_P
1537 1.1 christos /* Record the fields for profiling. */
1538 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1539 1.1 christos {
1540 1.1 christos FLD (in_src1) = f_r1;
1541 1.1 christos FLD (in_src2) = f_r2;
1542 1.1 christos }
1543 1.1 christos #endif
1544 1.1 christos #undef FLD
1545 1.1 christos return idesc;
1546 1.1 christos }
1547 1.1 christos
1548 1.1 christos extract_sfmt_mulhi:
1549 1.1 christos {
1550 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1551 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1552 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
1553 1.1 christos UINT f_r1;
1554 1.1 christos UINT f_r2;
1555 1.1 christos
1556 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1557 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1558 1.1 christos
1559 1.1 christos /* Record the fields for the semantic handler. */
1560 1.1 christos FLD (f_r1) = f_r1;
1561 1.1 christos FLD (f_r2) = f_r2;
1562 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1563 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1564 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mulhi", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1565 1.1 christos
1566 1.1 christos #if WITH_PROFILE_MODEL_P
1567 1.1 christos /* Record the fields for profiling. */
1568 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1569 1.1 christos {
1570 1.1 christos FLD (in_src1) = f_r1;
1571 1.1 christos FLD (in_src2) = f_r2;
1572 1.1 christos }
1573 1.1 christos #endif
1574 1.1 christos #undef FLD
1575 1.1 christos return idesc;
1576 1.1 christos }
1577 1.1 christos
1578 1.1 christos extract_sfmt_mv:
1579 1.1 christos {
1580 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1581 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1582 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1583 1.1 christos UINT f_r1;
1584 1.1 christos UINT f_r2;
1585 1.1 christos
1586 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1587 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1588 1.1 christos
1589 1.1 christos /* Record the fields for the semantic handler. */
1590 1.1 christos FLD (f_r2) = f_r2;
1591 1.1 christos FLD (f_r1) = f_r1;
1592 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1593 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1594 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mv", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1595 1.1 christos
1596 1.1 christos #if WITH_PROFILE_MODEL_P
1597 1.1 christos /* Record the fields for profiling. */
1598 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1599 1.1 christos {
1600 1.1 christos FLD (in_sr) = f_r2;
1601 1.1 christos FLD (out_dr) = f_r1;
1602 1.1 christos }
1603 1.1 christos #endif
1604 1.1 christos #undef FLD
1605 1.1 christos return idesc;
1606 1.1 christos }
1607 1.1 christos
1608 1.1 christos extract_sfmt_mvfachi:
1609 1.1 christos {
1610 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1611 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1612 1.1 christos #define FLD(f) abuf->fields.sfmt_seth.f
1613 1.1 christos UINT f_r1;
1614 1.1 christos
1615 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1616 1.1 christos
1617 1.1 christos /* Record the fields for the semantic handler. */
1618 1.1 christos FLD (f_r1) = f_r1;
1619 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1620 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfachi", "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
1621 1.1 christos
1622 1.1 christos #if WITH_PROFILE_MODEL_P
1623 1.1 christos /* Record the fields for profiling. */
1624 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1625 1.1 christos {
1626 1.1 christos FLD (out_dr) = f_r1;
1627 1.1 christos }
1628 1.1 christos #endif
1629 1.1 christos #undef FLD
1630 1.1 christos return idesc;
1631 1.1 christos }
1632 1.1 christos
1633 1.1 christos extract_sfmt_mvfc:
1634 1.1 christos {
1635 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1636 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1637 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1638 1.1 christos UINT f_r1;
1639 1.1 christos UINT f_r2;
1640 1.1 christos
1641 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1642 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1643 1.1 christos
1644 1.1 christos /* Record the fields for the semantic handler. */
1645 1.1 christos FLD (f_r2) = f_r2;
1646 1.1 christos FLD (f_r1) = f_r1;
1647 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1648 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvfc", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
1649 1.1 christos
1650 1.1 christos #if WITH_PROFILE_MODEL_P
1651 1.1 christos /* Record the fields for profiling. */
1652 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1653 1.1 christos {
1654 1.1 christos FLD (out_dr) = f_r1;
1655 1.1 christos }
1656 1.1 christos #endif
1657 1.1 christos #undef FLD
1658 1.1 christos return idesc;
1659 1.1 christos }
1660 1.1 christos
1661 1.1 christos extract_sfmt_mvtachi:
1662 1.1 christos {
1663 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1664 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1665 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
1666 1.1 christos UINT f_r1;
1667 1.1 christos
1668 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1669 1.1 christos
1670 1.1 christos /* Record the fields for the semantic handler. */
1671 1.1 christos FLD (f_r1) = f_r1;
1672 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1673 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtachi", "f_r1 0x%x", 'x', f_r1, "src1 0x%x", 'x', f_r1, (char *) 0));
1674 1.1 christos
1675 1.1 christos #if WITH_PROFILE_MODEL_P
1676 1.1 christos /* Record the fields for profiling. */
1677 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1678 1.1 christos {
1679 1.1 christos FLD (in_src1) = f_r1;
1680 1.1 christos }
1681 1.1 christos #endif
1682 1.1 christos #undef FLD
1683 1.1 christos return idesc;
1684 1.1 christos }
1685 1.1 christos
1686 1.1 christos extract_sfmt_mvtc:
1687 1.1 christos {
1688 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1689 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1690 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1691 1.1 christos UINT f_r1;
1692 1.1 christos UINT f_r2;
1693 1.1 christos
1694 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1695 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1696 1.1 christos
1697 1.1 christos /* Record the fields for the semantic handler. */
1698 1.1 christos FLD (f_r2) = f_r2;
1699 1.1 christos FLD (f_r1) = f_r1;
1700 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1701 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mvtc", "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, (char *) 0));
1702 1.1 christos
1703 1.1 christos #if WITH_PROFILE_MODEL_P
1704 1.1 christos /* Record the fields for profiling. */
1705 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1706 1.1 christos {
1707 1.1 christos FLD (in_sr) = f_r2;
1708 1.1 christos }
1709 1.1 christos #endif
1710 1.1 christos #undef FLD
1711 1.1 christos return idesc;
1712 1.1 christos }
1713 1.1 christos
1714 1.1 christos extract_sfmt_nop:
1715 1.1 christos {
1716 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1717 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
1718 1.1 christos
1719 1.1 christos
1720 1.1 christos /* Record the fields for the semantic handler. */
1721 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nop", (char *) 0));
1722 1.1 christos
1723 1.1 christos #undef FLD
1724 1.1 christos return idesc;
1725 1.1 christos }
1726 1.1 christos
1727 1.1 christos extract_sfmt_rac:
1728 1.1 christos {
1729 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1730 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
1731 1.1 christos
1732 1.1 christos
1733 1.1 christos /* Record the fields for the semantic handler. */
1734 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rac", (char *) 0));
1735 1.1 christos
1736 1.1 christos #undef FLD
1737 1.1 christos return idesc;
1738 1.1 christos }
1739 1.1 christos
1740 1.1 christos extract_sfmt_rte:
1741 1.1 christos {
1742 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1743 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
1744 1.1 christos
1745 1.1 christos
1746 1.1 christos /* Record the fields for the semantic handler. */
1747 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rte", (char *) 0));
1748 1.1 christos
1749 1.1 christos #if WITH_PROFILE_MODEL_P
1750 1.1 christos /* Record the fields for profiling. */
1751 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1752 1.1 christos {
1753 1.1 christos }
1754 1.1 christos #endif
1755 1.1 christos #undef FLD
1756 1.1 christos return idesc;
1757 1.1 christos }
1758 1.1 christos
1759 1.1 christos extract_sfmt_seth:
1760 1.1 christos {
1761 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1762 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1763 1.1 christos #define FLD(f) abuf->fields.sfmt_seth.f
1764 1.1 christos UINT f_r1;
1765 1.1 christos UINT f_hi16;
1766 1.1 christos
1767 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1768 1.1 christos f_hi16 = EXTRACT_MSB0_UINT (insn, 32, 16, 16);
1769 1.1 christos
1770 1.1 christos /* Record the fields for the semantic handler. */
1771 1.1 christos FLD (f_hi16) = f_hi16;
1772 1.1 christos FLD (f_r1) = f_r1;
1773 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1774 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_seth", "f_hi16 0x%x", 'x', f_hi16, "f_r1 0x%x", 'x', f_r1, "dr 0x%x", 'x', f_r1, (char *) 0));
1775 1.1 christos
1776 1.1 christos #if WITH_PROFILE_MODEL_P
1777 1.1 christos /* Record the fields for profiling. */
1778 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1779 1.1 christos {
1780 1.1 christos FLD (out_dr) = f_r1;
1781 1.1 christos }
1782 1.1 christos #endif
1783 1.1 christos #undef FLD
1784 1.1 christos return idesc;
1785 1.1 christos }
1786 1.1 christos
1787 1.1 christos extract_sfmt_sll3:
1788 1.1 christos {
1789 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1790 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1791 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1792 1.1 christos UINT f_r1;
1793 1.1 christos UINT f_r2;
1794 1.1 christos INT f_simm16;
1795 1.1 christos
1796 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1797 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1798 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1799 1.1 christos
1800 1.1 christos /* Record the fields for the semantic handler. */
1801 1.1 christos FLD (f_simm16) = f_simm16;
1802 1.1 christos FLD (f_r2) = f_r2;
1803 1.1 christos FLD (f_r1) = f_r1;
1804 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
1805 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1806 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sll3", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_r1 0x%x", 'x', f_r1, "sr 0x%x", 'x', f_r2, "dr 0x%x", 'x', f_r1, (char *) 0));
1807 1.1 christos
1808 1.1 christos #if WITH_PROFILE_MODEL_P
1809 1.1 christos /* Record the fields for profiling. */
1810 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1811 1.1 christos {
1812 1.1 christos FLD (in_sr) = f_r2;
1813 1.1 christos FLD (out_dr) = f_r1;
1814 1.1 christos }
1815 1.1 christos #endif
1816 1.1 christos #undef FLD
1817 1.1 christos return idesc;
1818 1.1 christos }
1819 1.1 christos
1820 1.1 christos extract_sfmt_slli:
1821 1.1 christos {
1822 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1823 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1824 1.1 christos #define FLD(f) abuf->fields.sfmt_slli.f
1825 1.1 christos UINT f_r1;
1826 1.1 christos UINT f_uimm5;
1827 1.1 christos
1828 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1829 1.1 christos f_uimm5 = EXTRACT_MSB0_UINT (insn, 16, 11, 5);
1830 1.1 christos
1831 1.1 christos /* Record the fields for the semantic handler. */
1832 1.1 christos FLD (f_r1) = f_r1;
1833 1.1 christos FLD (f_uimm5) = f_uimm5;
1834 1.1 christos FLD (i_dr) = & CPU (h_gr)[f_r1];
1835 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_slli", "f_r1 0x%x", 'x', f_r1, "f_uimm5 0x%x", 'x', f_uimm5, "dr 0x%x", 'x', f_r1, (char *) 0));
1836 1.1 christos
1837 1.1 christos #if WITH_PROFILE_MODEL_P
1838 1.1 christos /* Record the fields for profiling. */
1839 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1840 1.1 christos {
1841 1.1 christos FLD (in_dr) = f_r1;
1842 1.1 christos FLD (out_dr) = f_r1;
1843 1.1 christos }
1844 1.1 christos #endif
1845 1.1 christos #undef FLD
1846 1.1 christos return idesc;
1847 1.1 christos }
1848 1.1 christos
1849 1.1 christos extract_sfmt_st:
1850 1.1 christos {
1851 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1852 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1853 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
1854 1.1 christos UINT f_r1;
1855 1.1 christos UINT f_r2;
1856 1.1 christos
1857 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1858 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1859 1.1 christos
1860 1.1 christos /* Record the fields for the semantic handler. */
1861 1.1 christos FLD (f_r1) = f_r1;
1862 1.1 christos FLD (f_r2) = f_r2;
1863 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1864 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1865 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1866 1.1 christos
1867 1.1 christos #if WITH_PROFILE_MODEL_P
1868 1.1 christos /* Record the fields for profiling. */
1869 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1870 1.1 christos {
1871 1.1 christos FLD (in_src1) = f_r1;
1872 1.1 christos FLD (in_src2) = f_r2;
1873 1.1 christos }
1874 1.1 christos #endif
1875 1.1 christos #undef FLD
1876 1.1 christos return idesc;
1877 1.1 christos }
1878 1.1 christos
1879 1.1 christos extract_sfmt_st_d:
1880 1.1 christos {
1881 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1882 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1883 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
1884 1.1 christos UINT f_r1;
1885 1.1 christos UINT f_r2;
1886 1.1 christos INT f_simm16;
1887 1.1 christos
1888 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1889 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1890 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1891 1.1 christos
1892 1.1 christos /* Record the fields for the semantic handler. */
1893 1.1 christos FLD (f_simm16) = f_simm16;
1894 1.1 christos FLD (f_r1) = f_r1;
1895 1.1 christos FLD (f_r2) = f_r2;
1896 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1897 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1898 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1899 1.1 christos
1900 1.1 christos #if WITH_PROFILE_MODEL_P
1901 1.1 christos /* Record the fields for profiling. */
1902 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1903 1.1 christos {
1904 1.1 christos FLD (in_src1) = f_r1;
1905 1.1 christos FLD (in_src2) = f_r2;
1906 1.1 christos }
1907 1.1 christos #endif
1908 1.1 christos #undef FLD
1909 1.1 christos return idesc;
1910 1.1 christos }
1911 1.1 christos
1912 1.1 christos extract_sfmt_stb:
1913 1.1 christos {
1914 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1915 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1916 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
1917 1.1 christos UINT f_r1;
1918 1.1 christos UINT f_r2;
1919 1.1 christos
1920 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1921 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1922 1.1 christos
1923 1.1 christos /* Record the fields for the semantic handler. */
1924 1.1 christos FLD (f_r1) = f_r1;
1925 1.1 christos FLD (f_r2) = f_r2;
1926 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1927 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1928 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1929 1.1 christos
1930 1.1 christos #if WITH_PROFILE_MODEL_P
1931 1.1 christos /* Record the fields for profiling. */
1932 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1933 1.1 christos {
1934 1.1 christos FLD (in_src1) = f_r1;
1935 1.1 christos FLD (in_src2) = f_r2;
1936 1.1 christos }
1937 1.1 christos #endif
1938 1.1 christos #undef FLD
1939 1.1 christos return idesc;
1940 1.1 christos }
1941 1.1 christos
1942 1.1 christos extract_sfmt_stb_d:
1943 1.1 christos {
1944 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1945 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1946 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
1947 1.1 christos UINT f_r1;
1948 1.1 christos UINT f_r2;
1949 1.1 christos INT f_simm16;
1950 1.1 christos
1951 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
1952 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
1953 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
1954 1.1 christos
1955 1.1 christos /* Record the fields for the semantic handler. */
1956 1.1 christos FLD (f_simm16) = f_simm16;
1957 1.1 christos FLD (f_r1) = f_r1;
1958 1.1 christos FLD (f_r2) = f_r2;
1959 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1960 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1961 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1962 1.1 christos
1963 1.1 christos #if WITH_PROFILE_MODEL_P
1964 1.1 christos /* Record the fields for profiling. */
1965 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1966 1.1 christos {
1967 1.1 christos FLD (in_src1) = f_r1;
1968 1.1 christos FLD (in_src2) = f_r2;
1969 1.1 christos }
1970 1.1 christos #endif
1971 1.1 christos #undef FLD
1972 1.1 christos return idesc;
1973 1.1 christos }
1974 1.1 christos
1975 1.1 christos extract_sfmt_sth:
1976 1.1 christos {
1977 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
1978 1.1 christos CGEN_INSN_WORD insn = entire_insn;
1979 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
1980 1.1 christos UINT f_r1;
1981 1.1 christos UINT f_r2;
1982 1.1 christos
1983 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
1984 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
1985 1.1 christos
1986 1.1 christos /* Record the fields for the semantic handler. */
1987 1.1 christos FLD (f_r1) = f_r1;
1988 1.1 christos FLD (f_r2) = f_r2;
1989 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
1990 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
1991 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
1992 1.1 christos
1993 1.1 christos #if WITH_PROFILE_MODEL_P
1994 1.1 christos /* Record the fields for profiling. */
1995 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1996 1.1 christos {
1997 1.1 christos FLD (in_src1) = f_r1;
1998 1.1 christos FLD (in_src2) = f_r2;
1999 1.1 christos }
2000 1.1 christos #endif
2001 1.1 christos #undef FLD
2002 1.1 christos return idesc;
2003 1.1 christos }
2004 1.1 christos
2005 1.1 christos extract_sfmt_sth_d:
2006 1.1 christos {
2007 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
2008 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2009 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
2010 1.1 christos UINT f_r1;
2011 1.1 christos UINT f_r2;
2012 1.1 christos INT f_simm16;
2013 1.1 christos
2014 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 32, 4, 4);
2015 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2016 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
2017 1.1 christos
2018 1.1 christos /* Record the fields for the semantic handler. */
2019 1.1 christos FLD (f_simm16) = f_simm16;
2020 1.1 christos FLD (f_r1) = f_r1;
2021 1.1 christos FLD (f_r2) = f_r2;
2022 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2023 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2024 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sth_d", "f_simm16 0x%x", 'x', f_simm16, "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2025 1.1 christos
2026 1.1 christos #if WITH_PROFILE_MODEL_P
2027 1.1 christos /* Record the fields for profiling. */
2028 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2029 1.1 christos {
2030 1.1 christos FLD (in_src1) = f_r1;
2031 1.1 christos FLD (in_src2) = f_r2;
2032 1.1 christos }
2033 1.1 christos #endif
2034 1.1 christos #undef FLD
2035 1.1 christos return idesc;
2036 1.1 christos }
2037 1.1 christos
2038 1.1 christos extract_sfmt_st_plus:
2039 1.1 christos {
2040 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
2041 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2042 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2043 1.1 christos UINT f_r1;
2044 1.1 christos UINT f_r2;
2045 1.1 christos
2046 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2047 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2048 1.1 christos
2049 1.1 christos /* Record the fields for the semantic handler. */
2050 1.1 christos FLD (f_r1) = f_r1;
2051 1.1 christos FLD (f_r2) = f_r2;
2052 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2053 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2054 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_st_plus", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2055 1.1 christos
2056 1.1 christos #if WITH_PROFILE_MODEL_P
2057 1.1 christos /* Record the fields for profiling. */
2058 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2059 1.1 christos {
2060 1.1 christos FLD (in_src1) = f_r1;
2061 1.1 christos FLD (in_src2) = f_r2;
2062 1.1 christos FLD (out_src2) = f_r2;
2063 1.1 christos }
2064 1.1 christos #endif
2065 1.1 christos #undef FLD
2066 1.1 christos return idesc;
2067 1.1 christos }
2068 1.1 christos
2069 1.1 christos extract_sfmt_trap:
2070 1.1 christos {
2071 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
2072 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2073 1.1 christos #define FLD(f) abuf->fields.sfmt_trap.f
2074 1.1 christos UINT f_uimm4;
2075 1.1 christos
2076 1.1 christos f_uimm4 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2077 1.1 christos
2078 1.1 christos /* Record the fields for the semantic handler. */
2079 1.1 christos FLD (f_uimm4) = f_uimm4;
2080 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_trap", "f_uimm4 0x%x", 'x', f_uimm4, (char *) 0));
2081 1.1 christos
2082 1.1 christos #if WITH_PROFILE_MODEL_P
2083 1.1 christos /* Record the fields for profiling. */
2084 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2085 1.1 christos {
2086 1.1 christos }
2087 1.1 christos #endif
2088 1.1 christos #undef FLD
2089 1.1 christos return idesc;
2090 1.1 christos }
2091 1.1 christos
2092 1.1 christos extract_sfmt_unlock:
2093 1.1 christos {
2094 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
2095 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2096 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2097 1.1 christos UINT f_r1;
2098 1.1 christos UINT f_r2;
2099 1.1 christos
2100 1.1 christos f_r1 = EXTRACT_MSB0_UINT (insn, 16, 4, 4);
2101 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2102 1.1 christos
2103 1.1 christos /* Record the fields for the semantic handler. */
2104 1.1 christos FLD (f_r1) = f_r1;
2105 1.1 christos FLD (f_r2) = f_r2;
2106 1.1 christos FLD (i_src1) = & CPU (h_gr)[f_r1];
2107 1.1 christos FLD (i_src2) = & CPU (h_gr)[f_r2];
2108 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_unlock", "f_r1 0x%x", 'x', f_r1, "f_r2 0x%x", 'x', f_r2, "src1 0x%x", 'x', f_r1, "src2 0x%x", 'x', f_r2, (char *) 0));
2109 1.1 christos
2110 1.1 christos #if WITH_PROFILE_MODEL_P
2111 1.1 christos /* Record the fields for profiling. */
2112 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2113 1.1 christos {
2114 1.1 christos FLD (in_src1) = f_r1;
2115 1.1 christos FLD (in_src2) = f_r2;
2116 1.1 christos }
2117 1.1 christos #endif
2118 1.1 christos #undef FLD
2119 1.1 christos return idesc;
2120 1.1 christos }
2121 1.1 christos
2122 1.1 christos extract_sfmt_clrpsw:
2123 1.1 christos {
2124 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
2125 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2126 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f
2127 1.1 christos UINT f_uimm8;
2128 1.1 christos
2129 1.1 christos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8);
2130 1.1 christos
2131 1.1 christos /* Record the fields for the semantic handler. */
2132 1.1 christos FLD (f_uimm8) = f_uimm8;
2133 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0));
2134 1.1 christos
2135 1.1 christos #undef FLD
2136 1.1 christos return idesc;
2137 1.1 christos }
2138 1.1 christos
2139 1.1 christos extract_sfmt_setpsw:
2140 1.1 christos {
2141 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
2142 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2143 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f
2144 1.1 christos UINT f_uimm8;
2145 1.1 christos
2146 1.1 christos f_uimm8 = EXTRACT_MSB0_UINT (insn, 16, 8, 8);
2147 1.1 christos
2148 1.1 christos /* Record the fields for the semantic handler. */
2149 1.1 christos FLD (f_uimm8) = f_uimm8;
2150 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setpsw", "f_uimm8 0x%x", 'x', f_uimm8, (char *) 0));
2151 1.1 christos
2152 1.1 christos #undef FLD
2153 1.1 christos return idesc;
2154 1.1 christos }
2155 1.1 christos
2156 1.1 christos extract_sfmt_bset:
2157 1.1 christos {
2158 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
2159 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2160 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f
2161 1.1 christos UINT f_uimm3;
2162 1.1 christos UINT f_r2;
2163 1.1 christos INT f_simm16;
2164 1.1 christos
2165 1.1 christos f_uimm3 = EXTRACT_MSB0_UINT (insn, 32, 5, 3);
2166 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 32, 12, 4);
2167 1.1 christos f_simm16 = EXTRACT_MSB0_SINT (insn, 32, 16, 16);
2168 1.1 christos
2169 1.1 christos /* Record the fields for the semantic handler. */
2170 1.1 christos FLD (f_simm16) = f_simm16;
2171 1.1 christos FLD (f_r2) = f_r2;
2172 1.1 christos FLD (f_uimm3) = f_uimm3;
2173 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
2174 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bset", "f_simm16 0x%x", 'x', f_simm16, "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0));
2175 1.1 christos
2176 1.1 christos #if WITH_PROFILE_MODEL_P
2177 1.1 christos /* Record the fields for profiling. */
2178 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2179 1.1 christos {
2180 1.1 christos FLD (in_sr) = f_r2;
2181 1.1 christos }
2182 1.1 christos #endif
2183 1.1 christos #undef FLD
2184 1.1 christos return idesc;
2185 1.1 christos }
2186 1.1 christos
2187 1.1 christos extract_sfmt_btst:
2188 1.1 christos {
2189 1.1 christos const IDESC *idesc = &m32rbf_insn_data[itype];
2190 1.1 christos CGEN_INSN_WORD insn = entire_insn;
2191 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f
2192 1.1 christos UINT f_uimm3;
2193 1.1 christos UINT f_r2;
2194 1.1 christos
2195 1.1 christos f_uimm3 = EXTRACT_MSB0_UINT (insn, 16, 5, 3);
2196 1.1 christos f_r2 = EXTRACT_MSB0_UINT (insn, 16, 12, 4);
2197 1.1 christos
2198 1.1 christos /* Record the fields for the semantic handler. */
2199 1.1 christos FLD (f_r2) = f_r2;
2200 1.1 christos FLD (f_uimm3) = f_uimm3;
2201 1.1 christos FLD (i_sr) = & CPU (h_gr)[f_r2];
2202 1.1.1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_btst", "f_r2 0x%x", 'x', f_r2, "f_uimm3 0x%x", 'x', f_uimm3, "sr 0x%x", 'x', f_r2, (char *) 0));
2203 1.1 christos
2204 1.1 christos #if WITH_PROFILE_MODEL_P
2205 1.1 christos /* Record the fields for profiling. */
2206 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2207 1.1 christos {
2208 1.1 christos FLD (in_sr) = f_r2;
2209 1.1 christos }
2210 1.1 christos #endif
2211 1.1 christos #undef FLD
2212 1.1 christos return idesc;
2213 1.1 christos }
2214 1.1 christos
2215 1.1 christos }
2216