e250e45c6048c0f0b1f4d22ec3c41e979a582e3c
[deliverable/binutils-gdb.git] / sim / or1k / sem-switch.c
1 /* Simulator instruction semantics for or1k32bf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright 1996-2019 Free Software Foundation, Inc.
6
7 This file is part of the GNU simulators.
8
9 This file is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
18
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22
23 */
24
25 #ifdef DEFINE_LABELS
26
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
30
31 static struct {
32 int index;
33 void *label;
34 } labels[] = {
35 { OR1K32BF_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
36 { OR1K32BF_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
37 { OR1K32BF_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
38 { OR1K32BF_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
39 { OR1K32BF_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
40 { OR1K32BF_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
41 { OR1K32BF_INSN_L_J, && case_sem_INSN_L_J },
42 { OR1K32BF_INSN_L_ADRP, && case_sem_INSN_L_ADRP },
43 { OR1K32BF_INSN_L_JAL, && case_sem_INSN_L_JAL },
44 { OR1K32BF_INSN_L_JR, && case_sem_INSN_L_JR },
45 { OR1K32BF_INSN_L_JALR, && case_sem_INSN_L_JALR },
46 { OR1K32BF_INSN_L_BNF, && case_sem_INSN_L_BNF },
47 { OR1K32BF_INSN_L_BF, && case_sem_INSN_L_BF },
48 { OR1K32BF_INSN_L_TRAP, && case_sem_INSN_L_TRAP },
49 { OR1K32BF_INSN_L_SYS, && case_sem_INSN_L_SYS },
50 { OR1K32BF_INSN_L_MSYNC, && case_sem_INSN_L_MSYNC },
51 { OR1K32BF_INSN_L_PSYNC, && case_sem_INSN_L_PSYNC },
52 { OR1K32BF_INSN_L_CSYNC, && case_sem_INSN_L_CSYNC },
53 { OR1K32BF_INSN_L_RFE, && case_sem_INSN_L_RFE },
54 { OR1K32BF_INSN_L_NOP_IMM, && case_sem_INSN_L_NOP_IMM },
55 { OR1K32BF_INSN_L_MOVHI, && case_sem_INSN_L_MOVHI },
56 { OR1K32BF_INSN_L_MACRC, && case_sem_INSN_L_MACRC },
57 { OR1K32BF_INSN_L_MFSPR, && case_sem_INSN_L_MFSPR },
58 { OR1K32BF_INSN_L_MTSPR, && case_sem_INSN_L_MTSPR },
59 { OR1K32BF_INSN_L_LWZ, && case_sem_INSN_L_LWZ },
60 { OR1K32BF_INSN_L_LWS, && case_sem_INSN_L_LWS },
61 { OR1K32BF_INSN_L_LWA, && case_sem_INSN_L_LWA },
62 { OR1K32BF_INSN_L_LBZ, && case_sem_INSN_L_LBZ },
63 { OR1K32BF_INSN_L_LBS, && case_sem_INSN_L_LBS },
64 { OR1K32BF_INSN_L_LHZ, && case_sem_INSN_L_LHZ },
65 { OR1K32BF_INSN_L_LHS, && case_sem_INSN_L_LHS },
66 { OR1K32BF_INSN_L_SW, && case_sem_INSN_L_SW },
67 { OR1K32BF_INSN_L_SB, && case_sem_INSN_L_SB },
68 { OR1K32BF_INSN_L_SH, && case_sem_INSN_L_SH },
69 { OR1K32BF_INSN_L_SWA, && case_sem_INSN_L_SWA },
70 { OR1K32BF_INSN_L_SLL, && case_sem_INSN_L_SLL },
71 { OR1K32BF_INSN_L_SLLI, && case_sem_INSN_L_SLLI },
72 { OR1K32BF_INSN_L_SRL, && case_sem_INSN_L_SRL },
73 { OR1K32BF_INSN_L_SRLI, && case_sem_INSN_L_SRLI },
74 { OR1K32BF_INSN_L_SRA, && case_sem_INSN_L_SRA },
75 { OR1K32BF_INSN_L_SRAI, && case_sem_INSN_L_SRAI },
76 { OR1K32BF_INSN_L_ROR, && case_sem_INSN_L_ROR },
77 { OR1K32BF_INSN_L_RORI, && case_sem_INSN_L_RORI },
78 { OR1K32BF_INSN_L_AND, && case_sem_INSN_L_AND },
79 { OR1K32BF_INSN_L_OR, && case_sem_INSN_L_OR },
80 { OR1K32BF_INSN_L_XOR, && case_sem_INSN_L_XOR },
81 { OR1K32BF_INSN_L_ADD, && case_sem_INSN_L_ADD },
82 { OR1K32BF_INSN_L_SUB, && case_sem_INSN_L_SUB },
83 { OR1K32BF_INSN_L_ADDC, && case_sem_INSN_L_ADDC },
84 { OR1K32BF_INSN_L_MUL, && case_sem_INSN_L_MUL },
85 { OR1K32BF_INSN_L_MULD, && case_sem_INSN_L_MULD },
86 { OR1K32BF_INSN_L_MULU, && case_sem_INSN_L_MULU },
87 { OR1K32BF_INSN_L_MULDU, && case_sem_INSN_L_MULDU },
88 { OR1K32BF_INSN_L_DIV, && case_sem_INSN_L_DIV },
89 { OR1K32BF_INSN_L_DIVU, && case_sem_INSN_L_DIVU },
90 { OR1K32BF_INSN_L_FF1, && case_sem_INSN_L_FF1 },
91 { OR1K32BF_INSN_L_FL1, && case_sem_INSN_L_FL1 },
92 { OR1K32BF_INSN_L_ANDI, && case_sem_INSN_L_ANDI },
93 { OR1K32BF_INSN_L_ORI, && case_sem_INSN_L_ORI },
94 { OR1K32BF_INSN_L_XORI, && case_sem_INSN_L_XORI },
95 { OR1K32BF_INSN_L_ADDI, && case_sem_INSN_L_ADDI },
96 { OR1K32BF_INSN_L_ADDIC, && case_sem_INSN_L_ADDIC },
97 { OR1K32BF_INSN_L_MULI, && case_sem_INSN_L_MULI },
98 { OR1K32BF_INSN_L_EXTHS, && case_sem_INSN_L_EXTHS },
99 { OR1K32BF_INSN_L_EXTBS, && case_sem_INSN_L_EXTBS },
100 { OR1K32BF_INSN_L_EXTHZ, && case_sem_INSN_L_EXTHZ },
101 { OR1K32BF_INSN_L_EXTBZ, && case_sem_INSN_L_EXTBZ },
102 { OR1K32BF_INSN_L_EXTWS, && case_sem_INSN_L_EXTWS },
103 { OR1K32BF_INSN_L_EXTWZ, && case_sem_INSN_L_EXTWZ },
104 { OR1K32BF_INSN_L_CMOV, && case_sem_INSN_L_CMOV },
105 { OR1K32BF_INSN_L_SFGTS, && case_sem_INSN_L_SFGTS },
106 { OR1K32BF_INSN_L_SFGTSI, && case_sem_INSN_L_SFGTSI },
107 { OR1K32BF_INSN_L_SFGTU, && case_sem_INSN_L_SFGTU },
108 { OR1K32BF_INSN_L_SFGTUI, && case_sem_INSN_L_SFGTUI },
109 { OR1K32BF_INSN_L_SFGES, && case_sem_INSN_L_SFGES },
110 { OR1K32BF_INSN_L_SFGESI, && case_sem_INSN_L_SFGESI },
111 { OR1K32BF_INSN_L_SFGEU, && case_sem_INSN_L_SFGEU },
112 { OR1K32BF_INSN_L_SFGEUI, && case_sem_INSN_L_SFGEUI },
113 { OR1K32BF_INSN_L_SFLTS, && case_sem_INSN_L_SFLTS },
114 { OR1K32BF_INSN_L_SFLTSI, && case_sem_INSN_L_SFLTSI },
115 { OR1K32BF_INSN_L_SFLTU, && case_sem_INSN_L_SFLTU },
116 { OR1K32BF_INSN_L_SFLTUI, && case_sem_INSN_L_SFLTUI },
117 { OR1K32BF_INSN_L_SFLES, && case_sem_INSN_L_SFLES },
118 { OR1K32BF_INSN_L_SFLESI, && case_sem_INSN_L_SFLESI },
119 { OR1K32BF_INSN_L_SFLEU, && case_sem_INSN_L_SFLEU },
120 { OR1K32BF_INSN_L_SFLEUI, && case_sem_INSN_L_SFLEUI },
121 { OR1K32BF_INSN_L_SFEQ, && case_sem_INSN_L_SFEQ },
122 { OR1K32BF_INSN_L_SFEQI, && case_sem_INSN_L_SFEQI },
123 { OR1K32BF_INSN_L_SFNE, && case_sem_INSN_L_SFNE },
124 { OR1K32BF_INSN_L_SFNEI, && case_sem_INSN_L_SFNEI },
125 { OR1K32BF_INSN_L_MAC, && case_sem_INSN_L_MAC },
126 { OR1K32BF_INSN_L_MACI, && case_sem_INSN_L_MACI },
127 { OR1K32BF_INSN_L_MACU, && case_sem_INSN_L_MACU },
128 { OR1K32BF_INSN_L_MSB, && case_sem_INSN_L_MSB },
129 { OR1K32BF_INSN_L_MSBU, && case_sem_INSN_L_MSBU },
130 { OR1K32BF_INSN_L_CUST1, && case_sem_INSN_L_CUST1 },
131 { OR1K32BF_INSN_L_CUST2, && case_sem_INSN_L_CUST2 },
132 { OR1K32BF_INSN_L_CUST3, && case_sem_INSN_L_CUST3 },
133 { OR1K32BF_INSN_L_CUST4, && case_sem_INSN_L_CUST4 },
134 { OR1K32BF_INSN_L_CUST5, && case_sem_INSN_L_CUST5 },
135 { OR1K32BF_INSN_L_CUST6, && case_sem_INSN_L_CUST6 },
136 { OR1K32BF_INSN_L_CUST7, && case_sem_INSN_L_CUST7 },
137 { OR1K32BF_INSN_L_CUST8, && case_sem_INSN_L_CUST8 },
138 { OR1K32BF_INSN_LF_ADD_S, && case_sem_INSN_LF_ADD_S },
139 { OR1K32BF_INSN_LF_SUB_S, && case_sem_INSN_LF_SUB_S },
140 { OR1K32BF_INSN_LF_MUL_S, && case_sem_INSN_LF_MUL_S },
141 { OR1K32BF_INSN_LF_DIV_S, && case_sem_INSN_LF_DIV_S },
142 { OR1K32BF_INSN_LF_REM_S, && case_sem_INSN_LF_REM_S },
143 { OR1K32BF_INSN_LF_ITOF_S, && case_sem_INSN_LF_ITOF_S },
144 { OR1K32BF_INSN_LF_FTOI_S, && case_sem_INSN_LF_FTOI_S },
145 { OR1K32BF_INSN_LF_EQ_S, && case_sem_INSN_LF_EQ_S },
146 { OR1K32BF_INSN_LF_NE_S, && case_sem_INSN_LF_NE_S },
147 { OR1K32BF_INSN_LF_GE_S, && case_sem_INSN_LF_GE_S },
148 { OR1K32BF_INSN_LF_GT_S, && case_sem_INSN_LF_GT_S },
149 { OR1K32BF_INSN_LF_LT_S, && case_sem_INSN_LF_LT_S },
150 { OR1K32BF_INSN_LF_LE_S, && case_sem_INSN_LF_LE_S },
151 { OR1K32BF_INSN_LF_MADD_S, && case_sem_INSN_LF_MADD_S },
152 { OR1K32BF_INSN_LF_CUST1_S, && case_sem_INSN_LF_CUST1_S },
153 { 0, 0 }
154 };
155 int i;
156
157 for (i = 0; labels[i].label != 0; ++i)
158 {
159 #if FAST_P
160 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
161 #else
162 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
163 #endif
164 }
165
166 #undef DEFINE_LABELS
167 #endif /* DEFINE_LABELS */
168
169 #ifdef DEFINE_SWITCH
170
171 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
172 off frills like tracing and profiling. */
173 /* FIXME: A better way would be to have TRACE_RESULT check for something
174 that can cause it to be optimized out. Another way would be to emit
175 special handlers into the instruction "stream". */
176
177 #if FAST_P
178 #undef CGEN_TRACE_RESULT
179 #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
180 #endif
181
182 #undef GET_ATTR
183 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
184
185 {
186
187 #if WITH_SCACHE_PBB
188
189 /* Branch to next handler without going around main loop. */
190 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
191 SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
192
193 #else /* ! WITH_SCACHE_PBB */
194
195 #define NEXT(vpc) BREAK (sem)
196 #ifdef __GNUC__
197 #if FAST_P
198 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
199 #else
200 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
201 #endif
202 #else
203 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
204 #endif
205
206 #endif /* ! WITH_SCACHE_PBB */
207
208 {
209
210 CASE (sem, INSN_X_INVALID) : /* --invalid-- */
211 {
212 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
213 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
214 #define FLD(f) abuf->fields.sfmt_empty.f
215 int UNUSED written = 0;
216 IADDR UNUSED pc = abuf->addr;
217 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
218
219 {
220 /* Update the recorded pc in the cpu state struct.
221 Only necessary for WITH_SCACHE case, but to avoid the
222 conditional compilation .... */
223 SET_H_PC (pc);
224 /* Virtual insns have zero size. Overwrite vpc with address of next insn
225 using the default-insn-bitsize spec. When executing insns in parallel
226 we may want to queue the fault and continue execution. */
227 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
228 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
229 }
230
231 #undef FLD
232 }
233 NEXT (vpc);
234
235 CASE (sem, INSN_X_AFTER) : /* --after-- */
236 {
237 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
238 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
239 #define FLD(f) abuf->fields.sfmt_empty.f
240 int UNUSED written = 0;
241 IADDR UNUSED pc = abuf->addr;
242 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
243
244 {
245 #if WITH_SCACHE_PBB_OR1K32BF
246 or1k32bf_pbb_after (current_cpu, sem_arg);
247 #endif
248 }
249
250 #undef FLD
251 }
252 NEXT (vpc);
253
254 CASE (sem, INSN_X_BEFORE) : /* --before-- */
255 {
256 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
257 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
258 #define FLD(f) abuf->fields.sfmt_empty.f
259 int UNUSED written = 0;
260 IADDR UNUSED pc = abuf->addr;
261 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
262
263 {
264 #if WITH_SCACHE_PBB_OR1K32BF
265 or1k32bf_pbb_before (current_cpu, sem_arg);
266 #endif
267 }
268
269 #undef FLD
270 }
271 NEXT (vpc);
272
273 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
274 {
275 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
276 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
277 #define FLD(f) abuf->fields.sfmt_empty.f
278 int UNUSED written = 0;
279 IADDR UNUSED pc = abuf->addr;
280 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
281
282 {
283 #if WITH_SCACHE_PBB_OR1K32BF
284 #ifdef DEFINE_SWITCH
285 vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
286 pbb_br_type, pbb_br_npc);
287 BREAK (sem);
288 #else
289 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
290 vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
291 CPU_PBB_BR_TYPE (current_cpu),
292 CPU_PBB_BR_NPC (current_cpu));
293 #endif
294 #endif
295 }
296
297 #undef FLD
298 }
299 NEXT (vpc);
300
301 CASE (sem, INSN_X_CHAIN) : /* --chain-- */
302 {
303 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
304 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
305 #define FLD(f) abuf->fields.sfmt_empty.f
306 int UNUSED written = 0;
307 IADDR UNUSED pc = abuf->addr;
308 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
309
310 {
311 #if WITH_SCACHE_PBB_OR1K32BF
312 vpc = or1k32bf_pbb_chain (current_cpu, sem_arg);
313 #ifdef DEFINE_SWITCH
314 BREAK (sem);
315 #endif
316 #endif
317 }
318
319 #undef FLD
320 }
321 NEXT (vpc);
322
323 CASE (sem, INSN_X_BEGIN) : /* --begin-- */
324 {
325 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
326 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
327 #define FLD(f) abuf->fields.sfmt_empty.f
328 int UNUSED written = 0;
329 IADDR UNUSED pc = abuf->addr;
330 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
331
332 {
333 #if WITH_SCACHE_PBB_OR1K32BF
334 #if defined DEFINE_SWITCH || defined FAST_P
335 /* In the switch case FAST_P is a constant, allowing several optimizations
336 in any called inline functions. */
337 vpc = or1k32bf_pbb_begin (current_cpu, FAST_P);
338 #else
339 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
340 vpc = or1k32bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
341 #else
342 vpc = or1k32bf_pbb_begin (current_cpu, 0);
343 #endif
344 #endif
345 #endif
346 }
347
348 #undef FLD
349 }
350 NEXT (vpc);
351
352 CASE (sem, INSN_L_J) : /* l.j ${disp26} */
353 {
354 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
355 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
356 #define FLD(f) abuf->fields.sfmt_l_j.f
357 int UNUSED written = 0;
358 IADDR UNUSED pc = abuf->addr;
359 SEM_BRANCH_INIT
360 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
361
362 {
363 {
364 {
365 USI opval = FLD (i_disp26);
366 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
367 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
368 }
369 }
370 if (GET_H_SYS_CPUCFGR_ND ()) {
371 if (1)
372 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
373 }
374 }
375
376 SEM_BRANCH_FINI (vpc);
377 #undef FLD
378 }
379 NEXT (vpc);
380
381 CASE (sem, INSN_L_ADRP) : /* l.adrp $rD,${disp21} */
382 {
383 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
384 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
385 #define FLD(f) abuf->fields.sfmt_l_adrp.f
386 int UNUSED written = 0;
387 IADDR UNUSED pc = abuf->addr;
388 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
389
390 {
391 USI opval = FLD (i_disp21);
392 SET_H_GPR (FLD (f_r1), opval);
393 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
394 }
395
396 #undef FLD
397 }
398 NEXT (vpc);
399
400 CASE (sem, INSN_L_JAL) : /* l.jal ${disp26} */
401 {
402 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
403 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
404 #define FLD(f) abuf->fields.sfmt_l_j.f
405 int UNUSED written = 0;
406 IADDR UNUSED pc = abuf->addr;
407 SEM_BRANCH_INIT
408 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
409
410 {
411 {
412 USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
413 SET_H_GPR (((UINT) 9), opval);
414 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
415 }
416 {
417 {
418 {
419 USI opval = FLD (i_disp26);
420 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
421 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
422 }
423 }
424 if (GET_H_SYS_CPUCFGR_ND ()) {
425 if (1)
426 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
427 }
428 }
429 }
430
431 SEM_BRANCH_FINI (vpc);
432 #undef FLD
433 }
434 NEXT (vpc);
435
436 CASE (sem, INSN_L_JR) : /* l.jr $rB */
437 {
438 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
439 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
440 #define FLD(f) abuf->fields.sfmt_l_sll.f
441 int UNUSED written = 0;
442 IADDR UNUSED pc = abuf->addr;
443 SEM_BRANCH_INIT
444 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
445
446 {
447 {
448 {
449 USI opval = GET_H_GPR (FLD (f_r3));
450 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
451 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
452 }
453 }
454 if (GET_H_SYS_CPUCFGR_ND ()) {
455 if (1)
456 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
457 }
458 }
459
460 SEM_BRANCH_FINI (vpc);
461 #undef FLD
462 }
463 NEXT (vpc);
464
465 CASE (sem, INSN_L_JALR) : /* l.jalr $rB */
466 {
467 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
468 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
469 #define FLD(f) abuf->fields.sfmt_l_sll.f
470 int UNUSED written = 0;
471 IADDR UNUSED pc = abuf->addr;
472 SEM_BRANCH_INIT
473 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
474
475 {
476 {
477 USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
478 SET_H_GPR (((UINT) 9), opval);
479 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
480 }
481 {
482 {
483 {
484 USI opval = GET_H_GPR (FLD (f_r3));
485 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
486 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
487 }
488 }
489 if (GET_H_SYS_CPUCFGR_ND ()) {
490 if (1)
491 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
492 }
493 }
494 }
495
496 SEM_BRANCH_FINI (vpc);
497 #undef FLD
498 }
499 NEXT (vpc);
500
501 CASE (sem, INSN_L_BNF) : /* l.bnf ${disp26} */
502 {
503 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
504 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
505 #define FLD(f) abuf->fields.sfmt_l_j.f
506 int UNUSED written = 0;
507 IADDR UNUSED pc = abuf->addr;
508 SEM_BRANCH_INIT
509 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
510
511 {
512 if (NOTSI (GET_H_SYS_SR_F ())) {
513 {
514 {
515 USI opval = FLD (i_disp26);
516 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
517 written |= (1 << 4);
518 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
519 }
520 }
521 } else {
522 if (GET_H_SYS_CPUCFGR_ND ()) {
523 {
524 {
525 USI opval = ADDSI (pc, 4);
526 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
527 written |= (1 << 4);
528 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
529 }
530 }
531 }
532 }
533 if (GET_H_SYS_CPUCFGR_ND ()) {
534 if (1)
535 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
536 }
537 }
538
539 abuf->written = written;
540 SEM_BRANCH_FINI (vpc);
541 #undef FLD
542 }
543 NEXT (vpc);
544
545 CASE (sem, INSN_L_BF) : /* l.bf ${disp26} */
546 {
547 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
548 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
549 #define FLD(f) abuf->fields.sfmt_l_j.f
550 int UNUSED written = 0;
551 IADDR UNUSED pc = abuf->addr;
552 SEM_BRANCH_INIT
553 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
554
555 {
556 if (GET_H_SYS_SR_F ()) {
557 {
558 {
559 USI opval = FLD (i_disp26);
560 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
561 written |= (1 << 4);
562 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
563 }
564 }
565 } else {
566 if (GET_H_SYS_CPUCFGR_ND ()) {
567 {
568 {
569 USI opval = ADDSI (pc, 4);
570 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
571 written |= (1 << 4);
572 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
573 }
574 }
575 }
576 }
577 if (GET_H_SYS_CPUCFGR_ND ()) {
578 if (1)
579 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
580 }
581 }
582
583 abuf->written = written;
584 SEM_BRANCH_FINI (vpc);
585 #undef FLD
586 }
587 NEXT (vpc);
588
589 CASE (sem, INSN_L_TRAP) : /* l.trap ${uimm16} */
590 {
591 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
592 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
593 #define FLD(f) abuf->fields.sfmt_empty.f
594 int UNUSED written = 0;
595 IADDR UNUSED pc = abuf->addr;
596 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
597
598 or1k32bf_exception (current_cpu, pc, EXCEPT_TRAP);
599
600 #undef FLD
601 }
602 NEXT (vpc);
603
604 CASE (sem, INSN_L_SYS) : /* l.sys ${uimm16} */
605 {
606 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
607 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
608 #define FLD(f) abuf->fields.sfmt_empty.f
609 int UNUSED written = 0;
610 IADDR UNUSED pc = abuf->addr;
611 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
612
613 or1k32bf_exception (current_cpu, pc, EXCEPT_SYSCALL);
614
615 #undef FLD
616 }
617 NEXT (vpc);
618
619 CASE (sem, INSN_L_MSYNC) : /* l.msync */
620 {
621 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
622 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
623 #define FLD(f) abuf->fields.sfmt_empty.f
624 int UNUSED written = 0;
625 IADDR UNUSED pc = abuf->addr;
626 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
627
628 ((void) 0); /*nop*/
629
630 #undef FLD
631 }
632 NEXT (vpc);
633
634 CASE (sem, INSN_L_PSYNC) : /* l.psync */
635 {
636 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
637 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
638 #define FLD(f) abuf->fields.sfmt_empty.f
639 int UNUSED written = 0;
640 IADDR UNUSED pc = abuf->addr;
641 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
642
643 ((void) 0); /*nop*/
644
645 #undef FLD
646 }
647 NEXT (vpc);
648
649 CASE (sem, INSN_L_CSYNC) : /* l.csync */
650 {
651 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
652 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
653 #define FLD(f) abuf->fields.sfmt_empty.f
654 int UNUSED written = 0;
655 IADDR UNUSED pc = abuf->addr;
656 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
657
658 ((void) 0); /*nop*/
659
660 #undef FLD
661 }
662 NEXT (vpc);
663
664 CASE (sem, INSN_L_RFE) : /* l.rfe */
665 {
666 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
667 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
668 #define FLD(f) abuf->fields.sfmt_empty.f
669 int UNUSED written = 0;
670 IADDR UNUSED pc = abuf->addr;
671 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
672
673 or1k32bf_rfe (current_cpu);
674
675 #undef FLD
676 }
677 NEXT (vpc);
678
679 CASE (sem, INSN_L_NOP_IMM) : /* l.nop ${uimm16} */
680 {
681 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
682 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
683 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
684 int UNUSED written = 0;
685 IADDR UNUSED pc = abuf->addr;
686 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
687
688 or1k32bf_nop (current_cpu, ZEXTSISI (FLD (f_uimm16)));
689
690 #undef FLD
691 }
692 NEXT (vpc);
693
694 CASE (sem, INSN_L_MOVHI) : /* l.movhi $rD,$uimm16 */
695 {
696 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
697 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
698 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
699 int UNUSED written = 0;
700 IADDR UNUSED pc = abuf->addr;
701 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
702
703 {
704 USI opval = SLLSI (ZEXTSISI (FLD (f_uimm16)), 16);
705 SET_H_GPR (FLD (f_r1), opval);
706 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
707 }
708
709 #undef FLD
710 }
711 NEXT (vpc);
712
713 CASE (sem, INSN_L_MACRC) : /* l.macrc $rD */
714 {
715 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
716 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
717 #define FLD(f) abuf->fields.sfmt_l_adrp.f
718 int UNUSED written = 0;
719 IADDR UNUSED pc = abuf->addr;
720 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
721
722 {
723 {
724 USI opval = GET_H_MAC_MACLO ();
725 SET_H_GPR (FLD (f_r1), opval);
726 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
727 }
728 {
729 USI opval = 0;
730 SET_H_MAC_MACLO (opval);
731 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
732 }
733 {
734 USI opval = 0;
735 SET_H_MAC_MACHI (opval);
736 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
737 }
738 }
739
740 #undef FLD
741 }
742 NEXT (vpc);
743
744 CASE (sem, INSN_L_MFSPR) : /* l.mfspr $rD,$rA,${uimm16} */
745 {
746 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
747 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
748 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
749 int UNUSED written = 0;
750 IADDR UNUSED pc = abuf->addr;
751 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
752
753 {
754 USI opval = or1k32bf_mfspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))));
755 SET_H_GPR (FLD (f_r1), opval);
756 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
757 }
758
759 #undef FLD
760 }
761 NEXT (vpc);
762
763 CASE (sem, INSN_L_MTSPR) : /* l.mtspr $rA,$rB,${uimm16-split} */
764 {
765 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
766 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
767 #define FLD(f) abuf->fields.sfmt_l_mtspr.f
768 int UNUSED written = 0;
769 IADDR UNUSED pc = abuf->addr;
770 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
771
772 or1k32bf_mtspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16_split))), GET_H_GPR (FLD (f_r3)));
773
774 #undef FLD
775 }
776 NEXT (vpc);
777
778 CASE (sem, INSN_L_LWZ) : /* l.lwz $rD,${simm16}($rA) */
779 {
780 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
781 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
782 #define FLD(f) abuf->fields.sfmt_l_lwz.f
783 int UNUSED written = 0;
784 IADDR UNUSED pc = abuf->addr;
785 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
786
787 {
788 USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
789 SET_H_GPR (FLD (f_r1), opval);
790 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
791 }
792
793 #undef FLD
794 }
795 NEXT (vpc);
796
797 CASE (sem, INSN_L_LWS) : /* l.lws $rD,${simm16}($rA) */
798 {
799 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
800 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
801 #define FLD(f) abuf->fields.sfmt_l_lwz.f
802 int UNUSED written = 0;
803 IADDR UNUSED pc = abuf->addr;
804 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
805
806 {
807 SI opval = EXTSISI (GETMEMSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
808 SET_H_GPR (FLD (f_r1), opval);
809 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
810 }
811
812 #undef FLD
813 }
814 NEXT (vpc);
815
816 CASE (sem, INSN_L_LWA) : /* l.lwa $rD,${simm16}($rA) */
817 {
818 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
819 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
820 #define FLD(f) abuf->fields.sfmt_l_lwz.f
821 int UNUSED written = 0;
822 IADDR UNUSED pc = abuf->addr;
823 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
824
825 {
826 {
827 USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4)));
828 SET_H_GPR (FLD (f_r1), opval);
829 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
830 }
831 {
832 BI opval = 1;
833 CPU (h_atomic_reserve) = opval;
834 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
835 }
836 {
837 SI opval = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4);
838 CPU (h_atomic_address) = opval;
839 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-address", 'x', opval);
840 }
841 }
842
843 #undef FLD
844 }
845 NEXT (vpc);
846
847 CASE (sem, INSN_L_LBZ) : /* l.lbz $rD,${simm16}($rA) */
848 {
849 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
850 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
851 #define FLD(f) abuf->fields.sfmt_l_lwz.f
852 int UNUSED written = 0;
853 IADDR UNUSED pc = abuf->addr;
854 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
855
856 {
857 USI opval = ZEXTQISI (GETMEMUQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
858 SET_H_GPR (FLD (f_r1), opval);
859 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
860 }
861
862 #undef FLD
863 }
864 NEXT (vpc);
865
866 CASE (sem, INSN_L_LBS) : /* l.lbs $rD,${simm16}($rA) */
867 {
868 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
869 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
870 #define FLD(f) abuf->fields.sfmt_l_lwz.f
871 int UNUSED written = 0;
872 IADDR UNUSED pc = abuf->addr;
873 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
874
875 {
876 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1)));
877 SET_H_GPR (FLD (f_r1), opval);
878 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
879 }
880
881 #undef FLD
882 }
883 NEXT (vpc);
884
885 CASE (sem, INSN_L_LHZ) : /* l.lhz $rD,${simm16}($rA) */
886 {
887 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
888 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
889 #define FLD(f) abuf->fields.sfmt_l_lwz.f
890 int UNUSED written = 0;
891 IADDR UNUSED pc = abuf->addr;
892 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
893
894 {
895 USI opval = ZEXTHISI (GETMEMUHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
896 SET_H_GPR (FLD (f_r1), opval);
897 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
898 }
899
900 #undef FLD
901 }
902 NEXT (vpc);
903
904 CASE (sem, INSN_L_LHS) : /* l.lhs $rD,${simm16}($rA) */
905 {
906 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
907 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
908 #define FLD(f) abuf->fields.sfmt_l_lwz.f
909 int UNUSED written = 0;
910 IADDR UNUSED pc = abuf->addr;
911 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
912
913 {
914 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2)));
915 SET_H_GPR (FLD (f_r1), opval);
916 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
917 }
918
919 #undef FLD
920 }
921 NEXT (vpc);
922
923 CASE (sem, INSN_L_SW) : /* l.sw ${simm16-split}($rA),$rB */
924 {
925 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
926 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
927 #define FLD(f) abuf->fields.sfmt_l_sw.f
928 int UNUSED written = 0;
929 IADDR UNUSED pc = abuf->addr;
930 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
931
932 {
933 SI tmp_addr;
934 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
935 {
936 USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
937 SETMEMUSI (current_cpu, pc, tmp_addr, opval);
938 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
939 }
940 if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
941 {
942 BI opval = 0;
943 CPU (h_atomic_reserve) = opval;
944 written |= (1 << 4);
945 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
946 }
947 }
948 }
949
950 abuf->written = written;
951 #undef FLD
952 }
953 NEXT (vpc);
954
955 CASE (sem, INSN_L_SB) : /* l.sb ${simm16-split}($rA),$rB */
956 {
957 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
958 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
959 #define FLD(f) abuf->fields.sfmt_l_sw.f
960 int UNUSED written = 0;
961 IADDR UNUSED pc = abuf->addr;
962 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
963
964 {
965 SI tmp_addr;
966 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 1);
967 {
968 UQI opval = TRUNCSIQI (GET_H_GPR (FLD (f_r3)));
969 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
970 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
971 }
972 if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
973 {
974 BI opval = 0;
975 CPU (h_atomic_reserve) = opval;
976 written |= (1 << 4);
977 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
978 }
979 }
980 }
981
982 abuf->written = written;
983 #undef FLD
984 }
985 NEXT (vpc);
986
987 CASE (sem, INSN_L_SH) : /* l.sh ${simm16-split}($rA),$rB */
988 {
989 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
990 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
991 #define FLD(f) abuf->fields.sfmt_l_sw.f
992 int UNUSED written = 0;
993 IADDR UNUSED pc = abuf->addr;
994 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
995
996 {
997 SI tmp_addr;
998 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 2);
999 {
1000 UHI opval = TRUNCSIHI (GET_H_GPR (FLD (f_r3)));
1001 SETMEMUHI (current_cpu, pc, tmp_addr, opval);
1002 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1003 }
1004 if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
1005 {
1006 BI opval = 0;
1007 CPU (h_atomic_reserve) = opval;
1008 written |= (1 << 4);
1009 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
1010 }
1011 }
1012 }
1013
1014 abuf->written = written;
1015 #undef FLD
1016 }
1017 NEXT (vpc);
1018
1019 CASE (sem, INSN_L_SWA) : /* l.swa ${simm16-split}($rA),$rB */
1020 {
1021 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1022 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1023 #define FLD(f) abuf->fields.sfmt_l_sw.f
1024 int UNUSED written = 0;
1025 IADDR UNUSED pc = abuf->addr;
1026 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1027
1028 {
1029 SI tmp_addr;
1030 BI tmp_flag;
1031 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
1032 {
1033 USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
1034 SET_H_SYS_SR_F (opval);
1035 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1036 }
1037 if (GET_H_SYS_SR_F ()) {
1038 {
1039 USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
1040 SETMEMUSI (current_cpu, pc, tmp_addr, opval);
1041 written |= (1 << 7);
1042 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1043 }
1044 }
1045 {
1046 BI opval = 0;
1047 CPU (h_atomic_reserve) = opval;
1048 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
1049 }
1050 }
1051
1052 abuf->written = written;
1053 #undef FLD
1054 }
1055 NEXT (vpc);
1056
1057 CASE (sem, INSN_L_SLL) : /* l.sll $rD,$rA,$rB */
1058 {
1059 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1060 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1061 #define FLD(f) abuf->fields.sfmt_l_sll.f
1062 int UNUSED written = 0;
1063 IADDR UNUSED pc = abuf->addr;
1064 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1065
1066 {
1067 USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1068 SET_H_GPR (FLD (f_r1), opval);
1069 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1070 }
1071
1072 #undef FLD
1073 }
1074 NEXT (vpc);
1075
1076 CASE (sem, INSN_L_SLLI) : /* l.slli $rD,$rA,${uimm6} */
1077 {
1078 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1079 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1080 #define FLD(f) abuf->fields.sfmt_l_slli.f
1081 int UNUSED written = 0;
1082 IADDR UNUSED pc = abuf->addr;
1083 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1084
1085 {
1086 USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1087 SET_H_GPR (FLD (f_r1), opval);
1088 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1089 }
1090
1091 #undef FLD
1092 }
1093 NEXT (vpc);
1094
1095 CASE (sem, INSN_L_SRL) : /* l.srl $rD,$rA,$rB */
1096 {
1097 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1098 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1099 #define FLD(f) abuf->fields.sfmt_l_sll.f
1100 int UNUSED written = 0;
1101 IADDR UNUSED pc = abuf->addr;
1102 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1103
1104 {
1105 USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1106 SET_H_GPR (FLD (f_r1), opval);
1107 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1108 }
1109
1110 #undef FLD
1111 }
1112 NEXT (vpc);
1113
1114 CASE (sem, INSN_L_SRLI) : /* l.srli $rD,$rA,${uimm6} */
1115 {
1116 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1117 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1118 #define FLD(f) abuf->fields.sfmt_l_slli.f
1119 int UNUSED written = 0;
1120 IADDR UNUSED pc = abuf->addr;
1121 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1122
1123 {
1124 USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1125 SET_H_GPR (FLD (f_r1), opval);
1126 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1127 }
1128
1129 #undef FLD
1130 }
1131 NEXT (vpc);
1132
1133 CASE (sem, INSN_L_SRA) : /* l.sra $rD,$rA,$rB */
1134 {
1135 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1136 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1137 #define FLD(f) abuf->fields.sfmt_l_sll.f
1138 int UNUSED written = 0;
1139 IADDR UNUSED pc = abuf->addr;
1140 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1141
1142 {
1143 USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1144 SET_H_GPR (FLD (f_r1), opval);
1145 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1146 }
1147
1148 #undef FLD
1149 }
1150 NEXT (vpc);
1151
1152 CASE (sem, INSN_L_SRAI) : /* l.srai $rD,$rA,${uimm6} */
1153 {
1154 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1155 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1156 #define FLD(f) abuf->fields.sfmt_l_slli.f
1157 int UNUSED written = 0;
1158 IADDR UNUSED pc = abuf->addr;
1159 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1160
1161 {
1162 USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1163 SET_H_GPR (FLD (f_r1), opval);
1164 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1165 }
1166
1167 #undef FLD
1168 }
1169 NEXT (vpc);
1170
1171 CASE (sem, INSN_L_ROR) : /* l.ror $rD,$rA,$rB */
1172 {
1173 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1174 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1175 #define FLD(f) abuf->fields.sfmt_l_sll.f
1176 int UNUSED written = 0;
1177 IADDR UNUSED pc = abuf->addr;
1178 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1179
1180 {
1181 USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1182 SET_H_GPR (FLD (f_r1), opval);
1183 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1184 }
1185
1186 #undef FLD
1187 }
1188 NEXT (vpc);
1189
1190 CASE (sem, INSN_L_RORI) : /* l.rori $rD,$rA,${uimm6} */
1191 {
1192 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1193 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1194 #define FLD(f) abuf->fields.sfmt_l_slli.f
1195 int UNUSED written = 0;
1196 IADDR UNUSED pc = abuf->addr;
1197 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1198
1199 {
1200 USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1201 SET_H_GPR (FLD (f_r1), opval);
1202 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1203 }
1204
1205 #undef FLD
1206 }
1207 NEXT (vpc);
1208
1209 CASE (sem, INSN_L_AND) : /* l.and $rD,$rA,$rB */
1210 {
1211 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1212 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1213 #define FLD(f) abuf->fields.sfmt_l_sll.f
1214 int UNUSED written = 0;
1215 IADDR UNUSED pc = abuf->addr;
1216 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1217
1218 {
1219 USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1220 SET_H_GPR (FLD (f_r1), opval);
1221 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1222 }
1223
1224 #undef FLD
1225 }
1226 NEXT (vpc);
1227
1228 CASE (sem, INSN_L_OR) : /* l.or $rD,$rA,$rB */
1229 {
1230 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1231 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1232 #define FLD(f) abuf->fields.sfmt_l_sll.f
1233 int UNUSED written = 0;
1234 IADDR UNUSED pc = abuf->addr;
1235 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1236
1237 {
1238 USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1239 SET_H_GPR (FLD (f_r1), opval);
1240 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1241 }
1242
1243 #undef FLD
1244 }
1245 NEXT (vpc);
1246
1247 CASE (sem, INSN_L_XOR) : /* l.xor $rD,$rA,$rB */
1248 {
1249 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1250 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1251 #define FLD(f) abuf->fields.sfmt_l_sll.f
1252 int UNUSED written = 0;
1253 IADDR UNUSED pc = abuf->addr;
1254 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1255
1256 {
1257 USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1258 SET_H_GPR (FLD (f_r1), opval);
1259 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1260 }
1261
1262 #undef FLD
1263 }
1264 NEXT (vpc);
1265
1266 CASE (sem, INSN_L_ADD) : /* l.add $rD,$rA,$rB */
1267 {
1268 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1269 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1270 #define FLD(f) abuf->fields.sfmt_l_sll.f
1271 int UNUSED written = 0;
1272 IADDR UNUSED pc = abuf->addr;
1273 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1274
1275 {
1276 {
1277 {
1278 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1279 SET_H_SYS_SR_CY (opval);
1280 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1281 }
1282 {
1283 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1284 SET_H_SYS_SR_OV (opval);
1285 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1286 }
1287 {
1288 USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1289 SET_H_GPR (FLD (f_r1), opval);
1290 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1291 }
1292 }
1293 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1294 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1295 }
1296 }
1297
1298 #undef FLD
1299 }
1300 NEXT (vpc);
1301
1302 CASE (sem, INSN_L_SUB) : /* l.sub $rD,$rA,$rB */
1303 {
1304 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1305 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1306 #define FLD(f) abuf->fields.sfmt_l_sll.f
1307 int UNUSED written = 0;
1308 IADDR UNUSED pc = abuf->addr;
1309 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1310
1311 {
1312 {
1313 {
1314 BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1315 SET_H_SYS_SR_CY (opval);
1316 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1317 }
1318 {
1319 BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1320 SET_H_SYS_SR_OV (opval);
1321 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1322 }
1323 {
1324 USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1325 SET_H_GPR (FLD (f_r1), opval);
1326 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1327 }
1328 }
1329 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1330 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1331 }
1332 }
1333
1334 #undef FLD
1335 }
1336 NEXT (vpc);
1337
1338 CASE (sem, INSN_L_ADDC) : /* l.addc $rD,$rA,$rB */
1339 {
1340 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1341 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1342 #define FLD(f) abuf->fields.sfmt_l_sll.f
1343 int UNUSED written = 0;
1344 IADDR UNUSED pc = abuf->addr;
1345 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1346
1347 {
1348 {
1349 BI tmp_tmp_sys_sr_cy;
1350 tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1351 {
1352 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1353 SET_H_SYS_SR_CY (opval);
1354 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1355 }
1356 {
1357 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1358 SET_H_SYS_SR_OV (opval);
1359 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1360 }
1361 {
1362 USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1363 SET_H_GPR (FLD (f_r1), opval);
1364 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1365 }
1366 }
1367 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1368 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1369 }
1370 }
1371
1372 #undef FLD
1373 }
1374 NEXT (vpc);
1375
1376 CASE (sem, INSN_L_MUL) : /* l.mul $rD,$rA,$rB */
1377 {
1378 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1379 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1380 #define FLD(f) abuf->fields.sfmt_l_sll.f
1381 int UNUSED written = 0;
1382 IADDR UNUSED pc = abuf->addr;
1383 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1384
1385 {
1386 {
1387 {
1388 BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1389 SET_H_SYS_SR_OV (opval);
1390 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1391 }
1392 {
1393 USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1394 SET_H_GPR (FLD (f_r1), opval);
1395 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1396 }
1397 }
1398 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1399 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1400 }
1401 }
1402
1403 #undef FLD
1404 }
1405 NEXT (vpc);
1406
1407 CASE (sem, INSN_L_MULD) : /* l.muld $rA,$rB */
1408 {
1409 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1410 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1411 #define FLD(f) abuf->fields.sfmt_l_sll.f
1412 int UNUSED written = 0;
1413 IADDR UNUSED pc = abuf->addr;
1414 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1415
1416 {
1417 DI tmp_result;
1418 tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
1419 {
1420 SI opval = SUBWORDDISI (tmp_result, 0);
1421 SET_H_MAC_MACHI (opval);
1422 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
1423 }
1424 {
1425 SI opval = SUBWORDDISI (tmp_result, 1);
1426 SET_H_MAC_MACLO (opval);
1427 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
1428 }
1429 }
1430
1431 #undef FLD
1432 }
1433 NEXT (vpc);
1434
1435 CASE (sem, INSN_L_MULU) : /* l.mulu $rD,$rA,$rB */
1436 {
1437 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1438 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1439 #define FLD(f) abuf->fields.sfmt_l_sll.f
1440 int UNUSED written = 0;
1441 IADDR UNUSED pc = abuf->addr;
1442 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1443
1444 {
1445 {
1446 {
1447 BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1448 SET_H_SYS_SR_CY (opval);
1449 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1450 }
1451 {
1452 USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1453 SET_H_GPR (FLD (f_r1), opval);
1454 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1455 }
1456 }
1457 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
1458 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1459 }
1460 }
1461
1462 #undef FLD
1463 }
1464 NEXT (vpc);
1465
1466 CASE (sem, INSN_L_MULDU) : /* l.muldu $rA,$rB */
1467 {
1468 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1469 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1470 #define FLD(f) abuf->fields.sfmt_l_sll.f
1471 int UNUSED written = 0;
1472 IADDR UNUSED pc = abuf->addr;
1473 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1474
1475 {
1476 DI tmp_result;
1477 tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
1478 {
1479 SI opval = SUBWORDDISI (tmp_result, 0);
1480 SET_H_MAC_MACHI (opval);
1481 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
1482 }
1483 {
1484 SI opval = SUBWORDDISI (tmp_result, 1);
1485 SET_H_MAC_MACLO (opval);
1486 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
1487 }
1488 }
1489
1490 #undef FLD
1491 }
1492 NEXT (vpc);
1493
1494 CASE (sem, INSN_L_DIV) : /* l.div $rD,$rA,$rB */
1495 {
1496 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1497 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1498 #define FLD(f) abuf->fields.sfmt_l_sll.f
1499 int UNUSED written = 0;
1500 IADDR UNUSED pc = abuf->addr;
1501 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1502
1503 if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1504 {
1505 {
1506 BI opval = 0;
1507 SET_H_SYS_SR_OV (opval);
1508 written |= (1 << 5);
1509 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1510 }
1511 {
1512 SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1513 SET_H_GPR (FLD (f_r1), opval);
1514 written |= (1 << 4);
1515 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1516 }
1517 }
1518 } else {
1519 {
1520 {
1521 BI opval = 1;
1522 SET_H_SYS_SR_OV (opval);
1523 written |= (1 << 5);
1524 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1525 }
1526 if (GET_H_SYS_SR_OVE ()) {
1527 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1528 }
1529 }
1530 }
1531
1532 abuf->written = written;
1533 #undef FLD
1534 }
1535 NEXT (vpc);
1536
1537 CASE (sem, INSN_L_DIVU) : /* l.divu $rD,$rA,$rB */
1538 {
1539 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1540 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1541 #define FLD(f) abuf->fields.sfmt_l_sll.f
1542 int UNUSED written = 0;
1543 IADDR UNUSED pc = abuf->addr;
1544 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1545
1546 if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1547 {
1548 {
1549 BI opval = 0;
1550 SET_H_SYS_SR_CY (opval);
1551 written |= (1 << 5);
1552 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1553 }
1554 {
1555 USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1556 SET_H_GPR (FLD (f_r1), opval);
1557 written |= (1 << 4);
1558 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1559 }
1560 }
1561 } else {
1562 {
1563 {
1564 BI opval = 1;
1565 SET_H_SYS_SR_CY (opval);
1566 written |= (1 << 5);
1567 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1568 }
1569 if (GET_H_SYS_SR_OVE ()) {
1570 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1571 }
1572 }
1573 }
1574
1575 abuf->written = written;
1576 #undef FLD
1577 }
1578 NEXT (vpc);
1579
1580 CASE (sem, INSN_L_FF1) : /* l.ff1 $rD,$rA */
1581 {
1582 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1583 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1584 #define FLD(f) abuf->fields.sfmt_l_slli.f
1585 int UNUSED written = 0;
1586 IADDR UNUSED pc = abuf->addr;
1587 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1588
1589 {
1590 USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1591 SET_H_GPR (FLD (f_r1), opval);
1592 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1593 }
1594
1595 #undef FLD
1596 }
1597 NEXT (vpc);
1598
1599 CASE (sem, INSN_L_FL1) : /* l.fl1 $rD,$rA */
1600 {
1601 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1602 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1603 #define FLD(f) abuf->fields.sfmt_l_slli.f
1604 int UNUSED written = 0;
1605 IADDR UNUSED pc = abuf->addr;
1606 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1607
1608 {
1609 USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1610 SET_H_GPR (FLD (f_r1), opval);
1611 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1612 }
1613
1614 #undef FLD
1615 }
1616 NEXT (vpc);
1617
1618 CASE (sem, INSN_L_ANDI) : /* l.andi $rD,$rA,$uimm16 */
1619 {
1620 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1621 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1622 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1623 int UNUSED written = 0;
1624 IADDR UNUSED pc = abuf->addr;
1625 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1626
1627 {
1628 USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1629 SET_H_GPR (FLD (f_r1), opval);
1630 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1631 }
1632
1633 #undef FLD
1634 }
1635 NEXT (vpc);
1636
1637 CASE (sem, INSN_L_ORI) : /* l.ori $rD,$rA,$uimm16 */
1638 {
1639 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1640 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1641 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1642 int UNUSED written = 0;
1643 IADDR UNUSED pc = abuf->addr;
1644 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1645
1646 {
1647 USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1648 SET_H_GPR (FLD (f_r1), opval);
1649 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1650 }
1651
1652 #undef FLD
1653 }
1654 NEXT (vpc);
1655
1656 CASE (sem, INSN_L_XORI) : /* l.xori $rD,$rA,$simm16 */
1657 {
1658 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1659 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1660 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1661 int UNUSED written = 0;
1662 IADDR UNUSED pc = abuf->addr;
1663 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1664
1665 {
1666 USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1667 SET_H_GPR (FLD (f_r1), opval);
1668 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1669 }
1670
1671 #undef FLD
1672 }
1673 NEXT (vpc);
1674
1675 CASE (sem, INSN_L_ADDI) : /* l.addi $rD,$rA,$simm16 */
1676 {
1677 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1678 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1679 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1680 int UNUSED written = 0;
1681 IADDR UNUSED pc = abuf->addr;
1682 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1683
1684 {
1685 {
1686 {
1687 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1688 SET_H_SYS_SR_CY (opval);
1689 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1690 }
1691 {
1692 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1693 SET_H_SYS_SR_OV (opval);
1694 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1695 }
1696 {
1697 USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1698 SET_H_GPR (FLD (f_r1), opval);
1699 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1700 }
1701 }
1702 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1703 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1704 }
1705 }
1706
1707 #undef FLD
1708 }
1709 NEXT (vpc);
1710
1711 CASE (sem, INSN_L_ADDIC) : /* l.addic $rD,$rA,$simm16 */
1712 {
1713 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1714 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1715 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1716 int UNUSED written = 0;
1717 IADDR UNUSED pc = abuf->addr;
1718 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1719
1720 {
1721 {
1722 BI tmp_tmp_sys_sr_cy;
1723 tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1724 {
1725 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1726 SET_H_SYS_SR_CY (opval);
1727 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1728 }
1729 {
1730 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1731 SET_H_SYS_SR_OV (opval);
1732 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1733 }
1734 {
1735 SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1736 SET_H_GPR (FLD (f_r1), opval);
1737 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1738 }
1739 }
1740 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1741 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1742 }
1743 }
1744
1745 #undef FLD
1746 }
1747 NEXT (vpc);
1748
1749 CASE (sem, INSN_L_MULI) : /* l.muli $rD,$rA,$simm16 */
1750 {
1751 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1752 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1753 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1754 int UNUSED written = 0;
1755 IADDR UNUSED pc = abuf->addr;
1756 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1757
1758 {
1759 {
1760 {
1761 USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1762 SET_H_SYS_SR_OV (opval);
1763 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1764 }
1765 {
1766 USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1767 SET_H_GPR (FLD (f_r1), opval);
1768 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1769 }
1770 }
1771 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1772 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1773 }
1774 }
1775
1776 #undef FLD
1777 }
1778 NEXT (vpc);
1779
1780 CASE (sem, INSN_L_EXTHS) : /* l.exths $rD,$rA */
1781 {
1782 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1783 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1784 #define FLD(f) abuf->fields.sfmt_l_slli.f
1785 int UNUSED written = 0;
1786 IADDR UNUSED pc = abuf->addr;
1787 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1788
1789 {
1790 USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1791 SET_H_GPR (FLD (f_r1), opval);
1792 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1793 }
1794
1795 #undef FLD
1796 }
1797 NEXT (vpc);
1798
1799 CASE (sem, INSN_L_EXTBS) : /* l.extbs $rD,$rA */
1800 {
1801 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1802 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1803 #define FLD(f) abuf->fields.sfmt_l_slli.f
1804 int UNUSED written = 0;
1805 IADDR UNUSED pc = abuf->addr;
1806 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1807
1808 {
1809 USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1810 SET_H_GPR (FLD (f_r1), opval);
1811 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1812 }
1813
1814 #undef FLD
1815 }
1816 NEXT (vpc);
1817
1818 CASE (sem, INSN_L_EXTHZ) : /* l.exthz $rD,$rA */
1819 {
1820 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1821 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1822 #define FLD(f) abuf->fields.sfmt_l_slli.f
1823 int UNUSED written = 0;
1824 IADDR UNUSED pc = abuf->addr;
1825 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1826
1827 {
1828 USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1829 SET_H_GPR (FLD (f_r1), opval);
1830 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1831 }
1832
1833 #undef FLD
1834 }
1835 NEXT (vpc);
1836
1837 CASE (sem, INSN_L_EXTBZ) : /* l.extbz $rD,$rA */
1838 {
1839 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1840 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1841 #define FLD(f) abuf->fields.sfmt_l_slli.f
1842 int UNUSED written = 0;
1843 IADDR UNUSED pc = abuf->addr;
1844 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1845
1846 {
1847 USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1848 SET_H_GPR (FLD (f_r1), opval);
1849 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1850 }
1851
1852 #undef FLD
1853 }
1854 NEXT (vpc);
1855
1856 CASE (sem, INSN_L_EXTWS) : /* l.extws $rD,$rA */
1857 {
1858 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1859 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1860 #define FLD(f) abuf->fields.sfmt_l_slli.f
1861 int UNUSED written = 0;
1862 IADDR UNUSED pc = abuf->addr;
1863 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1864
1865 {
1866 USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1867 SET_H_GPR (FLD (f_r1), opval);
1868 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1869 }
1870
1871 #undef FLD
1872 }
1873 NEXT (vpc);
1874
1875 CASE (sem, INSN_L_EXTWZ) : /* l.extwz $rD,$rA */
1876 {
1877 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1878 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1879 #define FLD(f) abuf->fields.sfmt_l_slli.f
1880 int UNUSED written = 0;
1881 IADDR UNUSED pc = abuf->addr;
1882 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1883
1884 {
1885 USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1886 SET_H_GPR (FLD (f_r1), opval);
1887 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1888 }
1889
1890 #undef FLD
1891 }
1892 NEXT (vpc);
1893
1894 CASE (sem, INSN_L_CMOV) : /* l.cmov $rD,$rA,$rB */
1895 {
1896 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1897 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1898 #define FLD(f) abuf->fields.sfmt_l_sll.f
1899 int UNUSED written = 0;
1900 IADDR UNUSED pc = abuf->addr;
1901 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1902
1903 if (GET_H_SYS_SR_F ()) {
1904 {
1905 USI opval = GET_H_GPR (FLD (f_r2));
1906 SET_H_GPR (FLD (f_r1), opval);
1907 written |= (1 << 3);
1908 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1909 }
1910 } else {
1911 {
1912 USI opval = GET_H_GPR (FLD (f_r3));
1913 SET_H_GPR (FLD (f_r1), opval);
1914 written |= (1 << 3);
1915 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1916 }
1917 }
1918
1919 abuf->written = written;
1920 #undef FLD
1921 }
1922 NEXT (vpc);
1923
1924 CASE (sem, INSN_L_SFGTS) : /* l.sfgts $rA,$rB */
1925 {
1926 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1927 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1928 #define FLD(f) abuf->fields.sfmt_l_sll.f
1929 int UNUSED written = 0;
1930 IADDR UNUSED pc = abuf->addr;
1931 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1932
1933 {
1934 USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1935 SET_H_SYS_SR_F (opval);
1936 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1937 }
1938
1939 #undef FLD
1940 }
1941 NEXT (vpc);
1942
1943 CASE (sem, INSN_L_SFGTSI) : /* l.sfgtsi $rA,$simm16 */
1944 {
1945 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1946 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1947 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1948 int UNUSED written = 0;
1949 IADDR UNUSED pc = abuf->addr;
1950 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1951
1952 {
1953 USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1954 SET_H_SYS_SR_F (opval);
1955 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1956 }
1957
1958 #undef FLD
1959 }
1960 NEXT (vpc);
1961
1962 CASE (sem, INSN_L_SFGTU) : /* l.sfgtu $rA,$rB */
1963 {
1964 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1965 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1966 #define FLD(f) abuf->fields.sfmt_l_sll.f
1967 int UNUSED written = 0;
1968 IADDR UNUSED pc = abuf->addr;
1969 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1970
1971 {
1972 USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1973 SET_H_SYS_SR_F (opval);
1974 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1975 }
1976
1977 #undef FLD
1978 }
1979 NEXT (vpc);
1980
1981 CASE (sem, INSN_L_SFGTUI) : /* l.sfgtui $rA,$simm16 */
1982 {
1983 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1985 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1986 int UNUSED written = 0;
1987 IADDR UNUSED pc = abuf->addr;
1988 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1989
1990 {
1991 USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1992 SET_H_SYS_SR_F (opval);
1993 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1994 }
1995
1996 #undef FLD
1997 }
1998 NEXT (vpc);
1999
2000 CASE (sem, INSN_L_SFGES) : /* l.sfges $rA,$rB */
2001 {
2002 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2003 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2004 #define FLD(f) abuf->fields.sfmt_l_sll.f
2005 int UNUSED written = 0;
2006 IADDR UNUSED pc = abuf->addr;
2007 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2008
2009 {
2010 USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2011 SET_H_SYS_SR_F (opval);
2012 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2013 }
2014
2015 #undef FLD
2016 }
2017 NEXT (vpc);
2018
2019 CASE (sem, INSN_L_SFGESI) : /* l.sfgesi $rA,$simm16 */
2020 {
2021 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2022 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2023 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2024 int UNUSED written = 0;
2025 IADDR UNUSED pc = abuf->addr;
2026 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2027
2028 {
2029 USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2030 SET_H_SYS_SR_F (opval);
2031 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2032 }
2033
2034 #undef FLD
2035 }
2036 NEXT (vpc);
2037
2038 CASE (sem, INSN_L_SFGEU) : /* l.sfgeu $rA,$rB */
2039 {
2040 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2041 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2042 #define FLD(f) abuf->fields.sfmt_l_sll.f
2043 int UNUSED written = 0;
2044 IADDR UNUSED pc = abuf->addr;
2045 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2046
2047 {
2048 USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2049 SET_H_SYS_SR_F (opval);
2050 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2051 }
2052
2053 #undef FLD
2054 }
2055 NEXT (vpc);
2056
2057 CASE (sem, INSN_L_SFGEUI) : /* l.sfgeui $rA,$simm16 */
2058 {
2059 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2060 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2061 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2062 int UNUSED written = 0;
2063 IADDR UNUSED pc = abuf->addr;
2064 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2065
2066 {
2067 USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2068 SET_H_SYS_SR_F (opval);
2069 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2070 }
2071
2072 #undef FLD
2073 }
2074 NEXT (vpc);
2075
2076 CASE (sem, INSN_L_SFLTS) : /* l.sflts $rA,$rB */
2077 {
2078 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2079 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2080 #define FLD(f) abuf->fields.sfmt_l_sll.f
2081 int UNUSED written = 0;
2082 IADDR UNUSED pc = abuf->addr;
2083 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2084
2085 {
2086 USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2087 SET_H_SYS_SR_F (opval);
2088 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2089 }
2090
2091 #undef FLD
2092 }
2093 NEXT (vpc);
2094
2095 CASE (sem, INSN_L_SFLTSI) : /* l.sfltsi $rA,$simm16 */
2096 {
2097 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2098 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2099 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2100 int UNUSED written = 0;
2101 IADDR UNUSED pc = abuf->addr;
2102 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2103
2104 {
2105 USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2106 SET_H_SYS_SR_F (opval);
2107 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2108 }
2109
2110 #undef FLD
2111 }
2112 NEXT (vpc);
2113
2114 CASE (sem, INSN_L_SFLTU) : /* l.sfltu $rA,$rB */
2115 {
2116 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2117 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2118 #define FLD(f) abuf->fields.sfmt_l_sll.f
2119 int UNUSED written = 0;
2120 IADDR UNUSED pc = abuf->addr;
2121 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2122
2123 {
2124 USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2125 SET_H_SYS_SR_F (opval);
2126 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2127 }
2128
2129 #undef FLD
2130 }
2131 NEXT (vpc);
2132
2133 CASE (sem, INSN_L_SFLTUI) : /* l.sfltui $rA,$simm16 */
2134 {
2135 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2136 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2137 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2138 int UNUSED written = 0;
2139 IADDR UNUSED pc = abuf->addr;
2140 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2141
2142 {
2143 USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2144 SET_H_SYS_SR_F (opval);
2145 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2146 }
2147
2148 #undef FLD
2149 }
2150 NEXT (vpc);
2151
2152 CASE (sem, INSN_L_SFLES) : /* l.sfles $rA,$rB */
2153 {
2154 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2155 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2156 #define FLD(f) abuf->fields.sfmt_l_sll.f
2157 int UNUSED written = 0;
2158 IADDR UNUSED pc = abuf->addr;
2159 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2160
2161 {
2162 USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2163 SET_H_SYS_SR_F (opval);
2164 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2165 }
2166
2167 #undef FLD
2168 }
2169 NEXT (vpc);
2170
2171 CASE (sem, INSN_L_SFLESI) : /* l.sflesi $rA,$simm16 */
2172 {
2173 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2174 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2175 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2176 int UNUSED written = 0;
2177 IADDR UNUSED pc = abuf->addr;
2178 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2179
2180 {
2181 USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2182 SET_H_SYS_SR_F (opval);
2183 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2184 }
2185
2186 #undef FLD
2187 }
2188 NEXT (vpc);
2189
2190 CASE (sem, INSN_L_SFLEU) : /* l.sfleu $rA,$rB */
2191 {
2192 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2193 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2194 #define FLD(f) abuf->fields.sfmt_l_sll.f
2195 int UNUSED written = 0;
2196 IADDR UNUSED pc = abuf->addr;
2197 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2198
2199 {
2200 USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2201 SET_H_SYS_SR_F (opval);
2202 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2203 }
2204
2205 #undef FLD
2206 }
2207 NEXT (vpc);
2208
2209 CASE (sem, INSN_L_SFLEUI) : /* l.sfleui $rA,$simm16 */
2210 {
2211 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2212 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2213 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2214 int UNUSED written = 0;
2215 IADDR UNUSED pc = abuf->addr;
2216 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2217
2218 {
2219 USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2220 SET_H_SYS_SR_F (opval);
2221 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2222 }
2223
2224 #undef FLD
2225 }
2226 NEXT (vpc);
2227
2228 CASE (sem, INSN_L_SFEQ) : /* l.sfeq $rA,$rB */
2229 {
2230 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2231 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2232 #define FLD(f) abuf->fields.sfmt_l_sll.f
2233 int UNUSED written = 0;
2234 IADDR UNUSED pc = abuf->addr;
2235 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2236
2237 {
2238 USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2239 SET_H_SYS_SR_F (opval);
2240 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2241 }
2242
2243 #undef FLD
2244 }
2245 NEXT (vpc);
2246
2247 CASE (sem, INSN_L_SFEQI) : /* l.sfeqi $rA,$simm16 */
2248 {
2249 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2250 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2251 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2252 int UNUSED written = 0;
2253 IADDR UNUSED pc = abuf->addr;
2254 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2255
2256 {
2257 USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2258 SET_H_SYS_SR_F (opval);
2259 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2260 }
2261
2262 #undef FLD
2263 }
2264 NEXT (vpc);
2265
2266 CASE (sem, INSN_L_SFNE) : /* l.sfne $rA,$rB */
2267 {
2268 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2269 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2270 #define FLD(f) abuf->fields.sfmt_l_sll.f
2271 int UNUSED written = 0;
2272 IADDR UNUSED pc = abuf->addr;
2273 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2274
2275 {
2276 USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2277 SET_H_SYS_SR_F (opval);
2278 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2279 }
2280
2281 #undef FLD
2282 }
2283 NEXT (vpc);
2284
2285 CASE (sem, INSN_L_SFNEI) : /* l.sfnei $rA,$simm16 */
2286 {
2287 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2288 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2289 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2290 int UNUSED written = 0;
2291 IADDR UNUSED pc = abuf->addr;
2292 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2293
2294 {
2295 USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2296 SET_H_SYS_SR_F (opval);
2297 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2298 }
2299
2300 #undef FLD
2301 }
2302 NEXT (vpc);
2303
2304 CASE (sem, INSN_L_MAC) : /* l.mac $rA,$rB */
2305 {
2306 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2307 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2308 #define FLD(f) abuf->fields.sfmt_l_sll.f
2309 int UNUSED written = 0;
2310 IADDR UNUSED pc = abuf->addr;
2311 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2312
2313 {
2314 {
2315 DI tmp_prod;
2316 DI tmp_mac;
2317 DI tmp_result;
2318 tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2319 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2320 tmp_result = ADDDI (tmp_prod, tmp_mac);
2321 {
2322 SI opval = SUBWORDDISI (tmp_result, 0);
2323 SET_H_MAC_MACHI (opval);
2324 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2325 }
2326 {
2327 SI opval = SUBWORDDISI (tmp_result, 1);
2328 SET_H_MAC_MACLO (opval);
2329 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2330 }
2331 {
2332 BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2333 SET_H_SYS_SR_OV (opval);
2334 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2335 }
2336 }
2337 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2338 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2339 }
2340 }
2341
2342 #undef FLD
2343 }
2344 NEXT (vpc);
2345
2346 CASE (sem, INSN_L_MACI) : /* l.maci $rA,${simm16} */
2347 {
2348 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2349 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2350 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2351 int UNUSED written = 0;
2352 IADDR UNUSED pc = abuf->addr;
2353 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2354
2355 {
2356 {
2357 DI tmp_prod;
2358 DI tmp_mac;
2359 DI tmp_result;
2360 tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
2361 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2362 tmp_result = ADDDI (tmp_mac, tmp_prod);
2363 {
2364 SI opval = SUBWORDDISI (tmp_result, 0);
2365 SET_H_MAC_MACHI (opval);
2366 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2367 }
2368 {
2369 SI opval = SUBWORDDISI (tmp_result, 1);
2370 SET_H_MAC_MACLO (opval);
2371 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2372 }
2373 {
2374 BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2375 SET_H_SYS_SR_OV (opval);
2376 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2377 }
2378 }
2379 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2380 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2381 }
2382 }
2383
2384 #undef FLD
2385 }
2386 NEXT (vpc);
2387
2388 CASE (sem, INSN_L_MACU) : /* l.macu $rA,$rB */
2389 {
2390 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2391 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2392 #define FLD(f) abuf->fields.sfmt_l_sll.f
2393 int UNUSED written = 0;
2394 IADDR UNUSED pc = abuf->addr;
2395 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2396
2397 {
2398 {
2399 DI tmp_prod;
2400 DI tmp_mac;
2401 DI tmp_result;
2402 tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2403 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2404 tmp_result = ADDDI (tmp_prod, tmp_mac);
2405 {
2406 SI opval = SUBWORDDISI (tmp_result, 0);
2407 SET_H_MAC_MACHI (opval);
2408 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2409 }
2410 {
2411 SI opval = SUBWORDDISI (tmp_result, 1);
2412 SET_H_MAC_MACLO (opval);
2413 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2414 }
2415 {
2416 BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
2417 SET_H_SYS_SR_CY (opval);
2418 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2419 }
2420 }
2421 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2422 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2423 }
2424 }
2425
2426 #undef FLD
2427 }
2428 NEXT (vpc);
2429
2430 CASE (sem, INSN_L_MSB) : /* l.msb $rA,$rB */
2431 {
2432 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2433 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2434 #define FLD(f) abuf->fields.sfmt_l_sll.f
2435 int UNUSED written = 0;
2436 IADDR UNUSED pc = abuf->addr;
2437 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2438
2439 {
2440 {
2441 DI tmp_prod;
2442 DI tmp_mac;
2443 DI tmp_result;
2444 tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2445 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2446 tmp_result = SUBDI (tmp_mac, tmp_prod);
2447 {
2448 SI opval = SUBWORDDISI (tmp_result, 0);
2449 SET_H_MAC_MACHI (opval);
2450 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2451 }
2452 {
2453 SI opval = SUBWORDDISI (tmp_result, 1);
2454 SET_H_MAC_MACLO (opval);
2455 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2456 }
2457 {
2458 BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
2459 SET_H_SYS_SR_OV (opval);
2460 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2461 }
2462 }
2463 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2464 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2465 }
2466 }
2467
2468 #undef FLD
2469 }
2470 NEXT (vpc);
2471
2472 CASE (sem, INSN_L_MSBU) : /* l.msbu $rA,$rB */
2473 {
2474 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2475 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2476 #define FLD(f) abuf->fields.sfmt_l_sll.f
2477 int UNUSED written = 0;
2478 IADDR UNUSED pc = abuf->addr;
2479 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2480
2481 {
2482 {
2483 DI tmp_prod;
2484 DI tmp_mac;
2485 DI tmp_result;
2486 tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2487 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2488 tmp_result = SUBDI (tmp_mac, tmp_prod);
2489 {
2490 SI opval = SUBWORDDISI (tmp_result, 0);
2491 SET_H_MAC_MACHI (opval);
2492 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2493 }
2494 {
2495 SI opval = SUBWORDDISI (tmp_result, 1);
2496 SET_H_MAC_MACLO (opval);
2497 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2498 }
2499 {
2500 BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
2501 SET_H_SYS_SR_CY (opval);
2502 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2503 }
2504 }
2505 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2506 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2507 }
2508 }
2509
2510 #undef FLD
2511 }
2512 NEXT (vpc);
2513
2514 CASE (sem, INSN_L_CUST1) : /* l.cust1 */
2515 {
2516 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2517 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2518 #define FLD(f) abuf->fields.sfmt_empty.f
2519 int UNUSED written = 0;
2520 IADDR UNUSED pc = abuf->addr;
2521 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2522
2523 ((void) 0); /*nop*/
2524
2525 #undef FLD
2526 }
2527 NEXT (vpc);
2528
2529 CASE (sem, INSN_L_CUST2) : /* l.cust2 */
2530 {
2531 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2532 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2533 #define FLD(f) abuf->fields.sfmt_empty.f
2534 int UNUSED written = 0;
2535 IADDR UNUSED pc = abuf->addr;
2536 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2537
2538 ((void) 0); /*nop*/
2539
2540 #undef FLD
2541 }
2542 NEXT (vpc);
2543
2544 CASE (sem, INSN_L_CUST3) : /* l.cust3 */
2545 {
2546 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2547 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2548 #define FLD(f) abuf->fields.sfmt_empty.f
2549 int UNUSED written = 0;
2550 IADDR UNUSED pc = abuf->addr;
2551 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2552
2553 ((void) 0); /*nop*/
2554
2555 #undef FLD
2556 }
2557 NEXT (vpc);
2558
2559 CASE (sem, INSN_L_CUST4) : /* l.cust4 */
2560 {
2561 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2562 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2563 #define FLD(f) abuf->fields.sfmt_empty.f
2564 int UNUSED written = 0;
2565 IADDR UNUSED pc = abuf->addr;
2566 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2567
2568 ((void) 0); /*nop*/
2569
2570 #undef FLD
2571 }
2572 NEXT (vpc);
2573
2574 CASE (sem, INSN_L_CUST5) : /* l.cust5 */
2575 {
2576 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2577 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2578 #define FLD(f) abuf->fields.sfmt_empty.f
2579 int UNUSED written = 0;
2580 IADDR UNUSED pc = abuf->addr;
2581 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2582
2583 ((void) 0); /*nop*/
2584
2585 #undef FLD
2586 }
2587 NEXT (vpc);
2588
2589 CASE (sem, INSN_L_CUST6) : /* l.cust6 */
2590 {
2591 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2592 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2593 #define FLD(f) abuf->fields.sfmt_empty.f
2594 int UNUSED written = 0;
2595 IADDR UNUSED pc = abuf->addr;
2596 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2597
2598 ((void) 0); /*nop*/
2599
2600 #undef FLD
2601 }
2602 NEXT (vpc);
2603
2604 CASE (sem, INSN_L_CUST7) : /* l.cust7 */
2605 {
2606 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2607 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2608 #define FLD(f) abuf->fields.sfmt_empty.f
2609 int UNUSED written = 0;
2610 IADDR UNUSED pc = abuf->addr;
2611 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2612
2613 ((void) 0); /*nop*/
2614
2615 #undef FLD
2616 }
2617 NEXT (vpc);
2618
2619 CASE (sem, INSN_L_CUST8) : /* l.cust8 */
2620 {
2621 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2622 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2623 #define FLD(f) abuf->fields.sfmt_empty.f
2624 int UNUSED written = 0;
2625 IADDR UNUSED pc = abuf->addr;
2626 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2627
2628 ((void) 0); /*nop*/
2629
2630 #undef FLD
2631 }
2632 NEXT (vpc);
2633
2634 CASE (sem, INSN_LF_ADD_S) : /* lf.add.s $rDSF,$rASF,$rBSF */
2635 {
2636 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2637 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2638 #define FLD(f) abuf->fields.sfmt_l_sll.f
2639 int UNUSED written = 0;
2640 IADDR UNUSED pc = abuf->addr;
2641 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2642
2643 {
2644 SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2645 SET_H_FSR (FLD (f_r1), opval);
2646 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2647 }
2648
2649 #undef FLD
2650 }
2651 NEXT (vpc);
2652
2653 CASE (sem, INSN_LF_SUB_S) : /* lf.sub.s $rDSF,$rASF,$rBSF */
2654 {
2655 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2656 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2657 #define FLD(f) abuf->fields.sfmt_l_sll.f
2658 int UNUSED written = 0;
2659 IADDR UNUSED pc = abuf->addr;
2660 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2661
2662 {
2663 SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2664 SET_H_FSR (FLD (f_r1), opval);
2665 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2666 }
2667
2668 #undef FLD
2669 }
2670 NEXT (vpc);
2671
2672 CASE (sem, INSN_LF_MUL_S) : /* lf.mul.s $rDSF,$rASF,$rBSF */
2673 {
2674 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2675 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2676 #define FLD(f) abuf->fields.sfmt_l_sll.f
2677 int UNUSED written = 0;
2678 IADDR UNUSED pc = abuf->addr;
2679 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2680
2681 {
2682 SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2683 SET_H_FSR (FLD (f_r1), opval);
2684 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2685 }
2686
2687 #undef FLD
2688 }
2689 NEXT (vpc);
2690
2691 CASE (sem, INSN_LF_DIV_S) : /* lf.div.s $rDSF,$rASF,$rBSF */
2692 {
2693 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2694 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2695 #define FLD(f) abuf->fields.sfmt_l_sll.f
2696 int UNUSED written = 0;
2697 IADDR UNUSED pc = abuf->addr;
2698 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2699
2700 {
2701 SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2702 SET_H_FSR (FLD (f_r1), opval);
2703 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2704 }
2705
2706 #undef FLD
2707 }
2708 NEXT (vpc);
2709
2710 CASE (sem, INSN_LF_REM_S) : /* lf.rem.s $rDSF,$rASF,$rBSF */
2711 {
2712 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2713 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2714 #define FLD(f) abuf->fields.sfmt_l_sll.f
2715 int UNUSED written = 0;
2716 IADDR UNUSED pc = abuf->addr;
2717 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2718
2719 {
2720 SF opval = CGEN_CPU_FPU (current_cpu)->ops->remsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2721 SET_H_FSR (FLD (f_r1), opval);
2722 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2723 }
2724
2725 #undef FLD
2726 }
2727 NEXT (vpc);
2728
2729 CASE (sem, INSN_LF_ITOF_S) : /* lf.itof.s $rDSF,$rA */
2730 {
2731 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2732 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2733 #define FLD(f) abuf->fields.sfmt_l_slli.f
2734 int UNUSED written = 0;
2735 IADDR UNUSED pc = abuf->addr;
2736 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2737
2738 {
2739 SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), TRUNCSISI (GET_H_GPR (FLD (f_r2))));
2740 SET_H_FSR (FLD (f_r1), opval);
2741 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2742 }
2743
2744 #undef FLD
2745 }
2746 NEXT (vpc);
2747
2748 CASE (sem, INSN_LF_FTOI_S) : /* lf.ftoi.s $rD,$rASF */
2749 {
2750 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2751 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2752 #define FLD(f) abuf->fields.sfmt_l_slli.f
2753 int UNUSED written = 0;
2754 IADDR UNUSED pc = abuf->addr;
2755 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2756
2757 {
2758 SI opval = EXTSISI (CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FSR (FLD (f_r2))));
2759 SET_H_GPR (FLD (f_r1), opval);
2760 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
2761 }
2762
2763 #undef FLD
2764 }
2765 NEXT (vpc);
2766
2767 CASE (sem, INSN_LF_EQ_S) : /* lf.sfeq.s $rASF,$rBSF */
2768 {
2769 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2770 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2771 #define FLD(f) abuf->fields.sfmt_l_sll.f
2772 int UNUSED written = 0;
2773 IADDR UNUSED pc = abuf->addr;
2774 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2775
2776 {
2777 BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2778 SET_H_SYS_SR_F (opval);
2779 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2780 }
2781
2782 #undef FLD
2783 }
2784 NEXT (vpc);
2785
2786 CASE (sem, INSN_LF_NE_S) : /* lf.sfne.s $rASF,$rBSF */
2787 {
2788 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2789 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2790 #define FLD(f) abuf->fields.sfmt_l_sll.f
2791 int UNUSED written = 0;
2792 IADDR UNUSED pc = abuf->addr;
2793 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2794
2795 {
2796 BI opval = CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2797 SET_H_SYS_SR_F (opval);
2798 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2799 }
2800
2801 #undef FLD
2802 }
2803 NEXT (vpc);
2804
2805 CASE (sem, INSN_LF_GE_S) : /* lf.sfge.s $rASF,$rBSF */
2806 {
2807 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2808 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2809 #define FLD(f) abuf->fields.sfmt_l_sll.f
2810 int UNUSED written = 0;
2811 IADDR UNUSED pc = abuf->addr;
2812 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2813
2814 {
2815 BI opval = CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2816 SET_H_SYS_SR_F (opval);
2817 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2818 }
2819
2820 #undef FLD
2821 }
2822 NEXT (vpc);
2823
2824 CASE (sem, INSN_LF_GT_S) : /* lf.sfgt.s $rASF,$rBSF */
2825 {
2826 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2827 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2828 #define FLD(f) abuf->fields.sfmt_l_sll.f
2829 int UNUSED written = 0;
2830 IADDR UNUSED pc = abuf->addr;
2831 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2832
2833 {
2834 BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2835 SET_H_SYS_SR_F (opval);
2836 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2837 }
2838
2839 #undef FLD
2840 }
2841 NEXT (vpc);
2842
2843 CASE (sem, INSN_LF_LT_S) : /* lf.sflt.s $rASF,$rBSF */
2844 {
2845 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2846 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2847 #define FLD(f) abuf->fields.sfmt_l_sll.f
2848 int UNUSED written = 0;
2849 IADDR UNUSED pc = abuf->addr;
2850 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2851
2852 {
2853 BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2854 SET_H_SYS_SR_F (opval);
2855 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2856 }
2857
2858 #undef FLD
2859 }
2860 NEXT (vpc);
2861
2862 CASE (sem, INSN_LF_LE_S) : /* lf.sfle.s $rASF,$rBSF */
2863 {
2864 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2865 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2866 #define FLD(f) abuf->fields.sfmt_l_sll.f
2867 int UNUSED written = 0;
2868 IADDR UNUSED pc = abuf->addr;
2869 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2870
2871 {
2872 BI opval = CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
2873 SET_H_SYS_SR_F (opval);
2874 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2875 }
2876
2877 #undef FLD
2878 }
2879 NEXT (vpc);
2880
2881 CASE (sem, INSN_LF_MADD_S) : /* lf.madd.s $rDSF,$rASF,$rBSF */
2882 {
2883 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2884 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2885 #define FLD(f) abuf->fields.sfmt_l_sll.f
2886 int UNUSED written = 0;
2887 IADDR UNUSED pc = abuf->addr;
2888 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2889
2890 {
2891 SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), GET_H_FSR (FLD (f_r1)));
2892 SET_H_FSR (FLD (f_r1), opval);
2893 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2894 }
2895
2896 #undef FLD
2897 }
2898 NEXT (vpc);
2899
2900 CASE (sem, INSN_LF_CUST1_S) : /* lf.cust1.s $rASF,$rBSF */
2901 {
2902 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2903 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2904 #define FLD(f) abuf->fields.sfmt_empty.f
2905 int UNUSED written = 0;
2906 IADDR UNUSED pc = abuf->addr;
2907 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2908
2909 ((void) 0); /*nop*/
2910
2911 #undef FLD
2912 }
2913 NEXT (vpc);
2914
2915
2916 }
2917 ENDSWITCH (sem) /* End of semantic switch. */
2918
2919 /* At this point `vpc' contains the next insn to execute. */
2920 }
2921
2922 #undef DEFINE_SWITCH
2923 #endif /* DEFINE_SWITCH */
This page took 0.117767 seconds and 3 git commands to generate.