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