xref: /netbsd-src/external/gpl3/gdb/dist/sim/or1k/sem.c (revision 1f4e7eb9e5e045e008f1894823a8e4e6c9f46890)
1 /* Simulator instruction semantics for or1k32bf.
2 
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4 
5 Copyright (C) 1996-2024 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 #define WANT_CPU or1k32bf
26 #define WANT_CPU_OR1K32BF
27 
28 #include "sim-main.h"
29 #include "cgen-mem.h"
30 #include "cgen-ops.h"
31 
32 #undef GET_ATTR
33 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
34 
35 /* This is used so that we can compile two copies of the semantic code,
36    one with full feature support and one without that runs fast(er).
37    FAST_P, when desired, is defined on the command line, -DFAST_P=1.  */
38 #if FAST_P
39 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
40 #undef CGEN_TRACE_RESULT
41 #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
42 #else
43 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
44 #endif
45 
46 /* x-invalid: --invalid-- */
47 
48 static SEM_PC
49 SEM_FN_NAME (or1k32bf,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
50 {
51 #define FLD(f) abuf->fields.sfmt_empty.f
52   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
53   int UNUSED written = 0;
54   IADDR UNUSED pc = abuf->addr;
55   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
56 
57   {
58     /* Update the recorded pc in the cpu state struct.
59        Only necessary for WITH_SCACHE case, but to avoid the
60        conditional compilation ....  */
61     SET_H_PC (pc);
62     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
63        using the default-insn-bitsize spec.  When executing insns in parallel
64        we may want to queue the fault and continue execution.  */
65     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
66     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
67   }
68 
69   return vpc;
70 #undef FLD
71 }
72 
73 /* x-after: --after-- */
74 
75 static SEM_PC
76 SEM_FN_NAME (or1k32bf,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
77 {
78 #define FLD(f) abuf->fields.sfmt_empty.f
79   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
80   int UNUSED written = 0;
81   IADDR UNUSED pc = abuf->addr;
82   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
83 
84   {
85 #if WITH_SCACHE_PBB_OR1K32BF
86     or1k32bf_pbb_after (current_cpu, sem_arg);
87 #endif
88   }
89 
90   return vpc;
91 #undef FLD
92 }
93 
94 /* x-before: --before-- */
95 
96 static SEM_PC
97 SEM_FN_NAME (or1k32bf,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
98 {
99 #define FLD(f) abuf->fields.sfmt_empty.f
100   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
101   int UNUSED written = 0;
102   IADDR UNUSED pc = abuf->addr;
103   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
104 
105   {
106 #if WITH_SCACHE_PBB_OR1K32BF
107     or1k32bf_pbb_before (current_cpu, sem_arg);
108 #endif
109   }
110 
111   return vpc;
112 #undef FLD
113 }
114 
115 /* x-cti-chain: --cti-chain-- */
116 
117 static SEM_PC
118 SEM_FN_NAME (or1k32bf,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
119 {
120 #define FLD(f) abuf->fields.sfmt_empty.f
121   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
122   int UNUSED written = 0;
123   IADDR UNUSED pc = abuf->addr;
124   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
125 
126   {
127 #if WITH_SCACHE_PBB_OR1K32BF
128 #ifdef DEFINE_SWITCH
129     vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
130 			       pbb_br_type, pbb_br_npc);
131     BREAK (sem);
132 #else
133     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
134     vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
135 			       CPU_PBB_BR_TYPE (current_cpu),
136 			       CPU_PBB_BR_NPC (current_cpu));
137 #endif
138 #endif
139   }
140 
141   return vpc;
142 #undef FLD
143 }
144 
145 /* x-chain: --chain-- */
146 
147 static SEM_PC
148 SEM_FN_NAME (or1k32bf,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
149 {
150 #define FLD(f) abuf->fields.sfmt_empty.f
151   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
152   int UNUSED written = 0;
153   IADDR UNUSED pc = abuf->addr;
154   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
155 
156   {
157 #if WITH_SCACHE_PBB_OR1K32BF
158     vpc = or1k32bf_pbb_chain (current_cpu, sem_arg);
159 #ifdef DEFINE_SWITCH
160     BREAK (sem);
161 #endif
162 #endif
163   }
164 
165   return vpc;
166 #undef FLD
167 }
168 
169 /* x-begin: --begin-- */
170 
171 static SEM_PC
172 SEM_FN_NAME (or1k32bf,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
173 {
174 #define FLD(f) abuf->fields.sfmt_empty.f
175   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
176   int UNUSED written = 0;
177   IADDR UNUSED pc = abuf->addr;
178   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
179 
180   {
181 #if WITH_SCACHE_PBB_OR1K32BF
182 #if defined DEFINE_SWITCH || defined FAST_P
183     /* In the switch case FAST_P is a constant, allowing several optimizations
184        in any called inline functions.  */
185     vpc = or1k32bf_pbb_begin (current_cpu, FAST_P);
186 #else
187 #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
188     vpc = or1k32bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
189 #else
190     vpc = or1k32bf_pbb_begin (current_cpu, 0);
191 #endif
192 #endif
193 #endif
194   }
195 
196   return vpc;
197 #undef FLD
198 }
199 
200 /* l-j: l.j ${disp26} */
201 
202 static SEM_PC
203 SEM_FN_NAME (or1k32bf,l_j) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
204 {
205 #define FLD(f) abuf->fields.sfmt_l_j.f
206   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
207   int UNUSED written = 0;
208   IADDR UNUSED pc = abuf->addr;
209   SEM_BRANCH_INIT
210   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
211 
212 {
213 {
214   {
215     USI opval = FLD (i_disp26);
216     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
217     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
218   }
219 }
220 if (GET_H_SYS_CPUCFGR_ND ()) {
221 if (1)
222   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
223 }
224 }
225 
226   SEM_BRANCH_FINI (vpc);
227   return vpc;
228 #undef FLD
229 }
230 
231 /* l-adrp: l.adrp $rD,${disp21} */
232 
233 static SEM_PC
234 SEM_FN_NAME (or1k32bf,l_adrp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
235 {
236 #define FLD(f) abuf->fields.sfmt_l_adrp.f
237   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
238   int UNUSED written = 0;
239   IADDR UNUSED pc = abuf->addr;
240   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
241 
242   {
243     USI opval = FLD (i_disp21);
244     SET_H_GPR (FLD (f_r1), opval);
245     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
246   }
247 
248   return vpc;
249 #undef FLD
250 }
251 
252 /* l-jal: l.jal ${disp26} */
253 
254 static SEM_PC
255 SEM_FN_NAME (or1k32bf,l_jal) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
256 {
257 #define FLD(f) abuf->fields.sfmt_l_j.f
258   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
259   int UNUSED written = 0;
260   IADDR UNUSED pc = abuf->addr;
261   SEM_BRANCH_INIT
262   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
263 
264 {
265   {
266     USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
267     SET_H_GPR (((UINT) 9), opval);
268     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
269   }
270 {
271 {
272   {
273     USI opval = FLD (i_disp26);
274     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
275     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
276   }
277 }
278 if (GET_H_SYS_CPUCFGR_ND ()) {
279 if (1)
280   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
281 }
282 }
283 }
284 
285   SEM_BRANCH_FINI (vpc);
286   return vpc;
287 #undef FLD
288 }
289 
290 /* l-jr: l.jr $rB */
291 
292 static SEM_PC
293 SEM_FN_NAME (or1k32bf,l_jr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
294 {
295 #define FLD(f) abuf->fields.sfmt_l_sll.f
296   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
297   int UNUSED written = 0;
298   IADDR UNUSED pc = abuf->addr;
299   SEM_BRANCH_INIT
300   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
301 
302 {
303 {
304   {
305     USI opval = GET_H_GPR (FLD (f_r3));
306     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
307     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
308   }
309 }
310 if (GET_H_SYS_CPUCFGR_ND ()) {
311 if (1)
312   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
313 }
314 }
315 
316   SEM_BRANCH_FINI (vpc);
317   return vpc;
318 #undef FLD
319 }
320 
321 /* l-jalr: l.jalr $rB */
322 
323 static SEM_PC
324 SEM_FN_NAME (or1k32bf,l_jalr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
325 {
326 #define FLD(f) abuf->fields.sfmt_l_sll.f
327   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
328   int UNUSED written = 0;
329   IADDR UNUSED pc = abuf->addr;
330   SEM_BRANCH_INIT
331   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
332 
333 {
334   {
335     USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
336     SET_H_GPR (((UINT) 9), opval);
337     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
338   }
339 {
340 {
341   {
342     USI opval = GET_H_GPR (FLD (f_r3));
343     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
344     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
345   }
346 }
347 if (GET_H_SYS_CPUCFGR_ND ()) {
348 if (1)
349   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
350 }
351 }
352 }
353 
354   SEM_BRANCH_FINI (vpc);
355   return vpc;
356 #undef FLD
357 }
358 
359 /* l-bnf: l.bnf ${disp26} */
360 
361 static SEM_PC
362 SEM_FN_NAME (or1k32bf,l_bnf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
363 {
364 #define FLD(f) abuf->fields.sfmt_l_j.f
365   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
366   int UNUSED written = 0;
367   IADDR UNUSED pc = abuf->addr;
368   SEM_BRANCH_INIT
369   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
370 
371 {
372 if (NOTSI (GET_H_SYS_SR_F ())) {
373 {
374   {
375     USI opval = FLD (i_disp26);
376     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
377     written |= (1 << 4);
378     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
379   }
380 }
381 } else {
382 if (GET_H_SYS_CPUCFGR_ND ()) {
383 {
384   {
385     USI opval = ADDSI (pc, 4);
386     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
387     written |= (1 << 4);
388     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
389   }
390 }
391 }
392 }
393 if (GET_H_SYS_CPUCFGR_ND ()) {
394 if (1)
395   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
396 }
397 }
398 
399   abuf->written = written;
400   SEM_BRANCH_FINI (vpc);
401   return vpc;
402 #undef FLD
403 }
404 
405 /* l-bf: l.bf ${disp26} */
406 
407 static SEM_PC
408 SEM_FN_NAME (or1k32bf,l_bf) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
409 {
410 #define FLD(f) abuf->fields.sfmt_l_j.f
411   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
412   int UNUSED written = 0;
413   IADDR UNUSED pc = abuf->addr;
414   SEM_BRANCH_INIT
415   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
416 
417 {
418 if (GET_H_SYS_SR_F ()) {
419 {
420   {
421     USI opval = FLD (i_disp26);
422     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
423     written |= (1 << 4);
424     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
425   }
426 }
427 } else {
428 if (GET_H_SYS_CPUCFGR_ND ()) {
429 {
430   {
431     USI opval = ADDSI (pc, 4);
432     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
433     written |= (1 << 4);
434     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
435   }
436 }
437 }
438 }
439 if (GET_H_SYS_CPUCFGR_ND ()) {
440 if (1)
441   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
442 }
443 }
444 
445   abuf->written = written;
446   SEM_BRANCH_FINI (vpc);
447   return vpc;
448 #undef FLD
449 }
450 
451 /* l-trap: l.trap ${uimm16} */
452 
453 static SEM_PC
454 SEM_FN_NAME (or1k32bf,l_trap) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
455 {
456 #define FLD(f) abuf->fields.sfmt_empty.f
457   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
458   int UNUSED written = 0;
459   IADDR UNUSED pc = abuf->addr;
460   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
461 
462 or1k32bf_exception (current_cpu, pc, EXCEPT_TRAP);
463 
464   return vpc;
465 #undef FLD
466 }
467 
468 /* l-sys: l.sys ${uimm16} */
469 
470 static SEM_PC
471 SEM_FN_NAME (or1k32bf,l_sys) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
472 {
473 #define FLD(f) abuf->fields.sfmt_empty.f
474   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
475   int UNUSED written = 0;
476   IADDR UNUSED pc = abuf->addr;
477   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
478 
479 or1k32bf_exception (current_cpu, pc, EXCEPT_SYSCALL);
480 
481   return vpc;
482 #undef FLD
483 }
484 
485 /* l-msync: l.msync */
486 
487 static SEM_PC
488 SEM_FN_NAME (or1k32bf,l_msync) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
489 {
490 #define FLD(f) abuf->fields.sfmt_empty.f
491   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
492   int UNUSED written = 0;
493   IADDR UNUSED pc = abuf->addr;
494   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
495 
496 ((void) 0); /*nop*/
497 
498   return vpc;
499 #undef FLD
500 }
501 
502 /* l-psync: l.psync */
503 
504 static SEM_PC
505 SEM_FN_NAME (or1k32bf,l_psync) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
506 {
507 #define FLD(f) abuf->fields.sfmt_empty.f
508   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
509   int UNUSED written = 0;
510   IADDR UNUSED pc = abuf->addr;
511   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
512 
513 ((void) 0); /*nop*/
514 
515   return vpc;
516 #undef FLD
517 }
518 
519 /* l-csync: l.csync */
520 
521 static SEM_PC
522 SEM_FN_NAME (or1k32bf,l_csync) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
523 {
524 #define FLD(f) abuf->fields.sfmt_empty.f
525   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
526   int UNUSED written = 0;
527   IADDR UNUSED pc = abuf->addr;
528   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
529 
530 ((void) 0); /*nop*/
531 
532   return vpc;
533 #undef FLD
534 }
535 
536 /* l-rfe: l.rfe */
537 
538 static SEM_PC
539 SEM_FN_NAME (or1k32bf,l_rfe) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
540 {
541 #define FLD(f) abuf->fields.sfmt_empty.f
542   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
543   int UNUSED written = 0;
544   IADDR UNUSED pc = abuf->addr;
545   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
546 
547 or1k32bf_rfe (current_cpu);
548 
549   return vpc;
550 #undef FLD
551 }
552 
553 /* l-nop-imm: l.nop ${uimm16} */
554 
555 static SEM_PC
556 SEM_FN_NAME (or1k32bf,l_nop_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
557 {
558 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
559   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
560   int UNUSED written = 0;
561   IADDR UNUSED pc = abuf->addr;
562   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
563 
564 or1k32bf_nop (current_cpu, ZEXTSISI (FLD (f_uimm16)));
565 
566   return vpc;
567 #undef FLD
568 }
569 
570 /* l-movhi: l.movhi $rD,$uimm16 */
571 
572 static SEM_PC
573 SEM_FN_NAME (or1k32bf,l_movhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
574 {
575 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
576   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
577   int UNUSED written = 0;
578   IADDR UNUSED pc = abuf->addr;
579   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
580 
581   {
582     USI opval = SLLSI (ZEXTSISI (FLD (f_uimm16)), 16);
583     SET_H_GPR (FLD (f_r1), opval);
584     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
585   }
586 
587   return vpc;
588 #undef FLD
589 }
590 
591 /* l-macrc: l.macrc $rD */
592 
593 static SEM_PC
594 SEM_FN_NAME (or1k32bf,l_macrc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
595 {
596 #define FLD(f) abuf->fields.sfmt_l_adrp.f
597   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
598   int UNUSED written = 0;
599   IADDR UNUSED pc = abuf->addr;
600   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
601 
602 {
603   {
604     USI opval = GET_H_MAC_MACLO ();
605     SET_H_GPR (FLD (f_r1), opval);
606     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
607   }
608   {
609     USI opval = 0;
610     SET_H_MAC_MACLO (opval);
611     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
612   }
613   {
614     USI opval = 0;
615     SET_H_MAC_MACHI (opval);
616     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
617   }
618 }
619 
620   return vpc;
621 #undef FLD
622 }
623 
624 /* l-mfspr: l.mfspr $rD,$rA,${uimm16} */
625 
626 static SEM_PC
627 SEM_FN_NAME (or1k32bf,l_mfspr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
628 {
629 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
630   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
631   int UNUSED written = 0;
632   IADDR UNUSED pc = abuf->addr;
633   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
634 
635   {
636     USI opval = or1k32bf_mfspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))));
637     SET_H_GPR (FLD (f_r1), opval);
638     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
639   }
640 
641   return vpc;
642 #undef FLD
643 }
644 
645 /* l-mtspr: l.mtspr $rA,$rB,${uimm16-split} */
646 
647 static SEM_PC
648 SEM_FN_NAME (or1k32bf,l_mtspr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
649 {
650 #define FLD(f) abuf->fields.sfmt_l_mtspr.f
651   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
652   int UNUSED written = 0;
653   IADDR UNUSED pc = abuf->addr;
654   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
655 
656 or1k32bf_mtspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16_split))), GET_H_GPR (FLD (f_r3)));
657 
658   return vpc;
659 #undef FLD
660 }
661 
662 /* l-lwz: l.lwz $rD,${simm16}($rA) */
663 
664 static SEM_PC
665 SEM_FN_NAME (or1k32bf,l_lwz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
666 {
667 #define FLD(f) abuf->fields.sfmt_l_lwz.f
668   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
669   int UNUSED written = 0;
670   IADDR UNUSED pc = abuf->addr;
671   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
672 
673   {
674     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)));
675     SET_H_GPR (FLD (f_r1), opval);
676     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
677   }
678 
679   return vpc;
680 #undef FLD
681 }
682 
683 /* l-lws: l.lws $rD,${simm16}($rA) */
684 
685 static SEM_PC
686 SEM_FN_NAME (or1k32bf,l_lws) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
687 {
688 #define FLD(f) abuf->fields.sfmt_l_lwz.f
689   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
690   int UNUSED written = 0;
691   IADDR UNUSED pc = abuf->addr;
692   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
693 
694   {
695     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)));
696     SET_H_GPR (FLD (f_r1), opval);
697     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
698   }
699 
700   return vpc;
701 #undef FLD
702 }
703 
704 /* l-lwa: l.lwa $rD,${simm16}($rA) */
705 
706 static SEM_PC
707 SEM_FN_NAME (or1k32bf,l_lwa) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
708 {
709 #define FLD(f) abuf->fields.sfmt_l_lwz.f
710   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
711   int UNUSED written = 0;
712   IADDR UNUSED pc = abuf->addr;
713   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
714 
715 {
716   {
717     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)));
718     SET_H_GPR (FLD (f_r1), opval);
719     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
720   }
721   {
722     BI opval = 1;
723     CPU (h_atomic_reserve) = opval;
724     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
725   }
726   {
727     SI opval = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4);
728     CPU (h_atomic_address) = opval;
729     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-address", 'x', opval);
730   }
731 }
732 
733   return vpc;
734 #undef FLD
735 }
736 
737 /* l-lbz: l.lbz $rD,${simm16}($rA) */
738 
739 static SEM_PC
740 SEM_FN_NAME (or1k32bf,l_lbz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
741 {
742 #define FLD(f) abuf->fields.sfmt_l_lwz.f
743   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
744   int UNUSED written = 0;
745   IADDR UNUSED pc = abuf->addr;
746   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
747 
748   {
749     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)));
750     SET_H_GPR (FLD (f_r1), opval);
751     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
752   }
753 
754   return vpc;
755 #undef FLD
756 }
757 
758 /* l-lbs: l.lbs $rD,${simm16}($rA) */
759 
760 static SEM_PC
761 SEM_FN_NAME (or1k32bf,l_lbs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
762 {
763 #define FLD(f) abuf->fields.sfmt_l_lwz.f
764   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
765   int UNUSED written = 0;
766   IADDR UNUSED pc = abuf->addr;
767   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
768 
769   {
770     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)));
771     SET_H_GPR (FLD (f_r1), opval);
772     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
773   }
774 
775   return vpc;
776 #undef FLD
777 }
778 
779 /* l-lhz: l.lhz $rD,${simm16}($rA) */
780 
781 static SEM_PC
782 SEM_FN_NAME (or1k32bf,l_lhz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
783 {
784 #define FLD(f) abuf->fields.sfmt_l_lwz.f
785   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
786   int UNUSED written = 0;
787   IADDR UNUSED pc = abuf->addr;
788   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
789 
790   {
791     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)));
792     SET_H_GPR (FLD (f_r1), opval);
793     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
794   }
795 
796   return vpc;
797 #undef FLD
798 }
799 
800 /* l-lhs: l.lhs $rD,${simm16}($rA) */
801 
802 static SEM_PC
803 SEM_FN_NAME (or1k32bf,l_lhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
804 {
805 #define FLD(f) abuf->fields.sfmt_l_lwz.f
806   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
807   int UNUSED written = 0;
808   IADDR UNUSED pc = abuf->addr;
809   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
810 
811   {
812     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)));
813     SET_H_GPR (FLD (f_r1), opval);
814     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
815   }
816 
817   return vpc;
818 #undef FLD
819 }
820 
821 /* l-sw: l.sw ${simm16-split}($rA),$rB */
822 
823 static SEM_PC
824 SEM_FN_NAME (or1k32bf,l_sw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
825 {
826 #define FLD(f) abuf->fields.sfmt_l_sw.f
827   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
828   int UNUSED written = 0;
829   IADDR UNUSED pc = abuf->addr;
830   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
831 
832 {
833   SI tmp_addr;
834   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
835   {
836     USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
837     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
838     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
839   }
840 if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
841   {
842     BI opval = 0;
843     CPU (h_atomic_reserve) = opval;
844     written |= (1 << 4);
845     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
846   }
847 }
848 }
849 
850   abuf->written = written;
851   return vpc;
852 #undef FLD
853 }
854 
855 /* l-sb: l.sb ${simm16-split}($rA),$rB */
856 
857 static SEM_PC
858 SEM_FN_NAME (or1k32bf,l_sb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
859 {
860 #define FLD(f) abuf->fields.sfmt_l_sw.f
861   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
862   int UNUSED written = 0;
863   IADDR UNUSED pc = abuf->addr;
864   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
865 
866 {
867   SI tmp_addr;
868   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 1);
869   {
870     UQI opval = TRUNCSIQI (GET_H_GPR (FLD (f_r3)));
871     SETMEMUQI (current_cpu, pc, tmp_addr, opval);
872     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
873   }
874 if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
875   {
876     BI opval = 0;
877     CPU (h_atomic_reserve) = opval;
878     written |= (1 << 4);
879     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
880   }
881 }
882 }
883 
884   abuf->written = written;
885   return vpc;
886 #undef FLD
887 }
888 
889 /* l-sh: l.sh ${simm16-split}($rA),$rB */
890 
891 static SEM_PC
892 SEM_FN_NAME (or1k32bf,l_sh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
893 {
894 #define FLD(f) abuf->fields.sfmt_l_sw.f
895   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
896   int UNUSED written = 0;
897   IADDR UNUSED pc = abuf->addr;
898   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
899 
900 {
901   SI tmp_addr;
902   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 2);
903   {
904     UHI opval = TRUNCSIHI (GET_H_GPR (FLD (f_r3)));
905     SETMEMUHI (current_cpu, pc, tmp_addr, opval);
906     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
907   }
908 if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
909   {
910     BI opval = 0;
911     CPU (h_atomic_reserve) = opval;
912     written |= (1 << 4);
913     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
914   }
915 }
916 }
917 
918   abuf->written = written;
919   return vpc;
920 #undef FLD
921 }
922 
923 /* l-swa: l.swa ${simm16-split}($rA),$rB */
924 
925 static SEM_PC
926 SEM_FN_NAME (or1k32bf,l_swa) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
927 {
928 #define FLD(f) abuf->fields.sfmt_l_sw.f
929   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
930   int UNUSED written = 0;
931   IADDR UNUSED pc = abuf->addr;
932   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
933 
934 {
935   SI tmp_addr;
936   tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
937   {
938     USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
939     SET_H_SYS_SR_F (opval);
940     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
941   }
942 if (GET_H_SYS_SR_F ()) {
943   {
944     USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
945     SETMEMUSI (current_cpu, pc, tmp_addr, opval);
946     written |= (1 << 7);
947     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
948   }
949 }
950   {
951     BI opval = 0;
952     CPU (h_atomic_reserve) = opval;
953     CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
954   }
955 }
956 
957   abuf->written = written;
958   return vpc;
959 #undef FLD
960 }
961 
962 /* l-sll: l.sll $rD,$rA,$rB */
963 
964 static SEM_PC
965 SEM_FN_NAME (or1k32bf,l_sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
966 {
967 #define FLD(f) abuf->fields.sfmt_l_sll.f
968   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
969   int UNUSED written = 0;
970   IADDR UNUSED pc = abuf->addr;
971   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
972 
973   {
974     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
975     SET_H_GPR (FLD (f_r1), opval);
976     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
977   }
978 
979   return vpc;
980 #undef FLD
981 }
982 
983 /* l-slli: l.slli $rD,$rA,${uimm6} */
984 
985 static SEM_PC
986 SEM_FN_NAME (or1k32bf,l_slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
987 {
988 #define FLD(f) abuf->fields.sfmt_l_slli.f
989   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
990   int UNUSED written = 0;
991   IADDR UNUSED pc = abuf->addr;
992   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
993 
994   {
995     USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
996     SET_H_GPR (FLD (f_r1), opval);
997     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
998   }
999 
1000   return vpc;
1001 #undef FLD
1002 }
1003 
1004 /* l-srl: l.srl $rD,$rA,$rB */
1005 
1006 static SEM_PC
1007 SEM_FN_NAME (or1k32bf,l_srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1008 {
1009 #define FLD(f) abuf->fields.sfmt_l_sll.f
1010   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1011   int UNUSED written = 0;
1012   IADDR UNUSED pc = abuf->addr;
1013   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1014 
1015   {
1016     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1017     SET_H_GPR (FLD (f_r1), opval);
1018     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1019   }
1020 
1021   return vpc;
1022 #undef FLD
1023 }
1024 
1025 /* l-srli: l.srli $rD,$rA,${uimm6} */
1026 
1027 static SEM_PC
1028 SEM_FN_NAME (or1k32bf,l_srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1029 {
1030 #define FLD(f) abuf->fields.sfmt_l_slli.f
1031   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1032   int UNUSED written = 0;
1033   IADDR UNUSED pc = abuf->addr;
1034   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1035 
1036   {
1037     USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1038     SET_H_GPR (FLD (f_r1), opval);
1039     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1040   }
1041 
1042   return vpc;
1043 #undef FLD
1044 }
1045 
1046 /* l-sra: l.sra $rD,$rA,$rB */
1047 
1048 static SEM_PC
1049 SEM_FN_NAME (or1k32bf,l_sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1050 {
1051 #define FLD(f) abuf->fields.sfmt_l_sll.f
1052   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1053   int UNUSED written = 0;
1054   IADDR UNUSED pc = abuf->addr;
1055   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1056 
1057   {
1058     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1059     SET_H_GPR (FLD (f_r1), opval);
1060     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1061   }
1062 
1063   return vpc;
1064 #undef FLD
1065 }
1066 
1067 /* l-srai: l.srai $rD,$rA,${uimm6} */
1068 
1069 static SEM_PC
1070 SEM_FN_NAME (or1k32bf,l_srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1071 {
1072 #define FLD(f) abuf->fields.sfmt_l_slli.f
1073   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1074   int UNUSED written = 0;
1075   IADDR UNUSED pc = abuf->addr;
1076   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1077 
1078   {
1079     USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1080     SET_H_GPR (FLD (f_r1), opval);
1081     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1082   }
1083 
1084   return vpc;
1085 #undef FLD
1086 }
1087 
1088 /* l-ror: l.ror $rD,$rA,$rB */
1089 
1090 static SEM_PC
1091 SEM_FN_NAME (or1k32bf,l_ror) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1092 {
1093 #define FLD(f) abuf->fields.sfmt_l_sll.f
1094   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1095   int UNUSED written = 0;
1096   IADDR UNUSED pc = abuf->addr;
1097   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1098 
1099   {
1100     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1101     SET_H_GPR (FLD (f_r1), opval);
1102     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1103   }
1104 
1105   return vpc;
1106 #undef FLD
1107 }
1108 
1109 /* l-rori: l.rori $rD,$rA,${uimm6} */
1110 
1111 static SEM_PC
1112 SEM_FN_NAME (or1k32bf,l_rori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1113 {
1114 #define FLD(f) abuf->fields.sfmt_l_slli.f
1115   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1116   int UNUSED written = 0;
1117   IADDR UNUSED pc = abuf->addr;
1118   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1119 
1120   {
1121     USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1122     SET_H_GPR (FLD (f_r1), opval);
1123     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1124   }
1125 
1126   return vpc;
1127 #undef FLD
1128 }
1129 
1130 /* l-and: l.and $rD,$rA,$rB */
1131 
1132 static SEM_PC
1133 SEM_FN_NAME (or1k32bf,l_and) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1134 {
1135 #define FLD(f) abuf->fields.sfmt_l_sll.f
1136   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1137   int UNUSED written = 0;
1138   IADDR UNUSED pc = abuf->addr;
1139   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1140 
1141   {
1142     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1143     SET_H_GPR (FLD (f_r1), opval);
1144     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1145   }
1146 
1147   return vpc;
1148 #undef FLD
1149 }
1150 
1151 /* l-or: l.or $rD,$rA,$rB */
1152 
1153 static SEM_PC
1154 SEM_FN_NAME (or1k32bf,l_or) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1155 {
1156 #define FLD(f) abuf->fields.sfmt_l_sll.f
1157   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1158   int UNUSED written = 0;
1159   IADDR UNUSED pc = abuf->addr;
1160   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1161 
1162   {
1163     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1164     SET_H_GPR (FLD (f_r1), opval);
1165     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1166   }
1167 
1168   return vpc;
1169 #undef FLD
1170 }
1171 
1172 /* l-xor: l.xor $rD,$rA,$rB */
1173 
1174 static SEM_PC
1175 SEM_FN_NAME (or1k32bf,l_xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1176 {
1177 #define FLD(f) abuf->fields.sfmt_l_sll.f
1178   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1179   int UNUSED written = 0;
1180   IADDR UNUSED pc = abuf->addr;
1181   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1182 
1183   {
1184     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1185     SET_H_GPR (FLD (f_r1), opval);
1186     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1187   }
1188 
1189   return vpc;
1190 #undef FLD
1191 }
1192 
1193 /* l-add: l.add $rD,$rA,$rB */
1194 
1195 static SEM_PC
1196 SEM_FN_NAME (or1k32bf,l_add) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1197 {
1198 #define FLD(f) abuf->fields.sfmt_l_sll.f
1199   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1200   int UNUSED written = 0;
1201   IADDR UNUSED pc = abuf->addr;
1202   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1203 
1204 {
1205 {
1206   {
1207     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1208     SET_H_SYS_SR_CY (opval);
1209     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1210   }
1211   {
1212     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1213     SET_H_SYS_SR_OV (opval);
1214     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1215   }
1216   {
1217     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1218     SET_H_GPR (FLD (f_r1), opval);
1219     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1220   }
1221 }
1222 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1223 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1224 }
1225 }
1226 
1227   return vpc;
1228 #undef FLD
1229 }
1230 
1231 /* l-sub: l.sub $rD,$rA,$rB */
1232 
1233 static SEM_PC
1234 SEM_FN_NAME (or1k32bf,l_sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1235 {
1236 #define FLD(f) abuf->fields.sfmt_l_sll.f
1237   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1238   int UNUSED written = 0;
1239   IADDR UNUSED pc = abuf->addr;
1240   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1241 
1242 {
1243 {
1244   {
1245     BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1246     SET_H_SYS_SR_CY (opval);
1247     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1248   }
1249   {
1250     BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1251     SET_H_SYS_SR_OV (opval);
1252     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1253   }
1254   {
1255     USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1256     SET_H_GPR (FLD (f_r1), opval);
1257     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1258   }
1259 }
1260 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1261 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1262 }
1263 }
1264 
1265   return vpc;
1266 #undef FLD
1267 }
1268 
1269 /* l-addc: l.addc $rD,$rA,$rB */
1270 
1271 static SEM_PC
1272 SEM_FN_NAME (or1k32bf,l_addc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1273 {
1274 #define FLD(f) abuf->fields.sfmt_l_sll.f
1275   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1276   int UNUSED written = 0;
1277   IADDR UNUSED pc = abuf->addr;
1278   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1279 
1280 {
1281 {
1282   BI tmp_tmp_sys_sr_cy;
1283   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1284   {
1285     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1286     SET_H_SYS_SR_CY (opval);
1287     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1288   }
1289   {
1290     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1291     SET_H_SYS_SR_OV (opval);
1292     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1293   }
1294   {
1295     USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1296     SET_H_GPR (FLD (f_r1), opval);
1297     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1298   }
1299 }
1300 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1301 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1302 }
1303 }
1304 
1305   return vpc;
1306 #undef FLD
1307 }
1308 
1309 /* l-mul: l.mul $rD,$rA,$rB */
1310 
1311 static SEM_PC
1312 SEM_FN_NAME (or1k32bf,l_mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1313 {
1314 #define FLD(f) abuf->fields.sfmt_l_sll.f
1315   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1316   int UNUSED written = 0;
1317   IADDR UNUSED pc = abuf->addr;
1318   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1319 
1320 {
1321 {
1322   {
1323     BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1324     SET_H_SYS_SR_OV (opval);
1325     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1326   }
1327   {
1328     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1329     SET_H_GPR (FLD (f_r1), opval);
1330     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1331   }
1332 }
1333 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1334 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1335 }
1336 }
1337 
1338   return vpc;
1339 #undef FLD
1340 }
1341 
1342 /* l-muld: l.muld $rA,$rB */
1343 
1344 static SEM_PC
1345 SEM_FN_NAME (or1k32bf,l_muld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1346 {
1347 #define FLD(f) abuf->fields.sfmt_l_sll.f
1348   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1349   int UNUSED written = 0;
1350   IADDR UNUSED pc = abuf->addr;
1351   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1352 
1353 {
1354   DI tmp_result;
1355   tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
1356   {
1357     SI opval = SUBWORDDISI (tmp_result, 0);
1358     SET_H_MAC_MACHI (opval);
1359     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
1360   }
1361   {
1362     SI opval = SUBWORDDISI (tmp_result, 1);
1363     SET_H_MAC_MACLO (opval);
1364     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
1365   }
1366 }
1367 
1368   return vpc;
1369 #undef FLD
1370 }
1371 
1372 /* l-mulu: l.mulu $rD,$rA,$rB */
1373 
1374 static SEM_PC
1375 SEM_FN_NAME (or1k32bf,l_mulu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1376 {
1377 #define FLD(f) abuf->fields.sfmt_l_sll.f
1378   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1379   int UNUSED written = 0;
1380   IADDR UNUSED pc = abuf->addr;
1381   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1382 
1383 {
1384 {
1385   {
1386     BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1387     SET_H_SYS_SR_CY (opval);
1388     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1389   }
1390   {
1391     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1392     SET_H_GPR (FLD (f_r1), opval);
1393     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1394   }
1395 }
1396 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
1397 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1398 }
1399 }
1400 
1401   return vpc;
1402 #undef FLD
1403 }
1404 
1405 /* l-muldu: l.muldu $rA,$rB */
1406 
1407 static SEM_PC
1408 SEM_FN_NAME (or1k32bf,l_muldu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1409 {
1410 #define FLD(f) abuf->fields.sfmt_l_sll.f
1411   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1412   int UNUSED written = 0;
1413   IADDR UNUSED pc = abuf->addr;
1414   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1415 
1416 {
1417   DI tmp_result;
1418   tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (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   return vpc;
1432 #undef FLD
1433 }
1434 
1435 /* l-div: l.div $rD,$rA,$rB */
1436 
1437 static SEM_PC
1438 SEM_FN_NAME (or1k32bf,l_div) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1439 {
1440 #define FLD(f) abuf->fields.sfmt_l_sll.f
1441   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1442   int UNUSED written = 0;
1443   IADDR UNUSED pc = abuf->addr;
1444   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1445 
1446 if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1447 {
1448   {
1449     BI opval = 0;
1450     SET_H_SYS_SR_OV (opval);
1451     written |= (1 << 5);
1452     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1453   }
1454   {
1455     SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1456     SET_H_GPR (FLD (f_r1), opval);
1457     written |= (1 << 4);
1458     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1459   }
1460 }
1461 } else {
1462 {
1463   {
1464     BI opval = 1;
1465     SET_H_SYS_SR_OV (opval);
1466     written |= (1 << 5);
1467     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1468   }
1469 if (GET_H_SYS_SR_OVE ()) {
1470 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1471 }
1472 }
1473 }
1474 
1475   abuf->written = written;
1476   return vpc;
1477 #undef FLD
1478 }
1479 
1480 /* l-divu: l.divu $rD,$rA,$rB */
1481 
1482 static SEM_PC
1483 SEM_FN_NAME (or1k32bf,l_divu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1484 {
1485 #define FLD(f) abuf->fields.sfmt_l_sll.f
1486   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1487   int UNUSED written = 0;
1488   IADDR UNUSED pc = abuf->addr;
1489   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1490 
1491 if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1492 {
1493   {
1494     BI opval = 0;
1495     SET_H_SYS_SR_CY (opval);
1496     written |= (1 << 5);
1497     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1498   }
1499   {
1500     USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1501     SET_H_GPR (FLD (f_r1), opval);
1502     written |= (1 << 4);
1503     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1504   }
1505 }
1506 } else {
1507 {
1508   {
1509     BI opval = 1;
1510     SET_H_SYS_SR_CY (opval);
1511     written |= (1 << 5);
1512     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1513   }
1514 if (GET_H_SYS_SR_OVE ()) {
1515 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1516 }
1517 }
1518 }
1519 
1520   abuf->written = written;
1521   return vpc;
1522 #undef FLD
1523 }
1524 
1525 /* l-ff1: l.ff1 $rD,$rA */
1526 
1527 static SEM_PC
1528 SEM_FN_NAME (or1k32bf,l_ff1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1529 {
1530 #define FLD(f) abuf->fields.sfmt_l_slli.f
1531   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1532   int UNUSED written = 0;
1533   IADDR UNUSED pc = abuf->addr;
1534   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1535 
1536   {
1537     USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1538     SET_H_GPR (FLD (f_r1), opval);
1539     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1540   }
1541 
1542   return vpc;
1543 #undef FLD
1544 }
1545 
1546 /* l-fl1: l.fl1 $rD,$rA */
1547 
1548 static SEM_PC
1549 SEM_FN_NAME (or1k32bf,l_fl1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1550 {
1551 #define FLD(f) abuf->fields.sfmt_l_slli.f
1552   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1553   int UNUSED written = 0;
1554   IADDR UNUSED pc = abuf->addr;
1555   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1556 
1557   {
1558     USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1559     SET_H_GPR (FLD (f_r1), opval);
1560     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1561   }
1562 
1563   return vpc;
1564 #undef FLD
1565 }
1566 
1567 /* l-andi: l.andi $rD,$rA,$uimm16 */
1568 
1569 static SEM_PC
1570 SEM_FN_NAME (or1k32bf,l_andi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1571 {
1572 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1573   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1574   int UNUSED written = 0;
1575   IADDR UNUSED pc = abuf->addr;
1576   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1577 
1578   {
1579     USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1580     SET_H_GPR (FLD (f_r1), opval);
1581     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1582   }
1583 
1584   return vpc;
1585 #undef FLD
1586 }
1587 
1588 /* l-ori: l.ori $rD,$rA,$uimm16 */
1589 
1590 static SEM_PC
1591 SEM_FN_NAME (or1k32bf,l_ori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1592 {
1593 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1594   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1595   int UNUSED written = 0;
1596   IADDR UNUSED pc = abuf->addr;
1597   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1598 
1599   {
1600     USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1601     SET_H_GPR (FLD (f_r1), opval);
1602     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1603   }
1604 
1605   return vpc;
1606 #undef FLD
1607 }
1608 
1609 /* l-xori: l.xori $rD,$rA,$simm16 */
1610 
1611 static SEM_PC
1612 SEM_FN_NAME (or1k32bf,l_xori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1613 {
1614 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1615   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1616   int UNUSED written = 0;
1617   IADDR UNUSED pc = abuf->addr;
1618   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1619 
1620   {
1621     USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1622     SET_H_GPR (FLD (f_r1), opval);
1623     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1624   }
1625 
1626   return vpc;
1627 #undef FLD
1628 }
1629 
1630 /* l-addi: l.addi $rD,$rA,$simm16 */
1631 
1632 static SEM_PC
1633 SEM_FN_NAME (or1k32bf,l_addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1634 {
1635 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1636   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1637   int UNUSED written = 0;
1638   IADDR UNUSED pc = abuf->addr;
1639   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1640 
1641 {
1642 {
1643   {
1644     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1645     SET_H_SYS_SR_CY (opval);
1646     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1647   }
1648   {
1649     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1650     SET_H_SYS_SR_OV (opval);
1651     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1652   }
1653   {
1654     USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1655     SET_H_GPR (FLD (f_r1), opval);
1656     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1657   }
1658 }
1659 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1660 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1661 }
1662 }
1663 
1664   return vpc;
1665 #undef FLD
1666 }
1667 
1668 /* l-addic: l.addic $rD,$rA,$simm16 */
1669 
1670 static SEM_PC
1671 SEM_FN_NAME (or1k32bf,l_addic) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1672 {
1673 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1674   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1675   int UNUSED written = 0;
1676   IADDR UNUSED pc = abuf->addr;
1677   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1678 
1679 {
1680 {
1681   BI tmp_tmp_sys_sr_cy;
1682   tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1683   {
1684     BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1685     SET_H_SYS_SR_CY (opval);
1686     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1687   }
1688   {
1689     BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1690     SET_H_SYS_SR_OV (opval);
1691     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1692   }
1693   {
1694     SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1695     SET_H_GPR (FLD (f_r1), opval);
1696     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1697   }
1698 }
1699 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1700 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1701 }
1702 }
1703 
1704   return vpc;
1705 #undef FLD
1706 }
1707 
1708 /* l-muli: l.muli $rD,$rA,$simm16 */
1709 
1710 static SEM_PC
1711 SEM_FN_NAME (or1k32bf,l_muli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1712 {
1713 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1714   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1715   int UNUSED written = 0;
1716   IADDR UNUSED pc = abuf->addr;
1717   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1718 
1719 {
1720 {
1721   {
1722     USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1723     SET_H_SYS_SR_OV (opval);
1724     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1725   }
1726   {
1727     USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1728     SET_H_GPR (FLD (f_r1), opval);
1729     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1730   }
1731 }
1732 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1733 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1734 }
1735 }
1736 
1737   return vpc;
1738 #undef FLD
1739 }
1740 
1741 /* l-exths: l.exths $rD,$rA */
1742 
1743 static SEM_PC
1744 SEM_FN_NAME (or1k32bf,l_exths) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1745 {
1746 #define FLD(f) abuf->fields.sfmt_l_slli.f
1747   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1748   int UNUSED written = 0;
1749   IADDR UNUSED pc = abuf->addr;
1750   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1751 
1752   {
1753     USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1754     SET_H_GPR (FLD (f_r1), opval);
1755     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1756   }
1757 
1758   return vpc;
1759 #undef FLD
1760 }
1761 
1762 /* l-extbs: l.extbs $rD,$rA */
1763 
1764 static SEM_PC
1765 SEM_FN_NAME (or1k32bf,l_extbs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1766 {
1767 #define FLD(f) abuf->fields.sfmt_l_slli.f
1768   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1769   int UNUSED written = 0;
1770   IADDR UNUSED pc = abuf->addr;
1771   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1772 
1773   {
1774     USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1775     SET_H_GPR (FLD (f_r1), opval);
1776     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1777   }
1778 
1779   return vpc;
1780 #undef FLD
1781 }
1782 
1783 /* l-exthz: l.exthz $rD,$rA */
1784 
1785 static SEM_PC
1786 SEM_FN_NAME (or1k32bf,l_exthz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1787 {
1788 #define FLD(f) abuf->fields.sfmt_l_slli.f
1789   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1790   int UNUSED written = 0;
1791   IADDR UNUSED pc = abuf->addr;
1792   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1793 
1794   {
1795     USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1796     SET_H_GPR (FLD (f_r1), opval);
1797     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1798   }
1799 
1800   return vpc;
1801 #undef FLD
1802 }
1803 
1804 /* l-extbz: l.extbz $rD,$rA */
1805 
1806 static SEM_PC
1807 SEM_FN_NAME (or1k32bf,l_extbz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1808 {
1809 #define FLD(f) abuf->fields.sfmt_l_slli.f
1810   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1811   int UNUSED written = 0;
1812   IADDR UNUSED pc = abuf->addr;
1813   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1814 
1815   {
1816     USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1817     SET_H_GPR (FLD (f_r1), opval);
1818     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1819   }
1820 
1821   return vpc;
1822 #undef FLD
1823 }
1824 
1825 /* l-extws: l.extws $rD,$rA */
1826 
1827 static SEM_PC
1828 SEM_FN_NAME (or1k32bf,l_extws) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1829 {
1830 #define FLD(f) abuf->fields.sfmt_l_slli.f
1831   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1832   int UNUSED written = 0;
1833   IADDR UNUSED pc = abuf->addr;
1834   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1835 
1836   {
1837     USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1838     SET_H_GPR (FLD (f_r1), opval);
1839     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1840   }
1841 
1842   return vpc;
1843 #undef FLD
1844 }
1845 
1846 /* l-extwz: l.extwz $rD,$rA */
1847 
1848 static SEM_PC
1849 SEM_FN_NAME (or1k32bf,l_extwz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1850 {
1851 #define FLD(f) abuf->fields.sfmt_l_slli.f
1852   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1853   int UNUSED written = 0;
1854   IADDR UNUSED pc = abuf->addr;
1855   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1856 
1857   {
1858     USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1859     SET_H_GPR (FLD (f_r1), opval);
1860     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1861   }
1862 
1863   return vpc;
1864 #undef FLD
1865 }
1866 
1867 /* l-cmov: l.cmov $rD,$rA,$rB */
1868 
1869 static SEM_PC
1870 SEM_FN_NAME (or1k32bf,l_cmov) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1871 {
1872 #define FLD(f) abuf->fields.sfmt_l_sll.f
1873   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1874   int UNUSED written = 0;
1875   IADDR UNUSED pc = abuf->addr;
1876   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1877 
1878 if (GET_H_SYS_SR_F ()) {
1879   {
1880     USI opval = GET_H_GPR (FLD (f_r2));
1881     SET_H_GPR (FLD (f_r1), opval);
1882     written |= (1 << 3);
1883     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1884   }
1885 } else {
1886   {
1887     USI opval = GET_H_GPR (FLD (f_r3));
1888     SET_H_GPR (FLD (f_r1), opval);
1889     written |= (1 << 3);
1890     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1891   }
1892 }
1893 
1894   abuf->written = written;
1895   return vpc;
1896 #undef FLD
1897 }
1898 
1899 /* l-sfgts: l.sfgts $rA,$rB */
1900 
1901 static SEM_PC
1902 SEM_FN_NAME (or1k32bf,l_sfgts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1903 {
1904 #define FLD(f) abuf->fields.sfmt_l_sll.f
1905   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1906   int UNUSED written = 0;
1907   IADDR UNUSED pc = abuf->addr;
1908   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1909 
1910   {
1911     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1912     SET_H_SYS_SR_F (opval);
1913     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1914   }
1915 
1916   return vpc;
1917 #undef FLD
1918 }
1919 
1920 /* l-sfgtsi: l.sfgtsi $rA,$simm16 */
1921 
1922 static SEM_PC
1923 SEM_FN_NAME (or1k32bf,l_sfgtsi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1924 {
1925 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1926   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1927   int UNUSED written = 0;
1928   IADDR UNUSED pc = abuf->addr;
1929   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1930 
1931   {
1932     USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1933     SET_H_SYS_SR_F (opval);
1934     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1935   }
1936 
1937   return vpc;
1938 #undef FLD
1939 }
1940 
1941 /* l-sfgtu: l.sfgtu $rA,$rB */
1942 
1943 static SEM_PC
1944 SEM_FN_NAME (or1k32bf,l_sfgtu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1945 {
1946 #define FLD(f) abuf->fields.sfmt_l_sll.f
1947   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1948   int UNUSED written = 0;
1949   IADDR UNUSED pc = abuf->addr;
1950   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1951 
1952   {
1953     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1954     SET_H_SYS_SR_F (opval);
1955     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1956   }
1957 
1958   return vpc;
1959 #undef FLD
1960 }
1961 
1962 /* l-sfgtui: l.sfgtui $rA,$simm16 */
1963 
1964 static SEM_PC
1965 SEM_FN_NAME (or1k32bf,l_sfgtui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1966 {
1967 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1968   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1969   int UNUSED written = 0;
1970   IADDR UNUSED pc = abuf->addr;
1971   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1972 
1973   {
1974     USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1975     SET_H_SYS_SR_F (opval);
1976     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1977   }
1978 
1979   return vpc;
1980 #undef FLD
1981 }
1982 
1983 /* l-sfges: l.sfges $rA,$rB */
1984 
1985 static SEM_PC
1986 SEM_FN_NAME (or1k32bf,l_sfges) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1987 {
1988 #define FLD(f) abuf->fields.sfmt_l_sll.f
1989   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1990   int UNUSED written = 0;
1991   IADDR UNUSED pc = abuf->addr;
1992   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1993 
1994   {
1995     USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1996     SET_H_SYS_SR_F (opval);
1997     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1998   }
1999 
2000   return vpc;
2001 #undef FLD
2002 }
2003 
2004 /* l-sfgesi: l.sfgesi $rA,$simm16 */
2005 
2006 static SEM_PC
2007 SEM_FN_NAME (or1k32bf,l_sfgesi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2008 {
2009 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2010   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2011   int UNUSED written = 0;
2012   IADDR UNUSED pc = abuf->addr;
2013   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2014 
2015   {
2016     USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2017     SET_H_SYS_SR_F (opval);
2018     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2019   }
2020 
2021   return vpc;
2022 #undef FLD
2023 }
2024 
2025 /* l-sfgeu: l.sfgeu $rA,$rB */
2026 
2027 static SEM_PC
2028 SEM_FN_NAME (or1k32bf,l_sfgeu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2029 {
2030 #define FLD(f) abuf->fields.sfmt_l_sll.f
2031   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2032   int UNUSED written = 0;
2033   IADDR UNUSED pc = abuf->addr;
2034   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2035 
2036   {
2037     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2038     SET_H_SYS_SR_F (opval);
2039     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2040   }
2041 
2042   return vpc;
2043 #undef FLD
2044 }
2045 
2046 /* l-sfgeui: l.sfgeui $rA,$simm16 */
2047 
2048 static SEM_PC
2049 SEM_FN_NAME (or1k32bf,l_sfgeui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2050 {
2051 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2052   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2053   int UNUSED written = 0;
2054   IADDR UNUSED pc = abuf->addr;
2055   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2056 
2057   {
2058     USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2059     SET_H_SYS_SR_F (opval);
2060     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2061   }
2062 
2063   return vpc;
2064 #undef FLD
2065 }
2066 
2067 /* l-sflts: l.sflts $rA,$rB */
2068 
2069 static SEM_PC
2070 SEM_FN_NAME (or1k32bf,l_sflts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2071 {
2072 #define FLD(f) abuf->fields.sfmt_l_sll.f
2073   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2074   int UNUSED written = 0;
2075   IADDR UNUSED pc = abuf->addr;
2076   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2077 
2078   {
2079     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2080     SET_H_SYS_SR_F (opval);
2081     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2082   }
2083 
2084   return vpc;
2085 #undef FLD
2086 }
2087 
2088 /* l-sfltsi: l.sfltsi $rA,$simm16 */
2089 
2090 static SEM_PC
2091 SEM_FN_NAME (or1k32bf,l_sfltsi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2092 {
2093 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2094   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2095   int UNUSED written = 0;
2096   IADDR UNUSED pc = abuf->addr;
2097   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2098 
2099   {
2100     USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2101     SET_H_SYS_SR_F (opval);
2102     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2103   }
2104 
2105   return vpc;
2106 #undef FLD
2107 }
2108 
2109 /* l-sfltu: l.sfltu $rA,$rB */
2110 
2111 static SEM_PC
2112 SEM_FN_NAME (or1k32bf,l_sfltu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2113 {
2114 #define FLD(f) abuf->fields.sfmt_l_sll.f
2115   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2116   int UNUSED written = 0;
2117   IADDR UNUSED pc = abuf->addr;
2118   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2119 
2120   {
2121     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2122     SET_H_SYS_SR_F (opval);
2123     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2124   }
2125 
2126   return vpc;
2127 #undef FLD
2128 }
2129 
2130 /* l-sfltui: l.sfltui $rA,$simm16 */
2131 
2132 static SEM_PC
2133 SEM_FN_NAME (or1k32bf,l_sfltui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2134 {
2135 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2136   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2137   int UNUSED written = 0;
2138   IADDR UNUSED pc = abuf->addr;
2139   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2140 
2141   {
2142     USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2143     SET_H_SYS_SR_F (opval);
2144     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2145   }
2146 
2147   return vpc;
2148 #undef FLD
2149 }
2150 
2151 /* l-sfles: l.sfles $rA,$rB */
2152 
2153 static SEM_PC
2154 SEM_FN_NAME (or1k32bf,l_sfles) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2155 {
2156 #define FLD(f) abuf->fields.sfmt_l_sll.f
2157   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2158   int UNUSED written = 0;
2159   IADDR UNUSED pc = abuf->addr;
2160   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2161 
2162   {
2163     USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2164     SET_H_SYS_SR_F (opval);
2165     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2166   }
2167 
2168   return vpc;
2169 #undef FLD
2170 }
2171 
2172 /* l-sflesi: l.sflesi $rA,$simm16 */
2173 
2174 static SEM_PC
2175 SEM_FN_NAME (or1k32bf,l_sflesi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2176 {
2177 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2178   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2179   int UNUSED written = 0;
2180   IADDR UNUSED pc = abuf->addr;
2181   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2182 
2183   {
2184     USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2185     SET_H_SYS_SR_F (opval);
2186     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2187   }
2188 
2189   return vpc;
2190 #undef FLD
2191 }
2192 
2193 /* l-sfleu: l.sfleu $rA,$rB */
2194 
2195 static SEM_PC
2196 SEM_FN_NAME (or1k32bf,l_sfleu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2197 {
2198 #define FLD(f) abuf->fields.sfmt_l_sll.f
2199   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2200   int UNUSED written = 0;
2201   IADDR UNUSED pc = abuf->addr;
2202   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2203 
2204   {
2205     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2206     SET_H_SYS_SR_F (opval);
2207     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2208   }
2209 
2210   return vpc;
2211 #undef FLD
2212 }
2213 
2214 /* l-sfleui: l.sfleui $rA,$simm16 */
2215 
2216 static SEM_PC
2217 SEM_FN_NAME (or1k32bf,l_sfleui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2218 {
2219 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2220   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2221   int UNUSED written = 0;
2222   IADDR UNUSED pc = abuf->addr;
2223   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2224 
2225   {
2226     USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2227     SET_H_SYS_SR_F (opval);
2228     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2229   }
2230 
2231   return vpc;
2232 #undef FLD
2233 }
2234 
2235 /* l-sfeq: l.sfeq $rA,$rB */
2236 
2237 static SEM_PC
2238 SEM_FN_NAME (or1k32bf,l_sfeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2239 {
2240 #define FLD(f) abuf->fields.sfmt_l_sll.f
2241   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2242   int UNUSED written = 0;
2243   IADDR UNUSED pc = abuf->addr;
2244   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2245 
2246   {
2247     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2248     SET_H_SYS_SR_F (opval);
2249     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2250   }
2251 
2252   return vpc;
2253 #undef FLD
2254 }
2255 
2256 /* l-sfeqi: l.sfeqi $rA,$simm16 */
2257 
2258 static SEM_PC
2259 SEM_FN_NAME (or1k32bf,l_sfeqi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2260 {
2261 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2262   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2263   int UNUSED written = 0;
2264   IADDR UNUSED pc = abuf->addr;
2265   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2266 
2267   {
2268     USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2269     SET_H_SYS_SR_F (opval);
2270     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2271   }
2272 
2273   return vpc;
2274 #undef FLD
2275 }
2276 
2277 /* l-sfne: l.sfne $rA,$rB */
2278 
2279 static SEM_PC
2280 SEM_FN_NAME (or1k32bf,l_sfne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2281 {
2282 #define FLD(f) abuf->fields.sfmt_l_sll.f
2283   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2284   int UNUSED written = 0;
2285   IADDR UNUSED pc = abuf->addr;
2286   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2287 
2288   {
2289     USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2290     SET_H_SYS_SR_F (opval);
2291     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2292   }
2293 
2294   return vpc;
2295 #undef FLD
2296 }
2297 
2298 /* l-sfnei: l.sfnei $rA,$simm16 */
2299 
2300 static SEM_PC
2301 SEM_FN_NAME (or1k32bf,l_sfnei) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2302 {
2303 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2304   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2305   int UNUSED written = 0;
2306   IADDR UNUSED pc = abuf->addr;
2307   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2308 
2309   {
2310     USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2311     SET_H_SYS_SR_F (opval);
2312     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2313   }
2314 
2315   return vpc;
2316 #undef FLD
2317 }
2318 
2319 /* l-mac: l.mac $rA,$rB */
2320 
2321 static SEM_PC
2322 SEM_FN_NAME (or1k32bf,l_mac) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2323 {
2324 #define FLD(f) abuf->fields.sfmt_l_sll.f
2325   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2326   int UNUSED written = 0;
2327   IADDR UNUSED pc = abuf->addr;
2328   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2329 
2330 {
2331 {
2332   DI tmp_prod;
2333   DI tmp_mac;
2334   DI tmp_result;
2335   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2336   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2337   tmp_result = ADDDI (tmp_prod, tmp_mac);
2338   {
2339     SI opval = SUBWORDDISI (tmp_result, 0);
2340     SET_H_MAC_MACHI (opval);
2341     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2342   }
2343   {
2344     SI opval = SUBWORDDISI (tmp_result, 1);
2345     SET_H_MAC_MACLO (opval);
2346     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2347   }
2348   {
2349     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2350     SET_H_SYS_SR_OV (opval);
2351     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2352   }
2353 }
2354 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2355 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2356 }
2357 }
2358 
2359   return vpc;
2360 #undef FLD
2361 }
2362 
2363 /* l-maci: l.maci $rA,${simm16} */
2364 
2365 static SEM_PC
2366 SEM_FN_NAME (or1k32bf,l_maci) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2367 {
2368 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2369   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2370   int UNUSED written = 0;
2371   IADDR UNUSED pc = abuf->addr;
2372   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2373 
2374 {
2375 {
2376   DI tmp_prod;
2377   DI tmp_mac;
2378   DI tmp_result;
2379   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
2380   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2381   tmp_result = ADDDI (tmp_mac, tmp_prod);
2382   {
2383     SI opval = SUBWORDDISI (tmp_result, 0);
2384     SET_H_MAC_MACHI (opval);
2385     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2386   }
2387   {
2388     SI opval = SUBWORDDISI (tmp_result, 1);
2389     SET_H_MAC_MACLO (opval);
2390     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2391   }
2392   {
2393     BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2394     SET_H_SYS_SR_OV (opval);
2395     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2396   }
2397 }
2398 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2399 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2400 }
2401 }
2402 
2403   return vpc;
2404 #undef FLD
2405 }
2406 
2407 /* l-macu: l.macu $rA,$rB */
2408 
2409 static SEM_PC
2410 SEM_FN_NAME (or1k32bf,l_macu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2411 {
2412 #define FLD(f) abuf->fields.sfmt_l_sll.f
2413   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2414   int UNUSED written = 0;
2415   IADDR UNUSED pc = abuf->addr;
2416   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2417 
2418 {
2419 {
2420   DI tmp_prod;
2421   DI tmp_mac;
2422   DI tmp_result;
2423   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2424   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2425   tmp_result = ADDDI (tmp_prod, tmp_mac);
2426   {
2427     SI opval = SUBWORDDISI (tmp_result, 0);
2428     SET_H_MAC_MACHI (opval);
2429     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2430   }
2431   {
2432     SI opval = SUBWORDDISI (tmp_result, 1);
2433     SET_H_MAC_MACLO (opval);
2434     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2435   }
2436   {
2437     BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
2438     SET_H_SYS_SR_CY (opval);
2439     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2440   }
2441 }
2442 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2443 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2444 }
2445 }
2446 
2447   return vpc;
2448 #undef FLD
2449 }
2450 
2451 /* l-msb: l.msb $rA,$rB */
2452 
2453 static SEM_PC
2454 SEM_FN_NAME (or1k32bf,l_msb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2455 {
2456 #define FLD(f) abuf->fields.sfmt_l_sll.f
2457   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2458   int UNUSED written = 0;
2459   IADDR UNUSED pc = abuf->addr;
2460   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2461 
2462 {
2463 {
2464   DI tmp_prod;
2465   DI tmp_mac;
2466   DI tmp_result;
2467   tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2468   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2469   tmp_result = SUBDI (tmp_mac, tmp_prod);
2470   {
2471     SI opval = SUBWORDDISI (tmp_result, 0);
2472     SET_H_MAC_MACHI (opval);
2473     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2474   }
2475   {
2476     SI opval = SUBWORDDISI (tmp_result, 1);
2477     SET_H_MAC_MACLO (opval);
2478     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2479   }
2480   {
2481     BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
2482     SET_H_SYS_SR_OV (opval);
2483     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2484   }
2485 }
2486 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2487 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2488 }
2489 }
2490 
2491   return vpc;
2492 #undef FLD
2493 }
2494 
2495 /* l-msbu: l.msbu $rA,$rB */
2496 
2497 static SEM_PC
2498 SEM_FN_NAME (or1k32bf,l_msbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2499 {
2500 #define FLD(f) abuf->fields.sfmt_l_sll.f
2501   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2502   int UNUSED written = 0;
2503   IADDR UNUSED pc = abuf->addr;
2504   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2505 
2506 {
2507 {
2508   DI tmp_prod;
2509   DI tmp_mac;
2510   DI tmp_result;
2511   tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2512   tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2513   tmp_result = SUBDI (tmp_mac, tmp_prod);
2514   {
2515     SI opval = SUBWORDDISI (tmp_result, 0);
2516     SET_H_MAC_MACHI (opval);
2517     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2518   }
2519   {
2520     SI opval = SUBWORDDISI (tmp_result, 1);
2521     SET_H_MAC_MACLO (opval);
2522     CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2523   }
2524   {
2525     BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
2526     SET_H_SYS_SR_CY (opval);
2527     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2528   }
2529 }
2530 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2531 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2532 }
2533 }
2534 
2535   return vpc;
2536 #undef FLD
2537 }
2538 
2539 /* l-cust1: l.cust1 */
2540 
2541 static SEM_PC
2542 SEM_FN_NAME (or1k32bf,l_cust1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2543 {
2544 #define FLD(f) abuf->fields.sfmt_empty.f
2545   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2546   int UNUSED written = 0;
2547   IADDR UNUSED pc = abuf->addr;
2548   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2549 
2550 ((void) 0); /*nop*/
2551 
2552   return vpc;
2553 #undef FLD
2554 }
2555 
2556 /* l-cust2: l.cust2 */
2557 
2558 static SEM_PC
2559 SEM_FN_NAME (or1k32bf,l_cust2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2560 {
2561 #define FLD(f) abuf->fields.sfmt_empty.f
2562   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2563   int UNUSED written = 0;
2564   IADDR UNUSED pc = abuf->addr;
2565   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2566 
2567 ((void) 0); /*nop*/
2568 
2569   return vpc;
2570 #undef FLD
2571 }
2572 
2573 /* l-cust3: l.cust3 */
2574 
2575 static SEM_PC
2576 SEM_FN_NAME (or1k32bf,l_cust3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2577 {
2578 #define FLD(f) abuf->fields.sfmt_empty.f
2579   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2580   int UNUSED written = 0;
2581   IADDR UNUSED pc = abuf->addr;
2582   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2583 
2584 ((void) 0); /*nop*/
2585 
2586   return vpc;
2587 #undef FLD
2588 }
2589 
2590 /* l-cust4: l.cust4 */
2591 
2592 static SEM_PC
2593 SEM_FN_NAME (or1k32bf,l_cust4) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2594 {
2595 #define FLD(f) abuf->fields.sfmt_empty.f
2596   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2597   int UNUSED written = 0;
2598   IADDR UNUSED pc = abuf->addr;
2599   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2600 
2601 ((void) 0); /*nop*/
2602 
2603   return vpc;
2604 #undef FLD
2605 }
2606 
2607 /* l-cust5: l.cust5 */
2608 
2609 static SEM_PC
2610 SEM_FN_NAME (or1k32bf,l_cust5) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2611 {
2612 #define FLD(f) abuf->fields.sfmt_empty.f
2613   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2614   int UNUSED written = 0;
2615   IADDR UNUSED pc = abuf->addr;
2616   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2617 
2618 ((void) 0); /*nop*/
2619 
2620   return vpc;
2621 #undef FLD
2622 }
2623 
2624 /* l-cust6: l.cust6 */
2625 
2626 static SEM_PC
2627 SEM_FN_NAME (or1k32bf,l_cust6) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2628 {
2629 #define FLD(f) abuf->fields.sfmt_empty.f
2630   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2631   int UNUSED written = 0;
2632   IADDR UNUSED pc = abuf->addr;
2633   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2634 
2635 ((void) 0); /*nop*/
2636 
2637   return vpc;
2638 #undef FLD
2639 }
2640 
2641 /* l-cust7: l.cust7 */
2642 
2643 static SEM_PC
2644 SEM_FN_NAME (or1k32bf,l_cust7) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2645 {
2646 #define FLD(f) abuf->fields.sfmt_empty.f
2647   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2648   int UNUSED written = 0;
2649   IADDR UNUSED pc = abuf->addr;
2650   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2651 
2652 ((void) 0); /*nop*/
2653 
2654   return vpc;
2655 #undef FLD
2656 }
2657 
2658 /* l-cust8: l.cust8 */
2659 
2660 static SEM_PC
2661 SEM_FN_NAME (or1k32bf,l_cust8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2662 {
2663 #define FLD(f) abuf->fields.sfmt_empty.f
2664   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2665   int UNUSED written = 0;
2666   IADDR UNUSED pc = abuf->addr;
2667   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2668 
2669 ((void) 0); /*nop*/
2670 
2671   return vpc;
2672 #undef FLD
2673 }
2674 
2675 /* lf-add-s: lf.add.s $rDSF,$rASF,$rBSF */
2676 
2677 static SEM_PC
2678 SEM_FN_NAME (or1k32bf,lf_add_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2679 {
2680 #define FLD(f) abuf->fields.sfmt_l_sll.f
2681   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2682   int UNUSED written = 0;
2683   IADDR UNUSED pc = abuf->addr;
2684   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2685 
2686   {
2687     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)));
2688     SET_H_FSR (FLD (f_r1), opval);
2689     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2690   }
2691 
2692   return vpc;
2693 #undef FLD
2694 }
2695 
2696 /* lf-add-d32: lf.add.d $rDD32F,$rAD32F,$rBD32F */
2697 
2698 static SEM_PC
2699 SEM_FN_NAME (or1k32bf,lf_add_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2700 {
2701 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2702   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2703   int UNUSED written = 0;
2704   IADDR UNUSED pc = abuf->addr;
2705   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2706 
2707   {
2708     DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2709     SET_H_FD32R (FLD (f_rdd32), opval);
2710     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2711   }
2712 
2713   return vpc;
2714 #undef FLD
2715 }
2716 
2717 /* lf-sub-s: lf.sub.s $rDSF,$rASF,$rBSF */
2718 
2719 static SEM_PC
2720 SEM_FN_NAME (or1k32bf,lf_sub_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2721 {
2722 #define FLD(f) abuf->fields.sfmt_l_sll.f
2723   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2724   int UNUSED written = 0;
2725   IADDR UNUSED pc = abuf->addr;
2726   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2727 
2728   {
2729     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)));
2730     SET_H_FSR (FLD (f_r1), opval);
2731     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2732   }
2733 
2734   return vpc;
2735 #undef FLD
2736 }
2737 
2738 /* lf-sub-d32: lf.sub.d $rDD32F,$rAD32F,$rBD32F */
2739 
2740 static SEM_PC
2741 SEM_FN_NAME (or1k32bf,lf_sub_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2742 {
2743 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2744   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2745   int UNUSED written = 0;
2746   IADDR UNUSED pc = abuf->addr;
2747   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2748 
2749   {
2750     DF opval = CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2751     SET_H_FD32R (FLD (f_rdd32), opval);
2752     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2753   }
2754 
2755   return vpc;
2756 #undef FLD
2757 }
2758 
2759 /* lf-mul-s: lf.mul.s $rDSF,$rASF,$rBSF */
2760 
2761 static SEM_PC
2762 SEM_FN_NAME (or1k32bf,lf_mul_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2763 {
2764 #define FLD(f) abuf->fields.sfmt_l_sll.f
2765   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2766   int UNUSED written = 0;
2767   IADDR UNUSED pc = abuf->addr;
2768   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2769 
2770   {
2771     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)));
2772     SET_H_FSR (FLD (f_r1), opval);
2773     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2774   }
2775 
2776   return vpc;
2777 #undef FLD
2778 }
2779 
2780 /* lf-mul-d32: lf.mul.d $rDD32F,$rAD32F,$rBD32F */
2781 
2782 static SEM_PC
2783 SEM_FN_NAME (or1k32bf,lf_mul_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2784 {
2785 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2786   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2787   int UNUSED written = 0;
2788   IADDR UNUSED pc = abuf->addr;
2789   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2790 
2791   {
2792     DF opval = CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2793     SET_H_FD32R (FLD (f_rdd32), opval);
2794     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2795   }
2796 
2797   return vpc;
2798 #undef FLD
2799 }
2800 
2801 /* lf-div-s: lf.div.s $rDSF,$rASF,$rBSF */
2802 
2803 static SEM_PC
2804 SEM_FN_NAME (or1k32bf,lf_div_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2805 {
2806 #define FLD(f) abuf->fields.sfmt_l_sll.f
2807   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2808   int UNUSED written = 0;
2809   IADDR UNUSED pc = abuf->addr;
2810   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2811 
2812   {
2813     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)));
2814     SET_H_FSR (FLD (f_r1), opval);
2815     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2816   }
2817 
2818   return vpc;
2819 #undef FLD
2820 }
2821 
2822 /* lf-div-d32: lf.div.d $rDD32F,$rAD32F,$rBD32F */
2823 
2824 static SEM_PC
2825 SEM_FN_NAME (or1k32bf,lf_div_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2826 {
2827 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2828   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2829   int UNUSED written = 0;
2830   IADDR UNUSED pc = abuf->addr;
2831   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2832 
2833   {
2834     DF opval = CGEN_CPU_FPU (current_cpu)->ops->divdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2835     SET_H_FD32R (FLD (f_rdd32), opval);
2836     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2837   }
2838 
2839   return vpc;
2840 #undef FLD
2841 }
2842 
2843 /* lf-rem-s: lf.rem.s $rDSF,$rASF,$rBSF */
2844 
2845 static SEM_PC
2846 SEM_FN_NAME (or1k32bf,lf_rem_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2847 {
2848 #define FLD(f) abuf->fields.sfmt_l_sll.f
2849   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2850   int UNUSED written = 0;
2851   IADDR UNUSED pc = abuf->addr;
2852   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2853 
2854   {
2855     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)));
2856     SET_H_FSR (FLD (f_r1), opval);
2857     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2858   }
2859 
2860   return vpc;
2861 #undef FLD
2862 }
2863 
2864 /* lf-rem-d32: lf.rem.d $rDD32F,$rAD32F,$rBD32F */
2865 
2866 static SEM_PC
2867 SEM_FN_NAME (or1k32bf,lf_rem_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2868 {
2869 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2870   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2871   int UNUSED written = 0;
2872   IADDR UNUSED pc = abuf->addr;
2873   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2874 
2875   {
2876     DF opval = CGEN_CPU_FPU (current_cpu)->ops->remdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2877     SET_H_FD32R (FLD (f_rdd32), opval);
2878     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2879   }
2880 
2881   return vpc;
2882 #undef FLD
2883 }
2884 
2885 /* lf-itof-s: lf.itof.s $rDSF,$rA */
2886 
2887 static SEM_PC
2888 SEM_FN_NAME (or1k32bf,lf_itof_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2889 {
2890 #define FLD(f) abuf->fields.sfmt_l_slli.f
2891   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2892   int UNUSED written = 0;
2893   IADDR UNUSED pc = abuf->addr;
2894   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2895 
2896   {
2897     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))));
2898     SET_H_FSR (FLD (f_r1), opval);
2899     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2900   }
2901 
2902   return vpc;
2903 #undef FLD
2904 }
2905 
2906 /* lf-itof-d32: lf.itof.d $rDD32F,$rADI */
2907 
2908 static SEM_PC
2909 SEM_FN_NAME (or1k32bf,lf_itof_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2910 {
2911 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2912   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2913   int UNUSED written = 0;
2914   IADDR UNUSED pc = abuf->addr;
2915   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2916 
2917   {
2918     DF opval = CGEN_CPU_FPU (current_cpu)->ops->floatdidf (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_I64R (FLD (f_rad32)));
2919     SET_H_FD32R (FLD (f_rdd32), opval);
2920     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2921   }
2922 
2923   return vpc;
2924 #undef FLD
2925 }
2926 
2927 /* lf-ftoi-s: lf.ftoi.s $rD,$rASF */
2928 
2929 static SEM_PC
2930 SEM_FN_NAME (or1k32bf,lf_ftoi_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2931 {
2932 #define FLD(f) abuf->fields.sfmt_l_slli.f
2933   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2934   int UNUSED written = 0;
2935   IADDR UNUSED pc = abuf->addr;
2936   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2937 
2938   {
2939     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))));
2940     SET_H_GPR (FLD (f_r1), opval);
2941     CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
2942   }
2943 
2944   return vpc;
2945 #undef FLD
2946 }
2947 
2948 /* lf-ftoi-d32: lf.ftoi.d $rDDI,$rAD32F */
2949 
2950 static SEM_PC
2951 SEM_FN_NAME (or1k32bf,lf_ftoi_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2952 {
2953 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2954   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2955   int UNUSED written = 0;
2956   IADDR UNUSED pc = abuf->addr;
2957   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2958 
2959   {
2960     DI opval = CGEN_CPU_FPU (current_cpu)->ops->fixdfdi (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_FD32R (FLD (f_rad32)));
2961     SET_H_I64R (FLD (f_rdd32), opval);
2962     CGEN_TRACE_RESULT (current_cpu, abuf, "i64r", 'D', opval);
2963   }
2964 
2965   return vpc;
2966 #undef FLD
2967 }
2968 
2969 /* lf-sfeq-s: lf.sfeq.s $rASF,$rBSF */
2970 
2971 static SEM_PC
2972 SEM_FN_NAME (or1k32bf,lf_sfeq_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2973 {
2974 #define FLD(f) abuf->fields.sfmt_l_sll.f
2975   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2976   int UNUSED written = 0;
2977   IADDR UNUSED pc = abuf->addr;
2978   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2979 
2980   {
2981     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)));
2982     SET_H_SYS_SR_F (opval);
2983     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2984   }
2985 
2986   return vpc;
2987 #undef FLD
2988 }
2989 
2990 /* lf-sfeq-d32: lf.sfeq.d $rAD32F,$rBD32F */
2991 
2992 static SEM_PC
2993 SEM_FN_NAME (or1k32bf,lf_sfeq_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2994 {
2995 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2996   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2997   int UNUSED written = 0;
2998   IADDR UNUSED pc = abuf->addr;
2999   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3000 
3001   {
3002     BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3003     SET_H_SYS_SR_F (opval);
3004     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3005   }
3006 
3007   return vpc;
3008 #undef FLD
3009 }
3010 
3011 /* lf-sfne-s: lf.sfne.s $rASF,$rBSF */
3012 
3013 static SEM_PC
3014 SEM_FN_NAME (or1k32bf,lf_sfne_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3015 {
3016 #define FLD(f) abuf->fields.sfmt_l_sll.f
3017   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3018   int UNUSED written = 0;
3019   IADDR UNUSED pc = abuf->addr;
3020   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3021 
3022   {
3023     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)));
3024     SET_H_SYS_SR_F (opval);
3025     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3026   }
3027 
3028   return vpc;
3029 #undef FLD
3030 }
3031 
3032 /* lf-sfne-d32: lf.sfne.d $rAD32F,$rBD32F */
3033 
3034 static SEM_PC
3035 SEM_FN_NAME (or1k32bf,lf_sfne_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3036 {
3037 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3038   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3039   int UNUSED written = 0;
3040   IADDR UNUSED pc = abuf->addr;
3041   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3042 
3043   {
3044     BI opval = CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3045     SET_H_SYS_SR_F (opval);
3046     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3047   }
3048 
3049   return vpc;
3050 #undef FLD
3051 }
3052 
3053 /* lf-sfge-s: lf.sfge.s $rASF,$rBSF */
3054 
3055 static SEM_PC
3056 SEM_FN_NAME (or1k32bf,lf_sfge_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3057 {
3058 #define FLD(f) abuf->fields.sfmt_l_sll.f
3059   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3060   int UNUSED written = 0;
3061   IADDR UNUSED pc = abuf->addr;
3062   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3063 
3064   {
3065     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)));
3066     SET_H_SYS_SR_F (opval);
3067     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3068   }
3069 
3070   return vpc;
3071 #undef FLD
3072 }
3073 
3074 /* lf-sfge-d32: lf.sfge.d $rAD32F,$rBD32F */
3075 
3076 static SEM_PC
3077 SEM_FN_NAME (or1k32bf,lf_sfge_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3078 {
3079 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3080   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3081   int UNUSED written = 0;
3082   IADDR UNUSED pc = abuf->addr;
3083   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3084 
3085   {
3086     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3087     SET_H_SYS_SR_F (opval);
3088     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3089   }
3090 
3091   return vpc;
3092 #undef FLD
3093 }
3094 
3095 /* lf-sfgt-s: lf.sfgt.s $rASF,$rBSF */
3096 
3097 static SEM_PC
3098 SEM_FN_NAME (or1k32bf,lf_sfgt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3099 {
3100 #define FLD(f) abuf->fields.sfmt_l_sll.f
3101   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3102   int UNUSED written = 0;
3103   IADDR UNUSED pc = abuf->addr;
3104   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3105 
3106   {
3107     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)));
3108     SET_H_SYS_SR_F (opval);
3109     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3110   }
3111 
3112   return vpc;
3113 #undef FLD
3114 }
3115 
3116 /* lf-sfgt-d32: lf.sfgt.d $rAD32F,$rBD32F */
3117 
3118 static SEM_PC
3119 SEM_FN_NAME (or1k32bf,lf_sfgt_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3120 {
3121 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3122   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3123   int UNUSED written = 0;
3124   IADDR UNUSED pc = abuf->addr;
3125   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3126 
3127   {
3128     BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3129     SET_H_SYS_SR_F (opval);
3130     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3131   }
3132 
3133   return vpc;
3134 #undef FLD
3135 }
3136 
3137 /* lf-sflt-s: lf.sflt.s $rASF,$rBSF */
3138 
3139 static SEM_PC
3140 SEM_FN_NAME (or1k32bf,lf_sflt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3141 {
3142 #define FLD(f) abuf->fields.sfmt_l_sll.f
3143   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3144   int UNUSED written = 0;
3145   IADDR UNUSED pc = abuf->addr;
3146   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3147 
3148   {
3149     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)));
3150     SET_H_SYS_SR_F (opval);
3151     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3152   }
3153 
3154   return vpc;
3155 #undef FLD
3156 }
3157 
3158 /* lf-sflt-d32: lf.sflt.d $rAD32F,$rBD32F */
3159 
3160 static SEM_PC
3161 SEM_FN_NAME (or1k32bf,lf_sflt_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3162 {
3163 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3164   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3165   int UNUSED written = 0;
3166   IADDR UNUSED pc = abuf->addr;
3167   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3168 
3169   {
3170     BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3171     SET_H_SYS_SR_F (opval);
3172     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3173   }
3174 
3175   return vpc;
3176 #undef FLD
3177 }
3178 
3179 /* lf-sfle-s: lf.sfle.s $rASF,$rBSF */
3180 
3181 static SEM_PC
3182 SEM_FN_NAME (or1k32bf,lf_sfle_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3183 {
3184 #define FLD(f) abuf->fields.sfmt_l_sll.f
3185   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3186   int UNUSED written = 0;
3187   IADDR UNUSED pc = abuf->addr;
3188   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3189 
3190   {
3191     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)));
3192     SET_H_SYS_SR_F (opval);
3193     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3194   }
3195 
3196   return vpc;
3197 #undef FLD
3198 }
3199 
3200 /* lf-sfle-d32: lf.sfle.d $rAD32F,$rBD32F */
3201 
3202 static SEM_PC
3203 SEM_FN_NAME (or1k32bf,lf_sfle_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3204 {
3205 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3206   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3207   int UNUSED written = 0;
3208   IADDR UNUSED pc = abuf->addr;
3209   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3210 
3211   {
3212     BI opval = CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3213     SET_H_SYS_SR_F (opval);
3214     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3215   }
3216 
3217   return vpc;
3218 #undef FLD
3219 }
3220 
3221 /* lf-sfueq-s: lf.sfueq.s $rASF,$rBSF */
3222 
3223 static SEM_PC
3224 SEM_FN_NAME (or1k32bf,lf_sfueq_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3225 {
3226 #define FLD(f) abuf->fields.sfmt_l_sll.f
3227   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3228   int UNUSED written = 0;
3229   IADDR UNUSED pc = abuf->addr;
3230   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3231 
3232   {
3233     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3234     SET_H_SYS_SR_F (opval);
3235     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3236   }
3237 
3238   return vpc;
3239 #undef FLD
3240 }
3241 
3242 /* lf-sfueq-d32: lf.sfueq.d $rAD32F,$rBD32F */
3243 
3244 static SEM_PC
3245 SEM_FN_NAME (or1k32bf,lf_sfueq_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3246 {
3247 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3248   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3249   int UNUSED written = 0;
3250   IADDR UNUSED pc = abuf->addr;
3251   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3252 
3253   {
3254     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3255     SET_H_SYS_SR_F (opval);
3256     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3257   }
3258 
3259   return vpc;
3260 #undef FLD
3261 }
3262 
3263 /* lf-sfune-s: lf.sfune.s $rASF,$rBSF */
3264 
3265 static SEM_PC
3266 SEM_FN_NAME (or1k32bf,lf_sfune_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3267 {
3268 #define FLD(f) abuf->fields.sfmt_l_sll.f
3269   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3270   int UNUSED written = 0;
3271   IADDR UNUSED pc = abuf->addr;
3272   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3273 
3274   {
3275     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3276     SET_H_SYS_SR_F (opval);
3277     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3278   }
3279 
3280   return vpc;
3281 #undef FLD
3282 }
3283 
3284 /* lf-sfune-d32: lf.sfune.d $rAD32F,$rBD32F */
3285 
3286 static SEM_PC
3287 SEM_FN_NAME (or1k32bf,lf_sfune_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3288 {
3289 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3290   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3291   int UNUSED written = 0;
3292   IADDR UNUSED pc = abuf->addr;
3293   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3294 
3295   {
3296     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3297     SET_H_SYS_SR_F (opval);
3298     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3299   }
3300 
3301   return vpc;
3302 #undef FLD
3303 }
3304 
3305 /* lf-sfugt-s: lf.sfugt.s $rASF,$rBSF */
3306 
3307 static SEM_PC
3308 SEM_FN_NAME (or1k32bf,lf_sfugt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3309 {
3310 #define FLD(f) abuf->fields.sfmt_l_sll.f
3311   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3312   int UNUSED written = 0;
3313   IADDR UNUSED pc = abuf->addr;
3314   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3315 
3316   {
3317     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3318     SET_H_SYS_SR_F (opval);
3319     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3320   }
3321 
3322   return vpc;
3323 #undef FLD
3324 }
3325 
3326 /* lf-sfugt-d32: lf.sfugt.d $rAD32F,$rBD32F */
3327 
3328 static SEM_PC
3329 SEM_FN_NAME (or1k32bf,lf_sfugt_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3330 {
3331 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3332   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3333   int UNUSED written = 0;
3334   IADDR UNUSED pc = abuf->addr;
3335   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3336 
3337   {
3338     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3339     SET_H_SYS_SR_F (opval);
3340     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3341   }
3342 
3343   return vpc;
3344 #undef FLD
3345 }
3346 
3347 /* lf-sfuge-s: lf.sfuge.s $rASF,$rBSF */
3348 
3349 static SEM_PC
3350 SEM_FN_NAME (or1k32bf,lf_sfuge_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3351 {
3352 #define FLD(f) abuf->fields.sfmt_l_sll.f
3353   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3354   int UNUSED written = 0;
3355   IADDR UNUSED pc = abuf->addr;
3356   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3357 
3358   {
3359     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3360     SET_H_SYS_SR_F (opval);
3361     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3362   }
3363 
3364   return vpc;
3365 #undef FLD
3366 }
3367 
3368 /* lf-sfuge-d32: lf.sfuge.d $rAD32F,$rBD32F */
3369 
3370 static SEM_PC
3371 SEM_FN_NAME (or1k32bf,lf_sfuge_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3372 {
3373 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3374   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3375   int UNUSED written = 0;
3376   IADDR UNUSED pc = abuf->addr;
3377   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3378 
3379   {
3380     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3381     SET_H_SYS_SR_F (opval);
3382     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3383   }
3384 
3385   return vpc;
3386 #undef FLD
3387 }
3388 
3389 /* lf-sfult-s: lf.sfult.s $rASF,$rBSF */
3390 
3391 static SEM_PC
3392 SEM_FN_NAME (or1k32bf,lf_sfult_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3393 {
3394 #define FLD(f) abuf->fields.sfmt_l_sll.f
3395   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3396   int UNUSED written = 0;
3397   IADDR UNUSED pc = abuf->addr;
3398   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3399 
3400   {
3401     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3402     SET_H_SYS_SR_F (opval);
3403     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3404   }
3405 
3406   return vpc;
3407 #undef FLD
3408 }
3409 
3410 /* lf-sfult-d32: lf.sfult.d $rAD32F,$rBD32F */
3411 
3412 static SEM_PC
3413 SEM_FN_NAME (or1k32bf,lf_sfult_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3414 {
3415 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3416   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3417   int UNUSED written = 0;
3418   IADDR UNUSED pc = abuf->addr;
3419   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3420 
3421   {
3422     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3423     SET_H_SYS_SR_F (opval);
3424     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3425   }
3426 
3427   return vpc;
3428 #undef FLD
3429 }
3430 
3431 /* lf-sfule-s: lf.sfule.s $rASF,$rBSF */
3432 
3433 static SEM_PC
3434 SEM_FN_NAME (or1k32bf,lf_sfule_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3435 {
3436 #define FLD(f) abuf->fields.sfmt_l_sll.f
3437   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3438   int UNUSED written = 0;
3439   IADDR UNUSED pc = abuf->addr;
3440   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3441 
3442   {
3443     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3444     SET_H_SYS_SR_F (opval);
3445     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3446   }
3447 
3448   return vpc;
3449 #undef FLD
3450 }
3451 
3452 /* lf-sfule-d32: lf.sfule.d $rAD32F,$rBD32F */
3453 
3454 static SEM_PC
3455 SEM_FN_NAME (or1k32bf,lf_sfule_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3456 {
3457 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3458   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3459   int UNUSED written = 0;
3460   IADDR UNUSED pc = abuf->addr;
3461   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3462 
3463   {
3464     BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3465     SET_H_SYS_SR_F (opval);
3466     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3467   }
3468 
3469   return vpc;
3470 #undef FLD
3471 }
3472 
3473 /* lf-sfun-s: lf.sfun.s $rASF,$rBSF */
3474 
3475 static SEM_PC
3476 SEM_FN_NAME (or1k32bf,lf_sfun_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3477 {
3478 #define FLD(f) abuf->fields.sfmt_l_sll.f
3479   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3480   int UNUSED written = 0;
3481   IADDR UNUSED pc = abuf->addr;
3482   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3483 
3484   {
3485     BI opval = CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
3486     SET_H_SYS_SR_F (opval);
3487     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3488   }
3489 
3490   return vpc;
3491 #undef FLD
3492 }
3493 
3494 /* lf-sfun-d32: lf.sfun.d $rAD32F,$rBD32F */
3495 
3496 static SEM_PC
3497 SEM_FN_NAME (or1k32bf,lf_sfun_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3498 {
3499 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3500   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3501   int UNUSED written = 0;
3502   IADDR UNUSED pc = abuf->addr;
3503   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3504 
3505   {
3506     BI opval = CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3507     SET_H_SYS_SR_F (opval);
3508     CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3509   }
3510 
3511   return vpc;
3512 #undef FLD
3513 }
3514 
3515 /* lf-madd-s: lf.madd.s $rDSF,$rASF,$rBSF */
3516 
3517 static SEM_PC
3518 SEM_FN_NAME (or1k32bf,lf_madd_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3519 {
3520 #define FLD(f) abuf->fields.sfmt_l_sll.f
3521   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3522   int UNUSED written = 0;
3523   IADDR UNUSED pc = abuf->addr;
3524   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3525 
3526   {
3527     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)));
3528     SET_H_FSR (FLD (f_r1), opval);
3529     CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
3530   }
3531 
3532   return vpc;
3533 #undef FLD
3534 }
3535 
3536 /* lf-madd-d32: lf.madd.d $rDD32F,$rAD32F,$rBD32F */
3537 
3538 static SEM_PC
3539 SEM_FN_NAME (or1k32bf,lf_madd_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3540 {
3541 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3542   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3543   int UNUSED written = 0;
3544   IADDR UNUSED pc = abuf->addr;
3545   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3546 
3547   {
3548     DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), GET_H_FD32R (FLD (f_rdd32)));
3549     SET_H_FD32R (FLD (f_rdd32), opval);
3550     CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
3551   }
3552 
3553   return vpc;
3554 #undef FLD
3555 }
3556 
3557 /* lf-cust1-s: lf.cust1.s $rASF,$rBSF */
3558 
3559 static SEM_PC
3560 SEM_FN_NAME (or1k32bf,lf_cust1_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3561 {
3562 #define FLD(f) abuf->fields.sfmt_empty.f
3563   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3564   int UNUSED written = 0;
3565   IADDR UNUSED pc = abuf->addr;
3566   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3567 
3568 ((void) 0); /*nop*/
3569 
3570   return vpc;
3571 #undef FLD
3572 }
3573 
3574 /* lf-cust1-d32: lf.cust1.d */
3575 
3576 static SEM_PC
3577 SEM_FN_NAME (or1k32bf,lf_cust1_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3578 {
3579 #define FLD(f) abuf->fields.sfmt_empty.f
3580   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3581   int UNUSED written = 0;
3582   IADDR UNUSED pc = abuf->addr;
3583   SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3584 
3585 ((void) 0); /*nop*/
3586 
3587   return vpc;
3588 #undef FLD
3589 }
3590 
3591 /* Table of all semantic fns.  */
3592 
3593 static const struct sem_fn_desc sem_fns[] = {
3594   { OR1K32BF_INSN_X_INVALID, SEM_FN_NAME (or1k32bf,x_invalid) },
3595   { OR1K32BF_INSN_X_AFTER, SEM_FN_NAME (or1k32bf,x_after) },
3596   { OR1K32BF_INSN_X_BEFORE, SEM_FN_NAME (or1k32bf,x_before) },
3597   { OR1K32BF_INSN_X_CTI_CHAIN, SEM_FN_NAME (or1k32bf,x_cti_chain) },
3598   { OR1K32BF_INSN_X_CHAIN, SEM_FN_NAME (or1k32bf,x_chain) },
3599   { OR1K32BF_INSN_X_BEGIN, SEM_FN_NAME (or1k32bf,x_begin) },
3600   { OR1K32BF_INSN_L_J, SEM_FN_NAME (or1k32bf,l_j) },
3601   { OR1K32BF_INSN_L_ADRP, SEM_FN_NAME (or1k32bf,l_adrp) },
3602   { OR1K32BF_INSN_L_JAL, SEM_FN_NAME (or1k32bf,l_jal) },
3603   { OR1K32BF_INSN_L_JR, SEM_FN_NAME (or1k32bf,l_jr) },
3604   { OR1K32BF_INSN_L_JALR, SEM_FN_NAME (or1k32bf,l_jalr) },
3605   { OR1K32BF_INSN_L_BNF, SEM_FN_NAME (or1k32bf,l_bnf) },
3606   { OR1K32BF_INSN_L_BF, SEM_FN_NAME (or1k32bf,l_bf) },
3607   { OR1K32BF_INSN_L_TRAP, SEM_FN_NAME (or1k32bf,l_trap) },
3608   { OR1K32BF_INSN_L_SYS, SEM_FN_NAME (or1k32bf,l_sys) },
3609   { OR1K32BF_INSN_L_MSYNC, SEM_FN_NAME (or1k32bf,l_msync) },
3610   { OR1K32BF_INSN_L_PSYNC, SEM_FN_NAME (or1k32bf,l_psync) },
3611   { OR1K32BF_INSN_L_CSYNC, SEM_FN_NAME (or1k32bf,l_csync) },
3612   { OR1K32BF_INSN_L_RFE, SEM_FN_NAME (or1k32bf,l_rfe) },
3613   { OR1K32BF_INSN_L_NOP_IMM, SEM_FN_NAME (or1k32bf,l_nop_imm) },
3614   { OR1K32BF_INSN_L_MOVHI, SEM_FN_NAME (or1k32bf,l_movhi) },
3615   { OR1K32BF_INSN_L_MACRC, SEM_FN_NAME (or1k32bf,l_macrc) },
3616   { OR1K32BF_INSN_L_MFSPR, SEM_FN_NAME (or1k32bf,l_mfspr) },
3617   { OR1K32BF_INSN_L_MTSPR, SEM_FN_NAME (or1k32bf,l_mtspr) },
3618   { OR1K32BF_INSN_L_LWZ, SEM_FN_NAME (or1k32bf,l_lwz) },
3619   { OR1K32BF_INSN_L_LWS, SEM_FN_NAME (or1k32bf,l_lws) },
3620   { OR1K32BF_INSN_L_LWA, SEM_FN_NAME (or1k32bf,l_lwa) },
3621   { OR1K32BF_INSN_L_LBZ, SEM_FN_NAME (or1k32bf,l_lbz) },
3622   { OR1K32BF_INSN_L_LBS, SEM_FN_NAME (or1k32bf,l_lbs) },
3623   { OR1K32BF_INSN_L_LHZ, SEM_FN_NAME (or1k32bf,l_lhz) },
3624   { OR1K32BF_INSN_L_LHS, SEM_FN_NAME (or1k32bf,l_lhs) },
3625   { OR1K32BF_INSN_L_SW, SEM_FN_NAME (or1k32bf,l_sw) },
3626   { OR1K32BF_INSN_L_SB, SEM_FN_NAME (or1k32bf,l_sb) },
3627   { OR1K32BF_INSN_L_SH, SEM_FN_NAME (or1k32bf,l_sh) },
3628   { OR1K32BF_INSN_L_SWA, SEM_FN_NAME (or1k32bf,l_swa) },
3629   { OR1K32BF_INSN_L_SLL, SEM_FN_NAME (or1k32bf,l_sll) },
3630   { OR1K32BF_INSN_L_SLLI, SEM_FN_NAME (or1k32bf,l_slli) },
3631   { OR1K32BF_INSN_L_SRL, SEM_FN_NAME (or1k32bf,l_srl) },
3632   { OR1K32BF_INSN_L_SRLI, SEM_FN_NAME (or1k32bf,l_srli) },
3633   { OR1K32BF_INSN_L_SRA, SEM_FN_NAME (or1k32bf,l_sra) },
3634   { OR1K32BF_INSN_L_SRAI, SEM_FN_NAME (or1k32bf,l_srai) },
3635   { OR1K32BF_INSN_L_ROR, SEM_FN_NAME (or1k32bf,l_ror) },
3636   { OR1K32BF_INSN_L_RORI, SEM_FN_NAME (or1k32bf,l_rori) },
3637   { OR1K32BF_INSN_L_AND, SEM_FN_NAME (or1k32bf,l_and) },
3638   { OR1K32BF_INSN_L_OR, SEM_FN_NAME (or1k32bf,l_or) },
3639   { OR1K32BF_INSN_L_XOR, SEM_FN_NAME (or1k32bf,l_xor) },
3640   { OR1K32BF_INSN_L_ADD, SEM_FN_NAME (or1k32bf,l_add) },
3641   { OR1K32BF_INSN_L_SUB, SEM_FN_NAME (or1k32bf,l_sub) },
3642   { OR1K32BF_INSN_L_ADDC, SEM_FN_NAME (or1k32bf,l_addc) },
3643   { OR1K32BF_INSN_L_MUL, SEM_FN_NAME (or1k32bf,l_mul) },
3644   { OR1K32BF_INSN_L_MULD, SEM_FN_NAME (or1k32bf,l_muld) },
3645   { OR1K32BF_INSN_L_MULU, SEM_FN_NAME (or1k32bf,l_mulu) },
3646   { OR1K32BF_INSN_L_MULDU, SEM_FN_NAME (or1k32bf,l_muldu) },
3647   { OR1K32BF_INSN_L_DIV, SEM_FN_NAME (or1k32bf,l_div) },
3648   { OR1K32BF_INSN_L_DIVU, SEM_FN_NAME (or1k32bf,l_divu) },
3649   { OR1K32BF_INSN_L_FF1, SEM_FN_NAME (or1k32bf,l_ff1) },
3650   { OR1K32BF_INSN_L_FL1, SEM_FN_NAME (or1k32bf,l_fl1) },
3651   { OR1K32BF_INSN_L_ANDI, SEM_FN_NAME (or1k32bf,l_andi) },
3652   { OR1K32BF_INSN_L_ORI, SEM_FN_NAME (or1k32bf,l_ori) },
3653   { OR1K32BF_INSN_L_XORI, SEM_FN_NAME (or1k32bf,l_xori) },
3654   { OR1K32BF_INSN_L_ADDI, SEM_FN_NAME (or1k32bf,l_addi) },
3655   { OR1K32BF_INSN_L_ADDIC, SEM_FN_NAME (or1k32bf,l_addic) },
3656   { OR1K32BF_INSN_L_MULI, SEM_FN_NAME (or1k32bf,l_muli) },
3657   { OR1K32BF_INSN_L_EXTHS, SEM_FN_NAME (or1k32bf,l_exths) },
3658   { OR1K32BF_INSN_L_EXTBS, SEM_FN_NAME (or1k32bf,l_extbs) },
3659   { OR1K32BF_INSN_L_EXTHZ, SEM_FN_NAME (or1k32bf,l_exthz) },
3660   { OR1K32BF_INSN_L_EXTBZ, SEM_FN_NAME (or1k32bf,l_extbz) },
3661   { OR1K32BF_INSN_L_EXTWS, SEM_FN_NAME (or1k32bf,l_extws) },
3662   { OR1K32BF_INSN_L_EXTWZ, SEM_FN_NAME (or1k32bf,l_extwz) },
3663   { OR1K32BF_INSN_L_CMOV, SEM_FN_NAME (or1k32bf,l_cmov) },
3664   { OR1K32BF_INSN_L_SFGTS, SEM_FN_NAME (or1k32bf,l_sfgts) },
3665   { OR1K32BF_INSN_L_SFGTSI, SEM_FN_NAME (or1k32bf,l_sfgtsi) },
3666   { OR1K32BF_INSN_L_SFGTU, SEM_FN_NAME (or1k32bf,l_sfgtu) },
3667   { OR1K32BF_INSN_L_SFGTUI, SEM_FN_NAME (or1k32bf,l_sfgtui) },
3668   { OR1K32BF_INSN_L_SFGES, SEM_FN_NAME (or1k32bf,l_sfges) },
3669   { OR1K32BF_INSN_L_SFGESI, SEM_FN_NAME (or1k32bf,l_sfgesi) },
3670   { OR1K32BF_INSN_L_SFGEU, SEM_FN_NAME (or1k32bf,l_sfgeu) },
3671   { OR1K32BF_INSN_L_SFGEUI, SEM_FN_NAME (or1k32bf,l_sfgeui) },
3672   { OR1K32BF_INSN_L_SFLTS, SEM_FN_NAME (or1k32bf,l_sflts) },
3673   { OR1K32BF_INSN_L_SFLTSI, SEM_FN_NAME (or1k32bf,l_sfltsi) },
3674   { OR1K32BF_INSN_L_SFLTU, SEM_FN_NAME (or1k32bf,l_sfltu) },
3675   { OR1K32BF_INSN_L_SFLTUI, SEM_FN_NAME (or1k32bf,l_sfltui) },
3676   { OR1K32BF_INSN_L_SFLES, SEM_FN_NAME (or1k32bf,l_sfles) },
3677   { OR1K32BF_INSN_L_SFLESI, SEM_FN_NAME (or1k32bf,l_sflesi) },
3678   { OR1K32BF_INSN_L_SFLEU, SEM_FN_NAME (or1k32bf,l_sfleu) },
3679   { OR1K32BF_INSN_L_SFLEUI, SEM_FN_NAME (or1k32bf,l_sfleui) },
3680   { OR1K32BF_INSN_L_SFEQ, SEM_FN_NAME (or1k32bf,l_sfeq) },
3681   { OR1K32BF_INSN_L_SFEQI, SEM_FN_NAME (or1k32bf,l_sfeqi) },
3682   { OR1K32BF_INSN_L_SFNE, SEM_FN_NAME (or1k32bf,l_sfne) },
3683   { OR1K32BF_INSN_L_SFNEI, SEM_FN_NAME (or1k32bf,l_sfnei) },
3684   { OR1K32BF_INSN_L_MAC, SEM_FN_NAME (or1k32bf,l_mac) },
3685   { OR1K32BF_INSN_L_MACI, SEM_FN_NAME (or1k32bf,l_maci) },
3686   { OR1K32BF_INSN_L_MACU, SEM_FN_NAME (or1k32bf,l_macu) },
3687   { OR1K32BF_INSN_L_MSB, SEM_FN_NAME (or1k32bf,l_msb) },
3688   { OR1K32BF_INSN_L_MSBU, SEM_FN_NAME (or1k32bf,l_msbu) },
3689   { OR1K32BF_INSN_L_CUST1, SEM_FN_NAME (or1k32bf,l_cust1) },
3690   { OR1K32BF_INSN_L_CUST2, SEM_FN_NAME (or1k32bf,l_cust2) },
3691   { OR1K32BF_INSN_L_CUST3, SEM_FN_NAME (or1k32bf,l_cust3) },
3692   { OR1K32BF_INSN_L_CUST4, SEM_FN_NAME (or1k32bf,l_cust4) },
3693   { OR1K32BF_INSN_L_CUST5, SEM_FN_NAME (or1k32bf,l_cust5) },
3694   { OR1K32BF_INSN_L_CUST6, SEM_FN_NAME (or1k32bf,l_cust6) },
3695   { OR1K32BF_INSN_L_CUST7, SEM_FN_NAME (or1k32bf,l_cust7) },
3696   { OR1K32BF_INSN_L_CUST8, SEM_FN_NAME (or1k32bf,l_cust8) },
3697   { OR1K32BF_INSN_LF_ADD_S, SEM_FN_NAME (or1k32bf,lf_add_s) },
3698   { OR1K32BF_INSN_LF_ADD_D32, SEM_FN_NAME (or1k32bf,lf_add_d32) },
3699   { OR1K32BF_INSN_LF_SUB_S, SEM_FN_NAME (or1k32bf,lf_sub_s) },
3700   { OR1K32BF_INSN_LF_SUB_D32, SEM_FN_NAME (or1k32bf,lf_sub_d32) },
3701   { OR1K32BF_INSN_LF_MUL_S, SEM_FN_NAME (or1k32bf,lf_mul_s) },
3702   { OR1K32BF_INSN_LF_MUL_D32, SEM_FN_NAME (or1k32bf,lf_mul_d32) },
3703   { OR1K32BF_INSN_LF_DIV_S, SEM_FN_NAME (or1k32bf,lf_div_s) },
3704   { OR1K32BF_INSN_LF_DIV_D32, SEM_FN_NAME (or1k32bf,lf_div_d32) },
3705   { OR1K32BF_INSN_LF_REM_S, SEM_FN_NAME (or1k32bf,lf_rem_s) },
3706   { OR1K32BF_INSN_LF_REM_D32, SEM_FN_NAME (or1k32bf,lf_rem_d32) },
3707   { OR1K32BF_INSN_LF_ITOF_S, SEM_FN_NAME (or1k32bf,lf_itof_s) },
3708   { OR1K32BF_INSN_LF_ITOF_D32, SEM_FN_NAME (or1k32bf,lf_itof_d32) },
3709   { OR1K32BF_INSN_LF_FTOI_S, SEM_FN_NAME (or1k32bf,lf_ftoi_s) },
3710   { OR1K32BF_INSN_LF_FTOI_D32, SEM_FN_NAME (or1k32bf,lf_ftoi_d32) },
3711   { OR1K32BF_INSN_LF_SFEQ_S, SEM_FN_NAME (or1k32bf,lf_sfeq_s) },
3712   { OR1K32BF_INSN_LF_SFEQ_D32, SEM_FN_NAME (or1k32bf,lf_sfeq_d32) },
3713   { OR1K32BF_INSN_LF_SFNE_S, SEM_FN_NAME (or1k32bf,lf_sfne_s) },
3714   { OR1K32BF_INSN_LF_SFNE_D32, SEM_FN_NAME (or1k32bf,lf_sfne_d32) },
3715   { OR1K32BF_INSN_LF_SFGE_S, SEM_FN_NAME (or1k32bf,lf_sfge_s) },
3716   { OR1K32BF_INSN_LF_SFGE_D32, SEM_FN_NAME (or1k32bf,lf_sfge_d32) },
3717   { OR1K32BF_INSN_LF_SFGT_S, SEM_FN_NAME (or1k32bf,lf_sfgt_s) },
3718   { OR1K32BF_INSN_LF_SFGT_D32, SEM_FN_NAME (or1k32bf,lf_sfgt_d32) },
3719   { OR1K32BF_INSN_LF_SFLT_S, SEM_FN_NAME (or1k32bf,lf_sflt_s) },
3720   { OR1K32BF_INSN_LF_SFLT_D32, SEM_FN_NAME (or1k32bf,lf_sflt_d32) },
3721   { OR1K32BF_INSN_LF_SFLE_S, SEM_FN_NAME (or1k32bf,lf_sfle_s) },
3722   { OR1K32BF_INSN_LF_SFLE_D32, SEM_FN_NAME (or1k32bf,lf_sfle_d32) },
3723   { OR1K32BF_INSN_LF_SFUEQ_S, SEM_FN_NAME (or1k32bf,lf_sfueq_s) },
3724   { OR1K32BF_INSN_LF_SFUEQ_D32, SEM_FN_NAME (or1k32bf,lf_sfueq_d32) },
3725   { OR1K32BF_INSN_LF_SFUNE_S, SEM_FN_NAME (or1k32bf,lf_sfune_s) },
3726   { OR1K32BF_INSN_LF_SFUNE_D32, SEM_FN_NAME (or1k32bf,lf_sfune_d32) },
3727   { OR1K32BF_INSN_LF_SFUGT_S, SEM_FN_NAME (or1k32bf,lf_sfugt_s) },
3728   { OR1K32BF_INSN_LF_SFUGT_D32, SEM_FN_NAME (or1k32bf,lf_sfugt_d32) },
3729   { OR1K32BF_INSN_LF_SFUGE_S, SEM_FN_NAME (or1k32bf,lf_sfuge_s) },
3730   { OR1K32BF_INSN_LF_SFUGE_D32, SEM_FN_NAME (or1k32bf,lf_sfuge_d32) },
3731   { OR1K32BF_INSN_LF_SFULT_S, SEM_FN_NAME (or1k32bf,lf_sfult_s) },
3732   { OR1K32BF_INSN_LF_SFULT_D32, SEM_FN_NAME (or1k32bf,lf_sfult_d32) },
3733   { OR1K32BF_INSN_LF_SFULE_S, SEM_FN_NAME (or1k32bf,lf_sfule_s) },
3734   { OR1K32BF_INSN_LF_SFULE_D32, SEM_FN_NAME (or1k32bf,lf_sfule_d32) },
3735   { OR1K32BF_INSN_LF_SFUN_S, SEM_FN_NAME (or1k32bf,lf_sfun_s) },
3736   { OR1K32BF_INSN_LF_SFUN_D32, SEM_FN_NAME (or1k32bf,lf_sfun_d32) },
3737   { OR1K32BF_INSN_LF_MADD_S, SEM_FN_NAME (or1k32bf,lf_madd_s) },
3738   { OR1K32BF_INSN_LF_MADD_D32, SEM_FN_NAME (or1k32bf,lf_madd_d32) },
3739   { OR1K32BF_INSN_LF_CUST1_S, SEM_FN_NAME (or1k32bf,lf_cust1_s) },
3740   { OR1K32BF_INSN_LF_CUST1_D32, SEM_FN_NAME (or1k32bf,lf_cust1_d32) },
3741   { 0, 0 }
3742 };
3743 
3744 /* Add the semantic fns to IDESC_TABLE.  */
3745 
3746 void
3747 SEM_FN_NAME (or1k32bf,init_idesc_table) (SIM_CPU *current_cpu)
3748 {
3749   IDESC *idesc_table = CPU_IDESC (current_cpu);
3750   const struct sem_fn_desc *sf;
3751   int mach_num = MACH_NUM (CPU_MACH (current_cpu));
3752 
3753   for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
3754     {
3755       const CGEN_INSN *insn = idesc_table[sf->index].idata;
3756       int valid_p = (CGEN_INSN_VIRTUAL_P (insn)
3757 		     || CGEN_INSN_MACH_HAS_P (insn, mach_num));
3758 #if FAST_P
3759       if (valid_p)
3760 	idesc_table[sf->index].sem_fast = sf->fn;
3761       else
3762 	idesc_table[sf->index].sem_fast = SEM_FN_NAME (or1k32bf,x_invalid);
3763 #else
3764       if (valid_p)
3765 	idesc_table[sf->index].sem_full = sf->fn;
3766       else
3767 	idesc_table[sf->index].sem_full = SEM_FN_NAME (or1k32bf,x_invalid);
3768 #endif
3769     }
3770 }
3771 
3772