Update copyright year range in all GDB files.
[deliverable/binutils-gdb.git] / sim / or1k / sem-switch.c
CommitLineData
6e51bfa7
SH
1/* Simulator instruction semantics for or1k32bf.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
b811d2c2 5Copyright (C) 1996-2020 Free Software Foundation, Inc.
6e51bfa7
SH
6
7This 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 },
07f5f4c6 42 { OR1K32BF_INSN_L_ADRP, && case_sem_INSN_L_ADRP },
6e51bfa7
SH
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 },
07f5f4c6 85 { OR1K32BF_INSN_L_MULD, && case_sem_INSN_L_MULD },
6e51bfa7 86 { OR1K32BF_INSN_L_MULU, && case_sem_INSN_L_MULU },
07f5f4c6 87 { OR1K32BF_INSN_L_MULDU, && case_sem_INSN_L_MULDU },
6e51bfa7
SH
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 },
6e51bfa7 126 { OR1K32BF_INSN_L_MACI, && case_sem_INSN_L_MACI },
07f5f4c6
RH
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 },
6e51bfa7
SH
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 },
7ccbb443 139 { OR1K32BF_INSN_LF_ADD_D32, && case_sem_INSN_LF_ADD_D32 },
6e51bfa7 140 { OR1K32BF_INSN_LF_SUB_S, && case_sem_INSN_LF_SUB_S },
7ccbb443 141 { OR1K32BF_INSN_LF_SUB_D32, && case_sem_INSN_LF_SUB_D32 },
6e51bfa7 142 { OR1K32BF_INSN_LF_MUL_S, && case_sem_INSN_LF_MUL_S },
7ccbb443 143 { OR1K32BF_INSN_LF_MUL_D32, && case_sem_INSN_LF_MUL_D32 },
6e51bfa7 144 { OR1K32BF_INSN_LF_DIV_S, && case_sem_INSN_LF_DIV_S },
7ccbb443 145 { OR1K32BF_INSN_LF_DIV_D32, && case_sem_INSN_LF_DIV_D32 },
6e51bfa7 146 { OR1K32BF_INSN_LF_REM_S, && case_sem_INSN_LF_REM_S },
7ccbb443 147 { OR1K32BF_INSN_LF_REM_D32, && case_sem_INSN_LF_REM_D32 },
6e51bfa7 148 { OR1K32BF_INSN_LF_ITOF_S, && case_sem_INSN_LF_ITOF_S },
7ccbb443 149 { OR1K32BF_INSN_LF_ITOF_D32, && case_sem_INSN_LF_ITOF_D32 },
6e51bfa7 150 { OR1K32BF_INSN_LF_FTOI_S, && case_sem_INSN_LF_FTOI_S },
7ccbb443
SH
151 { OR1K32BF_INSN_LF_FTOI_D32, && case_sem_INSN_LF_FTOI_D32 },
152 { OR1K32BF_INSN_LF_SFEQ_S, && case_sem_INSN_LF_SFEQ_S },
153 { OR1K32BF_INSN_LF_SFEQ_D32, && case_sem_INSN_LF_SFEQ_D32 },
154 { OR1K32BF_INSN_LF_SFNE_S, && case_sem_INSN_LF_SFNE_S },
155 { OR1K32BF_INSN_LF_SFNE_D32, && case_sem_INSN_LF_SFNE_D32 },
156 { OR1K32BF_INSN_LF_SFGE_S, && case_sem_INSN_LF_SFGE_S },
157 { OR1K32BF_INSN_LF_SFGE_D32, && case_sem_INSN_LF_SFGE_D32 },
158 { OR1K32BF_INSN_LF_SFGT_S, && case_sem_INSN_LF_SFGT_S },
159 { OR1K32BF_INSN_LF_SFGT_D32, && case_sem_INSN_LF_SFGT_D32 },
160 { OR1K32BF_INSN_LF_SFLT_S, && case_sem_INSN_LF_SFLT_S },
161 { OR1K32BF_INSN_LF_SFLT_D32, && case_sem_INSN_LF_SFLT_D32 },
162 { OR1K32BF_INSN_LF_SFLE_S, && case_sem_INSN_LF_SFLE_S },
163 { OR1K32BF_INSN_LF_SFLE_D32, && case_sem_INSN_LF_SFLE_D32 },
164 { OR1K32BF_INSN_LF_SFUEQ_S, && case_sem_INSN_LF_SFUEQ_S },
165 { OR1K32BF_INSN_LF_SFUEQ_D32, && case_sem_INSN_LF_SFUEQ_D32 },
166 { OR1K32BF_INSN_LF_SFUNE_S, && case_sem_INSN_LF_SFUNE_S },
167 { OR1K32BF_INSN_LF_SFUNE_D32, && case_sem_INSN_LF_SFUNE_D32 },
168 { OR1K32BF_INSN_LF_SFUGT_S, && case_sem_INSN_LF_SFUGT_S },
169 { OR1K32BF_INSN_LF_SFUGT_D32, && case_sem_INSN_LF_SFUGT_D32 },
170 { OR1K32BF_INSN_LF_SFUGE_S, && case_sem_INSN_LF_SFUGE_S },
171 { OR1K32BF_INSN_LF_SFUGE_D32, && case_sem_INSN_LF_SFUGE_D32 },
172 { OR1K32BF_INSN_LF_SFULT_S, && case_sem_INSN_LF_SFULT_S },
173 { OR1K32BF_INSN_LF_SFULT_D32, && case_sem_INSN_LF_SFULT_D32 },
174 { OR1K32BF_INSN_LF_SFULE_S, && case_sem_INSN_LF_SFULE_S },
175 { OR1K32BF_INSN_LF_SFULE_D32, && case_sem_INSN_LF_SFULE_D32 },
176 { OR1K32BF_INSN_LF_SFUN_S, && case_sem_INSN_LF_SFUN_S },
177 { OR1K32BF_INSN_LF_SFUN_D32, && case_sem_INSN_LF_SFUN_D32 },
6e51bfa7 178 { OR1K32BF_INSN_LF_MADD_S, && case_sem_INSN_LF_MADD_S },
7ccbb443 179 { OR1K32BF_INSN_LF_MADD_D32, && case_sem_INSN_LF_MADD_D32 },
6e51bfa7 180 { OR1K32BF_INSN_LF_CUST1_S, && case_sem_INSN_LF_CUST1_S },
7ccbb443 181 { OR1K32BF_INSN_LF_CUST1_D32, && case_sem_INSN_LF_CUST1_D32 },
6e51bfa7
SH
182 { 0, 0 }
183 };
184 int i;
185
186 for (i = 0; labels[i].label != 0; ++i)
187 {
188#if FAST_P
189 CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
190#else
191 CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
192#endif
193 }
194
195#undef DEFINE_LABELS
196#endif /* DEFINE_LABELS */
197
198#ifdef DEFINE_SWITCH
199
200/* If hyper-fast [well not unnecessarily slow] execution is selected, turn
201 off frills like tracing and profiling. */
202/* FIXME: A better way would be to have TRACE_RESULT check for something
203 that can cause it to be optimized out. Another way would be to emit
204 special handlers into the instruction "stream". */
205
206#if FAST_P
207#undef CGEN_TRACE_RESULT
208#define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
209#endif
210
211#undef GET_ATTR
212#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
213
214{
215
216#if WITH_SCACHE_PBB
217
218/* Branch to next handler without going around main loop. */
219#define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
220SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
221
222#else /* ! WITH_SCACHE_PBB */
223
224#define NEXT(vpc) BREAK (sem)
225#ifdef __GNUC__
226#if FAST_P
227 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
228#else
229 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
230#endif
231#else
232 SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
233#endif
234
235#endif /* ! WITH_SCACHE_PBB */
236
237 {
238
239 CASE (sem, INSN_X_INVALID) : /* --invalid-- */
240{
241 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
242 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
243#define FLD(f) abuf->fields.sfmt_empty.f
244 int UNUSED written = 0;
245 IADDR UNUSED pc = abuf->addr;
246 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
247
248 {
249 /* Update the recorded pc in the cpu state struct.
250 Only necessary for WITH_SCACHE case, but to avoid the
251 conditional compilation .... */
252 SET_H_PC (pc);
253 /* Virtual insns have zero size. Overwrite vpc with address of next insn
254 using the default-insn-bitsize spec. When executing insns in parallel
255 we may want to queue the fault and continue execution. */
256 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
257 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
258 }
259
260#undef FLD
261}
262 NEXT (vpc);
263
264 CASE (sem, INSN_X_AFTER) : /* --after-- */
265{
266 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
267 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
268#define FLD(f) abuf->fields.sfmt_empty.f
269 int UNUSED written = 0;
270 IADDR UNUSED pc = abuf->addr;
271 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
272
273 {
274#if WITH_SCACHE_PBB_OR1K32BF
275 or1k32bf_pbb_after (current_cpu, sem_arg);
276#endif
277 }
278
279#undef FLD
280}
281 NEXT (vpc);
282
283 CASE (sem, INSN_X_BEFORE) : /* --before-- */
284{
285 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
286 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
287#define FLD(f) abuf->fields.sfmt_empty.f
288 int UNUSED written = 0;
289 IADDR UNUSED pc = abuf->addr;
290 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
291
292 {
293#if WITH_SCACHE_PBB_OR1K32BF
294 or1k32bf_pbb_before (current_cpu, sem_arg);
295#endif
296 }
297
298#undef FLD
299}
300 NEXT (vpc);
301
302 CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
303{
304 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
305 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
306#define FLD(f) abuf->fields.sfmt_empty.f
307 int UNUSED written = 0;
308 IADDR UNUSED pc = abuf->addr;
309 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
310
311 {
312#if WITH_SCACHE_PBB_OR1K32BF
313#ifdef DEFINE_SWITCH
314 vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
315 pbb_br_type, pbb_br_npc);
316 BREAK (sem);
317#else
318 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
319 vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg,
320 CPU_PBB_BR_TYPE (current_cpu),
321 CPU_PBB_BR_NPC (current_cpu));
322#endif
323#endif
324 }
325
326#undef FLD
327}
328 NEXT (vpc);
329
330 CASE (sem, INSN_X_CHAIN) : /* --chain-- */
331{
332 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
333 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
334#define FLD(f) abuf->fields.sfmt_empty.f
335 int UNUSED written = 0;
336 IADDR UNUSED pc = abuf->addr;
337 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
338
339 {
340#if WITH_SCACHE_PBB_OR1K32BF
341 vpc = or1k32bf_pbb_chain (current_cpu, sem_arg);
342#ifdef DEFINE_SWITCH
343 BREAK (sem);
344#endif
345#endif
346 }
347
348#undef FLD
349}
350 NEXT (vpc);
351
352 CASE (sem, INSN_X_BEGIN) : /* --begin-- */
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_empty.f
357 int UNUSED written = 0;
358 IADDR UNUSED pc = abuf->addr;
359 vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
360
361 {
362#if WITH_SCACHE_PBB_OR1K32BF
363#if defined DEFINE_SWITCH || defined FAST_P
364 /* In the switch case FAST_P is a constant, allowing several optimizations
365 in any called inline functions. */
366 vpc = or1k32bf_pbb_begin (current_cpu, FAST_P);
367#else
368#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
369 vpc = or1k32bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
370#else
371 vpc = or1k32bf_pbb_begin (current_cpu, 0);
372#endif
373#endif
374#endif
375 }
376
377#undef FLD
378}
379 NEXT (vpc);
380
381 CASE (sem, INSN_L_J) : /* l.j ${disp26} */
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_j.f
386 int UNUSED written = 0;
387 IADDR UNUSED pc = abuf->addr;
388 SEM_BRANCH_INIT
389 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
390
391{
392{
393 {
394 USI opval = FLD (i_disp26);
395 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
396 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
397 }
398}
399if (GET_H_SYS_CPUCFGR_ND ()) {
400if (1)
401 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
402}
403}
404
405 SEM_BRANCH_FINI (vpc);
406#undef FLD
407}
408 NEXT (vpc);
409
07f5f4c6
RH
410 CASE (sem, INSN_L_ADRP) : /* l.adrp $rD,${disp21} */
411{
412 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
413 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
414#define FLD(f) abuf->fields.sfmt_l_adrp.f
415 int UNUSED written = 0;
416 IADDR UNUSED pc = abuf->addr;
417 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
418
419 {
420 USI opval = FLD (i_disp21);
421 SET_H_GPR (FLD (f_r1), opval);
422 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
423 }
424
425#undef FLD
426}
427 NEXT (vpc);
428
6e51bfa7
SH
429 CASE (sem, INSN_L_JAL) : /* l.jal ${disp26} */
430{
431 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
432 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
433#define FLD(f) abuf->fields.sfmt_l_j.f
434 int UNUSED written = 0;
435 IADDR UNUSED pc = abuf->addr;
436 SEM_BRANCH_INIT
437 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
438
439{
440 {
441 USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
442 SET_H_GPR (((UINT) 9), opval);
443 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
444 }
445{
446{
447 {
448 USI opval = FLD (i_disp26);
449 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
450 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
451 }
452}
453if (GET_H_SYS_CPUCFGR_ND ()) {
454if (1)
455 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
456}
457}
458}
459
460 SEM_BRANCH_FINI (vpc);
461#undef FLD
462}
463 NEXT (vpc);
464
465 CASE (sem, INSN_L_JR) : /* l.jr $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 {
478 USI opval = GET_H_GPR (FLD (f_r3));
479 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
480 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
481 }
482}
483if (GET_H_SYS_CPUCFGR_ND ()) {
484if (1)
485 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
486}
487}
488
489 SEM_BRANCH_FINI (vpc);
490#undef FLD
491}
492 NEXT (vpc);
493
494 CASE (sem, INSN_L_JALR) : /* l.jalr $rB */
495{
496 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
497 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
498#define FLD(f) abuf->fields.sfmt_l_sll.f
499 int UNUSED written = 0;
500 IADDR UNUSED pc = abuf->addr;
501 SEM_BRANCH_INIT
502 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
503
504{
505 {
506 USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8)));
507 SET_H_GPR (((UINT) 9), opval);
508 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
509 }
510{
511{
512 {
513 USI opval = GET_H_GPR (FLD (f_r3));
514 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
515 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
516 }
517}
518if (GET_H_SYS_CPUCFGR_ND ()) {
519if (1)
520 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
521}
522}
523}
524
525 SEM_BRANCH_FINI (vpc);
526#undef FLD
527}
528 NEXT (vpc);
529
530 CASE (sem, INSN_L_BNF) : /* l.bnf ${disp26} */
531{
532 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
533 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
534#define FLD(f) abuf->fields.sfmt_l_j.f
535 int UNUSED written = 0;
536 IADDR UNUSED pc = abuf->addr;
537 SEM_BRANCH_INIT
538 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
539
540{
541if (NOTSI (GET_H_SYS_SR_F ())) {
542{
543 {
544 USI opval = FLD (i_disp26);
545 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
546 written |= (1 << 4);
547 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
548 }
549}
550} else {
551if (GET_H_SYS_CPUCFGR_ND ()) {
552{
553 {
554 USI opval = ADDSI (pc, 4);
555 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
556 written |= (1 << 4);
557 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
558 }
559}
560}
561}
562if (GET_H_SYS_CPUCFGR_ND ()) {
563if (1)
564 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
565}
566}
567
568 abuf->written = written;
569 SEM_BRANCH_FINI (vpc);
570#undef FLD
571}
572 NEXT (vpc);
573
574 CASE (sem, INSN_L_BF) : /* l.bf ${disp26} */
575{
576 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
577 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
578#define FLD(f) abuf->fields.sfmt_l_j.f
579 int UNUSED written = 0;
580 IADDR UNUSED pc = abuf->addr;
581 SEM_BRANCH_INIT
582 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
583
584{
585if (GET_H_SYS_SR_F ()) {
586{
587 {
588 USI opval = FLD (i_disp26);
589 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
590 written |= (1 << 4);
591 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
592 }
593}
594} else {
595if (GET_H_SYS_CPUCFGR_ND ()) {
596{
597 {
598 USI opval = ADDSI (pc, 4);
599 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
600 written |= (1 << 4);
601 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
602 }
603}
604}
605}
606if (GET_H_SYS_CPUCFGR_ND ()) {
607if (1)
608 SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
609}
610}
611
612 abuf->written = written;
613 SEM_BRANCH_FINI (vpc);
614#undef FLD
615}
616 NEXT (vpc);
617
618 CASE (sem, INSN_L_TRAP) : /* l.trap ${uimm16} */
619{
620 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
621 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
622#define FLD(f) abuf->fields.sfmt_empty.f
623 int UNUSED written = 0;
624 IADDR UNUSED pc = abuf->addr;
625 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
626
627or1k32bf_exception (current_cpu, pc, EXCEPT_TRAP);
628
629#undef FLD
630}
631 NEXT (vpc);
632
633 CASE (sem, INSN_L_SYS) : /* l.sys ${uimm16} */
634{
635 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
636 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
637#define FLD(f) abuf->fields.sfmt_empty.f
638 int UNUSED written = 0;
639 IADDR UNUSED pc = abuf->addr;
640 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
641
642or1k32bf_exception (current_cpu, pc, EXCEPT_SYSCALL);
643
644#undef FLD
645}
646 NEXT (vpc);
647
648 CASE (sem, INSN_L_MSYNC) : /* l.msync */
649{
650 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
651 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
652#define FLD(f) abuf->fields.sfmt_empty.f
653 int UNUSED written = 0;
654 IADDR UNUSED pc = abuf->addr;
655 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
656
657((void) 0); /*nop*/
658
659#undef FLD
660}
661 NEXT (vpc);
662
663 CASE (sem, INSN_L_PSYNC) : /* l.psync */
664{
665 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
666 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
667#define FLD(f) abuf->fields.sfmt_empty.f
668 int UNUSED written = 0;
669 IADDR UNUSED pc = abuf->addr;
670 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
671
672((void) 0); /*nop*/
673
674#undef FLD
675}
676 NEXT (vpc);
677
678 CASE (sem, INSN_L_CSYNC) : /* l.csync */
679{
680 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
681 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
682#define FLD(f) abuf->fields.sfmt_empty.f
683 int UNUSED written = 0;
684 IADDR UNUSED pc = abuf->addr;
685 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
686
687((void) 0); /*nop*/
688
689#undef FLD
690}
691 NEXT (vpc);
692
693 CASE (sem, INSN_L_RFE) : /* l.rfe */
694{
695 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
696 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
697#define FLD(f) abuf->fields.sfmt_empty.f
698 int UNUSED written = 0;
699 IADDR UNUSED pc = abuf->addr;
700 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
701
702or1k32bf_rfe (current_cpu);
703
704#undef FLD
705}
706 NEXT (vpc);
707
708 CASE (sem, INSN_L_NOP_IMM) : /* l.nop ${uimm16} */
709{
710 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
711 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
712#define FLD(f) abuf->fields.sfmt_l_mfspr.f
713 int UNUSED written = 0;
714 IADDR UNUSED pc = abuf->addr;
715 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
716
717or1k32bf_nop (current_cpu, ZEXTSISI (FLD (f_uimm16)));
718
719#undef FLD
720}
721 NEXT (vpc);
722
723 CASE (sem, INSN_L_MOVHI) : /* l.movhi $rD,$uimm16 */
724{
725 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
726 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
727#define FLD(f) abuf->fields.sfmt_l_mfspr.f
728 int UNUSED written = 0;
729 IADDR UNUSED pc = abuf->addr;
730 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
731
732 {
733 USI opval = SLLSI (ZEXTSISI (FLD (f_uimm16)), 16);
734 SET_H_GPR (FLD (f_r1), opval);
735 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
736 }
737
738#undef FLD
739}
740 NEXT (vpc);
741
742 CASE (sem, INSN_L_MACRC) : /* l.macrc $rD */
743{
744 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
745 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
07f5f4c6 746#define FLD(f) abuf->fields.sfmt_l_adrp.f
6e51bfa7
SH
747 int UNUSED written = 0;
748 IADDR UNUSED pc = abuf->addr;
749 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
750
751{
752 {
753 USI opval = GET_H_MAC_MACLO ();
754 SET_H_GPR (FLD (f_r1), opval);
755 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
756 }
757 {
758 USI opval = 0;
759 SET_H_MAC_MACLO (opval);
760 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
761 }
762 {
763 USI opval = 0;
764 SET_H_MAC_MACHI (opval);
765 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
766 }
767}
768
769#undef FLD
770}
771 NEXT (vpc);
772
773 CASE (sem, INSN_L_MFSPR) : /* l.mfspr $rD,$rA,${uimm16} */
774{
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_mfspr.f
778 int UNUSED written = 0;
779 IADDR UNUSED pc = abuf->addr;
780 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
781
782 {
783 USI opval = or1k32bf_mfspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))));
784 SET_H_GPR (FLD (f_r1), opval);
785 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
786 }
787
788#undef FLD
789}
790 NEXT (vpc);
791
792 CASE (sem, INSN_L_MTSPR) : /* l.mtspr $rA,$rB,${uimm16-split} */
793{
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_mtspr.f
797 int UNUSED written = 0;
798 IADDR UNUSED pc = abuf->addr;
799 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
800
801or1k32bf_mtspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16_split))), GET_H_GPR (FLD (f_r3)));
802
803#undef FLD
804}
805 NEXT (vpc);
806
807 CASE (sem, INSN_L_LWZ) : /* l.lwz $rD,${simm16}($rA) */
808{
809 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
810 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
811#define FLD(f) abuf->fields.sfmt_l_lwz.f
812 int UNUSED written = 0;
813 IADDR UNUSED pc = abuf->addr;
814 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
815
816 {
817 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)));
818 SET_H_GPR (FLD (f_r1), opval);
819 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
820 }
821
822#undef FLD
823}
824 NEXT (vpc);
825
826 CASE (sem, INSN_L_LWS) : /* l.lws $rD,${simm16}($rA) */
827{
828 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
829 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
830#define FLD(f) abuf->fields.sfmt_l_lwz.f
831 int UNUSED written = 0;
832 IADDR UNUSED pc = abuf->addr;
833 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
834
835 {
836 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)));
837 SET_H_GPR (FLD (f_r1), opval);
838 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
839 }
840
841#undef FLD
842}
843 NEXT (vpc);
844
845 CASE (sem, INSN_L_LWA) : /* l.lwa $rD,${simm16}($rA) */
846{
847 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
848 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
849#define FLD(f) abuf->fields.sfmt_l_lwz.f
850 int UNUSED written = 0;
851 IADDR UNUSED pc = abuf->addr;
852 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
853
854{
855 {
856 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)));
857 SET_H_GPR (FLD (f_r1), opval);
858 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
859 }
860 {
861 BI opval = 1;
862 CPU (h_atomic_reserve) = opval;
863 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
864 }
865 {
866 SI opval = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4);
867 CPU (h_atomic_address) = opval;
868 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-address", 'x', opval);
869 }
870}
871
872#undef FLD
873}
874 NEXT (vpc);
875
876 CASE (sem, INSN_L_LBZ) : /* l.lbz $rD,${simm16}($rA) */
877{
878 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
879 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
880#define FLD(f) abuf->fields.sfmt_l_lwz.f
881 int UNUSED written = 0;
882 IADDR UNUSED pc = abuf->addr;
883 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
884
885 {
886 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)));
887 SET_H_GPR (FLD (f_r1), opval);
888 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
889 }
890
891#undef FLD
892}
893 NEXT (vpc);
894
895 CASE (sem, INSN_L_LBS) : /* l.lbs $rD,${simm16}($rA) */
896{
897 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
898 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
899#define FLD(f) abuf->fields.sfmt_l_lwz.f
900 int UNUSED written = 0;
901 IADDR UNUSED pc = abuf->addr;
902 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
903
904 {
905 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)));
906 SET_H_GPR (FLD (f_r1), opval);
907 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
908 }
909
910#undef FLD
911}
912 NEXT (vpc);
913
914 CASE (sem, INSN_L_LHZ) : /* l.lhz $rD,${simm16}($rA) */
915{
916 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
917 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
918#define FLD(f) abuf->fields.sfmt_l_lwz.f
919 int UNUSED written = 0;
920 IADDR UNUSED pc = abuf->addr;
921 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
922
923 {
924 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)));
925 SET_H_GPR (FLD (f_r1), opval);
926 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
927 }
928
929#undef FLD
930}
931 NEXT (vpc);
932
933 CASE (sem, INSN_L_LHS) : /* l.lhs $rD,${simm16}($rA) */
934{
935 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
936 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
937#define FLD(f) abuf->fields.sfmt_l_lwz.f
938 int UNUSED written = 0;
939 IADDR UNUSED pc = abuf->addr;
940 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
941
942 {
943 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)));
944 SET_H_GPR (FLD (f_r1), opval);
945 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
946 }
947
948#undef FLD
949}
950 NEXT (vpc);
951
952 CASE (sem, INSN_L_SW) : /* l.sw ${simm16-split}($rA),$rB */
953{
954 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
955 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
956#define FLD(f) abuf->fields.sfmt_l_sw.f
957 int UNUSED written = 0;
958 IADDR UNUSED pc = abuf->addr;
959 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
960
961{
962 SI tmp_addr;
963 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
964 {
965 USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
966 SETMEMUSI (current_cpu, pc, tmp_addr, opval);
967 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
968 }
969if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
970 {
971 BI opval = 0;
972 CPU (h_atomic_reserve) = opval;
973 written |= (1 << 4);
974 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
975 }
976}
977}
978
979 abuf->written = written;
980#undef FLD
981}
982 NEXT (vpc);
983
984 CASE (sem, INSN_L_SB) : /* l.sb ${simm16-split}($rA),$rB */
985{
986 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
987 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
988#define FLD(f) abuf->fields.sfmt_l_sw.f
989 int UNUSED written = 0;
990 IADDR UNUSED pc = abuf->addr;
991 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
992
993{
994 SI tmp_addr;
995 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 1);
996 {
997 UQI opval = TRUNCSIQI (GET_H_GPR (FLD (f_r3)));
998 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
999 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1000 }
1001if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
1002 {
1003 BI opval = 0;
1004 CPU (h_atomic_reserve) = opval;
1005 written |= (1 << 4);
1006 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
1007 }
1008}
1009}
1010
1011 abuf->written = written;
1012#undef FLD
1013}
1014 NEXT (vpc);
1015
1016 CASE (sem, INSN_L_SH) : /* l.sh ${simm16-split}($rA),$rB */
1017{
1018 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1019 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1020#define FLD(f) abuf->fields.sfmt_l_sw.f
1021 int UNUSED written = 0;
1022 IADDR UNUSED pc = abuf->addr;
1023 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1024
1025{
1026 SI tmp_addr;
1027 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 2);
1028 {
1029 UHI opval = TRUNCSIHI (GET_H_GPR (FLD (f_r3)));
1030 SETMEMUHI (current_cpu, pc, tmp_addr, opval);
1031 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1032 }
1033if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) {
1034 {
1035 BI opval = 0;
1036 CPU (h_atomic_reserve) = opval;
1037 written |= (1 << 4);
1038 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
1039 }
1040}
1041}
1042
1043 abuf->written = written;
1044#undef FLD
1045}
1046 NEXT (vpc);
1047
1048 CASE (sem, INSN_L_SWA) : /* l.swa ${simm16-split}($rA),$rB */
1049{
1050 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1051 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1052#define FLD(f) abuf->fields.sfmt_l_sw.f
1053 int UNUSED written = 0;
1054 IADDR UNUSED pc = abuf->addr;
1055 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1056
1057{
1058 SI tmp_addr;
1059 BI tmp_flag;
1060 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4);
1061 {
1062 USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address)));
1063 SET_H_SYS_SR_F (opval);
1064 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1065 }
1066if (GET_H_SYS_SR_F ()) {
1067 {
1068 USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3)));
1069 SETMEMUSI (current_cpu, pc, tmp_addr, opval);
1070 written |= (1 << 7);
1071 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1072 }
1073}
1074 {
1075 BI opval = 0;
1076 CPU (h_atomic_reserve) = opval;
1077 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval);
1078 }
1079}
1080
1081 abuf->written = written;
1082#undef FLD
1083}
1084 NEXT (vpc);
1085
1086 CASE (sem, INSN_L_SLL) : /* l.sll $rD,$rA,$rB */
1087{
1088 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1089 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1090#define FLD(f) abuf->fields.sfmt_l_sll.f
1091 int UNUSED written = 0;
1092 IADDR UNUSED pc = abuf->addr;
1093 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1094
1095 {
1096 USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1097 SET_H_GPR (FLD (f_r1), opval);
1098 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1099 }
1100
1101#undef FLD
1102}
1103 NEXT (vpc);
1104
1105 CASE (sem, INSN_L_SLLI) : /* l.slli $rD,$rA,${uimm6} */
1106{
1107 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1108 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1109#define FLD(f) abuf->fields.sfmt_l_slli.f
1110 int UNUSED written = 0;
1111 IADDR UNUSED pc = abuf->addr;
1112 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1113
1114 {
1115 USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1116 SET_H_GPR (FLD (f_r1), opval);
1117 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1118 }
1119
1120#undef FLD
1121}
1122 NEXT (vpc);
1123
1124 CASE (sem, INSN_L_SRL) : /* l.srl $rD,$rA,$rB */
1125{
1126 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1127 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1128#define FLD(f) abuf->fields.sfmt_l_sll.f
1129 int UNUSED written = 0;
1130 IADDR UNUSED pc = abuf->addr;
1131 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1132
1133 {
1134 USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1135 SET_H_GPR (FLD (f_r1), opval);
1136 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1137 }
1138
1139#undef FLD
1140}
1141 NEXT (vpc);
1142
1143 CASE (sem, INSN_L_SRLI) : /* l.srli $rD,$rA,${uimm6} */
1144{
1145 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1146 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1147#define FLD(f) abuf->fields.sfmt_l_slli.f
1148 int UNUSED written = 0;
1149 IADDR UNUSED pc = abuf->addr;
1150 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1151
1152 {
1153 USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1154 SET_H_GPR (FLD (f_r1), opval);
1155 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1156 }
1157
1158#undef FLD
1159}
1160 NEXT (vpc);
1161
1162 CASE (sem, INSN_L_SRA) : /* l.sra $rD,$rA,$rB */
1163{
1164 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1165 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1166#define FLD(f) abuf->fields.sfmt_l_sll.f
1167 int UNUSED written = 0;
1168 IADDR UNUSED pc = abuf->addr;
1169 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1170
1171 {
1172 USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1173 SET_H_GPR (FLD (f_r1), opval);
1174 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1175 }
1176
1177#undef FLD
1178}
1179 NEXT (vpc);
1180
1181 CASE (sem, INSN_L_SRAI) : /* l.srai $rD,$rA,${uimm6} */
1182{
1183 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1184 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1185#define FLD(f) abuf->fields.sfmt_l_slli.f
1186 int UNUSED written = 0;
1187 IADDR UNUSED pc = abuf->addr;
1188 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1189
1190 {
1191 USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1192 SET_H_GPR (FLD (f_r1), opval);
1193 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1194 }
1195
1196#undef FLD
1197}
1198 NEXT (vpc);
1199
1200 CASE (sem, INSN_L_ROR) : /* l.ror $rD,$rA,$rB */
1201{
1202 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1203 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1204#define FLD(f) abuf->fields.sfmt_l_sll.f
1205 int UNUSED written = 0;
1206 IADDR UNUSED pc = abuf->addr;
1207 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1208
1209 {
1210 USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1211 SET_H_GPR (FLD (f_r1), opval);
1212 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1213 }
1214
1215#undef FLD
1216}
1217 NEXT (vpc);
1218
1219 CASE (sem, INSN_L_RORI) : /* l.rori $rD,$rA,${uimm6} */
1220{
1221 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1222 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1223#define FLD(f) abuf->fields.sfmt_l_slli.f
1224 int UNUSED written = 0;
1225 IADDR UNUSED pc = abuf->addr;
1226 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1227
1228 {
1229 USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6));
1230 SET_H_GPR (FLD (f_r1), opval);
1231 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1232 }
1233
1234#undef FLD
1235}
1236 NEXT (vpc);
1237
1238 CASE (sem, INSN_L_AND) : /* l.and $rD,$rA,$rB */
1239{
1240 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1241 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1242#define FLD(f) abuf->fields.sfmt_l_sll.f
1243 int UNUSED written = 0;
1244 IADDR UNUSED pc = abuf->addr;
1245 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1246
1247 {
1248 USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1249 SET_H_GPR (FLD (f_r1), opval);
1250 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1251 }
1252
1253#undef FLD
1254}
1255 NEXT (vpc);
1256
1257 CASE (sem, INSN_L_OR) : /* l.or $rD,$rA,$rB */
1258{
1259 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1260 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1261#define FLD(f) abuf->fields.sfmt_l_sll.f
1262 int UNUSED written = 0;
1263 IADDR UNUSED pc = abuf->addr;
1264 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1265
1266 {
1267 USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1268 SET_H_GPR (FLD (f_r1), opval);
1269 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1270 }
1271
1272#undef FLD
1273}
1274 NEXT (vpc);
1275
1276 CASE (sem, INSN_L_XOR) : /* l.xor $rD,$rA,$rB */
1277{
1278 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1279 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1280#define FLD(f) abuf->fields.sfmt_l_sll.f
1281 int UNUSED written = 0;
1282 IADDR UNUSED pc = abuf->addr;
1283 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1284
1285 {
1286 USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1287 SET_H_GPR (FLD (f_r1), opval);
1288 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1289 }
1290
1291#undef FLD
1292}
1293 NEXT (vpc);
1294
1295 CASE (sem, INSN_L_ADD) : /* l.add $rD,$rA,$rB */
1296{
1297 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1298 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1299#define FLD(f) abuf->fields.sfmt_l_sll.f
1300 int UNUSED written = 0;
1301 IADDR UNUSED pc = abuf->addr;
1302 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1303
1304{
1305{
1306 {
1307 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1308 SET_H_SYS_SR_CY (opval);
1309 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1310 }
1311 {
1312 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1313 SET_H_SYS_SR_OV (opval);
1314 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1315 }
1316 {
1317 USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1318 SET_H_GPR (FLD (f_r1), opval);
1319 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1320 }
1321}
1322if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1323or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1324}
1325}
1326
1327#undef FLD
1328}
1329 NEXT (vpc);
1330
1331 CASE (sem, INSN_L_SUB) : /* l.sub $rD,$rA,$rB */
1332{
1333 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1334 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1335#define FLD(f) abuf->fields.sfmt_l_sll.f
1336 int UNUSED written = 0;
1337 IADDR UNUSED pc = abuf->addr;
1338 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1339
1340{
1341{
1342 {
1343 BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1344 SET_H_SYS_SR_CY (opval);
1345 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1346 }
1347 {
1348 BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0);
1349 SET_H_SYS_SR_OV (opval);
1350 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1351 }
1352 {
1353 USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1354 SET_H_GPR (FLD (f_r1), opval);
1355 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1356 }
1357}
1358if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1359or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1360}
1361}
1362
1363#undef FLD
1364}
1365 NEXT (vpc);
1366
1367 CASE (sem, INSN_L_ADDC) : /* l.addc $rD,$rA,$rB */
1368{
1369 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1370 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1371#define FLD(f) abuf->fields.sfmt_l_sll.f
1372 int UNUSED written = 0;
1373 IADDR UNUSED pc = abuf->addr;
1374 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1375
1376{
1377{
1378 BI tmp_tmp_sys_sr_cy;
1379 tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1380 {
1381 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1382 SET_H_SYS_SR_CY (opval);
1383 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1384 }
1385 {
1386 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1387 SET_H_SYS_SR_OV (opval);
1388 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1389 }
1390 {
1391 USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy);
1392 SET_H_GPR (FLD (f_r1), opval);
1393 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1394 }
1395}
1396if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1397or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1398}
1399}
1400
1401#undef FLD
1402}
1403 NEXT (vpc);
1404
1405 CASE (sem, INSN_L_MUL) : /* l.mul $rD,$rA,$rB */
1406{
1407 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1408 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1409#define FLD(f) abuf->fields.sfmt_l_sll.f
1410 int UNUSED written = 0;
1411 IADDR UNUSED pc = abuf->addr;
1412 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1413
1414{
1415{
1416 {
1417 BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1418 SET_H_SYS_SR_OV (opval);
1419 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1420 }
6e51bfa7
SH
1421 {
1422 USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1423 SET_H_GPR (FLD (f_r1), opval);
1424 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1425 }
1426}
1427if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1428or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1429}
1430}
1431
1432#undef FLD
1433}
1434 NEXT (vpc);
1435
07f5f4c6 1436 CASE (sem, INSN_L_MULD) : /* l.muld $rA,$rB */
6e51bfa7
SH
1437{
1438 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1439 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1440#define FLD(f) abuf->fields.sfmt_l_sll.f
1441 int UNUSED written = 0;
1442 IADDR UNUSED pc = abuf->addr;
1443 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1444
1445{
07f5f4c6
RH
1446 DI tmp_result;
1447 tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
6e51bfa7 1448 {
07f5f4c6
RH
1449 SI opval = SUBWORDDISI (tmp_result, 0);
1450 SET_H_MAC_MACHI (opval);
1451 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
1452 }
1453 {
1454 SI opval = SUBWORDDISI (tmp_result, 1);
1455 SET_H_MAC_MACLO (opval);
1456 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
6e51bfa7 1457 }
07f5f4c6
RH
1458}
1459
1460#undef FLD
1461}
1462 NEXT (vpc);
1463
1464 CASE (sem, INSN_L_MULU) : /* l.mulu $rD,$rA,$rB */
1465{
1466 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1467 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1468#define FLD(f) abuf->fields.sfmt_l_sll.f
1469 int UNUSED written = 0;
1470 IADDR UNUSED pc = abuf->addr;
1471 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1472
1473{
1474{
6e51bfa7
SH
1475 {
1476 BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1477 SET_H_SYS_SR_CY (opval);
1478 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1479 }
1480 {
1481 USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1482 SET_H_GPR (FLD (f_r1), opval);
1483 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1484 }
1485}
07f5f4c6 1486if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
6e51bfa7
SH
1487or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1488}
1489}
1490
1491#undef FLD
1492}
1493 NEXT (vpc);
1494
07f5f4c6 1495 CASE (sem, INSN_L_MULDU) : /* l.muldu $rA,$rB */
6e51bfa7
SH
1496{
1497 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1498 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1499#define FLD(f) abuf->fields.sfmt_l_sll.f
1500 int UNUSED written = 0;
1501 IADDR UNUSED pc = abuf->addr;
1502 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1503
1504{
07f5f4c6
RH
1505 DI tmp_result;
1506 tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
1507 {
1508 SI opval = SUBWORDDISI (tmp_result, 0);
1509 SET_H_MAC_MACHI (opval);
1510 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
1511 }
1512 {
1513 SI opval = SUBWORDDISI (tmp_result, 1);
1514 SET_H_MAC_MACLO (opval);
1515 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
1516 }
1517}
1518
1519#undef FLD
1520}
1521 NEXT (vpc);
1522
1523 CASE (sem, INSN_L_DIV) : /* l.div $rD,$rA,$rB */
1524{
1525 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1526 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1527#define FLD(f) abuf->fields.sfmt_l_sll.f
1528 int UNUSED written = 0;
1529 IADDR UNUSED pc = abuf->addr;
1530 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1531
6e51bfa7
SH
1532if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1533{
1534 {
1535 BI opval = 0;
07f5f4c6
RH
1536 SET_H_SYS_SR_OV (opval);
1537 written |= (1 << 5);
1538 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
6e51bfa7
SH
1539 }
1540 {
1541 SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1542 SET_H_GPR (FLD (f_r1), opval);
07f5f4c6 1543 written |= (1 << 4);
6e51bfa7
SH
1544 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1545 }
1546}
1547} else {
07f5f4c6 1548{
6e51bfa7
SH
1549 {
1550 BI opval = 1;
6e51bfa7 1551 SET_H_SYS_SR_OV (opval);
07f5f4c6 1552 written |= (1 << 5);
6e51bfa7
SH
1553 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1554 }
07f5f4c6 1555if (GET_H_SYS_SR_OVE ()) {
6e51bfa7
SH
1556or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1557}
07f5f4c6 1558}
6e51bfa7
SH
1559}
1560
1561 abuf->written = written;
1562#undef FLD
1563}
1564 NEXT (vpc);
1565
1566 CASE (sem, INSN_L_DIVU) : /* l.divu $rD,$rA,$rB */
1567{
1568 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1569 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1570#define FLD(f) abuf->fields.sfmt_l_sll.f
1571 int UNUSED written = 0;
1572 IADDR UNUSED pc = abuf->addr;
1573 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1574
6e51bfa7
SH
1575if (NESI (GET_H_GPR (FLD (f_r3)), 0)) {
1576{
1577 {
1578 BI opval = 0;
1579 SET_H_SYS_SR_CY (opval);
07f5f4c6 1580 written |= (1 << 5);
6e51bfa7
SH
1581 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1582 }
1583 {
1584 USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1585 SET_H_GPR (FLD (f_r1), opval);
07f5f4c6 1586 written |= (1 << 4);
6e51bfa7
SH
1587 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1588 }
1589}
1590} else {
07f5f4c6 1591{
6e51bfa7
SH
1592 {
1593 BI opval = 1;
1594 SET_H_SYS_SR_CY (opval);
07f5f4c6 1595 written |= (1 << 5);
6e51bfa7
SH
1596 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1597 }
07f5f4c6 1598if (GET_H_SYS_SR_OVE ()) {
6e51bfa7
SH
1599or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1600}
07f5f4c6 1601}
6e51bfa7
SH
1602}
1603
1604 abuf->written = written;
1605#undef FLD
1606}
1607 NEXT (vpc);
1608
1609 CASE (sem, INSN_L_FF1) : /* l.ff1 $rD,$rA */
1610{
1611 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1612 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1613#define FLD(f) abuf->fields.sfmt_l_slli.f
1614 int UNUSED written = 0;
1615 IADDR UNUSED pc = abuf->addr;
1616 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1617
1618 {
1619 USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1620 SET_H_GPR (FLD (f_r1), opval);
1621 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1622 }
1623
1624#undef FLD
1625}
1626 NEXT (vpc);
1627
1628 CASE (sem, INSN_L_FL1) : /* l.fl1 $rD,$rA */
1629{
1630 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1631 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1632#define FLD(f) abuf->fields.sfmt_l_slli.f
1633 int UNUSED written = 0;
1634 IADDR UNUSED pc = abuf->addr;
1635 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1636
1637 {
1638 USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2)));
1639 SET_H_GPR (FLD (f_r1), opval);
1640 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1641 }
1642
1643#undef FLD
1644}
1645 NEXT (vpc);
1646
1647 CASE (sem, INSN_L_ANDI) : /* l.andi $rD,$rA,$uimm16 */
1648{
1649 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1650 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1651#define FLD(f) abuf->fields.sfmt_l_mfspr.f
1652 int UNUSED written = 0;
1653 IADDR UNUSED pc = abuf->addr;
1654 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1655
1656 {
1657 USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1658 SET_H_GPR (FLD (f_r1), opval);
1659 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1660 }
1661
1662#undef FLD
1663}
1664 NEXT (vpc);
1665
1666 CASE (sem, INSN_L_ORI) : /* l.ori $rD,$rA,$uimm16 */
1667{
1668 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1669 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1670#define FLD(f) abuf->fields.sfmt_l_mfspr.f
1671 int UNUSED written = 0;
1672 IADDR UNUSED pc = abuf->addr;
1673 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1674
1675 {
1676 USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)));
1677 SET_H_GPR (FLD (f_r1), opval);
1678 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1679 }
1680
1681#undef FLD
1682}
1683 NEXT (vpc);
1684
1685 CASE (sem, INSN_L_XORI) : /* l.xori $rD,$rA,$simm16 */
1686{
1687 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1688 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1689#define FLD(f) abuf->fields.sfmt_l_lwz.f
1690 int UNUSED written = 0;
1691 IADDR UNUSED pc = abuf->addr;
1692 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1693
1694 {
1695 USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1696 SET_H_GPR (FLD (f_r1), opval);
1697 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1698 }
1699
1700#undef FLD
1701}
1702 NEXT (vpc);
1703
1704 CASE (sem, INSN_L_ADDI) : /* l.addi $rD,$rA,$simm16 */
1705{
1706 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1707 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1708#define FLD(f) abuf->fields.sfmt_l_lwz.f
1709 int UNUSED written = 0;
1710 IADDR UNUSED pc = abuf->addr;
1711 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1712
1713{
1714{
1715 {
1716 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1717 SET_H_SYS_SR_CY (opval);
1718 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1719 }
1720 {
1721 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0);
1722 SET_H_SYS_SR_OV (opval);
1723 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1724 }
1725 {
1726 USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1727 SET_H_GPR (FLD (f_r1), opval);
1728 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1729 }
1730}
1731if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1732or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1733}
1734}
1735
1736#undef FLD
1737}
1738 NEXT (vpc);
1739
1740 CASE (sem, INSN_L_ADDIC) : /* l.addic $rD,$rA,$simm16 */
1741{
1742 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1743 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1744#define FLD(f) abuf->fields.sfmt_l_lwz.f
1745 int UNUSED written = 0;
1746 IADDR UNUSED pc = abuf->addr;
1747 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1748
1749{
1750{
1751 BI tmp_tmp_sys_sr_cy;
1752 tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY ();
1753 {
1754 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1755 SET_H_SYS_SR_CY (opval);
1756 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
1757 }
1758 {
1759 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1760 SET_H_SYS_SR_OV (opval);
1761 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1762 }
1763 {
1764 SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy);
1765 SET_H_GPR (FLD (f_r1), opval);
1766 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1767 }
1768}
1769if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1770or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1771}
1772}
1773
1774#undef FLD
1775}
1776 NEXT (vpc);
1777
1778 CASE (sem, INSN_L_MULI) : /* l.muli $rD,$rA,$simm16 */
1779{
1780 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1781 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1782#define FLD(f) abuf->fields.sfmt_l_lwz.f
1783 int UNUSED written = 0;
1784 IADDR UNUSED pc = abuf->addr;
1785 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1786
1787{
1788{
1789 {
1790 USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1791 SET_H_SYS_SR_OV (opval);
1792 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
1793 }
6e51bfa7
SH
1794 {
1795 USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1796 SET_H_GPR (FLD (f_r1), opval);
1797 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1798 }
1799}
1800if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
1801or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
1802}
1803}
1804
1805#undef FLD
1806}
1807 NEXT (vpc);
1808
1809 CASE (sem, INSN_L_EXTHS) : /* l.exths $rD,$rA */
1810{
1811 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1812 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1813#define FLD(f) abuf->fields.sfmt_l_slli.f
1814 int UNUSED written = 0;
1815 IADDR UNUSED pc = abuf->addr;
1816 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1817
1818 {
1819 USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1820 SET_H_GPR (FLD (f_r1), opval);
1821 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1822 }
1823
1824#undef FLD
1825}
1826 NEXT (vpc);
1827
1828 CASE (sem, INSN_L_EXTBS) : /* l.extbs $rD,$rA */
1829{
1830 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1831 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1832#define FLD(f) abuf->fields.sfmt_l_slli.f
1833 int UNUSED written = 0;
1834 IADDR UNUSED pc = abuf->addr;
1835 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1836
1837 {
1838 USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1839 SET_H_GPR (FLD (f_r1), opval);
1840 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1841 }
1842
1843#undef FLD
1844}
1845 NEXT (vpc);
1846
1847 CASE (sem, INSN_L_EXTHZ) : /* l.exthz $rD,$rA */
1848{
1849 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1850 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1851#define FLD(f) abuf->fields.sfmt_l_slli.f
1852 int UNUSED written = 0;
1853 IADDR UNUSED pc = abuf->addr;
1854 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1855
1856 {
1857 USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2))));
1858 SET_H_GPR (FLD (f_r1), opval);
1859 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1860 }
1861
1862#undef FLD
1863}
1864 NEXT (vpc);
1865
1866 CASE (sem, INSN_L_EXTBZ) : /* l.extbz $rD,$rA */
1867{
1868 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1869 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1870#define FLD(f) abuf->fields.sfmt_l_slli.f
1871 int UNUSED written = 0;
1872 IADDR UNUSED pc = abuf->addr;
1873 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1874
1875 {
1876 USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2))));
1877 SET_H_GPR (FLD (f_r1), opval);
1878 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1879 }
1880
1881#undef FLD
1882}
1883 NEXT (vpc);
1884
1885 CASE (sem, INSN_L_EXTWS) : /* l.extws $rD,$rA */
1886{
1887 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1888 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1889#define FLD(f) abuf->fields.sfmt_l_slli.f
1890 int UNUSED written = 0;
1891 IADDR UNUSED pc = abuf->addr;
1892 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1893
1894 {
1895 USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1896 SET_H_GPR (FLD (f_r1), opval);
1897 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1898 }
1899
1900#undef FLD
1901}
1902 NEXT (vpc);
1903
1904 CASE (sem, INSN_L_EXTWZ) : /* l.extwz $rD,$rA */
1905{
1906 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1907 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1908#define FLD(f) abuf->fields.sfmt_l_slli.f
1909 int UNUSED written = 0;
1910 IADDR UNUSED pc = abuf->addr;
1911 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1912
1913 {
1914 USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2))));
1915 SET_H_GPR (FLD (f_r1), opval);
1916 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1917 }
1918
1919#undef FLD
1920}
1921 NEXT (vpc);
1922
1923 CASE (sem, INSN_L_CMOV) : /* l.cmov $rD,$rA,$rB */
1924{
1925 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1926 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1927#define FLD(f) abuf->fields.sfmt_l_sll.f
1928 int UNUSED written = 0;
1929 IADDR UNUSED pc = abuf->addr;
1930 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1931
1932if (GET_H_SYS_SR_F ()) {
1933 {
1934 USI opval = GET_H_GPR (FLD (f_r2));
1935 SET_H_GPR (FLD (f_r1), opval);
1936 written |= (1 << 3);
1937 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1938 }
1939} else {
1940 {
1941 USI opval = GET_H_GPR (FLD (f_r3));
1942 SET_H_GPR (FLD (f_r1), opval);
1943 written |= (1 << 3);
1944 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
1945 }
1946}
1947
1948 abuf->written = written;
1949#undef FLD
1950}
1951 NEXT (vpc);
1952
1953 CASE (sem, INSN_L_SFGTS) : /* l.sfgts $rA,$rB */
1954{
1955 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1956 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1957#define FLD(f) abuf->fields.sfmt_l_sll.f
1958 int UNUSED written = 0;
1959 IADDR UNUSED pc = abuf->addr;
1960 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1961
1962 {
1963 USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
1964 SET_H_SYS_SR_F (opval);
1965 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1966 }
1967
1968#undef FLD
1969}
1970 NEXT (vpc);
1971
1972 CASE (sem, INSN_L_SFGTSI) : /* l.sfgtsi $rA,$simm16 */
1973{
1974 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1975 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1976#define FLD(f) abuf->fields.sfmt_l_lwz.f
1977 int UNUSED written = 0;
1978 IADDR UNUSED pc = abuf->addr;
1979 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1980
1981 {
1982 USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
1983 SET_H_SYS_SR_F (opval);
1984 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
1985 }
1986
1987#undef FLD
1988}
1989 NEXT (vpc);
1990
1991 CASE (sem, INSN_L_SFGTU) : /* l.sfgtu $rA,$rB */
1992{
1993 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1994 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1995#define FLD(f) abuf->fields.sfmt_l_sll.f
1996 int UNUSED written = 0;
1997 IADDR UNUSED pc = abuf->addr;
1998 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1999
2000 {
2001 USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2002 SET_H_SYS_SR_F (opval);
2003 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2004 }
2005
2006#undef FLD
2007}
2008 NEXT (vpc);
2009
2010 CASE (sem, INSN_L_SFGTUI) : /* l.sfgtui $rA,$simm16 */
2011{
2012 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2013 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2014#define FLD(f) abuf->fields.sfmt_l_lwz.f
2015 int UNUSED written = 0;
2016 IADDR UNUSED pc = abuf->addr;
2017 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2018
2019 {
2020 USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2021 SET_H_SYS_SR_F (opval);
2022 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2023 }
2024
2025#undef FLD
2026}
2027 NEXT (vpc);
2028
2029 CASE (sem, INSN_L_SFGES) : /* l.sfges $rA,$rB */
2030{
2031 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2032 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2033#define FLD(f) abuf->fields.sfmt_l_sll.f
2034 int UNUSED written = 0;
2035 IADDR UNUSED pc = abuf->addr;
2036 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2037
2038 {
2039 USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2040 SET_H_SYS_SR_F (opval);
2041 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2042 }
2043
2044#undef FLD
2045}
2046 NEXT (vpc);
2047
2048 CASE (sem, INSN_L_SFGESI) : /* l.sfgesi $rA,$simm16 */
2049{
2050 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2051 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2052#define FLD(f) abuf->fields.sfmt_l_lwz.f
2053 int UNUSED written = 0;
2054 IADDR UNUSED pc = abuf->addr;
2055 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2056
2057 {
2058 USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2059 SET_H_SYS_SR_F (opval);
2060 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2061 }
2062
2063#undef FLD
2064}
2065 NEXT (vpc);
2066
2067 CASE (sem, INSN_L_SFGEU) : /* l.sfgeu $rA,$rB */
2068{
2069 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2070 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2071#define FLD(f) abuf->fields.sfmt_l_sll.f
2072 int UNUSED written = 0;
2073 IADDR UNUSED pc = abuf->addr;
2074 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2075
2076 {
2077 USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2078 SET_H_SYS_SR_F (opval);
2079 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2080 }
2081
2082#undef FLD
2083}
2084 NEXT (vpc);
2085
2086 CASE (sem, INSN_L_SFGEUI) : /* l.sfgeui $rA,$simm16 */
2087{
2088 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2089 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2090#define FLD(f) abuf->fields.sfmt_l_lwz.f
2091 int UNUSED written = 0;
2092 IADDR UNUSED pc = abuf->addr;
2093 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2094
2095 {
2096 USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2097 SET_H_SYS_SR_F (opval);
2098 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2099 }
2100
2101#undef FLD
2102}
2103 NEXT (vpc);
2104
2105 CASE (sem, INSN_L_SFLTS) : /* l.sflts $rA,$rB */
2106{
2107 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2108 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2109#define FLD(f) abuf->fields.sfmt_l_sll.f
2110 int UNUSED written = 0;
2111 IADDR UNUSED pc = abuf->addr;
2112 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2113
2114 {
2115 USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2116 SET_H_SYS_SR_F (opval);
2117 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2118 }
2119
2120#undef FLD
2121}
2122 NEXT (vpc);
2123
2124 CASE (sem, INSN_L_SFLTSI) : /* l.sfltsi $rA,$simm16 */
2125{
2126 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2127 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2128#define FLD(f) abuf->fields.sfmt_l_lwz.f
2129 int UNUSED written = 0;
2130 IADDR UNUSED pc = abuf->addr;
2131 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2132
2133 {
2134 USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2135 SET_H_SYS_SR_F (opval);
2136 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2137 }
2138
2139#undef FLD
2140}
2141 NEXT (vpc);
2142
2143 CASE (sem, INSN_L_SFLTU) : /* l.sfltu $rA,$rB */
2144{
2145 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2146 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2147#define FLD(f) abuf->fields.sfmt_l_sll.f
2148 int UNUSED written = 0;
2149 IADDR UNUSED pc = abuf->addr;
2150 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2151
2152 {
2153 USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2154 SET_H_SYS_SR_F (opval);
2155 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2156 }
2157
2158#undef FLD
2159}
2160 NEXT (vpc);
2161
2162 CASE (sem, INSN_L_SFLTUI) : /* l.sfltui $rA,$simm16 */
2163{
2164 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2165 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2166#define FLD(f) abuf->fields.sfmt_l_lwz.f
2167 int UNUSED written = 0;
2168 IADDR UNUSED pc = abuf->addr;
2169 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2170
2171 {
2172 USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2173 SET_H_SYS_SR_F (opval);
2174 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2175 }
2176
2177#undef FLD
2178}
2179 NEXT (vpc);
2180
2181 CASE (sem, INSN_L_SFLES) : /* l.sfles $rA,$rB */
2182{
2183 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2184 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2185#define FLD(f) abuf->fields.sfmt_l_sll.f
2186 int UNUSED written = 0;
2187 IADDR UNUSED pc = abuf->addr;
2188 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2189
2190 {
2191 USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2192 SET_H_SYS_SR_F (opval);
2193 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2194 }
2195
2196#undef FLD
2197}
2198 NEXT (vpc);
2199
2200 CASE (sem, INSN_L_SFLESI) : /* l.sflesi $rA,$simm16 */
2201{
2202 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2203 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2204#define FLD(f) abuf->fields.sfmt_l_lwz.f
2205 int UNUSED written = 0;
2206 IADDR UNUSED pc = abuf->addr;
2207 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2208
2209 {
2210 USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2211 SET_H_SYS_SR_F (opval);
2212 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2213 }
2214
2215#undef FLD
2216}
2217 NEXT (vpc);
2218
2219 CASE (sem, INSN_L_SFLEU) : /* l.sfleu $rA,$rB */
2220{
2221 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2222 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2223#define FLD(f) abuf->fields.sfmt_l_sll.f
2224 int UNUSED written = 0;
2225 IADDR UNUSED pc = abuf->addr;
2226 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2227
2228 {
2229 USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2230 SET_H_SYS_SR_F (opval);
2231 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2232 }
2233
2234#undef FLD
2235}
2236 NEXT (vpc);
2237
2238 CASE (sem, INSN_L_SFLEUI) : /* l.sfleui $rA,$simm16 */
2239{
2240 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2241 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2242#define FLD(f) abuf->fields.sfmt_l_lwz.f
2243 int UNUSED written = 0;
2244 IADDR UNUSED pc = abuf->addr;
2245 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2246
2247 {
2248 USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2249 SET_H_SYS_SR_F (opval);
2250 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2251 }
2252
2253#undef FLD
2254}
2255 NEXT (vpc);
2256
2257 CASE (sem, INSN_L_SFEQ) : /* l.sfeq $rA,$rB */
2258{
2259 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2260 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2261#define FLD(f) abuf->fields.sfmt_l_sll.f
2262 int UNUSED written = 0;
2263 IADDR UNUSED pc = abuf->addr;
2264 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2265
2266 {
2267 USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2268 SET_H_SYS_SR_F (opval);
2269 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2270 }
2271
2272#undef FLD
2273}
2274 NEXT (vpc);
2275
2276 CASE (sem, INSN_L_SFEQI) : /* l.sfeqi $rA,$simm16 */
2277{
2278 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2279 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2280#define FLD(f) abuf->fields.sfmt_l_lwz.f
2281 int UNUSED written = 0;
2282 IADDR UNUSED pc = abuf->addr;
2283 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2284
2285 {
2286 USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2287 SET_H_SYS_SR_F (opval);
2288 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2289 }
2290
2291#undef FLD
2292}
2293 NEXT (vpc);
2294
2295 CASE (sem, INSN_L_SFNE) : /* l.sfne $rA,$rB */
2296{
2297 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2298 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2299#define FLD(f) abuf->fields.sfmt_l_sll.f
2300 int UNUSED written = 0;
2301 IADDR UNUSED pc = abuf->addr;
2302 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2303
2304 {
2305 USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)));
2306 SET_H_SYS_SR_F (opval);
2307 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2308 }
2309
2310#undef FLD
2311}
2312 NEXT (vpc);
2313
2314 CASE (sem, INSN_L_SFNEI) : /* l.sfnei $rA,$simm16 */
2315{
2316 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2317 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2318#define FLD(f) abuf->fields.sfmt_l_lwz.f
2319 int UNUSED written = 0;
2320 IADDR UNUSED pc = abuf->addr;
2321 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2322
2323 {
2324 USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)));
2325 SET_H_SYS_SR_F (opval);
2326 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2327 }
2328
2329#undef FLD
2330}
2331 NEXT (vpc);
2332
2333 CASE (sem, INSN_L_MAC) : /* l.mac $rA,$rB */
2334{
2335 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2336 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2337#define FLD(f) abuf->fields.sfmt_l_sll.f
2338 int UNUSED written = 0;
2339 IADDR UNUSED pc = abuf->addr;
2340 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2341
2342{
07f5f4c6
RH
2343{
2344 DI tmp_prod;
2345 DI tmp_mac;
2346 DI tmp_result;
2347 tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2348 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2349 tmp_result = ADDDI (tmp_prod, tmp_mac);
2350 {
2351 SI opval = SUBWORDDISI (tmp_result, 0);
2352 SET_H_MAC_MACHI (opval);
2353 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2354 }
2355 {
2356 SI opval = SUBWORDDISI (tmp_result, 1);
2357 SET_H_MAC_MACLO (opval);
2358 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2359 }
2360 {
2361 BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2362 SET_H_SYS_SR_OV (opval);
2363 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2364 }
2365}
2366if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2367or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2368}
2369}
2370
2371#undef FLD
2372}
2373 NEXT (vpc);
2374
2375 CASE (sem, INSN_L_MACI) : /* l.maci $rA,${simm16} */
2376{
2377 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2378 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2379#define FLD(f) abuf->fields.sfmt_l_lwz.f
2380 int UNUSED written = 0;
2381 IADDR UNUSED pc = abuf->addr;
2382 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2383
2384{
2385{
2386 DI tmp_prod;
2387 DI tmp_mac;
2388 DI tmp_result;
2389 tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16)));
2390 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2391 tmp_result = ADDDI (tmp_mac, tmp_prod);
2392 {
2393 SI opval = SUBWORDDISI (tmp_result, 0);
2394 SET_H_MAC_MACHI (opval);
2395 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2396 }
2397 {
2398 SI opval = SUBWORDDISI (tmp_result, 1);
2399 SET_H_MAC_MACLO (opval);
2400 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2401 }
2402 {
2403 BI opval = ADDOFDI (tmp_prod, tmp_mac, 0);
2404 SET_H_SYS_SR_OV (opval);
2405 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2406 }
2407}
2408if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2409or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2410}
2411}
2412
2413#undef FLD
2414}
2415 NEXT (vpc);
2416
2417 CASE (sem, INSN_L_MACU) : /* l.macu $rA,$rB */
2418{
2419 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2420 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2421#define FLD(f) abuf->fields.sfmt_l_sll.f
2422 int UNUSED written = 0;
2423 IADDR UNUSED pc = abuf->addr;
2424 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2425
2426{
2427{
2428 DI tmp_prod;
2429 DI tmp_mac;
6e51bfa7 2430 DI tmp_result;
07f5f4c6
RH
2431 tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2432 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2433 tmp_result = ADDDI (tmp_prod, tmp_mac);
6e51bfa7
SH
2434 {
2435 SI opval = SUBWORDDISI (tmp_result, 0);
2436 SET_H_MAC_MACHI (opval);
2437 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2438 }
2439 {
2440 SI opval = SUBWORDDISI (tmp_result, 1);
2441 SET_H_MAC_MACLO (opval);
2442 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2443 }
07f5f4c6
RH
2444 {
2445 BI opval = ADDCFDI (tmp_prod, tmp_mac, 0);
2446 SET_H_SYS_SR_CY (opval);
2447 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2448 }
2449}
2450if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2451or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2452}
6e51bfa7
SH
2453}
2454
2455#undef FLD
2456}
2457 NEXT (vpc);
2458
2459 CASE (sem, INSN_L_MSB) : /* l.msb $rA,$rB */
2460{
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);
2467
2468{
07f5f4c6
RH
2469{
2470 DI tmp_prod;
2471 DI tmp_mac;
6e51bfa7 2472 DI tmp_result;
07f5f4c6
RH
2473 tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3))));
2474 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2475 tmp_result = SUBDI (tmp_mac, tmp_prod);
6e51bfa7
SH
2476 {
2477 SI opval = SUBWORDDISI (tmp_result, 0);
2478 SET_H_MAC_MACHI (opval);
2479 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2480 }
2481 {
2482 SI opval = SUBWORDDISI (tmp_result, 1);
2483 SET_H_MAC_MACLO (opval);
2484 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2485 }
07f5f4c6
RH
2486 {
2487 BI opval = SUBOFDI (tmp_mac, tmp_result, 0);
2488 SET_H_SYS_SR_OV (opval);
2489 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval);
2490 }
2491}
2492if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) {
2493or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2494}
6e51bfa7
SH
2495}
2496
2497#undef FLD
2498}
2499 NEXT (vpc);
2500
07f5f4c6 2501 CASE (sem, INSN_L_MSBU) : /* l.msbu $rA,$rB */
6e51bfa7
SH
2502{
2503 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2504 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
07f5f4c6 2505#define FLD(f) abuf->fields.sfmt_l_sll.f
6e51bfa7
SH
2506 int UNUSED written = 0;
2507 IADDR UNUSED pc = abuf->addr;
2508 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2509
2510{
07f5f4c6
RH
2511{
2512 DI tmp_prod;
2513 DI tmp_mac;
6e51bfa7 2514 DI tmp_result;
07f5f4c6
RH
2515 tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3))));
2516 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ());
2517 tmp_result = SUBDI (tmp_mac, tmp_prod);
6e51bfa7
SH
2518 {
2519 SI opval = SUBWORDDISI (tmp_result, 0);
2520 SET_H_MAC_MACHI (opval);
2521 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval);
2522 }
2523 {
2524 SI opval = SUBWORDDISI (tmp_result, 1);
2525 SET_H_MAC_MACLO (opval);
2526 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval);
2527 }
07f5f4c6
RH
2528 {
2529 BI opval = SUBCFDI (tmp_mac, tmp_result, 0);
2530 SET_H_SYS_SR_CY (opval);
2531 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval);
2532 }
2533}
2534if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) {
2535or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE);
2536}
6e51bfa7
SH
2537}
2538
2539#undef FLD
2540}
2541 NEXT (vpc);
2542
2543 CASE (sem, INSN_L_CUST1) : /* l.cust1 */
2544{
2545 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2546 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2547#define FLD(f) abuf->fields.sfmt_empty.f
2548 int UNUSED written = 0;
2549 IADDR UNUSED pc = abuf->addr;
2550 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2551
2552((void) 0); /*nop*/
2553
2554#undef FLD
2555}
2556 NEXT (vpc);
2557
2558 CASE (sem, INSN_L_CUST2) : /* l.cust2 */
2559{
2560 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2561 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2562#define FLD(f) abuf->fields.sfmt_empty.f
2563 int UNUSED written = 0;
2564 IADDR UNUSED pc = abuf->addr;
2565 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2566
2567((void) 0); /*nop*/
2568
2569#undef FLD
2570}
2571 NEXT (vpc);
2572
2573 CASE (sem, INSN_L_CUST3) : /* l.cust3 */
2574{
2575 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2576 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2577#define FLD(f) abuf->fields.sfmt_empty.f
2578 int UNUSED written = 0;
2579 IADDR UNUSED pc = abuf->addr;
2580 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2581
2582((void) 0); /*nop*/
2583
2584#undef FLD
2585}
2586 NEXT (vpc);
2587
2588 CASE (sem, INSN_L_CUST4) : /* l.cust4 */
2589{
2590 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2591 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2592#define FLD(f) abuf->fields.sfmt_empty.f
2593 int UNUSED written = 0;
2594 IADDR UNUSED pc = abuf->addr;
2595 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2596
2597((void) 0); /*nop*/
2598
2599#undef FLD
2600}
2601 NEXT (vpc);
2602
2603 CASE (sem, INSN_L_CUST5) : /* l.cust5 */
2604{
2605 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2606 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2607#define FLD(f) abuf->fields.sfmt_empty.f
2608 int UNUSED written = 0;
2609 IADDR UNUSED pc = abuf->addr;
2610 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2611
2612((void) 0); /*nop*/
2613
2614#undef FLD
2615}
2616 NEXT (vpc);
2617
2618 CASE (sem, INSN_L_CUST6) : /* l.cust6 */
2619{
2620 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2621 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2622#define FLD(f) abuf->fields.sfmt_empty.f
2623 int UNUSED written = 0;
2624 IADDR UNUSED pc = abuf->addr;
2625 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2626
2627((void) 0); /*nop*/
2628
2629#undef FLD
2630}
2631 NEXT (vpc);
2632
2633 CASE (sem, INSN_L_CUST7) : /* l.cust7 */
2634{
2635 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2636 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2637#define FLD(f) abuf->fields.sfmt_empty.f
2638 int UNUSED written = 0;
2639 IADDR UNUSED pc = abuf->addr;
2640 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2641
2642((void) 0); /*nop*/
2643
2644#undef FLD
2645}
2646 NEXT (vpc);
2647
2648 CASE (sem, INSN_L_CUST8) : /* l.cust8 */
2649{
2650 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2651 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2652#define FLD(f) abuf->fields.sfmt_empty.f
2653 int UNUSED written = 0;
2654 IADDR UNUSED pc = abuf->addr;
2655 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2656
2657((void) 0); /*nop*/
2658
2659#undef FLD
2660}
2661 NEXT (vpc);
2662
2663 CASE (sem, INSN_LF_ADD_S) : /* lf.add.s $rDSF,$rASF,$rBSF */
2664{
2665 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2666 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2667#define FLD(f) abuf->fields.sfmt_l_sll.f
2668 int UNUSED written = 0;
2669 IADDR UNUSED pc = abuf->addr;
2670 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2671
2672 {
2673 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)));
2674 SET_H_FSR (FLD (f_r1), opval);
2675 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2676 }
2677
7ccbb443
SH
2678#undef FLD
2679}
2680 NEXT (vpc);
2681
2682 CASE (sem, INSN_LF_ADD_D32) : /* lf.add.d $rDD32F,$rAD32F,$rBD32F */
2683{
2684 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2685 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2686#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2687 int UNUSED written = 0;
2688 IADDR UNUSED pc = abuf->addr;
2689 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2690
2691 {
2692 DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2693 SET_H_FD32R (FLD (f_rdd32), opval);
2694 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2695 }
2696
6e51bfa7
SH
2697#undef FLD
2698}
2699 NEXT (vpc);
2700
2701 CASE (sem, INSN_LF_SUB_S) : /* lf.sub.s $rDSF,$rASF,$rBSF */
2702{
2703 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2704 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2705#define FLD(f) abuf->fields.sfmt_l_sll.f
2706 int UNUSED written = 0;
2707 IADDR UNUSED pc = abuf->addr;
2708 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2709
2710 {
2711 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)));
2712 SET_H_FSR (FLD (f_r1), opval);
2713 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2714 }
2715
7ccbb443
SH
2716#undef FLD
2717}
2718 NEXT (vpc);
2719
2720 CASE (sem, INSN_LF_SUB_D32) : /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */
2721{
2722 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2723 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2724#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2725 int UNUSED written = 0;
2726 IADDR UNUSED pc = abuf->addr;
2727 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2728
2729 {
2730 DF opval = CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2731 SET_H_FD32R (FLD (f_rdd32), opval);
2732 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2733 }
2734
6e51bfa7
SH
2735#undef FLD
2736}
2737 NEXT (vpc);
2738
2739 CASE (sem, INSN_LF_MUL_S) : /* lf.mul.s $rDSF,$rASF,$rBSF */
2740{
2741 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2742 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2743#define FLD(f) abuf->fields.sfmt_l_sll.f
2744 int UNUSED written = 0;
2745 IADDR UNUSED pc = abuf->addr;
2746 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2747
2748 {
2749 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)));
2750 SET_H_FSR (FLD (f_r1), opval);
2751 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2752 }
2753
7ccbb443
SH
2754#undef FLD
2755}
2756 NEXT (vpc);
2757
2758 CASE (sem, INSN_LF_MUL_D32) : /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */
2759{
2760 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2761 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2762#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2763 int UNUSED written = 0;
2764 IADDR UNUSED pc = abuf->addr;
2765 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2766
2767 {
2768 DF opval = CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2769 SET_H_FD32R (FLD (f_rdd32), opval);
2770 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2771 }
2772
6e51bfa7
SH
2773#undef FLD
2774}
2775 NEXT (vpc);
2776
2777 CASE (sem, INSN_LF_DIV_S) : /* lf.div.s $rDSF,$rASF,$rBSF */
2778{
2779 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2780 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2781#define FLD(f) abuf->fields.sfmt_l_sll.f
2782 int UNUSED written = 0;
2783 IADDR UNUSED pc = abuf->addr;
2784 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2785
2786 {
2787 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)));
2788 SET_H_FSR (FLD (f_r1), opval);
2789 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2790 }
2791
7ccbb443
SH
2792#undef FLD
2793}
2794 NEXT (vpc);
2795
2796 CASE (sem, INSN_LF_DIV_D32) : /* lf.div.d $rDD32F,$rAD32F,$rBD32F */
2797{
2798 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2799 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2800#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2801 int UNUSED written = 0;
2802 IADDR UNUSED pc = abuf->addr;
2803 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2804
2805 {
2806 DF opval = CGEN_CPU_FPU (current_cpu)->ops->divdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2807 SET_H_FD32R (FLD (f_rdd32), opval);
2808 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2809 }
2810
6e51bfa7
SH
2811#undef FLD
2812}
2813 NEXT (vpc);
2814
2815 CASE (sem, INSN_LF_REM_S) : /* lf.rem.s $rDSF,$rASF,$rBSF */
2816{
2817 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2818 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2819#define FLD(f) abuf->fields.sfmt_l_sll.f
2820 int UNUSED written = 0;
2821 IADDR UNUSED pc = abuf->addr;
2822 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2823
2824 {
2825 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)));
2826 SET_H_FSR (FLD (f_r1), opval);
2827 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2828 }
2829
7ccbb443
SH
2830#undef FLD
2831}
2832 NEXT (vpc);
2833
2834 CASE (sem, INSN_LF_REM_D32) : /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */
2835{
2836 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2837 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2838#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2839 int UNUSED written = 0;
2840 IADDR UNUSED pc = abuf->addr;
2841 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2842
2843 {
2844 DF opval = CGEN_CPU_FPU (current_cpu)->ops->remdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2845 SET_H_FD32R (FLD (f_rdd32), opval);
2846 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2847 }
2848
6e51bfa7
SH
2849#undef FLD
2850}
2851 NEXT (vpc);
2852
2853 CASE (sem, INSN_LF_ITOF_S) : /* lf.itof.s $rDSF,$rA */
2854{
2855 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2856 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2857#define FLD(f) abuf->fields.sfmt_l_slli.f
2858 int UNUSED written = 0;
2859 IADDR UNUSED pc = abuf->addr;
2860 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2861
2862 {
2863 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))));
2864 SET_H_FSR (FLD (f_r1), opval);
2865 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
2866 }
2867
7ccbb443
SH
2868#undef FLD
2869}
2870 NEXT (vpc);
2871
2872 CASE (sem, INSN_LF_ITOF_D32) : /* lf.itof.d $rDD32F,$rADI */
2873{
2874 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2875 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2876#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2877 int UNUSED written = 0;
2878 IADDR UNUSED pc = abuf->addr;
2879 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2880
2881 {
2882 DF opval = CGEN_CPU_FPU (current_cpu)->ops->floatdidf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_I64R (FLD (f_rad32)));
2883 SET_H_FD32R (FLD (f_rdd32), opval);
2884 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
2885 }
2886
6e51bfa7
SH
2887#undef FLD
2888}
2889 NEXT (vpc);
2890
2891 CASE (sem, INSN_LF_FTOI_S) : /* lf.ftoi.s $rD,$rASF */
2892{
2893 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2894 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2895#define FLD(f) abuf->fields.sfmt_l_slli.f
2896 int UNUSED written = 0;
2897 IADDR UNUSED pc = abuf->addr;
2898 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2899
2900 {
2901 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))));
2902 SET_H_GPR (FLD (f_r1), opval);
2903 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval);
2904 }
2905
2906#undef FLD
2907}
2908 NEXT (vpc);
2909
7ccbb443
SH
2910 CASE (sem, INSN_LF_FTOI_D32) : /* lf.ftoi.d $rDDI,$rAD32F */
2911{
2912 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2913 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2914#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2915 int UNUSED written = 0;
2916 IADDR UNUSED pc = abuf->addr;
2917 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2918
2919 {
2920 DI opval = CGEN_CPU_FPU (current_cpu)->ops->fixdfdi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FD32R (FLD (f_rad32)));
2921 SET_H_I64R (FLD (f_rdd32), opval);
2922 CGEN_TRACE_RESULT (current_cpu, abuf, "i64r", 'D', opval);
2923 }
2924
2925#undef FLD
2926}
2927 NEXT (vpc);
2928
2929 CASE (sem, INSN_LF_SFEQ_S) : /* lf.sfeq.s $rASF,$rBSF */
6e51bfa7
SH
2930{
2931 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2932 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2933#define FLD(f) abuf->fields.sfmt_l_sll.f
2934 int UNUSED written = 0;
2935 IADDR UNUSED pc = abuf->addr;
2936 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2937
2938 {
2939 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)));
2940 SET_H_SYS_SR_F (opval);
2941 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2942 }
2943
2944#undef FLD
2945}
2946 NEXT (vpc);
2947
7ccbb443
SH
2948 CASE (sem, INSN_LF_SFEQ_D32) : /* lf.sfeq.d $rAD32F,$rBD32F */
2949{
2950 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2951 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2952#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2953 int UNUSED written = 0;
2954 IADDR UNUSED pc = abuf->addr;
2955 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2956
2957 {
2958 BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2959 SET_H_SYS_SR_F (opval);
2960 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2961 }
2962
2963#undef FLD
2964}
2965 NEXT (vpc);
2966
2967 CASE (sem, INSN_LF_SFNE_S) : /* lf.sfne.s $rASF,$rBSF */
6e51bfa7
SH
2968{
2969 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2970 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2971#define FLD(f) abuf->fields.sfmt_l_sll.f
2972 int UNUSED written = 0;
2973 IADDR UNUSED pc = abuf->addr;
2974 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2975
2976 {
2977 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)));
2978 SET_H_SYS_SR_F (opval);
2979 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2980 }
2981
2982#undef FLD
2983}
2984 NEXT (vpc);
2985
7ccbb443
SH
2986 CASE (sem, INSN_LF_SFNE_D32) : /* lf.sfne.d $rAD32F,$rBD32F */
2987{
2988 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2989 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2990#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
2991 int UNUSED written = 0;
2992 IADDR UNUSED pc = abuf->addr;
2993 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2994
2995 {
2996 BI opval = CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
2997 SET_H_SYS_SR_F (opval);
2998 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
2999 }
3000
3001#undef FLD
3002}
3003 NEXT (vpc);
3004
3005 CASE (sem, INSN_LF_SFGE_S) : /* lf.sfge.s $rASF,$rBSF */
6e51bfa7
SH
3006{
3007 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3008 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3009#define FLD(f) abuf->fields.sfmt_l_sll.f
3010 int UNUSED written = 0;
3011 IADDR UNUSED pc = abuf->addr;
3012 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3013
3014 {
3015 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)));
3016 SET_H_SYS_SR_F (opval);
3017 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3018 }
3019
3020#undef FLD
3021}
3022 NEXT (vpc);
3023
7ccbb443
SH
3024 CASE (sem, INSN_LF_SFGE_D32) : /* lf.sfge.d $rAD32F,$rBD32F */
3025{
3026 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3027 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3028#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3029 int UNUSED written = 0;
3030 IADDR UNUSED pc = abuf->addr;
3031 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3032
3033 {
3034 BI opval = CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3035 SET_H_SYS_SR_F (opval);
3036 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3037 }
3038
3039#undef FLD
3040}
3041 NEXT (vpc);
3042
3043 CASE (sem, INSN_LF_SFGT_S) : /* lf.sfgt.s $rASF,$rBSF */
6e51bfa7
SH
3044{
3045 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3046 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3047#define FLD(f) abuf->fields.sfmt_l_sll.f
3048 int UNUSED written = 0;
3049 IADDR UNUSED pc = abuf->addr;
3050 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3051
3052 {
3053 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)));
3054 SET_H_SYS_SR_F (opval);
3055 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3056 }
3057
3058#undef FLD
3059}
3060 NEXT (vpc);
3061
7ccbb443
SH
3062 CASE (sem, INSN_LF_SFGT_D32) : /* lf.sfgt.d $rAD32F,$rBD32F */
3063{
3064 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3065 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3066#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3067 int UNUSED written = 0;
3068 IADDR UNUSED pc = abuf->addr;
3069 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3070
3071 {
3072 BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3073 SET_H_SYS_SR_F (opval);
3074 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3075 }
3076
3077#undef FLD
3078}
3079 NEXT (vpc);
3080
3081 CASE (sem, INSN_LF_SFLT_S) : /* lf.sflt.s $rASF,$rBSF */
6e51bfa7
SH
3082{
3083 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3084 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3085#define FLD(f) abuf->fields.sfmt_l_sll.f
3086 int UNUSED written = 0;
3087 IADDR UNUSED pc = abuf->addr;
3088 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3089
3090 {
3091 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)));
3092 SET_H_SYS_SR_F (opval);
3093 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3094 }
3095
3096#undef FLD
3097}
3098 NEXT (vpc);
3099
7ccbb443
SH
3100 CASE (sem, INSN_LF_SFLT_D32) : /* lf.sflt.d $rAD32F,$rBD32F */
3101{
3102 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3103 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3104#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3105 int UNUSED written = 0;
3106 IADDR UNUSED pc = abuf->addr;
3107 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3108
3109 {
3110 BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3111 SET_H_SYS_SR_F (opval);
3112 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3113 }
3114
3115#undef FLD
3116}
3117 NEXT (vpc);
3118
3119 CASE (sem, INSN_LF_SFLE_S) : /* lf.sfle.s $rASF,$rBSF */
6e51bfa7
SH
3120{
3121 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3122 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3123#define FLD(f) abuf->fields.sfmt_l_sll.f
3124 int UNUSED written = 0;
3125 IADDR UNUSED pc = abuf->addr;
3126 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3127
3128 {
3129 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)));
3130 SET_H_SYS_SR_F (opval);
3131 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3132 }
3133
7ccbb443
SH
3134#undef FLD
3135}
3136 NEXT (vpc);
3137
3138 CASE (sem, INSN_LF_SFLE_D32) : /* lf.sfle.d $rAD32F,$rBD32F */
3139{
3140 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3141 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3142#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3143 int UNUSED written = 0;
3144 IADDR UNUSED pc = abuf->addr;
3145 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3146
3147 {
3148 BI opval = CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3149 SET_H_SYS_SR_F (opval);
3150 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3151 }
3152
3153#undef FLD
3154}
3155 NEXT (vpc);
3156
3157 CASE (sem, INSN_LF_SFUEQ_S) : /* lf.sfueq.s $rASF,$rBSF */
3158{
3159 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3160 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3161#define FLD(f) abuf->fields.sfmt_l_sll.f
3162 int UNUSED written = 0;
3163 IADDR UNUSED pc = abuf->addr;
3164 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3165
3166 {
3167 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3168 SET_H_SYS_SR_F (opval);
3169 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3170 }
3171
3172#undef FLD
3173}
3174 NEXT (vpc);
3175
3176 CASE (sem, INSN_LF_SFUEQ_D32) : /* lf.sfueq.d $rAD32F,$rBD32F */
3177{
3178 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3179 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3180#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3181 int UNUSED written = 0;
3182 IADDR UNUSED pc = abuf->addr;
3183 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3184
3185 {
3186 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3187 SET_H_SYS_SR_F (opval);
3188 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3189 }
3190
3191#undef FLD
3192}
3193 NEXT (vpc);
3194
3195 CASE (sem, INSN_LF_SFUNE_S) : /* lf.sfune.s $rASF,$rBSF */
3196{
3197 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3198 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3199#define FLD(f) abuf->fields.sfmt_l_sll.f
3200 int UNUSED written = 0;
3201 IADDR UNUSED pc = abuf->addr;
3202 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3203
3204 {
3205 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3206 SET_H_SYS_SR_F (opval);
3207 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3208 }
3209
3210#undef FLD
3211}
3212 NEXT (vpc);
3213
3214 CASE (sem, INSN_LF_SFUNE_D32) : /* lf.sfune.d $rAD32F,$rBD32F */
3215{
3216 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3217 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3218#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3219 int UNUSED written = 0;
3220 IADDR UNUSED pc = abuf->addr;
3221 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3222
3223 {
3224 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3225 SET_H_SYS_SR_F (opval);
3226 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3227 }
3228
3229#undef FLD
3230}
3231 NEXT (vpc);
3232
3233 CASE (sem, INSN_LF_SFUGT_S) : /* lf.sfugt.s $rASF,$rBSF */
3234{
3235 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3236 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3237#define FLD(f) abuf->fields.sfmt_l_sll.f
3238 int UNUSED written = 0;
3239 IADDR UNUSED pc = abuf->addr;
3240 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3241
3242 {
3243 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3244 SET_H_SYS_SR_F (opval);
3245 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3246 }
3247
3248#undef FLD
3249}
3250 NEXT (vpc);
3251
3252 CASE (sem, INSN_LF_SFUGT_D32) : /* lf.sfugt.d $rAD32F,$rBD32F */
3253{
3254 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3255 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3256#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3257 int UNUSED written = 0;
3258 IADDR UNUSED pc = abuf->addr;
3259 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3260
3261 {
3262 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3263 SET_H_SYS_SR_F (opval);
3264 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3265 }
3266
3267#undef FLD
3268}
3269 NEXT (vpc);
3270
3271 CASE (sem, INSN_LF_SFUGE_S) : /* lf.sfuge.s $rASF,$rBSF */
3272{
3273 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3274 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3275#define FLD(f) abuf->fields.sfmt_l_sll.f
3276 int UNUSED written = 0;
3277 IADDR UNUSED pc = abuf->addr;
3278 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3279
3280 {
3281 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3282 SET_H_SYS_SR_F (opval);
3283 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3284 }
3285
3286#undef FLD
3287}
3288 NEXT (vpc);
3289
3290 CASE (sem, INSN_LF_SFUGE_D32) : /* lf.sfuge.d $rAD32F,$rBD32F */
3291{
3292 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3293 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3294#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3295 int UNUSED written = 0;
3296 IADDR UNUSED pc = abuf->addr;
3297 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3298
3299 {
3300 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3301 SET_H_SYS_SR_F (opval);
3302 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3303 }
3304
3305#undef FLD
3306}
3307 NEXT (vpc);
3308
3309 CASE (sem, INSN_LF_SFULT_S) : /* lf.sfult.s $rASF,$rBSF */
3310{
3311 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3312 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3313#define FLD(f) abuf->fields.sfmt_l_sll.f
3314 int UNUSED written = 0;
3315 IADDR UNUSED pc = abuf->addr;
3316 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3317
3318 {
3319 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3320 SET_H_SYS_SR_F (opval);
3321 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3322 }
3323
3324#undef FLD
3325}
3326 NEXT (vpc);
3327
3328 CASE (sem, INSN_LF_SFULT_D32) : /* lf.sfult.d $rAD32F,$rBD32F */
3329{
3330 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3331 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3332#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3333 int UNUSED written = 0;
3334 IADDR UNUSED pc = abuf->addr;
3335 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3336
3337 {
3338 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3339 SET_H_SYS_SR_F (opval);
3340 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3341 }
3342
3343#undef FLD
3344}
3345 NEXT (vpc);
3346
3347 CASE (sem, INSN_LF_SFULE_S) : /* lf.sfule.s $rASF,$rBSF */
3348{
3349 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3350 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3351#define FLD(f) abuf->fields.sfmt_l_sll.f
3352 int UNUSED written = 0;
3353 IADDR UNUSED pc = abuf->addr;
3354 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3355
3356 {
3357 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))));
3358 SET_H_SYS_SR_F (opval);
3359 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3360 }
3361
3362#undef FLD
3363}
3364 NEXT (vpc);
3365
3366 CASE (sem, INSN_LF_SFULE_D32) : /* lf.sfule.d $rAD32F,$rBD32F */
3367{
3368 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3369 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3370#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3371 int UNUSED written = 0;
3372 IADDR UNUSED pc = abuf->addr;
3373 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3374
3375 {
3376 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))));
3377 SET_H_SYS_SR_F (opval);
3378 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3379 }
3380
3381#undef FLD
3382}
3383 NEXT (vpc);
3384
3385 CASE (sem, INSN_LF_SFUN_S) : /* lf.sfun.s $rASF,$rBSF */
3386{
3387 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3388 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3389#define FLD(f) abuf->fields.sfmt_l_sll.f
3390 int UNUSED written = 0;
3391 IADDR UNUSED pc = abuf->addr;
3392 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3393
3394 {
3395 BI opval = CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)));
3396 SET_H_SYS_SR_F (opval);
3397 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3398 }
3399
3400#undef FLD
3401}
3402 NEXT (vpc);
3403
3404 CASE (sem, INSN_LF_SFUN_D32) : /* lf.sfun.d $rAD32F,$rBD32F */
3405{
3406 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3407 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3408#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3409 int UNUSED written = 0;
3410 IADDR UNUSED pc = abuf->addr;
3411 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3412
3413 {
3414 BI opval = CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)));
3415 SET_H_SYS_SR_F (opval);
3416 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval);
3417 }
3418
6e51bfa7
SH
3419#undef FLD
3420}
3421 NEXT (vpc);
3422
3423 CASE (sem, INSN_LF_MADD_S) : /* lf.madd.s $rDSF,$rASF,$rBSF */
3424{
3425 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3426 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3427#define FLD(f) abuf->fields.sfmt_l_sll.f
3428 int UNUSED written = 0;
3429 IADDR UNUSED pc = abuf->addr;
3430 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3431
3432 {
3433 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)));
3434 SET_H_FSR (FLD (f_r1), opval);
3435 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval);
3436 }
3437
7ccbb443
SH
3438#undef FLD
3439}
3440 NEXT (vpc);
3441
3442 CASE (sem, INSN_LF_MADD_D32) : /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */
3443{
3444 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3445 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3446#define FLD(f) abuf->fields.sfmt_lf_add_d32.f
3447 int UNUSED written = 0;
3448 IADDR UNUSED pc = abuf->addr;
3449 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3450
3451 {
3452 DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), GET_H_FD32R (FLD (f_rdd32)));
3453 SET_H_FD32R (FLD (f_rdd32), opval);
3454 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval);
3455 }
3456
6e51bfa7
SH
3457#undef FLD
3458}
3459 NEXT (vpc);
3460
3461 CASE (sem, INSN_LF_CUST1_S) : /* lf.cust1.s $rASF,$rBSF */
3462{
3463 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3464 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3465#define FLD(f) abuf->fields.sfmt_empty.f
3466 int UNUSED written = 0;
3467 IADDR UNUSED pc = abuf->addr;
3468 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3469
3470((void) 0); /*nop*/
3471
7ccbb443
SH
3472#undef FLD
3473}
3474 NEXT (vpc);
3475
3476 CASE (sem, INSN_LF_CUST1_D32) : /* lf.cust1.d */
3477{
3478 SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3479 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3480#define FLD(f) abuf->fields.sfmt_empty.f
3481 int UNUSED written = 0;
3482 IADDR UNUSED pc = abuf->addr;
3483 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3484
3485((void) 0); /*nop*/
3486
6e51bfa7
SH
3487#undef FLD
3488}
3489 NEXT (vpc);
3490
3491
3492 }
3493 ENDSWITCH (sem) /* End of semantic switch. */
3494
3495 /* At this point `vpc' contains the next insn to execute. */
3496}
3497
3498#undef DEFINE_SWITCH
3499#endif /* DEFINE_SWITCH */
This page took 0.23742 seconds and 4 git commands to generate.