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