1 /* Simulator instruction semantics for or1k32bf.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2010 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
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)
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.
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.
27 /* The labels have the case they have because the enum of insn types
28 is all uppercase and in the non-stdc case the insn symbol is built
29 into the enum name. */
35 { OR1K32BF_INSN_X_INVALID
, && case_sem_INSN_X_INVALID
},
36 { OR1K32BF_INSN_X_AFTER
, && case_sem_INSN_X_AFTER
},
37 { OR1K32BF_INSN_X_BEFORE
, && case_sem_INSN_X_BEFORE
},
38 { OR1K32BF_INSN_X_CTI_CHAIN
, && case_sem_INSN_X_CTI_CHAIN
},
39 { OR1K32BF_INSN_X_CHAIN
, && case_sem_INSN_X_CHAIN
},
40 { OR1K32BF_INSN_X_BEGIN
, && case_sem_INSN_X_BEGIN
},
41 { OR1K32BF_INSN_L_J
, && case_sem_INSN_L_J
},
42 { OR1K32BF_INSN_L_JAL
, && case_sem_INSN_L_JAL
},
43 { OR1K32BF_INSN_L_JR
, && case_sem_INSN_L_JR
},
44 { OR1K32BF_INSN_L_JALR
, && case_sem_INSN_L_JALR
},
45 { OR1K32BF_INSN_L_BNF
, && case_sem_INSN_L_BNF
},
46 { OR1K32BF_INSN_L_BF
, && case_sem_INSN_L_BF
},
47 { OR1K32BF_INSN_L_TRAP
, && case_sem_INSN_L_TRAP
},
48 { OR1K32BF_INSN_L_SYS
, && case_sem_INSN_L_SYS
},
49 { OR1K32BF_INSN_L_MSYNC
, && case_sem_INSN_L_MSYNC
},
50 { OR1K32BF_INSN_L_PSYNC
, && case_sem_INSN_L_PSYNC
},
51 { OR1K32BF_INSN_L_CSYNC
, && case_sem_INSN_L_CSYNC
},
52 { OR1K32BF_INSN_L_RFE
, && case_sem_INSN_L_RFE
},
53 { OR1K32BF_INSN_L_NOP_IMM
, && case_sem_INSN_L_NOP_IMM
},
54 { OR1K32BF_INSN_L_MOVHI
, && case_sem_INSN_L_MOVHI
},
55 { OR1K32BF_INSN_L_MACRC
, && case_sem_INSN_L_MACRC
},
56 { OR1K32BF_INSN_L_MFSPR
, && case_sem_INSN_L_MFSPR
},
57 { OR1K32BF_INSN_L_MTSPR
, && case_sem_INSN_L_MTSPR
},
58 { OR1K32BF_INSN_L_LWZ
, && case_sem_INSN_L_LWZ
},
59 { OR1K32BF_INSN_L_LWS
, && case_sem_INSN_L_LWS
},
60 { OR1K32BF_INSN_L_LWA
, && case_sem_INSN_L_LWA
},
61 { OR1K32BF_INSN_L_LBZ
, && case_sem_INSN_L_LBZ
},
62 { OR1K32BF_INSN_L_LBS
, && case_sem_INSN_L_LBS
},
63 { OR1K32BF_INSN_L_LHZ
, && case_sem_INSN_L_LHZ
},
64 { OR1K32BF_INSN_L_LHS
, && case_sem_INSN_L_LHS
},
65 { OR1K32BF_INSN_L_SW
, && case_sem_INSN_L_SW
},
66 { OR1K32BF_INSN_L_SB
, && case_sem_INSN_L_SB
},
67 { OR1K32BF_INSN_L_SH
, && case_sem_INSN_L_SH
},
68 { OR1K32BF_INSN_L_SWA
, && case_sem_INSN_L_SWA
},
69 { OR1K32BF_INSN_L_SLL
, && case_sem_INSN_L_SLL
},
70 { OR1K32BF_INSN_L_SLLI
, && case_sem_INSN_L_SLLI
},
71 { OR1K32BF_INSN_L_SRL
, && case_sem_INSN_L_SRL
},
72 { OR1K32BF_INSN_L_SRLI
, && case_sem_INSN_L_SRLI
},
73 { OR1K32BF_INSN_L_SRA
, && case_sem_INSN_L_SRA
},
74 { OR1K32BF_INSN_L_SRAI
, && case_sem_INSN_L_SRAI
},
75 { OR1K32BF_INSN_L_ROR
, && case_sem_INSN_L_ROR
},
76 { OR1K32BF_INSN_L_RORI
, && case_sem_INSN_L_RORI
},
77 { OR1K32BF_INSN_L_AND
, && case_sem_INSN_L_AND
},
78 { OR1K32BF_INSN_L_OR
, && case_sem_INSN_L_OR
},
79 { OR1K32BF_INSN_L_XOR
, && case_sem_INSN_L_XOR
},
80 { OR1K32BF_INSN_L_ADD
, && case_sem_INSN_L_ADD
},
81 { OR1K32BF_INSN_L_SUB
, && case_sem_INSN_L_SUB
},
82 { OR1K32BF_INSN_L_ADDC
, && case_sem_INSN_L_ADDC
},
83 { OR1K32BF_INSN_L_MUL
, && case_sem_INSN_L_MUL
},
84 { OR1K32BF_INSN_L_MULU
, && case_sem_INSN_L_MULU
},
85 { OR1K32BF_INSN_L_DIV
, && case_sem_INSN_L_DIV
},
86 { OR1K32BF_INSN_L_DIVU
, && case_sem_INSN_L_DIVU
},
87 { OR1K32BF_INSN_L_FF1
, && case_sem_INSN_L_FF1
},
88 { OR1K32BF_INSN_L_FL1
, && case_sem_INSN_L_FL1
},
89 { OR1K32BF_INSN_L_ANDI
, && case_sem_INSN_L_ANDI
},
90 { OR1K32BF_INSN_L_ORI
, && case_sem_INSN_L_ORI
},
91 { OR1K32BF_INSN_L_XORI
, && case_sem_INSN_L_XORI
},
92 { OR1K32BF_INSN_L_ADDI
, && case_sem_INSN_L_ADDI
},
93 { OR1K32BF_INSN_L_ADDIC
, && case_sem_INSN_L_ADDIC
},
94 { OR1K32BF_INSN_L_MULI
, && case_sem_INSN_L_MULI
},
95 { OR1K32BF_INSN_L_EXTHS
, && case_sem_INSN_L_EXTHS
},
96 { OR1K32BF_INSN_L_EXTBS
, && case_sem_INSN_L_EXTBS
},
97 { OR1K32BF_INSN_L_EXTHZ
, && case_sem_INSN_L_EXTHZ
},
98 { OR1K32BF_INSN_L_EXTBZ
, && case_sem_INSN_L_EXTBZ
},
99 { OR1K32BF_INSN_L_EXTWS
, && case_sem_INSN_L_EXTWS
},
100 { OR1K32BF_INSN_L_EXTWZ
, && case_sem_INSN_L_EXTWZ
},
101 { OR1K32BF_INSN_L_CMOV
, && case_sem_INSN_L_CMOV
},
102 { OR1K32BF_INSN_L_SFGTS
, && case_sem_INSN_L_SFGTS
},
103 { OR1K32BF_INSN_L_SFGTSI
, && case_sem_INSN_L_SFGTSI
},
104 { OR1K32BF_INSN_L_SFGTU
, && case_sem_INSN_L_SFGTU
},
105 { OR1K32BF_INSN_L_SFGTUI
, && case_sem_INSN_L_SFGTUI
},
106 { OR1K32BF_INSN_L_SFGES
, && case_sem_INSN_L_SFGES
},
107 { OR1K32BF_INSN_L_SFGESI
, && case_sem_INSN_L_SFGESI
},
108 { OR1K32BF_INSN_L_SFGEU
, && case_sem_INSN_L_SFGEU
},
109 { OR1K32BF_INSN_L_SFGEUI
, && case_sem_INSN_L_SFGEUI
},
110 { OR1K32BF_INSN_L_SFLTS
, && case_sem_INSN_L_SFLTS
},
111 { OR1K32BF_INSN_L_SFLTSI
, && case_sem_INSN_L_SFLTSI
},
112 { OR1K32BF_INSN_L_SFLTU
, && case_sem_INSN_L_SFLTU
},
113 { OR1K32BF_INSN_L_SFLTUI
, && case_sem_INSN_L_SFLTUI
},
114 { OR1K32BF_INSN_L_SFLES
, && case_sem_INSN_L_SFLES
},
115 { OR1K32BF_INSN_L_SFLESI
, && case_sem_INSN_L_SFLESI
},
116 { OR1K32BF_INSN_L_SFLEU
, && case_sem_INSN_L_SFLEU
},
117 { OR1K32BF_INSN_L_SFLEUI
, && case_sem_INSN_L_SFLEUI
},
118 { OR1K32BF_INSN_L_SFEQ
, && case_sem_INSN_L_SFEQ
},
119 { OR1K32BF_INSN_L_SFEQI
, && case_sem_INSN_L_SFEQI
},
120 { OR1K32BF_INSN_L_SFNE
, && case_sem_INSN_L_SFNE
},
121 { OR1K32BF_INSN_L_SFNEI
, && case_sem_INSN_L_SFNEI
},
122 { OR1K32BF_INSN_L_MAC
, && case_sem_INSN_L_MAC
},
123 { OR1K32BF_INSN_L_MSB
, && case_sem_INSN_L_MSB
},
124 { OR1K32BF_INSN_L_MACI
, && case_sem_INSN_L_MACI
},
125 { OR1K32BF_INSN_L_CUST1
, && case_sem_INSN_L_CUST1
},
126 { OR1K32BF_INSN_L_CUST2
, && case_sem_INSN_L_CUST2
},
127 { OR1K32BF_INSN_L_CUST3
, && case_sem_INSN_L_CUST3
},
128 { OR1K32BF_INSN_L_CUST4
, && case_sem_INSN_L_CUST4
},
129 { OR1K32BF_INSN_L_CUST5
, && case_sem_INSN_L_CUST5
},
130 { OR1K32BF_INSN_L_CUST6
, && case_sem_INSN_L_CUST6
},
131 { OR1K32BF_INSN_L_CUST7
, && case_sem_INSN_L_CUST7
},
132 { OR1K32BF_INSN_L_CUST8
, && case_sem_INSN_L_CUST8
},
133 { OR1K32BF_INSN_LF_ADD_S
, && case_sem_INSN_LF_ADD_S
},
134 { OR1K32BF_INSN_LF_SUB_S
, && case_sem_INSN_LF_SUB_S
},
135 { OR1K32BF_INSN_LF_MUL_S
, && case_sem_INSN_LF_MUL_S
},
136 { OR1K32BF_INSN_LF_DIV_S
, && case_sem_INSN_LF_DIV_S
},
137 { OR1K32BF_INSN_LF_REM_S
, && case_sem_INSN_LF_REM_S
},
138 { OR1K32BF_INSN_LF_ITOF_S
, && case_sem_INSN_LF_ITOF_S
},
139 { OR1K32BF_INSN_LF_FTOI_S
, && case_sem_INSN_LF_FTOI_S
},
140 { OR1K32BF_INSN_LF_EQ_S
, && case_sem_INSN_LF_EQ_S
},
141 { OR1K32BF_INSN_LF_NE_S
, && case_sem_INSN_LF_NE_S
},
142 { OR1K32BF_INSN_LF_GE_S
, && case_sem_INSN_LF_GE_S
},
143 { OR1K32BF_INSN_LF_GT_S
, && case_sem_INSN_LF_GT_S
},
144 { OR1K32BF_INSN_LF_LT_S
, && case_sem_INSN_LF_LT_S
},
145 { OR1K32BF_INSN_LF_LE_S
, && case_sem_INSN_LF_LE_S
},
146 { OR1K32BF_INSN_LF_MADD_S
, && case_sem_INSN_LF_MADD_S
},
147 { OR1K32BF_INSN_LF_CUST1_S
, && case_sem_INSN_LF_CUST1_S
},
152 for (i
= 0; labels
[i
].label
!= 0; ++i
)
155 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_fast_lab
= labels
[i
].label
;
157 CPU_IDESC (current_cpu
) [labels
[i
].index
].sem_full_lab
= labels
[i
].label
;
162 #endif /* DEFINE_LABELS */
166 /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
167 off frills like tracing and profiling. */
168 /* FIXME: A better way would be to have TRACE_RESULT check for something
169 that can cause it to be optimized out. Another way would be to emit
170 special handlers into the instruction "stream". */
173 #undef CGEN_TRACE_RESULT
174 #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
178 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
184 /* Branch to next handler without going around main loop. */
185 #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
186 SWITCH (sem
, SEM_ARGBUF (vpc
) -> semantic
.sem_case
)
188 #else /* ! WITH_SCACHE_PBB */
190 #define NEXT(vpc) BREAK (sem)
193 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_fast_lab
)
195 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->sem_full_lab
)
198 SWITCH (sem
, SEM_ARGBUF (sc
) -> idesc
->num
)
201 #endif /* ! WITH_SCACHE_PBB */
205 CASE (sem
, INSN_X_INVALID
) : /* --invalid-- */
207 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
208 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
209 #define FLD(f) abuf->fields.sfmt_empty.f
210 int UNUSED written
= 0;
211 IADDR UNUSED pc
= abuf
->addr
;
212 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
215 /* Update the recorded pc in the cpu state struct.
216 Only necessary for WITH_SCACHE case, but to avoid the
217 conditional compilation .... */
219 /* Virtual insns have zero size. Overwrite vpc with address of next insn
220 using the default-insn-bitsize spec. When executing insns in parallel
221 we may want to queue the fault and continue execution. */
222 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
223 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
230 CASE (sem
, INSN_X_AFTER
) : /* --after-- */
232 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
233 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
234 #define FLD(f) abuf->fields.sfmt_empty.f
235 int UNUSED written
= 0;
236 IADDR UNUSED pc
= abuf
->addr
;
237 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
240 #if WITH_SCACHE_PBB_OR1K32BF
241 or1k32bf_pbb_after (current_cpu
, sem_arg
);
249 CASE (sem
, INSN_X_BEFORE
) : /* --before-- */
251 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
252 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
253 #define FLD(f) abuf->fields.sfmt_empty.f
254 int UNUSED written
= 0;
255 IADDR UNUSED pc
= abuf
->addr
;
256 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
259 #if WITH_SCACHE_PBB_OR1K32BF
260 or1k32bf_pbb_before (current_cpu
, sem_arg
);
268 CASE (sem
, INSN_X_CTI_CHAIN
) : /* --cti-chain-- */
270 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
271 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
272 #define FLD(f) abuf->fields.sfmt_empty.f
273 int UNUSED written
= 0;
274 IADDR UNUSED pc
= abuf
->addr
;
275 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
278 #if WITH_SCACHE_PBB_OR1K32BF
280 vpc
= or1k32bf_pbb_cti_chain (current_cpu
, sem_arg
,
281 pbb_br_type
, pbb_br_npc
);
284 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
285 vpc
= or1k32bf_pbb_cti_chain (current_cpu
, sem_arg
,
286 CPU_PBB_BR_TYPE (current_cpu
),
287 CPU_PBB_BR_NPC (current_cpu
));
296 CASE (sem
, INSN_X_CHAIN
) : /* --chain-- */
298 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
299 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
300 #define FLD(f) abuf->fields.sfmt_empty.f
301 int UNUSED written
= 0;
302 IADDR UNUSED pc
= abuf
->addr
;
303 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
306 #if WITH_SCACHE_PBB_OR1K32BF
307 vpc
= or1k32bf_pbb_chain (current_cpu
, sem_arg
);
318 CASE (sem
, INSN_X_BEGIN
) : /* --begin-- */
320 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
321 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
322 #define FLD(f) abuf->fields.sfmt_empty.f
323 int UNUSED written
= 0;
324 IADDR UNUSED pc
= abuf
->addr
;
325 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
328 #if WITH_SCACHE_PBB_OR1K32BF
329 #if defined DEFINE_SWITCH || defined FAST_P
330 /* In the switch case FAST_P is a constant, allowing several optimizations
331 in any called inline functions. */
332 vpc
= or1k32bf_pbb_begin (current_cpu
, FAST_P
);
334 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
335 vpc
= or1k32bf_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
337 vpc
= or1k32bf_pbb_begin (current_cpu
, 0);
347 CASE (sem
, INSN_L_J
) : /* l.j ${disp26} */
349 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
350 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
351 #define FLD(f) abuf->fields.sfmt_l_j.f
352 int UNUSED written
= 0;
353 IADDR UNUSED pc
= abuf
->addr
;
355 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
360 USI opval
= FLD (i_disp26
);
361 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
362 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
365 if (GET_H_SYS_CPUCFGR_ND ()) {
367 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
371 SEM_BRANCH_FINI (vpc
);
376 CASE (sem
, INSN_L_JAL
) : /* l.jal ${disp26} */
378 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
379 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
380 #define FLD(f) abuf->fields.sfmt_l_j.f
381 int UNUSED written
= 0;
382 IADDR UNUSED pc
= abuf
->addr
;
384 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
388 USI opval
= ADDSI (pc
, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
389 SET_H_GPR (((UINT
) 9), opval
);
390 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
395 USI opval
= FLD (i_disp26
);
396 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
397 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
400 if (GET_H_SYS_CPUCFGR_ND ()) {
402 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
407 SEM_BRANCH_FINI (vpc
);
412 CASE (sem
, INSN_L_JR
) : /* l.jr $rB */
414 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
415 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
416 #define FLD(f) abuf->fields.sfmt_l_sll.f
417 int UNUSED written
= 0;
418 IADDR UNUSED pc
= abuf
->addr
;
420 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
425 USI opval
= GET_H_GPR (FLD (f_r3
));
426 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
427 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
430 if (GET_H_SYS_CPUCFGR_ND ()) {
432 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
436 SEM_BRANCH_FINI (vpc
);
441 CASE (sem
, INSN_L_JALR
) : /* l.jalr $rB */
443 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
444 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
445 #define FLD(f) abuf->fields.sfmt_l_sll.f
446 int UNUSED written
= 0;
447 IADDR UNUSED pc
= abuf
->addr
;
449 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
453 USI opval
= ADDSI (pc
, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
454 SET_H_GPR (((UINT
) 9), opval
);
455 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
460 USI opval
= GET_H_GPR (FLD (f_r3
));
461 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
462 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
465 if (GET_H_SYS_CPUCFGR_ND ()) {
467 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
472 SEM_BRANCH_FINI (vpc
);
477 CASE (sem
, INSN_L_BNF
) : /* l.bnf ${disp26} */
479 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
480 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
481 #define FLD(f) abuf->fields.sfmt_l_j.f
482 int UNUSED written
= 0;
483 IADDR UNUSED pc
= abuf
->addr
;
485 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
488 if (NOTSI (GET_H_SYS_SR_F ())) {
491 USI opval
= FLD (i_disp26
);
492 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
494 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
498 if (GET_H_SYS_CPUCFGR_ND ()) {
501 USI opval
= ADDSI (pc
, 4);
502 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
504 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
509 if (GET_H_SYS_CPUCFGR_ND ()) {
511 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
515 abuf
->written
= written
;
516 SEM_BRANCH_FINI (vpc
);
521 CASE (sem
, INSN_L_BF
) : /* l.bf ${disp26} */
523 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
524 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
525 #define FLD(f) abuf->fields.sfmt_l_j.f
526 int UNUSED written
= 0;
527 IADDR UNUSED pc
= abuf
->addr
;
529 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
532 if (GET_H_SYS_SR_F ()) {
535 USI opval
= FLD (i_disp26
);
536 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
538 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
542 if (GET_H_SYS_CPUCFGR_ND ()) {
545 USI opval
= ADDSI (pc
, 4);
546 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
548 CGEN_TRACE_RESULT (current_cpu
, abuf
, "pc", 'x', opval
);
553 if (GET_H_SYS_CPUCFGR_ND ()) {
555 SEM_SKIP_INSN (current_cpu
, sem_arg
, vpc
);
559 abuf
->written
= written
;
560 SEM_BRANCH_FINI (vpc
);
565 CASE (sem
, INSN_L_TRAP
) : /* l.trap ${uimm16} */
567 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
568 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
569 #define FLD(f) abuf->fields.sfmt_empty.f
570 int UNUSED written
= 0;
571 IADDR UNUSED pc
= abuf
->addr
;
572 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
574 or1k32bf_exception (current_cpu
, pc
, EXCEPT_TRAP
);
580 CASE (sem
, INSN_L_SYS
) : /* l.sys ${uimm16} */
582 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
583 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
584 #define FLD(f) abuf->fields.sfmt_empty.f
585 int UNUSED written
= 0;
586 IADDR UNUSED pc
= abuf
->addr
;
587 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
589 or1k32bf_exception (current_cpu
, pc
, EXCEPT_SYSCALL
);
595 CASE (sem
, INSN_L_MSYNC
) : /* l.msync */
597 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
598 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
599 #define FLD(f) abuf->fields.sfmt_empty.f
600 int UNUSED written
= 0;
601 IADDR UNUSED pc
= abuf
->addr
;
602 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
610 CASE (sem
, INSN_L_PSYNC
) : /* l.psync */
612 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
613 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
614 #define FLD(f) abuf->fields.sfmt_empty.f
615 int UNUSED written
= 0;
616 IADDR UNUSED pc
= abuf
->addr
;
617 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
625 CASE (sem
, INSN_L_CSYNC
) : /* l.csync */
627 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
628 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
629 #define FLD(f) abuf->fields.sfmt_empty.f
630 int UNUSED written
= 0;
631 IADDR UNUSED pc
= abuf
->addr
;
632 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
640 CASE (sem
, INSN_L_RFE
) : /* l.rfe */
642 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
643 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
644 #define FLD(f) abuf->fields.sfmt_empty.f
645 int UNUSED written
= 0;
646 IADDR UNUSED pc
= abuf
->addr
;
647 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
649 or1k32bf_rfe (current_cpu
);
655 CASE (sem
, INSN_L_NOP_IMM
) : /* l.nop ${uimm16} */
657 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
658 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
659 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
660 int UNUSED written
= 0;
661 IADDR UNUSED pc
= abuf
->addr
;
662 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
664 or1k32bf_nop (current_cpu
, ZEXTSISI (FLD (f_uimm16
)));
670 CASE (sem
, INSN_L_MOVHI
) : /* l.movhi $rD,$uimm16 */
672 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
673 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
674 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
675 int UNUSED written
= 0;
676 IADDR UNUSED pc
= abuf
->addr
;
677 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
680 USI opval
= SLLSI (ZEXTSISI (FLD (f_uimm16
)), 16);
681 SET_H_GPR (FLD (f_r1
), opval
);
682 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
689 CASE (sem
, INSN_L_MACRC
) : /* l.macrc $rD */
691 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
692 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
693 #define FLD(f) abuf->fields.sfmt_l_slli.f
694 int UNUSED written
= 0;
695 IADDR UNUSED pc
= abuf
->addr
;
696 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
700 USI opval
= GET_H_MAC_MACLO ();
701 SET_H_GPR (FLD (f_r1
), opval
);
702 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
706 SET_H_MAC_MACLO (opval
);
707 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
711 SET_H_MAC_MACHI (opval
);
712 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
720 CASE (sem
, INSN_L_MFSPR
) : /* l.mfspr $rD,$rA,${uimm16} */
722 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
723 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
724 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
725 int UNUSED written
= 0;
726 IADDR UNUSED pc
= abuf
->addr
;
727 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
730 USI opval
= or1k32bf_mfspr (current_cpu
, ORSI (GET_H_GPR (FLD (f_r2
)), ZEXTSISI (FLD (f_uimm16
))));
731 SET_H_GPR (FLD (f_r1
), opval
);
732 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
739 CASE (sem
, INSN_L_MTSPR
) : /* l.mtspr $rA,$rB,${uimm16-split} */
741 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
742 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
743 #define FLD(f) abuf->fields.sfmt_l_mtspr.f
744 int UNUSED written
= 0;
745 IADDR UNUSED pc
= abuf
->addr
;
746 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
748 or1k32bf_mtspr (current_cpu
, ORSI (GET_H_GPR (FLD (f_r2
)), ZEXTSISI (FLD (f_uimm16_split
))), GET_H_GPR (FLD (f_r3
)));
754 CASE (sem
, INSN_L_LWZ
) : /* l.lwz $rD,${simm16}($rA) */
756 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
757 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
758 #define FLD(f) abuf->fields.sfmt_l_lwz.f
759 int UNUSED written
= 0;
760 IADDR UNUSED pc
= abuf
->addr
;
761 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
764 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)));
765 SET_H_GPR (FLD (f_r1
), opval
);
766 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
773 CASE (sem
, INSN_L_LWS
) : /* l.lws $rD,${simm16}($rA) */
775 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
776 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
777 #define FLD(f) abuf->fields.sfmt_l_lwz.f
778 int UNUSED written
= 0;
779 IADDR UNUSED pc
= abuf
->addr
;
780 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
783 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)));
784 SET_H_GPR (FLD (f_r1
), opval
);
785 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
792 CASE (sem
, INSN_L_LWA
) : /* l.lwa $rD,${simm16}($rA) */
794 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
795 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
796 #define FLD(f) abuf->fields.sfmt_l_lwz.f
797 int UNUSED written
= 0;
798 IADDR UNUSED pc
= abuf
->addr
;
799 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
803 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)));
804 SET_H_GPR (FLD (f_r1
), opval
);
805 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
809 CPU (h_atomic_reserve
) = opval
;
810 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
813 SI opval
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), 4);
814 CPU (h_atomic_address
) = opval
;
815 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-address", 'x', opval
);
823 CASE (sem
, INSN_L_LBZ
) : /* l.lbz $rD,${simm16}($rA) */
825 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
826 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
827 #define FLD(f) abuf->fields.sfmt_l_lwz.f
828 int UNUSED written
= 0;
829 IADDR UNUSED pc
= abuf
->addr
;
830 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
833 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)));
834 SET_H_GPR (FLD (f_r1
), opval
);
835 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
842 CASE (sem
, INSN_L_LBS
) : /* l.lbs $rD,${simm16}($rA) */
844 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
845 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
846 #define FLD(f) abuf->fields.sfmt_l_lwz.f
847 int UNUSED written
= 0;
848 IADDR UNUSED pc
= abuf
->addr
;
849 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
852 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)));
853 SET_H_GPR (FLD (f_r1
), opval
);
854 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
861 CASE (sem
, INSN_L_LHZ
) : /* l.lhz $rD,${simm16}($rA) */
863 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
864 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
865 #define FLD(f) abuf->fields.sfmt_l_lwz.f
866 int UNUSED written
= 0;
867 IADDR UNUSED pc
= abuf
->addr
;
868 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
871 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)));
872 SET_H_GPR (FLD (f_r1
), opval
);
873 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
880 CASE (sem
, INSN_L_LHS
) : /* l.lhs $rD,${simm16}($rA) */
882 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
883 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
884 #define FLD(f) abuf->fields.sfmt_l_lwz.f
885 int UNUSED written
= 0;
886 IADDR UNUSED pc
= abuf
->addr
;
887 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
890 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)));
891 SET_H_GPR (FLD (f_r1
), opval
);
892 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
899 CASE (sem
, INSN_L_SW
) : /* l.sw ${simm16-split}($rA),$rB */
901 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
902 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
903 #define FLD(f) abuf->fields.sfmt_l_sw.f
904 int UNUSED written
= 0;
905 IADDR UNUSED pc
= abuf
->addr
;
906 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
910 tmp_addr
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16_split
)), 4);
912 USI opval
= TRUNCSISI (GET_H_GPR (FLD (f_r3
)));
913 SETMEMUSI (current_cpu
, pc
, tmp_addr
, opval
);
914 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
916 if (EQSI (ANDSI (tmp_addr
, 268435452), CPU (h_atomic_address
))) {
919 CPU (h_atomic_reserve
) = opval
;
921 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
926 abuf
->written
= written
;
931 CASE (sem
, INSN_L_SB
) : /* l.sb ${simm16-split}($rA),$rB */
933 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
934 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
935 #define FLD(f) abuf->fields.sfmt_l_sw.f
936 int UNUSED written
= 0;
937 IADDR UNUSED pc
= abuf
->addr
;
938 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
942 tmp_addr
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16_split
)), 1);
944 UQI opval
= TRUNCSIQI (GET_H_GPR (FLD (f_r3
)));
945 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
946 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
948 if (EQSI (ANDSI (tmp_addr
, 268435452), CPU (h_atomic_address
))) {
951 CPU (h_atomic_reserve
) = opval
;
953 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
958 abuf
->written
= written
;
963 CASE (sem
, INSN_L_SH
) : /* l.sh ${simm16-split}($rA),$rB */
965 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
966 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
967 #define FLD(f) abuf->fields.sfmt_l_sw.f
968 int UNUSED written
= 0;
969 IADDR UNUSED pc
= abuf
->addr
;
970 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
974 tmp_addr
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16_split
)), 2);
976 UHI opval
= TRUNCSIHI (GET_H_GPR (FLD (f_r3
)));
977 SETMEMUHI (current_cpu
, pc
, tmp_addr
, opval
);
978 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
980 if (EQSI (ANDSI (tmp_addr
, 268435452), CPU (h_atomic_address
))) {
983 CPU (h_atomic_reserve
) = opval
;
985 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
990 abuf
->written
= written
;
995 CASE (sem
, INSN_L_SWA
) : /* l.swa ${simm16-split}($rA),$rB */
997 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
998 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
999 #define FLD(f) abuf->fields.sfmt_l_sw.f
1000 int UNUSED written
= 0;
1001 IADDR UNUSED pc
= abuf
->addr
;
1002 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1007 tmp_addr
= or1k32bf_make_load_store_addr (current_cpu
, GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16_split
)), 4);
1009 USI opval
= ANDBI (CPU (h_atomic_reserve
), EQSI (tmp_addr
, CPU (h_atomic_address
)));
1010 SET_H_SYS_SR_F (opval
);
1011 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
1013 if (GET_H_SYS_SR_F ()) {
1015 USI opval
= TRUNCSISI (GET_H_GPR (FLD (f_r3
)));
1016 SETMEMUSI (current_cpu
, pc
, tmp_addr
, opval
);
1017 written
|= (1 << 7);
1018 CGEN_TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
1023 CPU (h_atomic_reserve
) = opval
;
1024 CGEN_TRACE_RESULT (current_cpu
, abuf
, "atomic-reserve", 'x', opval
);
1028 abuf
->written
= written
;
1033 CASE (sem
, INSN_L_SLL
) : /* l.sll $rD,$rA,$rB */
1035 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1036 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1037 #define FLD(f) abuf->fields.sfmt_l_sll.f
1038 int UNUSED written
= 0;
1039 IADDR UNUSED pc
= abuf
->addr
;
1040 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1043 USI opval
= SLLSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1044 SET_H_GPR (FLD (f_r1
), opval
);
1045 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1052 CASE (sem
, INSN_L_SLLI
) : /* l.slli $rD,$rA,${uimm6} */
1054 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1055 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1056 #define FLD(f) abuf->fields.sfmt_l_slli.f
1057 int UNUSED written
= 0;
1058 IADDR UNUSED pc
= abuf
->addr
;
1059 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1062 USI opval
= SLLSI (GET_H_GPR (FLD (f_r2
)), FLD (f_uimm6
));
1063 SET_H_GPR (FLD (f_r1
), opval
);
1064 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1071 CASE (sem
, INSN_L_SRL
) : /* l.srl $rD,$rA,$rB */
1073 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1074 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1075 #define FLD(f) abuf->fields.sfmt_l_sll.f
1076 int UNUSED written
= 0;
1077 IADDR UNUSED pc
= abuf
->addr
;
1078 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1081 USI opval
= SRLSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1082 SET_H_GPR (FLD (f_r1
), opval
);
1083 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1090 CASE (sem
, INSN_L_SRLI
) : /* l.srli $rD,$rA,${uimm6} */
1092 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1093 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1094 #define FLD(f) abuf->fields.sfmt_l_slli.f
1095 int UNUSED written
= 0;
1096 IADDR UNUSED pc
= abuf
->addr
;
1097 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1100 USI opval
= SRLSI (GET_H_GPR (FLD (f_r2
)), FLD (f_uimm6
));
1101 SET_H_GPR (FLD (f_r1
), opval
);
1102 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1109 CASE (sem
, INSN_L_SRA
) : /* l.sra $rD,$rA,$rB */
1111 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1112 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1113 #define FLD(f) abuf->fields.sfmt_l_sll.f
1114 int UNUSED written
= 0;
1115 IADDR UNUSED pc
= abuf
->addr
;
1116 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1119 USI opval
= SRASI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1120 SET_H_GPR (FLD (f_r1
), opval
);
1121 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1128 CASE (sem
, INSN_L_SRAI
) : /* l.srai $rD,$rA,${uimm6} */
1130 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1131 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1132 #define FLD(f) abuf->fields.sfmt_l_slli.f
1133 int UNUSED written
= 0;
1134 IADDR UNUSED pc
= abuf
->addr
;
1135 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1138 USI opval
= SRASI (GET_H_GPR (FLD (f_r2
)), FLD (f_uimm6
));
1139 SET_H_GPR (FLD (f_r1
), opval
);
1140 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1147 CASE (sem
, INSN_L_ROR
) : /* l.ror $rD,$rA,$rB */
1149 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1150 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1151 #define FLD(f) abuf->fields.sfmt_l_sll.f
1152 int UNUSED written
= 0;
1153 IADDR UNUSED pc
= abuf
->addr
;
1154 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1157 USI opval
= RORSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1158 SET_H_GPR (FLD (f_r1
), opval
);
1159 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1166 CASE (sem
, INSN_L_RORI
) : /* l.rori $rD,$rA,${uimm6} */
1168 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1169 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1170 #define FLD(f) abuf->fields.sfmt_l_slli.f
1171 int UNUSED written
= 0;
1172 IADDR UNUSED pc
= abuf
->addr
;
1173 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1176 USI opval
= RORSI (GET_H_GPR (FLD (f_r2
)), FLD (f_uimm6
));
1177 SET_H_GPR (FLD (f_r1
), opval
);
1178 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1185 CASE (sem
, INSN_L_AND
) : /* l.and $rD,$rA,$rB */
1187 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1188 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1189 #define FLD(f) abuf->fields.sfmt_l_sll.f
1190 int UNUSED written
= 0;
1191 IADDR UNUSED pc
= abuf
->addr
;
1192 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1195 USI opval
= ANDSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1196 SET_H_GPR (FLD (f_r1
), opval
);
1197 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1204 CASE (sem
, INSN_L_OR
) : /* l.or $rD,$rA,$rB */
1206 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1207 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1208 #define FLD(f) abuf->fields.sfmt_l_sll.f
1209 int UNUSED written
= 0;
1210 IADDR UNUSED pc
= abuf
->addr
;
1211 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1214 USI opval
= ORSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1215 SET_H_GPR (FLD (f_r1
), opval
);
1216 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1223 CASE (sem
, INSN_L_XOR
) : /* l.xor $rD,$rA,$rB */
1225 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1226 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1227 #define FLD(f) abuf->fields.sfmt_l_sll.f
1228 int UNUSED written
= 0;
1229 IADDR UNUSED pc
= abuf
->addr
;
1230 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1233 USI opval
= XORSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1234 SET_H_GPR (FLD (f_r1
), opval
);
1235 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1242 CASE (sem
, INSN_L_ADD
) : /* l.add $rD,$rA,$rB */
1244 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1245 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1246 #define FLD(f) abuf->fields.sfmt_l_sll.f
1247 int UNUSED written
= 0;
1248 IADDR UNUSED pc
= abuf
->addr
;
1249 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1254 BI opval
= ADDCFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), 0);
1255 SET_H_SYS_SR_CY (opval
);
1256 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1259 BI opval
= ADDOFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), 0);
1260 SET_H_SYS_SR_OV (opval
);
1261 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1264 USI opval
= ADDSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1265 SET_H_GPR (FLD (f_r1
), opval
);
1266 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1269 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1270 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1278 CASE (sem
, INSN_L_SUB
) : /* l.sub $rD,$rA,$rB */
1280 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1281 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1282 #define FLD(f) abuf->fields.sfmt_l_sll.f
1283 int UNUSED written
= 0;
1284 IADDR UNUSED pc
= abuf
->addr
;
1285 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1290 BI opval
= SUBCFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), 0);
1291 SET_H_SYS_SR_CY (opval
);
1292 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1295 BI opval
= SUBOFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), 0);
1296 SET_H_SYS_SR_OV (opval
);
1297 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1300 USI opval
= SUBSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1301 SET_H_GPR (FLD (f_r1
), opval
);
1302 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1305 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1306 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1314 CASE (sem
, INSN_L_ADDC
) : /* l.addc $rD,$rA,$rB */
1316 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1317 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1318 #define FLD(f) abuf->fields.sfmt_l_sll.f
1319 int UNUSED written
= 0;
1320 IADDR UNUSED pc
= abuf
->addr
;
1321 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1325 BI tmp_tmp_sys_sr_cy
;
1326 tmp_tmp_sys_sr_cy
= GET_H_SYS_SR_CY ();
1328 BI opval
= ADDCFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), tmp_tmp_sys_sr_cy
);
1329 SET_H_SYS_SR_CY (opval
);
1330 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1333 BI opval
= ADDOFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), tmp_tmp_sys_sr_cy
);
1334 SET_H_SYS_SR_OV (opval
);
1335 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1338 USI opval
= ADDCSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)), tmp_tmp_sys_sr_cy
);
1339 SET_H_GPR (FLD (f_r1
), opval
);
1340 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1343 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1344 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1352 CASE (sem
, INSN_L_MUL
) : /* l.mul $rD,$rA,$rB */
1354 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1355 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1356 #define FLD(f) abuf->fields.sfmt_l_sll.f
1357 int UNUSED written
= 0;
1358 IADDR UNUSED pc
= abuf
->addr
;
1359 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1364 BI opval
= MUL2OFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1365 SET_H_SYS_SR_OV (opval
);
1366 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1369 BI opval
= MUL1OFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1370 SET_H_SYS_SR_CY (opval
);
1371 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1374 USI opval
= MULSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1375 SET_H_GPR (FLD (f_r1
), opval
);
1376 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1379 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1380 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1388 CASE (sem
, INSN_L_MULU
) : /* l.mulu $rD,$rA,$rB */
1390 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1391 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1392 #define FLD(f) abuf->fields.sfmt_l_sll.f
1393 int UNUSED written
= 0;
1394 IADDR UNUSED pc
= abuf
->addr
;
1395 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1401 SET_H_SYS_SR_OV (opval
);
1402 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1405 BI opval
= MUL1OFSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1406 SET_H_SYS_SR_CY (opval
);
1407 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1410 USI opval
= MULSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1411 SET_H_GPR (FLD (f_r1
), opval
);
1412 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1415 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1416 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1424 CASE (sem
, INSN_L_DIV
) : /* l.div $rD,$rA,$rB */
1426 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1427 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1428 #define FLD(f) abuf->fields.sfmt_l_sll.f
1429 int UNUSED written
= 0;
1430 IADDR UNUSED pc
= abuf
->addr
;
1431 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1434 if (NESI (GET_H_GPR (FLD (f_r3
)), 0)) {
1438 SET_H_SYS_SR_CY (opval
);
1439 written
|= (1 << 6);
1440 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1443 SI opval
= DIVSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1444 SET_H_GPR (FLD (f_r1
), opval
);
1445 written
|= (1 << 5);
1446 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1452 SET_H_SYS_SR_CY (opval
);
1453 written
|= (1 << 6);
1454 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1459 SET_H_SYS_SR_OV (opval
);
1460 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1462 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
1463 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1467 abuf
->written
= written
;
1472 CASE (sem
, INSN_L_DIVU
) : /* l.divu $rD,$rA,$rB */
1474 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1475 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1476 #define FLD(f) abuf->fields.sfmt_l_sll.f
1477 int UNUSED written
= 0;
1478 IADDR UNUSED pc
= abuf
->addr
;
1479 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1482 if (NESI (GET_H_GPR (FLD (f_r3
)), 0)) {
1486 SET_H_SYS_SR_CY (opval
);
1487 written
|= (1 << 6);
1488 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1491 USI opval
= UDIVSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1492 SET_H_GPR (FLD (f_r1
), opval
);
1493 written
|= (1 << 5);
1494 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1500 SET_H_SYS_SR_CY (opval
);
1501 written
|= (1 << 6);
1502 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1507 SET_H_SYS_SR_OV (opval
);
1508 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1510 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
1511 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1515 abuf
->written
= written
;
1520 CASE (sem
, INSN_L_FF1
) : /* l.ff1 $rD,$rA */
1522 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1523 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1524 #define FLD(f) abuf->fields.sfmt_l_slli.f
1525 int UNUSED written
= 0;
1526 IADDR UNUSED pc
= abuf
->addr
;
1527 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1530 USI opval
= or1k32bf_ff1 (current_cpu
, GET_H_GPR (FLD (f_r2
)));
1531 SET_H_GPR (FLD (f_r1
), opval
);
1532 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1539 CASE (sem
, INSN_L_FL1
) : /* l.fl1 $rD,$rA */
1541 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1542 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1543 #define FLD(f) abuf->fields.sfmt_l_slli.f
1544 int UNUSED written
= 0;
1545 IADDR UNUSED pc
= abuf
->addr
;
1546 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1549 USI opval
= or1k32bf_fl1 (current_cpu
, GET_H_GPR (FLD (f_r2
)));
1550 SET_H_GPR (FLD (f_r1
), opval
);
1551 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1558 CASE (sem
, INSN_L_ANDI
) : /* l.andi $rD,$rA,$uimm16 */
1560 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1561 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1562 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1563 int UNUSED written
= 0;
1564 IADDR UNUSED pc
= abuf
->addr
;
1565 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1568 USI opval
= ANDSI (GET_H_GPR (FLD (f_r2
)), ZEXTSISI (FLD (f_uimm16
)));
1569 SET_H_GPR (FLD (f_r1
), opval
);
1570 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1577 CASE (sem
, INSN_L_ORI
) : /* l.ori $rD,$rA,$uimm16 */
1579 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1580 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1581 #define FLD(f) abuf->fields.sfmt_l_mfspr.f
1582 int UNUSED written
= 0;
1583 IADDR UNUSED pc
= abuf
->addr
;
1584 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1587 USI opval
= ORSI (GET_H_GPR (FLD (f_r2
)), ZEXTSISI (FLD (f_uimm16
)));
1588 SET_H_GPR (FLD (f_r1
), opval
);
1589 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1596 CASE (sem
, INSN_L_XORI
) : /* l.xori $rD,$rA,$simm16 */
1598 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1599 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1600 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1601 int UNUSED written
= 0;
1602 IADDR UNUSED pc
= abuf
->addr
;
1603 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1606 USI opval
= XORSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1607 SET_H_GPR (FLD (f_r1
), opval
);
1608 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1615 CASE (sem
, INSN_L_ADDI
) : /* l.addi $rD,$rA,$simm16 */
1617 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1618 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1619 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1620 int UNUSED written
= 0;
1621 IADDR UNUSED pc
= abuf
->addr
;
1622 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1627 BI opval
= ADDCFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), 0);
1628 SET_H_SYS_SR_CY (opval
);
1629 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1632 BI opval
= ADDOFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), 0);
1633 SET_H_SYS_SR_OV (opval
);
1634 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1637 USI opval
= ADDSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1638 SET_H_GPR (FLD (f_r1
), opval
);
1639 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1642 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1643 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1651 CASE (sem
, INSN_L_ADDIC
) : /* l.addic $rD,$rA,$simm16 */
1653 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1654 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1655 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1656 int UNUSED written
= 0;
1657 IADDR UNUSED pc
= abuf
->addr
;
1658 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1662 BI tmp_tmp_sys_sr_cy
;
1663 tmp_tmp_sys_sr_cy
= GET_H_SYS_SR_CY ();
1665 BI opval
= ADDCFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), tmp_tmp_sys_sr_cy
);
1666 SET_H_SYS_SR_CY (opval
);
1667 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1670 BI opval
= ADDOFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), tmp_tmp_sys_sr_cy
);
1671 SET_H_SYS_SR_OV (opval
);
1672 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1675 SI opval
= ADDCSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)), tmp_tmp_sys_sr_cy
);
1676 SET_H_GPR (FLD (f_r1
), opval
);
1677 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1680 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1681 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1689 CASE (sem
, INSN_L_MULI
) : /* l.muli $rD,$rA,$simm16 */
1691 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1692 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1693 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1694 int UNUSED written
= 0;
1695 IADDR UNUSED pc
= abuf
->addr
;
1696 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1701 USI opval
= MUL2OFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1702 SET_H_SYS_SR_OV (opval
);
1703 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-ov", 'x', opval
);
1706 USI opval
= MUL1OFSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1707 SET_H_SYS_SR_CY (opval
);
1708 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-cy", 'x', opval
);
1711 USI opval
= MULSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1712 SET_H_GPR (FLD (f_r1
), opval
);
1713 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1716 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1717 or1k32bf_exception (current_cpu
, pc
, EXCEPT_RANGE
);
1725 CASE (sem
, INSN_L_EXTHS
) : /* l.exths $rD,$rA */
1727 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1728 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1729 #define FLD(f) abuf->fields.sfmt_l_slli.f
1730 int UNUSED written
= 0;
1731 IADDR UNUSED pc
= abuf
->addr
;
1732 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1735 USI opval
= EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2
))));
1736 SET_H_GPR (FLD (f_r1
), opval
);
1737 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1744 CASE (sem
, INSN_L_EXTBS
) : /* l.extbs $rD,$rA */
1746 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1747 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1748 #define FLD(f) abuf->fields.sfmt_l_slli.f
1749 int UNUSED written
= 0;
1750 IADDR UNUSED pc
= abuf
->addr
;
1751 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1754 USI opval
= EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2
))));
1755 SET_H_GPR (FLD (f_r1
), opval
);
1756 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1763 CASE (sem
, INSN_L_EXTHZ
) : /* l.exthz $rD,$rA */
1765 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1766 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1767 #define FLD(f) abuf->fields.sfmt_l_slli.f
1768 int UNUSED written
= 0;
1769 IADDR UNUSED pc
= abuf
->addr
;
1770 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1773 USI opval
= ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2
))));
1774 SET_H_GPR (FLD (f_r1
), opval
);
1775 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1782 CASE (sem
, INSN_L_EXTBZ
) : /* l.extbz $rD,$rA */
1784 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1785 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1786 #define FLD(f) abuf->fields.sfmt_l_slli.f
1787 int UNUSED written
= 0;
1788 IADDR UNUSED pc
= abuf
->addr
;
1789 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1792 USI opval
= ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2
))));
1793 SET_H_GPR (FLD (f_r1
), opval
);
1794 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1801 CASE (sem
, INSN_L_EXTWS
) : /* l.extws $rD,$rA */
1803 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1804 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1805 #define FLD(f) abuf->fields.sfmt_l_slli.f
1806 int UNUSED written
= 0;
1807 IADDR UNUSED pc
= abuf
->addr
;
1808 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1811 USI opval
= EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2
))));
1812 SET_H_GPR (FLD (f_r1
), opval
);
1813 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1820 CASE (sem
, INSN_L_EXTWZ
) : /* l.extwz $rD,$rA */
1822 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1823 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1824 #define FLD(f) abuf->fields.sfmt_l_slli.f
1825 int UNUSED written
= 0;
1826 IADDR UNUSED pc
= abuf
->addr
;
1827 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1830 USI opval
= ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2
))));
1831 SET_H_GPR (FLD (f_r1
), opval
);
1832 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1839 CASE (sem
, INSN_L_CMOV
) : /* l.cmov $rD,$rA,$rB */
1841 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1842 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1843 #define FLD(f) abuf->fields.sfmt_l_sll.f
1844 int UNUSED written
= 0;
1845 IADDR UNUSED pc
= abuf
->addr
;
1846 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1848 if (GET_H_SYS_SR_F ()) {
1850 USI opval
= GET_H_GPR (FLD (f_r2
));
1851 SET_H_GPR (FLD (f_r1
), opval
);
1852 written
|= (1 << 3);
1853 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1857 USI opval
= GET_H_GPR (FLD (f_r3
));
1858 SET_H_GPR (FLD (f_r1
), opval
);
1859 written
|= (1 << 3);
1860 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
1864 abuf
->written
= written
;
1869 CASE (sem
, INSN_L_SFGTS
) : /* l.sfgts $rA,$rB */
1871 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1872 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1873 #define FLD(f) abuf->fields.sfmt_l_sll.f
1874 int UNUSED written
= 0;
1875 IADDR UNUSED pc
= abuf
->addr
;
1876 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1879 USI opval
= GTSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1880 SET_H_SYS_SR_F (opval
);
1881 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
1888 CASE (sem
, INSN_L_SFGTSI
) : /* l.sfgtsi $rA,$simm16 */
1890 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1891 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1892 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1893 int UNUSED written
= 0;
1894 IADDR UNUSED pc
= abuf
->addr
;
1895 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1898 USI opval
= GTSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1899 SET_H_SYS_SR_F (opval
);
1900 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
1907 CASE (sem
, INSN_L_SFGTU
) : /* l.sfgtu $rA,$rB */
1909 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1910 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1911 #define FLD(f) abuf->fields.sfmt_l_sll.f
1912 int UNUSED written
= 0;
1913 IADDR UNUSED pc
= abuf
->addr
;
1914 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1917 USI opval
= GTUSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1918 SET_H_SYS_SR_F (opval
);
1919 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
1926 CASE (sem
, INSN_L_SFGTUI
) : /* l.sfgtui $rA,$simm16 */
1928 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1929 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1930 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1931 int UNUSED written
= 0;
1932 IADDR UNUSED pc
= abuf
->addr
;
1933 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1936 USI opval
= GTUSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
1937 SET_H_SYS_SR_F (opval
);
1938 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
1945 CASE (sem
, INSN_L_SFGES
) : /* l.sfges $rA,$rB */
1947 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1948 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1949 #define FLD(f) abuf->fields.sfmt_l_sll.f
1950 int UNUSED written
= 0;
1951 IADDR UNUSED pc
= abuf
->addr
;
1952 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1955 USI opval
= GESI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1956 SET_H_SYS_SR_F (opval
);
1957 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
1964 CASE (sem
, INSN_L_SFGESI
) : /* l.sfgesi $rA,$simm16 */
1966 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1967 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1968 #define FLD(f) abuf->fields.sfmt_l_lwz.f
1969 int UNUSED written
= 0;
1970 IADDR UNUSED pc
= abuf
->addr
;
1971 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1974 USI opval
= GESI (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
);
1983 CASE (sem
, INSN_L_SFGEU
) : /* l.sfgeu $rA,$rB */
1985 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
1986 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1987 #define FLD(f) abuf->fields.sfmt_l_sll.f
1988 int UNUSED written
= 0;
1989 IADDR UNUSED pc
= abuf
->addr
;
1990 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1993 USI opval
= GEUSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
1994 SET_H_SYS_SR_F (opval
);
1995 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2002 CASE (sem
, INSN_L_SFGEUI
) : /* l.sfgeui $rA,$simm16 */
2004 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2005 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2006 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2007 int UNUSED written
= 0;
2008 IADDR UNUSED pc
= abuf
->addr
;
2009 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2012 USI opval
= GEUSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2013 SET_H_SYS_SR_F (opval
);
2014 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2021 CASE (sem
, INSN_L_SFLTS
) : /* l.sflts $rA,$rB */
2023 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2024 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2025 #define FLD(f) abuf->fields.sfmt_l_sll.f
2026 int UNUSED written
= 0;
2027 IADDR UNUSED pc
= abuf
->addr
;
2028 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2031 USI opval
= LTSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2032 SET_H_SYS_SR_F (opval
);
2033 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2040 CASE (sem
, INSN_L_SFLTSI
) : /* l.sfltsi $rA,$simm16 */
2042 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2043 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2044 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2045 int UNUSED written
= 0;
2046 IADDR UNUSED pc
= abuf
->addr
;
2047 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2050 USI opval
= LTSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2051 SET_H_SYS_SR_F (opval
);
2052 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2059 CASE (sem
, INSN_L_SFLTU
) : /* l.sfltu $rA,$rB */
2061 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2063 #define FLD(f) abuf->fields.sfmt_l_sll.f
2064 int UNUSED written
= 0;
2065 IADDR UNUSED pc
= abuf
->addr
;
2066 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2069 USI opval
= LTUSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2070 SET_H_SYS_SR_F (opval
);
2071 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2078 CASE (sem
, INSN_L_SFLTUI
) : /* l.sfltui $rA,$simm16 */
2080 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2081 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2082 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2083 int UNUSED written
= 0;
2084 IADDR UNUSED pc
= abuf
->addr
;
2085 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2088 USI opval
= LTUSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2089 SET_H_SYS_SR_F (opval
);
2090 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2097 CASE (sem
, INSN_L_SFLES
) : /* l.sfles $rA,$rB */
2099 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2100 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2101 #define FLD(f) abuf->fields.sfmt_l_sll.f
2102 int UNUSED written
= 0;
2103 IADDR UNUSED pc
= abuf
->addr
;
2104 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2107 USI opval
= LESI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2108 SET_H_SYS_SR_F (opval
);
2109 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2116 CASE (sem
, INSN_L_SFLESI
) : /* l.sflesi $rA,$simm16 */
2118 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2119 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2120 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2121 int UNUSED written
= 0;
2122 IADDR UNUSED pc
= abuf
->addr
;
2123 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2126 USI opval
= LESI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2127 SET_H_SYS_SR_F (opval
);
2128 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2135 CASE (sem
, INSN_L_SFLEU
) : /* l.sfleu $rA,$rB */
2137 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2138 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2139 #define FLD(f) abuf->fields.sfmt_l_sll.f
2140 int UNUSED written
= 0;
2141 IADDR UNUSED pc
= abuf
->addr
;
2142 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2145 USI opval
= LEUSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2146 SET_H_SYS_SR_F (opval
);
2147 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2154 CASE (sem
, INSN_L_SFLEUI
) : /* l.sfleui $rA,$simm16 */
2156 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2157 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2158 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2159 int UNUSED written
= 0;
2160 IADDR UNUSED pc
= abuf
->addr
;
2161 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2164 USI opval
= LEUSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2165 SET_H_SYS_SR_F (opval
);
2166 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2173 CASE (sem
, INSN_L_SFEQ
) : /* l.sfeq $rA,$rB */
2175 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2176 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2177 #define FLD(f) abuf->fields.sfmt_l_sll.f
2178 int UNUSED written
= 0;
2179 IADDR UNUSED pc
= abuf
->addr
;
2180 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2183 USI opval
= EQSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2184 SET_H_SYS_SR_F (opval
);
2185 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2192 CASE (sem
, INSN_L_SFEQI
) : /* l.sfeqi $rA,$simm16 */
2194 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2195 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2196 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2197 int UNUSED written
= 0;
2198 IADDR UNUSED pc
= abuf
->addr
;
2199 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2202 USI opval
= EQSI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2203 SET_H_SYS_SR_F (opval
);
2204 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2211 CASE (sem
, INSN_L_SFNE
) : /* l.sfne $rA,$rB */
2213 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2214 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2215 #define FLD(f) abuf->fields.sfmt_l_sll.f
2216 int UNUSED written
= 0;
2217 IADDR UNUSED pc
= abuf
->addr
;
2218 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2221 USI opval
= NESI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2222 SET_H_SYS_SR_F (opval
);
2223 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2230 CASE (sem
, INSN_L_SFNEI
) : /* l.sfnei $rA,$simm16 */
2232 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2233 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2234 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2235 int UNUSED written
= 0;
2236 IADDR UNUSED pc
= abuf
->addr
;
2237 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2240 USI opval
= NESI (GET_H_GPR (FLD (f_r2
)), EXTSISI (FLD (f_simm16
)));
2241 SET_H_SYS_SR_F (opval
);
2242 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2249 CASE (sem
, INSN_L_MAC
) : /* l.mac $rA,$rB */
2251 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2252 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2253 #define FLD(f) abuf->fields.sfmt_l_sll.f
2254 int UNUSED written
= 0;
2255 IADDR UNUSED pc
= abuf
->addr
;
2256 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2261 tmp_prod
= MULSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2262 tmp_result
= ADDDI (JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ()), EXTSIDI (tmp_prod
));
2264 SI opval
= SUBWORDDISI (tmp_result
, 0);
2265 SET_H_MAC_MACHI (opval
);
2266 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
2269 SI opval
= SUBWORDDISI (tmp_result
, 1);
2270 SET_H_MAC_MACLO (opval
);
2271 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
2279 CASE (sem
, INSN_L_MSB
) : /* l.msb $rA,$rB */
2281 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2282 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2283 #define FLD(f) abuf->fields.sfmt_l_sll.f
2284 int UNUSED written
= 0;
2285 IADDR UNUSED pc
= abuf
->addr
;
2286 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2291 tmp_prod
= MULSI (GET_H_GPR (FLD (f_r2
)), GET_H_GPR (FLD (f_r3
)));
2292 tmp_result
= SUBDI (JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ()), EXTSIDI (tmp_prod
));
2294 SI opval
= SUBWORDDISI (tmp_result
, 0);
2295 SET_H_MAC_MACHI (opval
);
2296 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
2299 SI opval
= SUBWORDDISI (tmp_result
, 1);
2300 SET_H_MAC_MACLO (opval
);
2301 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
2309 CASE (sem
, INSN_L_MACI
) : /* l.maci $rA,${simm16} */
2311 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2312 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2313 #define FLD(f) abuf->fields.sfmt_l_lwz.f
2314 int UNUSED written
= 0;
2315 IADDR UNUSED pc
= abuf
->addr
;
2316 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2321 tmp_prod
= MULSI (EXTSISI (FLD (f_simm16
)), GET_H_GPR (FLD (f_r2
)));
2322 tmp_result
= ADDDI (JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ()), EXTSIDI (tmp_prod
));
2324 SI opval
= SUBWORDDISI (tmp_result
, 0);
2325 SET_H_MAC_MACHI (opval
);
2326 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-machi", 'x', opval
);
2329 SI opval
= SUBWORDDISI (tmp_result
, 1);
2330 SET_H_MAC_MACLO (opval
);
2331 CGEN_TRACE_RESULT (current_cpu
, abuf
, "mac-maclo", 'x', opval
);
2339 CASE (sem
, INSN_L_CUST1
) : /* l.cust1 */
2341 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2342 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2343 #define FLD(f) abuf->fields.sfmt_empty.f
2344 int UNUSED written
= 0;
2345 IADDR UNUSED pc
= abuf
->addr
;
2346 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2354 CASE (sem
, INSN_L_CUST2
) : /* l.cust2 */
2356 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2357 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2358 #define FLD(f) abuf->fields.sfmt_empty.f
2359 int UNUSED written
= 0;
2360 IADDR UNUSED pc
= abuf
->addr
;
2361 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2369 CASE (sem
, INSN_L_CUST3
) : /* l.cust3 */
2371 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2372 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2373 #define FLD(f) abuf->fields.sfmt_empty.f
2374 int UNUSED written
= 0;
2375 IADDR UNUSED pc
= abuf
->addr
;
2376 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2384 CASE (sem
, INSN_L_CUST4
) : /* l.cust4 */
2386 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2387 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2388 #define FLD(f) abuf->fields.sfmt_empty.f
2389 int UNUSED written
= 0;
2390 IADDR UNUSED pc
= abuf
->addr
;
2391 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2399 CASE (sem
, INSN_L_CUST5
) : /* l.cust5 */
2401 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2402 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2403 #define FLD(f) abuf->fields.sfmt_empty.f
2404 int UNUSED written
= 0;
2405 IADDR UNUSED pc
= abuf
->addr
;
2406 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2414 CASE (sem
, INSN_L_CUST6
) : /* l.cust6 */
2416 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2417 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2418 #define FLD(f) abuf->fields.sfmt_empty.f
2419 int UNUSED written
= 0;
2420 IADDR UNUSED pc
= abuf
->addr
;
2421 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2429 CASE (sem
, INSN_L_CUST7
) : /* l.cust7 */
2431 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2432 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2433 #define FLD(f) abuf->fields.sfmt_empty.f
2434 int UNUSED written
= 0;
2435 IADDR UNUSED pc
= abuf
->addr
;
2436 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2444 CASE (sem
, INSN_L_CUST8
) : /* l.cust8 */
2446 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2447 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2448 #define FLD(f) abuf->fields.sfmt_empty.f
2449 int UNUSED written
= 0;
2450 IADDR UNUSED pc
= abuf
->addr
;
2451 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2459 CASE (sem
, INSN_LF_ADD_S
) : /* lf.add.s $rDSF,$rASF,$rBSF */
2461 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2462 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2463 #define FLD(f) abuf->fields.sfmt_l_sll.f
2464 int UNUSED written
= 0;
2465 IADDR UNUSED pc
= abuf
->addr
;
2466 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2469 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
)));
2470 SET_H_FSR (FLD (f_r1
), opval
);
2471 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2478 CASE (sem
, INSN_LF_SUB_S
) : /* lf.sub.s $rDSF,$rASF,$rBSF */
2480 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2481 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2482 #define FLD(f) abuf->fields.sfmt_l_sll.f
2483 int UNUSED written
= 0;
2484 IADDR UNUSED pc
= abuf
->addr
;
2485 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2488 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
)));
2489 SET_H_FSR (FLD (f_r1
), opval
);
2490 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2497 CASE (sem
, INSN_LF_MUL_S
) : /* lf.mul.s $rDSF,$rASF,$rBSF */
2499 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2500 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2501 #define FLD(f) abuf->fields.sfmt_l_sll.f
2502 int UNUSED written
= 0;
2503 IADDR UNUSED pc
= abuf
->addr
;
2504 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2507 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
)));
2508 SET_H_FSR (FLD (f_r1
), opval
);
2509 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2516 CASE (sem
, INSN_LF_DIV_S
) : /* lf.div.s $rDSF,$rASF,$rBSF */
2518 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2519 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2520 #define FLD(f) abuf->fields.sfmt_l_sll.f
2521 int UNUSED written
= 0;
2522 IADDR UNUSED pc
= abuf
->addr
;
2523 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2526 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
)));
2527 SET_H_FSR (FLD (f_r1
), opval
);
2528 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2535 CASE (sem
, INSN_LF_REM_S
) : /* lf.rem.s $rDSF,$rASF,$rBSF */
2537 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2538 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2539 #define FLD(f) abuf->fields.sfmt_l_sll.f
2540 int UNUSED written
= 0;
2541 IADDR UNUSED pc
= abuf
->addr
;
2542 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2545 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
)));
2546 SET_H_FSR (FLD (f_r1
), opval
);
2547 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2554 CASE (sem
, INSN_LF_ITOF_S
) : /* lf.itof.s $rDSF,$rA */
2556 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2557 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2558 #define FLD(f) abuf->fields.sfmt_l_slli.f
2559 int UNUSED written
= 0;
2560 IADDR UNUSED pc
= abuf
->addr
;
2561 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2564 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
))));
2565 SET_H_FSR (FLD (f_r1
), opval
);
2566 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2573 CASE (sem
, INSN_LF_FTOI_S
) : /* lf.ftoi.s $rD,$rASF */
2575 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2576 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2577 #define FLD(f) abuf->fields.sfmt_l_slli.f
2578 int UNUSED written
= 0;
2579 IADDR UNUSED pc
= abuf
->addr
;
2580 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2583 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
))));
2584 SET_H_GPR (FLD (f_r1
), opval
);
2585 CGEN_TRACE_RESULT (current_cpu
, abuf
, "gpr", 'x', opval
);
2592 CASE (sem
, INSN_LF_EQ_S
) : /* lf.sfeq.s $rASF,$rBSF */
2594 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2595 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2596 #define FLD(f) abuf->fields.sfmt_l_sll.f
2597 int UNUSED written
= 0;
2598 IADDR UNUSED pc
= abuf
->addr
;
2599 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2602 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
)));
2603 SET_H_SYS_SR_F (opval
);
2604 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2611 CASE (sem
, INSN_LF_NE_S
) : /* lf.sfne.s $rASF,$rBSF */
2613 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2614 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2615 #define FLD(f) abuf->fields.sfmt_l_sll.f
2616 int UNUSED written
= 0;
2617 IADDR UNUSED pc
= abuf
->addr
;
2618 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2621 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
)));
2622 SET_H_SYS_SR_F (opval
);
2623 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2630 CASE (sem
, INSN_LF_GE_S
) : /* lf.sfge.s $rASF,$rBSF */
2632 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2633 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2634 #define FLD(f) abuf->fields.sfmt_l_sll.f
2635 int UNUSED written
= 0;
2636 IADDR UNUSED pc
= abuf
->addr
;
2637 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2640 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
)));
2641 SET_H_SYS_SR_F (opval
);
2642 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2649 CASE (sem
, INSN_LF_GT_S
) : /* lf.sfgt.s $rASF,$rBSF */
2651 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2652 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2653 #define FLD(f) abuf->fields.sfmt_l_sll.f
2654 int UNUSED written
= 0;
2655 IADDR UNUSED pc
= abuf
->addr
;
2656 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2659 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
)));
2660 SET_H_SYS_SR_F (opval
);
2661 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2668 CASE (sem
, INSN_LF_LT_S
) : /* lf.sflt.s $rASF,$rBSF */
2670 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2671 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2672 #define FLD(f) abuf->fields.sfmt_l_sll.f
2673 int UNUSED written
= 0;
2674 IADDR UNUSED pc
= abuf
->addr
;
2675 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2678 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
)));
2679 SET_H_SYS_SR_F (opval
);
2680 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2687 CASE (sem
, INSN_LF_LE_S
) : /* lf.sfle.s $rASF,$rBSF */
2689 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2690 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2691 #define FLD(f) abuf->fields.sfmt_l_sll.f
2692 int UNUSED written
= 0;
2693 IADDR UNUSED pc
= abuf
->addr
;
2694 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2697 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
)));
2698 SET_H_SYS_SR_F (opval
);
2699 CGEN_TRACE_RESULT (current_cpu
, abuf
, "sys-sr-f", 'x', opval
);
2706 CASE (sem
, INSN_LF_MADD_S
) : /* lf.madd.s $rDSF,$rASF,$rBSF */
2708 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2709 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2710 #define FLD(f) abuf->fields.sfmt_l_sll.f
2711 int UNUSED written
= 0;
2712 IADDR UNUSED pc
= abuf
->addr
;
2713 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2716 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
)));
2717 SET_H_FSR (FLD (f_r1
), opval
);
2718 CGEN_TRACE_RESULT (current_cpu
, abuf
, "fsr", 'f', opval
);
2725 CASE (sem
, INSN_LF_CUST1_S
) : /* lf.cust1.s $rASF,$rBSF */
2727 SEM_ARG sem_arg
= SEM_SEM_ARG (vpc
, sc
);
2728 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2729 #define FLD(f) abuf->fields.sfmt_empty.f
2730 int UNUSED written
= 0;
2731 IADDR UNUSED pc
= abuf
->addr
;
2732 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2742 ENDSWITCH (sem
) /* End of semantic switch. */
2744 /* At this point `vpc' contains the next insn to execute. */
2747 #undef DEFINE_SWITCH
2748 #endif /* DEFINE_SWITCH */