2001-03-05 Dave Brolley <brolley@
[binutils-gdb.git] / sim / fr30 / sem.c
1 /* Simulator instruction semantics for fr30bf.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
6
7 This file is part of the GNU Simulators.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23 */
24
25 #define WANT_CPU fr30bf
26 #define WANT_CPU_FR30BF
27
28 #include "sim-main.h"
29 #include "cgen-mem.h"
30 #include "cgen-ops.h"
31
32 #undef GET_ATTR
33 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
34 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
35 #else
36 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
37 #endif
38
39 /* This is used so that we can compile two copies of the semantic code,
40 one with full feature support and one without that runs fast(er).
41 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */
42 #if FAST_P
43 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
44 #undef TRACE_RESULT
45 #define TRACE_RESULT(cpu, abuf, name, type, val)
46 #else
47 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
48 #endif
49
50 /* x-invalid: --invalid-- */
51
52 static SEM_PC
53 SEM_FN_NAME (fr30bf,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
54 {
55 #define FLD(f) abuf->fields.fmt_empty.f
56 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
57 int UNUSED written = 0;
58 IADDR UNUSED pc = abuf->addr;
59 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
60
61 {
62 /* Update the recorded pc in the cpu state struct.
63 Only necessary for WITH_SCACHE case, but to avoid the
64 conditional compilation .... */
65 SET_H_PC (pc);
66 /* Virtual insns have zero size. Overwrite vpc with address of next insn
67 using the default-insn-bitsize spec. When executing insns in parallel
68 we may want to queue the fault and continue execution. */
69 vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
70 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
71 }
72
73 return vpc;
74 #undef FLD
75 }
76
77 /* x-after: --after-- */
78
79 static SEM_PC
80 SEM_FN_NAME (fr30bf,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
81 {
82 #define FLD(f) abuf->fields.fmt_empty.f
83 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
84 int UNUSED written = 0;
85 IADDR UNUSED pc = abuf->addr;
86 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
87
88 {
89 #if WITH_SCACHE_PBB_FR30BF
90 fr30bf_pbb_after (current_cpu, sem_arg);
91 #endif
92 }
93
94 return vpc;
95 #undef FLD
96 }
97
98 /* x-before: --before-- */
99
100 static SEM_PC
101 SEM_FN_NAME (fr30bf,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
102 {
103 #define FLD(f) abuf->fields.fmt_empty.f
104 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
105 int UNUSED written = 0;
106 IADDR UNUSED pc = abuf->addr;
107 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
108
109 {
110 #if WITH_SCACHE_PBB_FR30BF
111 fr30bf_pbb_before (current_cpu, sem_arg);
112 #endif
113 }
114
115 return vpc;
116 #undef FLD
117 }
118
119 /* x-cti-chain: --cti-chain-- */
120
121 static SEM_PC
122 SEM_FN_NAME (fr30bf,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
123 {
124 #define FLD(f) abuf->fields.fmt_empty.f
125 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
126 int UNUSED written = 0;
127 IADDR UNUSED pc = abuf->addr;
128 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
129
130 {
131 #if WITH_SCACHE_PBB_FR30BF
132 #ifdef DEFINE_SWITCH
133 vpc = fr30bf_pbb_cti_chain (current_cpu, sem_arg,
134 pbb_br_type, pbb_br_npc);
135 BREAK (sem);
136 #else
137 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
138 vpc = fr30bf_pbb_cti_chain (current_cpu, sem_arg,
139 CPU_PBB_BR_TYPE (current_cpu),
140 CPU_PBB_BR_NPC (current_cpu));
141 #endif
142 #endif
143 }
144
145 return vpc;
146 #undef FLD
147 }
148
149 /* x-chain: --chain-- */
150
151 static SEM_PC
152 SEM_FN_NAME (fr30bf,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
153 {
154 #define FLD(f) abuf->fields.fmt_empty.f
155 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
156 int UNUSED written = 0;
157 IADDR UNUSED pc = abuf->addr;
158 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
159
160 {
161 #if WITH_SCACHE_PBB_FR30BF
162 vpc = fr30bf_pbb_chain (current_cpu, sem_arg);
163 #ifdef DEFINE_SWITCH
164 BREAK (sem);
165 #endif
166 #endif
167 }
168
169 return vpc;
170 #undef FLD
171 }
172
173 /* x-begin: --begin-- */
174
175 static SEM_PC
176 SEM_FN_NAME (fr30bf,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
177 {
178 #define FLD(f) abuf->fields.fmt_empty.f
179 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
180 int UNUSED written = 0;
181 IADDR UNUSED pc = abuf->addr;
182 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
183
184 {
185 #if WITH_SCACHE_PBB_FR30BF
186 #if defined DEFINE_SWITCH || defined FAST_P
187 /* In the switch case FAST_P is a constant, allowing several optimizations
188 in any called inline functions. */
189 vpc = fr30bf_pbb_begin (current_cpu, FAST_P);
190 #else
191 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
192 vpc = fr30bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
193 #else
194 vpc = fr30bf_pbb_begin (current_cpu, 0);
195 #endif
196 #endif
197 #endif
198 }
199
200 return vpc;
201 #undef FLD
202 }
203
204 /* add: add $Rj,$Ri */
205
206 static SEM_PC
207 SEM_FN_NAME (fr30bf,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
208 {
209 #define FLD(f) abuf->fields.sfmt_add.f
210 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
211 int UNUSED written = 0;
212 IADDR UNUSED pc = abuf->addr;
213 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
214
215 {
216 {
217 BI opval = ADDOFSI (* FLD (i_Ri), * FLD (i_Rj), 0);
218 CPU (h_vbit) = opval;
219 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
220 }
221 {
222 BI opval = ADDCFSI (* FLD (i_Ri), * FLD (i_Rj), 0);
223 CPU (h_cbit) = opval;
224 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
225 }
226 {
227 SI opval = ADDSI (* FLD (i_Ri), * FLD (i_Rj));
228 * FLD (i_Ri) = opval;
229 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
230 }
231 {
232 {
233 BI opval = EQSI (* FLD (i_Ri), 0);
234 CPU (h_zbit) = opval;
235 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
236 }
237 {
238 BI opval = LTSI (* FLD (i_Ri), 0);
239 CPU (h_nbit) = opval;
240 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
241 }
242 }
243 }
244
245 return vpc;
246 #undef FLD
247 }
248
249 /* addi: add $u4,$Ri */
250
251 static SEM_PC
252 SEM_FN_NAME (fr30bf,addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
253 {
254 #define FLD(f) abuf->fields.sfmt_addi.f
255 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
256 int UNUSED written = 0;
257 IADDR UNUSED pc = abuf->addr;
258 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
259
260 {
261 {
262 BI opval = ADDOFSI (* FLD (i_Ri), FLD (f_u4), 0);
263 CPU (h_vbit) = opval;
264 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
265 }
266 {
267 BI opval = ADDCFSI (* FLD (i_Ri), FLD (f_u4), 0);
268 CPU (h_cbit) = opval;
269 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
270 }
271 {
272 SI opval = ADDSI (* FLD (i_Ri), FLD (f_u4));
273 * FLD (i_Ri) = opval;
274 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
275 }
276 {
277 {
278 BI opval = EQSI (* FLD (i_Ri), 0);
279 CPU (h_zbit) = opval;
280 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
281 }
282 {
283 BI opval = LTSI (* FLD (i_Ri), 0);
284 CPU (h_nbit) = opval;
285 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
286 }
287 }
288 }
289
290 return vpc;
291 #undef FLD
292 }
293
294 /* add2: add2 $m4,$Ri */
295
296 static SEM_PC
297 SEM_FN_NAME (fr30bf,add2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
298 {
299 #define FLD(f) abuf->fields.sfmt_add2.f
300 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
301 int UNUSED written = 0;
302 IADDR UNUSED pc = abuf->addr;
303 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
304
305 {
306 {
307 BI opval = ADDOFSI (* FLD (i_Ri), FLD (f_m4), 0);
308 CPU (h_vbit) = opval;
309 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
310 }
311 {
312 BI opval = ADDCFSI (* FLD (i_Ri), FLD (f_m4), 0);
313 CPU (h_cbit) = opval;
314 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
315 }
316 {
317 SI opval = ADDSI (* FLD (i_Ri), FLD (f_m4));
318 * FLD (i_Ri) = opval;
319 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
320 }
321 {
322 {
323 BI opval = EQSI (* FLD (i_Ri), 0);
324 CPU (h_zbit) = opval;
325 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
326 }
327 {
328 BI opval = LTSI (* FLD (i_Ri), 0);
329 CPU (h_nbit) = opval;
330 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
331 }
332 }
333 }
334
335 return vpc;
336 #undef FLD
337 }
338
339 /* addc: addc $Rj,$Ri */
340
341 static SEM_PC
342 SEM_FN_NAME (fr30bf,addc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
343 {
344 #define FLD(f) abuf->fields.sfmt_add.f
345 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
346 int UNUSED written = 0;
347 IADDR UNUSED pc = abuf->addr;
348 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
349
350 {
351 SI tmp_tmp;
352 tmp_tmp = ADDCSI (* FLD (i_Ri), * FLD (i_Rj), CPU (h_cbit));
353 {
354 BI opval = ADDOFSI (* FLD (i_Ri), * FLD (i_Rj), CPU (h_cbit));
355 CPU (h_vbit) = opval;
356 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
357 }
358 {
359 BI opval = ADDCFSI (* FLD (i_Ri), * FLD (i_Rj), CPU (h_cbit));
360 CPU (h_cbit) = opval;
361 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
362 }
363 {
364 SI opval = tmp_tmp;
365 * FLD (i_Ri) = opval;
366 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
367 }
368 {
369 {
370 BI opval = EQSI (* FLD (i_Ri), 0);
371 CPU (h_zbit) = opval;
372 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
373 }
374 {
375 BI opval = LTSI (* FLD (i_Ri), 0);
376 CPU (h_nbit) = opval;
377 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
378 }
379 }
380 }
381
382 return vpc;
383 #undef FLD
384 }
385
386 /* addn: addn $Rj,$Ri */
387
388 static SEM_PC
389 SEM_FN_NAME (fr30bf,addn) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
390 {
391 #define FLD(f) abuf->fields.sfmt_add.f
392 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
393 int UNUSED written = 0;
394 IADDR UNUSED pc = abuf->addr;
395 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
396
397 {
398 SI opval = ADDSI (* FLD (i_Ri), * FLD (i_Rj));
399 * FLD (i_Ri) = opval;
400 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
401 }
402
403 return vpc;
404 #undef FLD
405 }
406
407 /* addni: addn $u4,$Ri */
408
409 static SEM_PC
410 SEM_FN_NAME (fr30bf,addni) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
411 {
412 #define FLD(f) abuf->fields.sfmt_addi.f
413 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
414 int UNUSED written = 0;
415 IADDR UNUSED pc = abuf->addr;
416 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
417
418 {
419 SI opval = ADDSI (* FLD (i_Ri), FLD (f_u4));
420 * FLD (i_Ri) = opval;
421 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
422 }
423
424 return vpc;
425 #undef FLD
426 }
427
428 /* addn2: addn2 $m4,$Ri */
429
430 static SEM_PC
431 SEM_FN_NAME (fr30bf,addn2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
432 {
433 #define FLD(f) abuf->fields.sfmt_add2.f
434 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
435 int UNUSED written = 0;
436 IADDR UNUSED pc = abuf->addr;
437 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
438
439 {
440 SI opval = ADDSI (* FLD (i_Ri), FLD (f_m4));
441 * FLD (i_Ri) = opval;
442 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
443 }
444
445 return vpc;
446 #undef FLD
447 }
448
449 /* sub: sub $Rj,$Ri */
450
451 static SEM_PC
452 SEM_FN_NAME (fr30bf,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
453 {
454 #define FLD(f) abuf->fields.sfmt_add.f
455 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
456 int UNUSED written = 0;
457 IADDR UNUSED pc = abuf->addr;
458 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
459
460 {
461 {
462 BI opval = SUBOFSI (* FLD (i_Ri), * FLD (i_Rj), 0);
463 CPU (h_vbit) = opval;
464 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
465 }
466 {
467 BI opval = SUBCFSI (* FLD (i_Ri), * FLD (i_Rj), 0);
468 CPU (h_cbit) = opval;
469 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
470 }
471 {
472 SI opval = SUBSI (* FLD (i_Ri), * FLD (i_Rj));
473 * FLD (i_Ri) = opval;
474 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
475 }
476 {
477 {
478 BI opval = EQSI (* FLD (i_Ri), 0);
479 CPU (h_zbit) = opval;
480 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
481 }
482 {
483 BI opval = LTSI (* FLD (i_Ri), 0);
484 CPU (h_nbit) = opval;
485 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
486 }
487 }
488 }
489
490 return vpc;
491 #undef FLD
492 }
493
494 /* subc: subc $Rj,$Ri */
495
496 static SEM_PC
497 SEM_FN_NAME (fr30bf,subc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
498 {
499 #define FLD(f) abuf->fields.sfmt_add.f
500 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
501 int UNUSED written = 0;
502 IADDR UNUSED pc = abuf->addr;
503 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
504
505 {
506 SI tmp_tmp;
507 tmp_tmp = SUBCSI (* FLD (i_Ri), * FLD (i_Rj), CPU (h_cbit));
508 {
509 BI opval = SUBOFSI (* FLD (i_Ri), * FLD (i_Rj), CPU (h_cbit));
510 CPU (h_vbit) = opval;
511 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
512 }
513 {
514 BI opval = SUBCFSI (* FLD (i_Ri), * FLD (i_Rj), CPU (h_cbit));
515 CPU (h_cbit) = opval;
516 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
517 }
518 {
519 SI opval = tmp_tmp;
520 * FLD (i_Ri) = opval;
521 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
522 }
523 {
524 {
525 BI opval = EQSI (* FLD (i_Ri), 0);
526 CPU (h_zbit) = opval;
527 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
528 }
529 {
530 BI opval = LTSI (* FLD (i_Ri), 0);
531 CPU (h_nbit) = opval;
532 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
533 }
534 }
535 }
536
537 return vpc;
538 #undef FLD
539 }
540
541 /* subn: subn $Rj,$Ri */
542
543 static SEM_PC
544 SEM_FN_NAME (fr30bf,subn) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
545 {
546 #define FLD(f) abuf->fields.sfmt_add.f
547 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
548 int UNUSED written = 0;
549 IADDR UNUSED pc = abuf->addr;
550 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
551
552 {
553 SI opval = SUBSI (* FLD (i_Ri), * FLD (i_Rj));
554 * FLD (i_Ri) = opval;
555 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
556 }
557
558 return vpc;
559 #undef FLD
560 }
561
562 /* cmp: cmp $Rj,$Ri */
563
564 static SEM_PC
565 SEM_FN_NAME (fr30bf,cmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
566 {
567 #define FLD(f) abuf->fields.sfmt_str13.f
568 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
569 int UNUSED written = 0;
570 IADDR UNUSED pc = abuf->addr;
571 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
572
573 {
574 SI tmp_tmp1;
575 {
576 BI opval = SUBOFSI (* FLD (i_Ri), * FLD (i_Rj), 0);
577 CPU (h_vbit) = opval;
578 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
579 }
580 {
581 BI opval = SUBCFSI (* FLD (i_Ri), * FLD (i_Rj), 0);
582 CPU (h_cbit) = opval;
583 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
584 }
585 tmp_tmp1 = SUBSI (* FLD (i_Ri), * FLD (i_Rj));
586 {
587 {
588 BI opval = EQSI (tmp_tmp1, 0);
589 CPU (h_zbit) = opval;
590 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
591 }
592 {
593 BI opval = LTSI (tmp_tmp1, 0);
594 CPU (h_nbit) = opval;
595 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
596 }
597 }
598 }
599
600 return vpc;
601 #undef FLD
602 }
603
604 /* cmpi: cmp $u4,$Ri */
605
606 static SEM_PC
607 SEM_FN_NAME (fr30bf,cmpi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
608 {
609 #define FLD(f) abuf->fields.sfmt_addi.f
610 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
611 int UNUSED written = 0;
612 IADDR UNUSED pc = abuf->addr;
613 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
614
615 {
616 SI tmp_tmp1;
617 {
618 BI opval = SUBOFSI (* FLD (i_Ri), FLD (f_u4), 0);
619 CPU (h_vbit) = opval;
620 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
621 }
622 {
623 BI opval = SUBCFSI (* FLD (i_Ri), FLD (f_u4), 0);
624 CPU (h_cbit) = opval;
625 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
626 }
627 tmp_tmp1 = SUBSI (* FLD (i_Ri), FLD (f_u4));
628 {
629 {
630 BI opval = EQSI (tmp_tmp1, 0);
631 CPU (h_zbit) = opval;
632 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
633 }
634 {
635 BI opval = LTSI (tmp_tmp1, 0);
636 CPU (h_nbit) = opval;
637 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
638 }
639 }
640 }
641
642 return vpc;
643 #undef FLD
644 }
645
646 /* cmp2: cmp2 $m4,$Ri */
647
648 static SEM_PC
649 SEM_FN_NAME (fr30bf,cmp2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
650 {
651 #define FLD(f) abuf->fields.sfmt_add2.f
652 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
653 int UNUSED written = 0;
654 IADDR UNUSED pc = abuf->addr;
655 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
656
657 {
658 SI tmp_tmp1;
659 {
660 BI opval = SUBOFSI (* FLD (i_Ri), FLD (f_m4), 0);
661 CPU (h_vbit) = opval;
662 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
663 }
664 {
665 BI opval = SUBCFSI (* FLD (i_Ri), FLD (f_m4), 0);
666 CPU (h_cbit) = opval;
667 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
668 }
669 tmp_tmp1 = SUBSI (* FLD (i_Ri), FLD (f_m4));
670 {
671 {
672 BI opval = EQSI (tmp_tmp1, 0);
673 CPU (h_zbit) = opval;
674 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
675 }
676 {
677 BI opval = LTSI (tmp_tmp1, 0);
678 CPU (h_nbit) = opval;
679 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
680 }
681 }
682 }
683
684 return vpc;
685 #undef FLD
686 }
687
688 /* and: and $Rj,$Ri */
689
690 static SEM_PC
691 SEM_FN_NAME (fr30bf,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
692 {
693 #define FLD(f) abuf->fields.sfmt_add.f
694 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
695 int UNUSED written = 0;
696 IADDR UNUSED pc = abuf->addr;
697 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
698
699 {
700 {
701 SI opval = ANDSI (* FLD (i_Ri), * FLD (i_Rj));
702 * FLD (i_Ri) = opval;
703 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
704 }
705 {
706 {
707 BI opval = EQSI (* FLD (i_Ri), 0);
708 CPU (h_zbit) = opval;
709 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
710 }
711 {
712 BI opval = LTSI (* FLD (i_Ri), 0);
713 CPU (h_nbit) = opval;
714 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
715 }
716 }
717 }
718
719 return vpc;
720 #undef FLD
721 }
722
723 /* or: or $Rj,$Ri */
724
725 static SEM_PC
726 SEM_FN_NAME (fr30bf,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
727 {
728 #define FLD(f) abuf->fields.sfmt_add.f
729 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
730 int UNUSED written = 0;
731 IADDR UNUSED pc = abuf->addr;
732 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
733
734 {
735 {
736 SI opval = ORSI (* FLD (i_Ri), * FLD (i_Rj));
737 * FLD (i_Ri) = opval;
738 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
739 }
740 {
741 {
742 BI opval = EQSI (* FLD (i_Ri), 0);
743 CPU (h_zbit) = opval;
744 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
745 }
746 {
747 BI opval = LTSI (* FLD (i_Ri), 0);
748 CPU (h_nbit) = opval;
749 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
750 }
751 }
752 }
753
754 return vpc;
755 #undef FLD
756 }
757
758 /* eor: eor $Rj,$Ri */
759
760 static SEM_PC
761 SEM_FN_NAME (fr30bf,eor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
762 {
763 #define FLD(f) abuf->fields.sfmt_add.f
764 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
765 int UNUSED written = 0;
766 IADDR UNUSED pc = abuf->addr;
767 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
768
769 {
770 {
771 SI opval = XORSI (* FLD (i_Ri), * FLD (i_Rj));
772 * FLD (i_Ri) = opval;
773 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
774 }
775 {
776 {
777 BI opval = EQSI (* FLD (i_Ri), 0);
778 CPU (h_zbit) = opval;
779 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
780 }
781 {
782 BI opval = LTSI (* FLD (i_Ri), 0);
783 CPU (h_nbit) = opval;
784 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
785 }
786 }
787 }
788
789 return vpc;
790 #undef FLD
791 }
792
793 /* andm: and $Rj,@$Ri */
794
795 static SEM_PC
796 SEM_FN_NAME (fr30bf,andm) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
797 {
798 #define FLD(f) abuf->fields.sfmt_str13.f
799 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
800 int UNUSED written = 0;
801 IADDR UNUSED pc = abuf->addr;
802 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
803
804 {
805 SI tmp_tmp;
806 tmp_tmp = ANDSI (GETMEMSI (current_cpu, pc, * FLD (i_Ri)), * FLD (i_Rj));
807 {
808 {
809 BI opval = EQSI (tmp_tmp, 0);
810 CPU (h_zbit) = opval;
811 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
812 }
813 {
814 BI opval = LTSI (tmp_tmp, 0);
815 CPU (h_nbit) = opval;
816 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
817 }
818 }
819 {
820 SI opval = tmp_tmp;
821 SETMEMSI (current_cpu, pc, * FLD (i_Ri), opval);
822 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
823 }
824 }
825
826 return vpc;
827 #undef FLD
828 }
829
830 /* andh: andh $Rj,@$Ri */
831
832 static SEM_PC
833 SEM_FN_NAME (fr30bf,andh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
834 {
835 #define FLD(f) abuf->fields.sfmt_str13.f
836 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
837 int UNUSED written = 0;
838 IADDR UNUSED pc = abuf->addr;
839 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
840
841 {
842 HI tmp_tmp;
843 tmp_tmp = ANDHI (GETMEMHI (current_cpu, pc, * FLD (i_Ri)), * FLD (i_Rj));
844 {
845 {
846 BI opval = EQHI (tmp_tmp, 0);
847 CPU (h_zbit) = opval;
848 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
849 }
850 {
851 BI opval = LTHI (tmp_tmp, 0);
852 CPU (h_nbit) = opval;
853 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
854 }
855 }
856 {
857 HI opval = tmp_tmp;
858 SETMEMHI (current_cpu, pc, * FLD (i_Ri), opval);
859 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
860 }
861 }
862
863 return vpc;
864 #undef FLD
865 }
866
867 /* andb: andb $Rj,@$Ri */
868
869 static SEM_PC
870 SEM_FN_NAME (fr30bf,andb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
871 {
872 #define FLD(f) abuf->fields.sfmt_str13.f
873 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
874 int UNUSED written = 0;
875 IADDR UNUSED pc = abuf->addr;
876 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
877
878 {
879 QI tmp_tmp;
880 tmp_tmp = ANDQI (GETMEMQI (current_cpu, pc, * FLD (i_Ri)), * FLD (i_Rj));
881 {
882 {
883 BI opval = EQQI (tmp_tmp, 0);
884 CPU (h_zbit) = opval;
885 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
886 }
887 {
888 BI opval = LTQI (tmp_tmp, 0);
889 CPU (h_nbit) = opval;
890 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
891 }
892 }
893 {
894 QI opval = tmp_tmp;
895 SETMEMQI (current_cpu, pc, * FLD (i_Ri), opval);
896 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
897 }
898 }
899
900 return vpc;
901 #undef FLD
902 }
903
904 /* orm: or $Rj,@$Ri */
905
906 static SEM_PC
907 SEM_FN_NAME (fr30bf,orm) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
908 {
909 #define FLD(f) abuf->fields.sfmt_str13.f
910 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
911 int UNUSED written = 0;
912 IADDR UNUSED pc = abuf->addr;
913 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
914
915 {
916 SI tmp_tmp;
917 tmp_tmp = ORSI (GETMEMSI (current_cpu, pc, * FLD (i_Ri)), * FLD (i_Rj));
918 {
919 {
920 BI opval = EQSI (tmp_tmp, 0);
921 CPU (h_zbit) = opval;
922 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
923 }
924 {
925 BI opval = LTSI (tmp_tmp, 0);
926 CPU (h_nbit) = opval;
927 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
928 }
929 }
930 {
931 SI opval = tmp_tmp;
932 SETMEMSI (current_cpu, pc, * FLD (i_Ri), opval);
933 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
934 }
935 }
936
937 return vpc;
938 #undef FLD
939 }
940
941 /* orh: orh $Rj,@$Ri */
942
943 static SEM_PC
944 SEM_FN_NAME (fr30bf,orh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
945 {
946 #define FLD(f) abuf->fields.sfmt_str13.f
947 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
948 int UNUSED written = 0;
949 IADDR UNUSED pc = abuf->addr;
950 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
951
952 {
953 HI tmp_tmp;
954 tmp_tmp = ORHI (GETMEMHI (current_cpu, pc, * FLD (i_Ri)), * FLD (i_Rj));
955 {
956 {
957 BI opval = EQHI (tmp_tmp, 0);
958 CPU (h_zbit) = opval;
959 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
960 }
961 {
962 BI opval = LTHI (tmp_tmp, 0);
963 CPU (h_nbit) = opval;
964 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
965 }
966 }
967 {
968 HI opval = tmp_tmp;
969 SETMEMHI (current_cpu, pc, * FLD (i_Ri), opval);
970 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
971 }
972 }
973
974 return vpc;
975 #undef FLD
976 }
977
978 /* orb: orb $Rj,@$Ri */
979
980 static SEM_PC
981 SEM_FN_NAME (fr30bf,orb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
982 {
983 #define FLD(f) abuf->fields.sfmt_str13.f
984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
985 int UNUSED written = 0;
986 IADDR UNUSED pc = abuf->addr;
987 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
988
989 {
990 QI tmp_tmp;
991 tmp_tmp = ORQI (GETMEMQI (current_cpu, pc, * FLD (i_Ri)), * FLD (i_Rj));
992 {
993 {
994 BI opval = EQQI (tmp_tmp, 0);
995 CPU (h_zbit) = opval;
996 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
997 }
998 {
999 BI opval = LTQI (tmp_tmp, 0);
1000 CPU (h_nbit) = opval;
1001 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1002 }
1003 }
1004 {
1005 QI opval = tmp_tmp;
1006 SETMEMQI (current_cpu, pc, * FLD (i_Ri), opval);
1007 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1008 }
1009 }
1010
1011 return vpc;
1012 #undef FLD
1013 }
1014
1015 /* eorm: eor $Rj,@$Ri */
1016
1017 static SEM_PC
1018 SEM_FN_NAME (fr30bf,eorm) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1019 {
1020 #define FLD(f) abuf->fields.sfmt_str13.f
1021 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1022 int UNUSED written = 0;
1023 IADDR UNUSED pc = abuf->addr;
1024 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1025
1026 {
1027 SI tmp_tmp;
1028 tmp_tmp = XORSI (GETMEMSI (current_cpu, pc, * FLD (i_Ri)), * FLD (i_Rj));
1029 {
1030 {
1031 BI opval = EQSI (tmp_tmp, 0);
1032 CPU (h_zbit) = opval;
1033 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1034 }
1035 {
1036 BI opval = LTSI (tmp_tmp, 0);
1037 CPU (h_nbit) = opval;
1038 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1039 }
1040 }
1041 {
1042 SI opval = tmp_tmp;
1043 SETMEMSI (current_cpu, pc, * FLD (i_Ri), opval);
1044 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1045 }
1046 }
1047
1048 return vpc;
1049 #undef FLD
1050 }
1051
1052 /* eorh: eorh $Rj,@$Ri */
1053
1054 static SEM_PC
1055 SEM_FN_NAME (fr30bf,eorh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1056 {
1057 #define FLD(f) abuf->fields.sfmt_str13.f
1058 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1059 int UNUSED written = 0;
1060 IADDR UNUSED pc = abuf->addr;
1061 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1062
1063 {
1064 HI tmp_tmp;
1065 tmp_tmp = XORHI (GETMEMHI (current_cpu, pc, * FLD (i_Ri)), * FLD (i_Rj));
1066 {
1067 {
1068 BI opval = EQHI (tmp_tmp, 0);
1069 CPU (h_zbit) = opval;
1070 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1071 }
1072 {
1073 BI opval = LTHI (tmp_tmp, 0);
1074 CPU (h_nbit) = opval;
1075 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1076 }
1077 }
1078 {
1079 HI opval = tmp_tmp;
1080 SETMEMHI (current_cpu, pc, * FLD (i_Ri), opval);
1081 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1082 }
1083 }
1084
1085 return vpc;
1086 #undef FLD
1087 }
1088
1089 /* eorb: eorb $Rj,@$Ri */
1090
1091 static SEM_PC
1092 SEM_FN_NAME (fr30bf,eorb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1093 {
1094 #define FLD(f) abuf->fields.sfmt_str13.f
1095 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1096 int UNUSED written = 0;
1097 IADDR UNUSED pc = abuf->addr;
1098 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1099
1100 {
1101 QI tmp_tmp;
1102 tmp_tmp = XORQI (GETMEMQI (current_cpu, pc, * FLD (i_Ri)), * FLD (i_Rj));
1103 {
1104 {
1105 BI opval = EQQI (tmp_tmp, 0);
1106 CPU (h_zbit) = opval;
1107 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1108 }
1109 {
1110 BI opval = LTQI (tmp_tmp, 0);
1111 CPU (h_nbit) = opval;
1112 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1113 }
1114 }
1115 {
1116 QI opval = tmp_tmp;
1117 SETMEMQI (current_cpu, pc, * FLD (i_Ri), opval);
1118 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1119 }
1120 }
1121
1122 return vpc;
1123 #undef FLD
1124 }
1125
1126 /* bandl: bandl $u4,@$Ri */
1127
1128 static SEM_PC
1129 SEM_FN_NAME (fr30bf,bandl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1130 {
1131 #define FLD(f) abuf->fields.sfmt_addi.f
1132 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1133 int UNUSED written = 0;
1134 IADDR UNUSED pc = abuf->addr;
1135 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1136
1137 {
1138 QI opval = ANDQI (ORQI (FLD (f_u4), 240), GETMEMQI (current_cpu, pc, * FLD (i_Ri)));
1139 SETMEMQI (current_cpu, pc, * FLD (i_Ri), opval);
1140 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1141 }
1142
1143 return vpc;
1144 #undef FLD
1145 }
1146
1147 /* borl: borl $u4,@$Ri */
1148
1149 static SEM_PC
1150 SEM_FN_NAME (fr30bf,borl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1151 {
1152 #define FLD(f) abuf->fields.sfmt_addi.f
1153 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1154 int UNUSED written = 0;
1155 IADDR UNUSED pc = abuf->addr;
1156 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1157
1158 {
1159 QI opval = ORQI (FLD (f_u4), GETMEMQI (current_cpu, pc, * FLD (i_Ri)));
1160 SETMEMQI (current_cpu, pc, * FLD (i_Ri), opval);
1161 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1162 }
1163
1164 return vpc;
1165 #undef FLD
1166 }
1167
1168 /* beorl: beorl $u4,@$Ri */
1169
1170 static SEM_PC
1171 SEM_FN_NAME (fr30bf,beorl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1172 {
1173 #define FLD(f) abuf->fields.sfmt_addi.f
1174 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1175 int UNUSED written = 0;
1176 IADDR UNUSED pc = abuf->addr;
1177 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1178
1179 {
1180 QI opval = XORQI (FLD (f_u4), GETMEMQI (current_cpu, pc, * FLD (i_Ri)));
1181 SETMEMQI (current_cpu, pc, * FLD (i_Ri), opval);
1182 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1183 }
1184
1185 return vpc;
1186 #undef FLD
1187 }
1188
1189 /* bandh: bandh $u4,@$Ri */
1190
1191 static SEM_PC
1192 SEM_FN_NAME (fr30bf,bandh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1193 {
1194 #define FLD(f) abuf->fields.sfmt_addi.f
1195 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1196 int UNUSED written = 0;
1197 IADDR UNUSED pc = abuf->addr;
1198 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1199
1200 {
1201 QI opval = ANDQI (ORQI (SLLQI (FLD (f_u4), 4), 15), GETMEMQI (current_cpu, pc, * FLD (i_Ri)));
1202 SETMEMQI (current_cpu, pc, * FLD (i_Ri), opval);
1203 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1204 }
1205
1206 return vpc;
1207 #undef FLD
1208 }
1209
1210 /* borh: borh $u4,@$Ri */
1211
1212 static SEM_PC
1213 SEM_FN_NAME (fr30bf,borh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1214 {
1215 #define FLD(f) abuf->fields.sfmt_addi.f
1216 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1217 int UNUSED written = 0;
1218 IADDR UNUSED pc = abuf->addr;
1219 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1220
1221 {
1222 QI opval = ORQI (SLLQI (FLD (f_u4), 4), GETMEMQI (current_cpu, pc, * FLD (i_Ri)));
1223 SETMEMQI (current_cpu, pc, * FLD (i_Ri), opval);
1224 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1225 }
1226
1227 return vpc;
1228 #undef FLD
1229 }
1230
1231 /* beorh: beorh $u4,@$Ri */
1232
1233 static SEM_PC
1234 SEM_FN_NAME (fr30bf,beorh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1235 {
1236 #define FLD(f) abuf->fields.sfmt_addi.f
1237 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1238 int UNUSED written = 0;
1239 IADDR UNUSED pc = abuf->addr;
1240 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1241
1242 {
1243 QI opval = XORQI (SLLQI (FLD (f_u4), 4), GETMEMQI (current_cpu, pc, * FLD (i_Ri)));
1244 SETMEMQI (current_cpu, pc, * FLD (i_Ri), opval);
1245 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
1246 }
1247
1248 return vpc;
1249 #undef FLD
1250 }
1251
1252 /* btstl: btstl $u4,@$Ri */
1253
1254 static SEM_PC
1255 SEM_FN_NAME (fr30bf,btstl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1256 {
1257 #define FLD(f) abuf->fields.sfmt_addi.f
1258 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1259 int UNUSED written = 0;
1260 IADDR UNUSED pc = abuf->addr;
1261 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1262
1263 {
1264 QI tmp_tmp;
1265 tmp_tmp = ANDQI (FLD (f_u4), GETMEMQI (current_cpu, pc, * FLD (i_Ri)));
1266 {
1267 BI opval = EQQI (tmp_tmp, 0);
1268 CPU (h_zbit) = opval;
1269 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1270 }
1271 {
1272 BI opval = 0;
1273 CPU (h_nbit) = opval;
1274 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1275 }
1276 }
1277
1278 return vpc;
1279 #undef FLD
1280 }
1281
1282 /* btsth: btsth $u4,@$Ri */
1283
1284 static SEM_PC
1285 SEM_FN_NAME (fr30bf,btsth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1286 {
1287 #define FLD(f) abuf->fields.sfmt_addi.f
1288 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1289 int UNUSED written = 0;
1290 IADDR UNUSED pc = abuf->addr;
1291 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1292
1293 {
1294 QI tmp_tmp;
1295 tmp_tmp = ANDQI (SLLQI (FLD (f_u4), 4), GETMEMQI (current_cpu, pc, * FLD (i_Ri)));
1296 {
1297 BI opval = EQQI (tmp_tmp, 0);
1298 CPU (h_zbit) = opval;
1299 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1300 }
1301 {
1302 BI opval = LTQI (tmp_tmp, 0);
1303 CPU (h_nbit) = opval;
1304 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1305 }
1306 }
1307
1308 return vpc;
1309 #undef FLD
1310 }
1311
1312 /* mul: mul $Rj,$Ri */
1313
1314 static SEM_PC
1315 SEM_FN_NAME (fr30bf,mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1316 {
1317 #define FLD(f) abuf->fields.sfmt_str13.f
1318 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1319 int UNUSED written = 0;
1320 IADDR UNUSED pc = abuf->addr;
1321 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1322
1323 {
1324 DI tmp_tmp;
1325 tmp_tmp = MULDI (EXTSIDI (* FLD (i_Rj)), EXTSIDI (* FLD (i_Ri)));
1326 {
1327 SI opval = TRUNCDISI (tmp_tmp);
1328 SET_H_DR (((UINT) 5), opval);
1329 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1330 }
1331 {
1332 SI opval = TRUNCDISI (SRLDI (tmp_tmp, 32));
1333 SET_H_DR (((UINT) 4), opval);
1334 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1335 }
1336 {
1337 BI opval = LTSI (GET_H_DR (((UINT) 5)), 0);
1338 CPU (h_nbit) = opval;
1339 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1340 }
1341 {
1342 BI opval = EQDI (tmp_tmp, MAKEDI (0, 0));
1343 CPU (h_zbit) = opval;
1344 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1345 }
1346 {
1347 BI opval = ORIF (GTDI (tmp_tmp, MAKEDI (0, 2147483647)), LTDI (tmp_tmp, NEGDI (MAKEDI (0, 0x80000000))));
1348 CPU (h_vbit) = opval;
1349 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1350 }
1351 }
1352
1353 return vpc;
1354 #undef FLD
1355 }
1356
1357 /* mulu: mulu $Rj,$Ri */
1358
1359 static SEM_PC
1360 SEM_FN_NAME (fr30bf,mulu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1361 {
1362 #define FLD(f) abuf->fields.sfmt_str13.f
1363 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1364 int UNUSED written = 0;
1365 IADDR UNUSED pc = abuf->addr;
1366 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1367
1368 {
1369 DI tmp_tmp;
1370 tmp_tmp = MULDI (ZEXTSIDI (* FLD (i_Rj)), ZEXTSIDI (* FLD (i_Ri)));
1371 {
1372 SI opval = TRUNCDISI (tmp_tmp);
1373 SET_H_DR (((UINT) 5), opval);
1374 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1375 }
1376 {
1377 SI opval = TRUNCDISI (SRLDI (tmp_tmp, 32));
1378 SET_H_DR (((UINT) 4), opval);
1379 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1380 }
1381 {
1382 BI opval = LTSI (GET_H_DR (((UINT) 4)), 0);
1383 CPU (h_nbit) = opval;
1384 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1385 }
1386 {
1387 BI opval = EQSI (GET_H_DR (((UINT) 5)), 0);
1388 CPU (h_zbit) = opval;
1389 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1390 }
1391 {
1392 BI opval = NESI (GET_H_DR (((UINT) 4)), 0);
1393 CPU (h_vbit) = opval;
1394 TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1395 }
1396 }
1397
1398 return vpc;
1399 #undef FLD
1400 }
1401
1402 /* mulh: mulh $Rj,$Ri */
1403
1404 static SEM_PC
1405 SEM_FN_NAME (fr30bf,mulh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1406 {
1407 #define FLD(f) abuf->fields.sfmt_str13.f
1408 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1409 int UNUSED written = 0;
1410 IADDR UNUSED pc = abuf->addr;
1411 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1412
1413 {
1414 {
1415 SI opval = MULHI (TRUNCSIHI (* FLD (i_Rj)), TRUNCSIHI (* FLD (i_Ri)));
1416 SET_H_DR (((UINT) 5), opval);
1417 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1418 }
1419 {
1420 BI opval = LTSI (GET_H_DR (((UINT) 5)), 0);
1421 CPU (h_nbit) = opval;
1422 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1423 }
1424 {
1425 BI opval = GESI (GET_H_DR (((UINT) 5)), 0);
1426 CPU (h_zbit) = opval;
1427 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1428 }
1429 }
1430
1431 return vpc;
1432 #undef FLD
1433 }
1434
1435 /* muluh: muluh $Rj,$Ri */
1436
1437 static SEM_PC
1438 SEM_FN_NAME (fr30bf,muluh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1439 {
1440 #define FLD(f) abuf->fields.sfmt_str13.f
1441 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1442 int UNUSED written = 0;
1443 IADDR UNUSED pc = abuf->addr;
1444 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1445
1446 {
1447 {
1448 SI opval = MULSI (ANDSI (* FLD (i_Rj), 65535), ANDSI (* FLD (i_Ri), 65535));
1449 SET_H_DR (((UINT) 5), opval);
1450 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1451 }
1452 {
1453 BI opval = LTSI (GET_H_DR (((UINT) 5)), 0);
1454 CPU (h_nbit) = opval;
1455 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1456 }
1457 {
1458 BI opval = GESI (GET_H_DR (((UINT) 5)), 0);
1459 CPU (h_zbit) = opval;
1460 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1461 }
1462 }
1463
1464 return vpc;
1465 #undef FLD
1466 }
1467
1468 /* div0s: div0s $Ri */
1469
1470 static SEM_PC
1471 SEM_FN_NAME (fr30bf,div0s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1472 {
1473 #define FLD(f) abuf->fields.sfmt_mov2dr.f
1474 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1475 int UNUSED written = 0;
1476 IADDR UNUSED pc = abuf->addr;
1477 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1478
1479 {
1480 {
1481 BI opval = LTSI (GET_H_DR (((UINT) 5)), 0);
1482 CPU (h_d0bit) = opval;
1483 TRACE_RESULT (current_cpu, abuf, "d0bit", 'x', opval);
1484 }
1485 {
1486 BI opval = XORBI (CPU (h_d0bit), LTSI (* FLD (i_Ri), 0));
1487 CPU (h_d1bit) = opval;
1488 TRACE_RESULT (current_cpu, abuf, "d1bit", 'x', opval);
1489 }
1490 if (NEBI (CPU (h_d0bit), 0)) {
1491 {
1492 SI opval = 0xffffffff;
1493 SET_H_DR (((UINT) 4), opval);
1494 written |= (1 << 5);
1495 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1496 }
1497 } else {
1498 {
1499 SI opval = 0;
1500 SET_H_DR (((UINT) 4), opval);
1501 written |= (1 << 5);
1502 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1503 }
1504 }
1505 }
1506
1507 abuf->written = written;
1508 return vpc;
1509 #undef FLD
1510 }
1511
1512 /* div0u: div0u $Ri */
1513
1514 static SEM_PC
1515 SEM_FN_NAME (fr30bf,div0u) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1516 {
1517 #define FLD(f) abuf->fields.fmt_empty.f
1518 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1519 int UNUSED written = 0;
1520 IADDR UNUSED pc = abuf->addr;
1521 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1522
1523 {
1524 {
1525 BI opval = 0;
1526 CPU (h_d0bit) = opval;
1527 TRACE_RESULT (current_cpu, abuf, "d0bit", 'x', opval);
1528 }
1529 {
1530 BI opval = 0;
1531 CPU (h_d1bit) = opval;
1532 TRACE_RESULT (current_cpu, abuf, "d1bit", 'x', opval);
1533 }
1534 {
1535 SI opval = 0;
1536 SET_H_DR (((UINT) 4), opval);
1537 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1538 }
1539 }
1540
1541 return vpc;
1542 #undef FLD
1543 }
1544
1545 /* div1: div1 $Ri */
1546
1547 static SEM_PC
1548 SEM_FN_NAME (fr30bf,div1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1549 {
1550 #define FLD(f) abuf->fields.sfmt_mov2dr.f
1551 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1552 int UNUSED written = 0;
1553 IADDR UNUSED pc = abuf->addr;
1554 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1555
1556 {
1557 SI tmp_tmp;
1558 {
1559 SI opval = SLLSI (GET_H_DR (((UINT) 4)), 1);
1560 SET_H_DR (((UINT) 4), opval);
1561 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1562 }
1563 if (LTSI (GET_H_DR (((UINT) 5)), 0)) {
1564 {
1565 SI opval = ADDSI (GET_H_DR (((UINT) 4)), 1);
1566 SET_H_DR (((UINT) 4), opval);
1567 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1568 }
1569 }
1570 {
1571 SI opval = SLLSI (GET_H_DR (((UINT) 5)), 1);
1572 SET_H_DR (((UINT) 5), opval);
1573 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1574 }
1575 if (EQBI (CPU (h_d1bit), 1)) {
1576 {
1577 tmp_tmp = ADDSI (GET_H_DR (((UINT) 4)), * FLD (i_Ri));
1578 {
1579 BI opval = ADDCFSI (GET_H_DR (((UINT) 4)), * FLD (i_Ri), 0);
1580 CPU (h_cbit) = opval;
1581 written |= (1 << 6);
1582 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1583 }
1584 }
1585 } else {
1586 {
1587 tmp_tmp = SUBSI (GET_H_DR (((UINT) 4)), * FLD (i_Ri));
1588 {
1589 BI opval = SUBCFSI (GET_H_DR (((UINT) 4)), * FLD (i_Ri), 0);
1590 CPU (h_cbit) = opval;
1591 written |= (1 << 6);
1592 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1593 }
1594 }
1595 }
1596 if (NOTBI (XORBI (XORBI (CPU (h_d0bit), CPU (h_d1bit)), CPU (h_cbit)))) {
1597 {
1598 {
1599 SI opval = tmp_tmp;
1600 SET_H_DR (((UINT) 4), opval);
1601 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1602 }
1603 {
1604 SI opval = ORSI (GET_H_DR (((UINT) 5)), 1);
1605 SET_H_DR (((UINT) 5), opval);
1606 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1607 }
1608 }
1609 }
1610 {
1611 BI opval = EQSI (GET_H_DR (((UINT) 4)), 0);
1612 CPU (h_zbit) = opval;
1613 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1614 }
1615 }
1616
1617 abuf->written = written;
1618 return vpc;
1619 #undef FLD
1620 }
1621
1622 /* div2: div2 $Ri */
1623
1624 static SEM_PC
1625 SEM_FN_NAME (fr30bf,div2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1626 {
1627 #define FLD(f) abuf->fields.sfmt_mov2dr.f
1628 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1629 int UNUSED written = 0;
1630 IADDR UNUSED pc = abuf->addr;
1631 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1632
1633 {
1634 SI tmp_tmp;
1635 if (EQBI (CPU (h_d1bit), 1)) {
1636 {
1637 tmp_tmp = ADDSI (GET_H_DR (((UINT) 4)), * FLD (i_Ri));
1638 {
1639 BI opval = ADDCFSI (GET_H_DR (((UINT) 4)), * FLD (i_Ri), 0);
1640 CPU (h_cbit) = opval;
1641 written |= (1 << 3);
1642 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1643 }
1644 }
1645 } else {
1646 {
1647 tmp_tmp = SUBSI (GET_H_DR (((UINT) 4)), * FLD (i_Ri));
1648 {
1649 BI opval = SUBCFSI (GET_H_DR (((UINT) 4)), * FLD (i_Ri), 0);
1650 CPU (h_cbit) = opval;
1651 written |= (1 << 3);
1652 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1653 }
1654 }
1655 }
1656 if (EQSI (tmp_tmp, 0)) {
1657 {
1658 {
1659 BI opval = 1;
1660 CPU (h_zbit) = opval;
1661 written |= (1 << 5);
1662 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1663 }
1664 {
1665 SI opval = 0;
1666 SET_H_DR (((UINT) 4), opval);
1667 written |= (1 << 4);
1668 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1669 }
1670 }
1671 } else {
1672 {
1673 BI opval = 0;
1674 CPU (h_zbit) = opval;
1675 written |= (1 << 5);
1676 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1677 }
1678 }
1679 }
1680
1681 abuf->written = written;
1682 return vpc;
1683 #undef FLD
1684 }
1685
1686 /* div3: div3 */
1687
1688 static SEM_PC
1689 SEM_FN_NAME (fr30bf,div3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1690 {
1691 #define FLD(f) abuf->fields.fmt_empty.f
1692 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1693 int UNUSED written = 0;
1694 IADDR UNUSED pc = abuf->addr;
1695 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1696
1697 if (EQBI (CPU (h_zbit), 1)) {
1698 {
1699 SI opval = ADDSI (GET_H_DR (((UINT) 5)), 1);
1700 SET_H_DR (((UINT) 5), opval);
1701 written |= (1 << 2);
1702 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1703 }
1704 }
1705
1706 abuf->written = written;
1707 return vpc;
1708 #undef FLD
1709 }
1710
1711 /* div4s: div4s */
1712
1713 static SEM_PC
1714 SEM_FN_NAME (fr30bf,div4s) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1715 {
1716 #define FLD(f) abuf->fields.fmt_empty.f
1717 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1718 int UNUSED written = 0;
1719 IADDR UNUSED pc = abuf->addr;
1720 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1721
1722 if (EQBI (CPU (h_d1bit), 1)) {
1723 {
1724 SI opval = NEGSI (GET_H_DR (((UINT) 5)));
1725 SET_H_DR (((UINT) 5), opval);
1726 written |= (1 << 2);
1727 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
1728 }
1729 }
1730
1731 abuf->written = written;
1732 return vpc;
1733 #undef FLD
1734 }
1735
1736 /* lsl: lsl $Rj,$Ri */
1737
1738 static SEM_PC
1739 SEM_FN_NAME (fr30bf,lsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1740 {
1741 #define FLD(f) abuf->fields.sfmt_add.f
1742 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1743 int UNUSED written = 0;
1744 IADDR UNUSED pc = abuf->addr;
1745 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1746
1747 {
1748 SI tmp_shift;
1749 tmp_shift = ANDSI (* FLD (i_Rj), 31);
1750 if (NESI (tmp_shift, 0)) {
1751 {
1752 {
1753 BI opval = NESI (ANDSI (* FLD (i_Ri), SLLSI (1, SUBSI (32, tmp_shift))), 0);
1754 CPU (h_cbit) = opval;
1755 written |= (1 << 3);
1756 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1757 }
1758 {
1759 SI opval = SLLSI (* FLD (i_Ri), tmp_shift);
1760 * FLD (i_Ri) = opval;
1761 written |= (1 << 2);
1762 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1763 }
1764 }
1765 } else {
1766 {
1767 BI opval = 0;
1768 CPU (h_cbit) = opval;
1769 written |= (1 << 3);
1770 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1771 }
1772 }
1773 {
1774 BI opval = LTSI (* FLD (i_Ri), 0);
1775 CPU (h_nbit) = opval;
1776 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1777 }
1778 {
1779 BI opval = EQSI (* FLD (i_Ri), 0);
1780 CPU (h_zbit) = opval;
1781 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1782 }
1783 }
1784
1785 abuf->written = written;
1786 return vpc;
1787 #undef FLD
1788 }
1789
1790 /* lsli: lsl $u4,$Ri */
1791
1792 static SEM_PC
1793 SEM_FN_NAME (fr30bf,lsli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1794 {
1795 #define FLD(f) abuf->fields.sfmt_addi.f
1796 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1797 int UNUSED written = 0;
1798 IADDR UNUSED pc = abuf->addr;
1799 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1800
1801 {
1802 SI tmp_shift;
1803 tmp_shift = FLD (f_u4);
1804 if (NESI (tmp_shift, 0)) {
1805 {
1806 {
1807 BI opval = NESI (ANDSI (* FLD (i_Ri), SLLSI (1, SUBSI (32, tmp_shift))), 0);
1808 CPU (h_cbit) = opval;
1809 written |= (1 << 3);
1810 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1811 }
1812 {
1813 SI opval = SLLSI (* FLD (i_Ri), tmp_shift);
1814 * FLD (i_Ri) = opval;
1815 written |= (1 << 2);
1816 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1817 }
1818 }
1819 } else {
1820 {
1821 BI opval = 0;
1822 CPU (h_cbit) = opval;
1823 written |= (1 << 3);
1824 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1825 }
1826 }
1827 {
1828 BI opval = LTSI (* FLD (i_Ri), 0);
1829 CPU (h_nbit) = opval;
1830 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1831 }
1832 {
1833 BI opval = EQSI (* FLD (i_Ri), 0);
1834 CPU (h_zbit) = opval;
1835 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1836 }
1837 }
1838
1839 abuf->written = written;
1840 return vpc;
1841 #undef FLD
1842 }
1843
1844 /* lsl2: lsl2 $u4,$Ri */
1845
1846 static SEM_PC
1847 SEM_FN_NAME (fr30bf,lsl2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1848 {
1849 #define FLD(f) abuf->fields.sfmt_addi.f
1850 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1851 int UNUSED written = 0;
1852 IADDR UNUSED pc = abuf->addr;
1853 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1854
1855 {
1856 SI tmp_shift;
1857 tmp_shift = ADDSI (FLD (f_u4), 16);
1858 if (NESI (tmp_shift, 0)) {
1859 {
1860 {
1861 BI opval = NESI (ANDSI (* FLD (i_Ri), SLLSI (1, SUBSI (32, tmp_shift))), 0);
1862 CPU (h_cbit) = opval;
1863 written |= (1 << 3);
1864 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1865 }
1866 {
1867 SI opval = SLLSI (* FLD (i_Ri), tmp_shift);
1868 * FLD (i_Ri) = opval;
1869 written |= (1 << 2);
1870 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1871 }
1872 }
1873 } else {
1874 {
1875 BI opval = 0;
1876 CPU (h_cbit) = opval;
1877 written |= (1 << 3);
1878 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1879 }
1880 }
1881 {
1882 BI opval = LTSI (* FLD (i_Ri), 0);
1883 CPU (h_nbit) = opval;
1884 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1885 }
1886 {
1887 BI opval = EQSI (* FLD (i_Ri), 0);
1888 CPU (h_zbit) = opval;
1889 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1890 }
1891 }
1892
1893 abuf->written = written;
1894 return vpc;
1895 #undef FLD
1896 }
1897
1898 /* lsr: lsr $Rj,$Ri */
1899
1900 static SEM_PC
1901 SEM_FN_NAME (fr30bf,lsr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1902 {
1903 #define FLD(f) abuf->fields.sfmt_add.f
1904 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1905 int UNUSED written = 0;
1906 IADDR UNUSED pc = abuf->addr;
1907 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1908
1909 {
1910 SI tmp_shift;
1911 tmp_shift = ANDSI (* FLD (i_Rj), 31);
1912 if (NESI (tmp_shift, 0)) {
1913 {
1914 {
1915 BI opval = NESI (ANDSI (* FLD (i_Ri), SLLSI (1, SUBSI (tmp_shift, 1))), 0);
1916 CPU (h_cbit) = opval;
1917 written |= (1 << 3);
1918 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1919 }
1920 {
1921 SI opval = SRLSI (* FLD (i_Ri), tmp_shift);
1922 * FLD (i_Ri) = opval;
1923 written |= (1 << 2);
1924 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1925 }
1926 }
1927 } else {
1928 {
1929 BI opval = 0;
1930 CPU (h_cbit) = opval;
1931 written |= (1 << 3);
1932 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1933 }
1934 }
1935 {
1936 BI opval = LTSI (* FLD (i_Ri), 0);
1937 CPU (h_nbit) = opval;
1938 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1939 }
1940 {
1941 BI opval = EQSI (* FLD (i_Ri), 0);
1942 CPU (h_zbit) = opval;
1943 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1944 }
1945 }
1946
1947 abuf->written = written;
1948 return vpc;
1949 #undef FLD
1950 }
1951
1952 /* lsri: lsr $u4,$Ri */
1953
1954 static SEM_PC
1955 SEM_FN_NAME (fr30bf,lsri) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1956 {
1957 #define FLD(f) abuf->fields.sfmt_addi.f
1958 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1959 int UNUSED written = 0;
1960 IADDR UNUSED pc = abuf->addr;
1961 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1962
1963 {
1964 SI tmp_shift;
1965 tmp_shift = FLD (f_u4);
1966 if (NESI (tmp_shift, 0)) {
1967 {
1968 {
1969 BI opval = NESI (ANDSI (* FLD (i_Ri), SLLSI (1, SUBSI (tmp_shift, 1))), 0);
1970 CPU (h_cbit) = opval;
1971 written |= (1 << 3);
1972 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1973 }
1974 {
1975 SI opval = SRLSI (* FLD (i_Ri), tmp_shift);
1976 * FLD (i_Ri) = opval;
1977 written |= (1 << 2);
1978 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1979 }
1980 }
1981 } else {
1982 {
1983 BI opval = 0;
1984 CPU (h_cbit) = opval;
1985 written |= (1 << 3);
1986 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1987 }
1988 }
1989 {
1990 BI opval = LTSI (* FLD (i_Ri), 0);
1991 CPU (h_nbit) = opval;
1992 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1993 }
1994 {
1995 BI opval = EQSI (* FLD (i_Ri), 0);
1996 CPU (h_zbit) = opval;
1997 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1998 }
1999 }
2000
2001 abuf->written = written;
2002 return vpc;
2003 #undef FLD
2004 }
2005
2006 /* lsr2: lsr2 $u4,$Ri */
2007
2008 static SEM_PC
2009 SEM_FN_NAME (fr30bf,lsr2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2010 {
2011 #define FLD(f) abuf->fields.sfmt_addi.f
2012 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2013 int UNUSED written = 0;
2014 IADDR UNUSED pc = abuf->addr;
2015 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2016
2017 {
2018 SI tmp_shift;
2019 tmp_shift = ADDSI (FLD (f_u4), 16);
2020 if (NESI (tmp_shift, 0)) {
2021 {
2022 {
2023 BI opval = NESI (ANDSI (* FLD (i_Ri), SLLSI (1, SUBSI (tmp_shift, 1))), 0);
2024 CPU (h_cbit) = opval;
2025 written |= (1 << 3);
2026 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2027 }
2028 {
2029 SI opval = SRLSI (* FLD (i_Ri), tmp_shift);
2030 * FLD (i_Ri) = opval;
2031 written |= (1 << 2);
2032 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2033 }
2034 }
2035 } else {
2036 {
2037 BI opval = 0;
2038 CPU (h_cbit) = opval;
2039 written |= (1 << 3);
2040 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2041 }
2042 }
2043 {
2044 BI opval = LTSI (* FLD (i_Ri), 0);
2045 CPU (h_nbit) = opval;
2046 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2047 }
2048 {
2049 BI opval = EQSI (* FLD (i_Ri), 0);
2050 CPU (h_zbit) = opval;
2051 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2052 }
2053 }
2054
2055 abuf->written = written;
2056 return vpc;
2057 #undef FLD
2058 }
2059
2060 /* asr: asr $Rj,$Ri */
2061
2062 static SEM_PC
2063 SEM_FN_NAME (fr30bf,asr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2064 {
2065 #define FLD(f) abuf->fields.sfmt_add.f
2066 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2067 int UNUSED written = 0;
2068 IADDR UNUSED pc = abuf->addr;
2069 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2070
2071 {
2072 SI tmp_shift;
2073 tmp_shift = ANDSI (* FLD (i_Rj), 31);
2074 if (NESI (tmp_shift, 0)) {
2075 {
2076 {
2077 BI opval = NESI (ANDSI (* FLD (i_Ri), SLLSI (1, SUBSI (tmp_shift, 1))), 0);
2078 CPU (h_cbit) = opval;
2079 written |= (1 << 3);
2080 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2081 }
2082 {
2083 SI opval = SRASI (* FLD (i_Ri), tmp_shift);
2084 * FLD (i_Ri) = opval;
2085 written |= (1 << 2);
2086 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2087 }
2088 }
2089 } else {
2090 {
2091 BI opval = 0;
2092 CPU (h_cbit) = opval;
2093 written |= (1 << 3);
2094 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2095 }
2096 }
2097 {
2098 BI opval = LTSI (* FLD (i_Ri), 0);
2099 CPU (h_nbit) = opval;
2100 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2101 }
2102 {
2103 BI opval = EQSI (* FLD (i_Ri), 0);
2104 CPU (h_zbit) = opval;
2105 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2106 }
2107 }
2108
2109 abuf->written = written;
2110 return vpc;
2111 #undef FLD
2112 }
2113
2114 /* asri: asr $u4,$Ri */
2115
2116 static SEM_PC
2117 SEM_FN_NAME (fr30bf,asri) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2118 {
2119 #define FLD(f) abuf->fields.sfmt_addi.f
2120 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2121 int UNUSED written = 0;
2122 IADDR UNUSED pc = abuf->addr;
2123 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2124
2125 {
2126 SI tmp_shift;
2127 tmp_shift = FLD (f_u4);
2128 if (NESI (tmp_shift, 0)) {
2129 {
2130 {
2131 BI opval = NESI (ANDSI (* FLD (i_Ri), SLLSI (1, SUBSI (tmp_shift, 1))), 0);
2132 CPU (h_cbit) = opval;
2133 written |= (1 << 3);
2134 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2135 }
2136 {
2137 SI opval = SRASI (* FLD (i_Ri), tmp_shift);
2138 * FLD (i_Ri) = opval;
2139 written |= (1 << 2);
2140 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2141 }
2142 }
2143 } else {
2144 {
2145 BI opval = 0;
2146 CPU (h_cbit) = opval;
2147 written |= (1 << 3);
2148 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2149 }
2150 }
2151 {
2152 BI opval = LTSI (* FLD (i_Ri), 0);
2153 CPU (h_nbit) = opval;
2154 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2155 }
2156 {
2157 BI opval = EQSI (* FLD (i_Ri), 0);
2158 CPU (h_zbit) = opval;
2159 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2160 }
2161 }
2162
2163 abuf->written = written;
2164 return vpc;
2165 #undef FLD
2166 }
2167
2168 /* asr2: asr2 $u4,$Ri */
2169
2170 static SEM_PC
2171 SEM_FN_NAME (fr30bf,asr2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2172 {
2173 #define FLD(f) abuf->fields.sfmt_addi.f
2174 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2175 int UNUSED written = 0;
2176 IADDR UNUSED pc = abuf->addr;
2177 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2178
2179 {
2180 SI tmp_shift;
2181 tmp_shift = ADDSI (FLD (f_u4), 16);
2182 if (NESI (tmp_shift, 0)) {
2183 {
2184 {
2185 BI opval = NESI (ANDSI (* FLD (i_Ri), SLLSI (1, SUBSI (tmp_shift, 1))), 0);
2186 CPU (h_cbit) = opval;
2187 written |= (1 << 3);
2188 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2189 }
2190 {
2191 SI opval = SRASI (* FLD (i_Ri), tmp_shift);
2192 * FLD (i_Ri) = opval;
2193 written |= (1 << 2);
2194 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2195 }
2196 }
2197 } else {
2198 {
2199 BI opval = 0;
2200 CPU (h_cbit) = opval;
2201 written |= (1 << 3);
2202 TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2203 }
2204 }
2205 {
2206 BI opval = LTSI (* FLD (i_Ri), 0);
2207 CPU (h_nbit) = opval;
2208 TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2209 }
2210 {
2211 BI opval = EQSI (* FLD (i_Ri), 0);
2212 CPU (h_zbit) = opval;
2213 TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2214 }
2215 }
2216
2217 abuf->written = written;
2218 return vpc;
2219 #undef FLD
2220 }
2221
2222 /* ldi8: ldi:8 $i8,$Ri */
2223
2224 static SEM_PC
2225 SEM_FN_NAME (fr30bf,ldi8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2226 {
2227 #define FLD(f) abuf->fields.sfmt_ldi8.f
2228 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2229 int UNUSED written = 0;
2230 IADDR UNUSED pc = abuf->addr;
2231 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2232
2233 {
2234 SI opval = FLD (f_i8);
2235 * FLD (i_Ri) = opval;
2236 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2237 }
2238
2239 return vpc;
2240 #undef FLD
2241 }
2242
2243 /* ldi20: ldi:20 $i20,$Ri */
2244
2245 static SEM_PC
2246 SEM_FN_NAME (fr30bf,ldi20) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2247 {
2248 #define FLD(f) abuf->fields.sfmt_ldi20.f
2249 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2250 int UNUSED written = 0;
2251 IADDR UNUSED pc = abuf->addr;
2252 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2253
2254 {
2255 SI opval = FLD (f_i20);
2256 * FLD (i_Ri) = opval;
2257 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2258 }
2259
2260 return vpc;
2261 #undef FLD
2262 }
2263
2264 /* ldi32: ldi:32 $i32,$Ri */
2265
2266 static SEM_PC
2267 SEM_FN_NAME (fr30bf,ldi32) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2268 {
2269 #define FLD(f) abuf->fields.sfmt_ldi32.f
2270 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2271 int UNUSED written = 0;
2272 IADDR UNUSED pc = abuf->addr;
2273 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
2274
2275 {
2276 SI opval = FLD (f_i32);
2277 * FLD (i_Ri) = opval;
2278 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2279 }
2280
2281 return vpc;
2282 #undef FLD
2283 }
2284
2285 /* ld: ld @$Rj,$Ri */
2286
2287 static SEM_PC
2288 SEM_FN_NAME (fr30bf,ld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2289 {
2290 #define FLD(f) abuf->fields.sfmt_ldr13.f
2291 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2292 int UNUSED written = 0;
2293 IADDR UNUSED pc = abuf->addr;
2294 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2295
2296 {
2297 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_Rj));
2298 * FLD (i_Ri) = opval;
2299 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2300 }
2301
2302 return vpc;
2303 #undef FLD
2304 }
2305
2306 /* lduh: lduh @$Rj,$Ri */
2307
2308 static SEM_PC
2309 SEM_FN_NAME (fr30bf,lduh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2310 {
2311 #define FLD(f) abuf->fields.sfmt_ldr13.f
2312 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2313 int UNUSED written = 0;
2314 IADDR UNUSED pc = abuf->addr;
2315 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2316
2317 {
2318 SI opval = GETMEMUHI (current_cpu, pc, * FLD (i_Rj));
2319 * FLD (i_Ri) = opval;
2320 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2321 }
2322
2323 return vpc;
2324 #undef FLD
2325 }
2326
2327 /* ldub: ldub @$Rj,$Ri */
2328
2329 static SEM_PC
2330 SEM_FN_NAME (fr30bf,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2331 {
2332 #define FLD(f) abuf->fields.sfmt_ldr13.f
2333 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2334 int UNUSED written = 0;
2335 IADDR UNUSED pc = abuf->addr;
2336 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2337
2338 {
2339 SI opval = GETMEMUQI (current_cpu, pc, * FLD (i_Rj));
2340 * FLD (i_Ri) = opval;
2341 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2342 }
2343
2344 return vpc;
2345 #undef FLD
2346 }
2347
2348 /* ldr13: ld @($R13,$Rj),$Ri */
2349
2350 static SEM_PC
2351 SEM_FN_NAME (fr30bf,ldr13) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2352 {
2353 #define FLD(f) abuf->fields.sfmt_ldr13.f
2354 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2355 int UNUSED written = 0;
2356 IADDR UNUSED pc = abuf->addr;
2357 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2358
2359 {
2360 SI opval = GETMEMSI (current_cpu, pc, ADDSI (* FLD (i_Rj), CPU (h_gr[((UINT) 13)])));
2361 * FLD (i_Ri) = opval;
2362 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2363 }
2364
2365 return vpc;
2366 #undef FLD
2367 }
2368
2369 /* ldr13uh: lduh @($R13,$Rj),$Ri */
2370
2371 static SEM_PC
2372 SEM_FN_NAME (fr30bf,ldr13uh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2373 {
2374 #define FLD(f) abuf->fields.sfmt_ldr13.f
2375 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2376 int UNUSED written = 0;
2377 IADDR UNUSED pc = abuf->addr;
2378 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2379
2380 {
2381 SI opval = GETMEMUHI (current_cpu, pc, ADDSI (* FLD (i_Rj), CPU (h_gr[((UINT) 13)])));
2382 * FLD (i_Ri) = opval;
2383 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2384 }
2385
2386 return vpc;
2387 #undef FLD
2388 }
2389
2390 /* ldr13ub: ldub @($R13,$Rj),$Ri */
2391
2392 static SEM_PC
2393 SEM_FN_NAME (fr30bf,ldr13ub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2394 {
2395 #define FLD(f) abuf->fields.sfmt_ldr13.f
2396 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2397 int UNUSED written = 0;
2398 IADDR UNUSED pc = abuf->addr;
2399 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2400
2401 {
2402 SI opval = GETMEMUQI (current_cpu, pc, ADDSI (* FLD (i_Rj), CPU (h_gr[((UINT) 13)])));
2403 * FLD (i_Ri) = opval;
2404 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2405 }
2406
2407 return vpc;
2408 #undef FLD
2409 }
2410
2411 /* ldr14: ld @($R14,$disp10),$Ri */
2412
2413 static SEM_PC
2414 SEM_FN_NAME (fr30bf,ldr14) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2415 {
2416 #define FLD(f) abuf->fields.sfmt_ldr14.f
2417 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2418 int UNUSED written = 0;
2419 IADDR UNUSED pc = abuf->addr;
2420 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2421
2422 {
2423 SI opval = GETMEMSI (current_cpu, pc, ADDSI (FLD (f_disp10), CPU (h_gr[((UINT) 14)])));
2424 * FLD (i_Ri) = opval;
2425 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2426 }
2427
2428 return vpc;
2429 #undef FLD
2430 }
2431
2432 /* ldr14uh: lduh @($R14,$disp9),$Ri */
2433
2434 static SEM_PC
2435 SEM_FN_NAME (fr30bf,ldr14uh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2436 {
2437 #define FLD(f) abuf->fields.sfmt_ldr14uh.f
2438 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2439 int UNUSED written = 0;
2440 IADDR UNUSED pc = abuf->addr;
2441 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2442
2443 {
2444 SI opval = GETMEMUHI (current_cpu, pc, ADDSI (FLD (f_disp9), CPU (h_gr[((UINT) 14)])));
2445 * FLD (i_Ri) = opval;
2446 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2447 }
2448
2449 return vpc;
2450 #undef FLD
2451 }
2452
2453 /* ldr14ub: ldub @($R14,$disp8),$Ri */
2454
2455 static SEM_PC
2456 SEM_FN_NAME (fr30bf,ldr14ub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2457 {
2458 #define FLD(f) abuf->fields.sfmt_ldr14ub.f
2459 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2460 int UNUSED written = 0;
2461 IADDR UNUSED pc = abuf->addr;
2462 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2463
2464 {
2465 SI opval = GETMEMUQI (current_cpu, pc, ADDSI (FLD (f_disp8), CPU (h_gr[((UINT) 14)])));
2466 * FLD (i_Ri) = opval;
2467 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2468 }
2469
2470 return vpc;
2471 #undef FLD
2472 }
2473
2474 /* ldr15: ld @($R15,$udisp6),$Ri */
2475
2476 static SEM_PC
2477 SEM_FN_NAME (fr30bf,ldr15) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2478 {
2479 #define FLD(f) abuf->fields.sfmt_ldr15.f
2480 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2481 int UNUSED written = 0;
2482 IADDR UNUSED pc = abuf->addr;
2483 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2484
2485 {
2486 SI opval = GETMEMSI (current_cpu, pc, ADDSI (FLD (f_udisp6), CPU (h_gr[((UINT) 15)])));
2487 * FLD (i_Ri) = opval;
2488 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2489 }
2490
2491 return vpc;
2492 #undef FLD
2493 }
2494
2495 /* ldr15gr: ld @$R15+,$Ri */
2496
2497 static SEM_PC
2498 SEM_FN_NAME (fr30bf,ldr15gr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2499 {
2500 #define FLD(f) abuf->fields.sfmt_ldr15gr.f
2501 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2502 int UNUSED written = 0;
2503 IADDR UNUSED pc = abuf->addr;
2504 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2505
2506 {
2507 {
2508 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
2509 * FLD (i_Ri) = opval;
2510 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2511 }
2512 if (NESI (FLD (f_Ri), 15)) {
2513 {
2514 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
2515 CPU (h_gr[((UINT) 15)]) = opval;
2516 written |= (1 << 4);
2517 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2518 }
2519 }
2520 }
2521
2522 abuf->written = written;
2523 return vpc;
2524 #undef FLD
2525 }
2526
2527 /* ldr15dr: ld @$R15+,$Rs2 */
2528
2529 static SEM_PC
2530 SEM_FN_NAME (fr30bf,ldr15dr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2531 {
2532 #define FLD(f) abuf->fields.sfmt_ldr15dr.f
2533 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2534 int UNUSED written = 0;
2535 IADDR UNUSED pc = abuf->addr;
2536 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2537
2538 {
2539 SI tmp_tmp;
2540 tmp_tmp = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
2541 {
2542 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
2543 CPU (h_gr[((UINT) 15)]) = opval;
2544 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2545 }
2546 {
2547 SI opval = tmp_tmp;
2548 SET_H_DR (FLD (f_Rs2), opval);
2549 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2550 }
2551 }
2552
2553 return vpc;
2554 #undef FLD
2555 }
2556
2557 /* ldr15ps: ld @$R15+,$ps */
2558
2559 static SEM_PC
2560 SEM_FN_NAME (fr30bf,ldr15ps) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2561 {
2562 #define FLD(f) abuf->fields.sfmt_addsp.f
2563 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2564 int UNUSED written = 0;
2565 IADDR UNUSED pc = abuf->addr;
2566 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2567
2568 {
2569 {
2570 USI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
2571 SET_H_PS (opval);
2572 TRACE_RESULT (current_cpu, abuf, "ps", 'x', opval);
2573 }
2574 {
2575 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
2576 CPU (h_gr[((UINT) 15)]) = opval;
2577 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2578 }
2579 }
2580
2581 return vpc;
2582 #undef FLD
2583 }
2584
2585 /* st: st $Ri,@$Rj */
2586
2587 static SEM_PC
2588 SEM_FN_NAME (fr30bf,st) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2589 {
2590 #define FLD(f) abuf->fields.sfmt_str13.f
2591 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2592 int UNUSED written = 0;
2593 IADDR UNUSED pc = abuf->addr;
2594 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2595
2596 {
2597 SI opval = * FLD (i_Ri);
2598 SETMEMSI (current_cpu, pc, * FLD (i_Rj), opval);
2599 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2600 }
2601
2602 return vpc;
2603 #undef FLD
2604 }
2605
2606 /* sth: sth $Ri,@$Rj */
2607
2608 static SEM_PC
2609 SEM_FN_NAME (fr30bf,sth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2610 {
2611 #define FLD(f) abuf->fields.sfmt_str13.f
2612 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2613 int UNUSED written = 0;
2614 IADDR UNUSED pc = abuf->addr;
2615 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2616
2617 {
2618 HI opval = * FLD (i_Ri);
2619 SETMEMHI (current_cpu, pc, * FLD (i_Rj), opval);
2620 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2621 }
2622
2623 return vpc;
2624 #undef FLD
2625 }
2626
2627 /* stb: stb $Ri,@$Rj */
2628
2629 static SEM_PC
2630 SEM_FN_NAME (fr30bf,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2631 {
2632 #define FLD(f) abuf->fields.sfmt_str13.f
2633 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2634 int UNUSED written = 0;
2635 IADDR UNUSED pc = abuf->addr;
2636 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2637
2638 {
2639 QI opval = * FLD (i_Ri);
2640 SETMEMQI (current_cpu, pc, * FLD (i_Rj), opval);
2641 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2642 }
2643
2644 return vpc;
2645 #undef FLD
2646 }
2647
2648 /* str13: st $Ri,@($R13,$Rj) */
2649
2650 static SEM_PC
2651 SEM_FN_NAME (fr30bf,str13) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2652 {
2653 #define FLD(f) abuf->fields.sfmt_str13.f
2654 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2655 int UNUSED written = 0;
2656 IADDR UNUSED pc = abuf->addr;
2657 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2658
2659 {
2660 SI opval = * FLD (i_Ri);
2661 SETMEMSI (current_cpu, pc, ADDSI (* FLD (i_Rj), CPU (h_gr[((UINT) 13)])), opval);
2662 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2663 }
2664
2665 return vpc;
2666 #undef FLD
2667 }
2668
2669 /* str13h: sth $Ri,@($R13,$Rj) */
2670
2671 static SEM_PC
2672 SEM_FN_NAME (fr30bf,str13h) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2673 {
2674 #define FLD(f) abuf->fields.sfmt_str13.f
2675 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2676 int UNUSED written = 0;
2677 IADDR UNUSED pc = abuf->addr;
2678 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2679
2680 {
2681 HI opval = * FLD (i_Ri);
2682 SETMEMHI (current_cpu, pc, ADDSI (* FLD (i_Rj), CPU (h_gr[((UINT) 13)])), opval);
2683 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2684 }
2685
2686 return vpc;
2687 #undef FLD
2688 }
2689
2690 /* str13b: stb $Ri,@($R13,$Rj) */
2691
2692 static SEM_PC
2693 SEM_FN_NAME (fr30bf,str13b) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2694 {
2695 #define FLD(f) abuf->fields.sfmt_str13.f
2696 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2697 int UNUSED written = 0;
2698 IADDR UNUSED pc = abuf->addr;
2699 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2700
2701 {
2702 QI opval = * FLD (i_Ri);
2703 SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_Rj), CPU (h_gr[((UINT) 13)])), opval);
2704 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2705 }
2706
2707 return vpc;
2708 #undef FLD
2709 }
2710
2711 /* str14: st $Ri,@($R14,$disp10) */
2712
2713 static SEM_PC
2714 SEM_FN_NAME (fr30bf,str14) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2715 {
2716 #define FLD(f) abuf->fields.sfmt_str14.f
2717 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2718 int UNUSED written = 0;
2719 IADDR UNUSED pc = abuf->addr;
2720 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2721
2722 {
2723 SI opval = * FLD (i_Ri);
2724 SETMEMSI (current_cpu, pc, ADDSI (FLD (f_disp10), CPU (h_gr[((UINT) 14)])), opval);
2725 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2726 }
2727
2728 return vpc;
2729 #undef FLD
2730 }
2731
2732 /* str14h: sth $Ri,@($R14,$disp9) */
2733
2734 static SEM_PC
2735 SEM_FN_NAME (fr30bf,str14h) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2736 {
2737 #define FLD(f) abuf->fields.sfmt_str14h.f
2738 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2739 int UNUSED written = 0;
2740 IADDR UNUSED pc = abuf->addr;
2741 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2742
2743 {
2744 HI opval = * FLD (i_Ri);
2745 SETMEMHI (current_cpu, pc, ADDSI (FLD (f_disp9), CPU (h_gr[((UINT) 14)])), opval);
2746 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2747 }
2748
2749 return vpc;
2750 #undef FLD
2751 }
2752
2753 /* str14b: stb $Ri,@($R14,$disp8) */
2754
2755 static SEM_PC
2756 SEM_FN_NAME (fr30bf,str14b) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2757 {
2758 #define FLD(f) abuf->fields.sfmt_str14b.f
2759 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2760 int UNUSED written = 0;
2761 IADDR UNUSED pc = abuf->addr;
2762 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2763
2764 {
2765 QI opval = * FLD (i_Ri);
2766 SETMEMQI (current_cpu, pc, ADDSI (FLD (f_disp8), CPU (h_gr[((UINT) 14)])), opval);
2767 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2768 }
2769
2770 return vpc;
2771 #undef FLD
2772 }
2773
2774 /* str15: st $Ri,@($R15,$udisp6) */
2775
2776 static SEM_PC
2777 SEM_FN_NAME (fr30bf,str15) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2778 {
2779 #define FLD(f) abuf->fields.sfmt_str15.f
2780 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2781 int UNUSED written = 0;
2782 IADDR UNUSED pc = abuf->addr;
2783 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2784
2785 {
2786 SI opval = * FLD (i_Ri);
2787 SETMEMSI (current_cpu, pc, ADDSI (CPU (h_gr[((UINT) 15)]), FLD (f_udisp6)), opval);
2788 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2789 }
2790
2791 return vpc;
2792 #undef FLD
2793 }
2794
2795 /* str15gr: st $Ri,@-$R15 */
2796
2797 static SEM_PC
2798 SEM_FN_NAME (fr30bf,str15gr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2799 {
2800 #define FLD(f) abuf->fields.sfmt_str15gr.f
2801 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2802 int UNUSED written = 0;
2803 IADDR UNUSED pc = abuf->addr;
2804 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2805
2806 {
2807 SI tmp_tmp;
2808 tmp_tmp = * FLD (i_Ri);
2809 {
2810 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
2811 CPU (h_gr[((UINT) 15)]) = opval;
2812 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2813 }
2814 {
2815 SI opval = tmp_tmp;
2816 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
2817 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2818 }
2819 }
2820
2821 return vpc;
2822 #undef FLD
2823 }
2824
2825 /* str15dr: st $Rs2,@-$R15 */
2826
2827 static SEM_PC
2828 SEM_FN_NAME (fr30bf,str15dr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2829 {
2830 #define FLD(f) abuf->fields.sfmt_ldr15dr.f
2831 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2832 int UNUSED written = 0;
2833 IADDR UNUSED pc = abuf->addr;
2834 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2835
2836 {
2837 SI tmp_tmp;
2838 tmp_tmp = GET_H_DR (FLD (f_Rs2));
2839 {
2840 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
2841 CPU (h_gr[((UINT) 15)]) = opval;
2842 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2843 }
2844 {
2845 SI opval = tmp_tmp;
2846 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
2847 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2848 }
2849 }
2850
2851 return vpc;
2852 #undef FLD
2853 }
2854
2855 /* str15ps: st $ps,@-$R15 */
2856
2857 static SEM_PC
2858 SEM_FN_NAME (fr30bf,str15ps) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2859 {
2860 #define FLD(f) abuf->fields.sfmt_addsp.f
2861 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2862 int UNUSED written = 0;
2863 IADDR UNUSED pc = abuf->addr;
2864 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2865
2866 {
2867 {
2868 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
2869 CPU (h_gr[((UINT) 15)]) = opval;
2870 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2871 }
2872 {
2873 SI opval = GET_H_PS ();
2874 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
2875 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2876 }
2877 }
2878
2879 return vpc;
2880 #undef FLD
2881 }
2882
2883 /* mov: mov $Rj,$Ri */
2884
2885 static SEM_PC
2886 SEM_FN_NAME (fr30bf,mov) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2887 {
2888 #define FLD(f) abuf->fields.sfmt_ldr13.f
2889 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2890 int UNUSED written = 0;
2891 IADDR UNUSED pc = abuf->addr;
2892 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2893
2894 {
2895 SI opval = * FLD (i_Rj);
2896 * FLD (i_Ri) = opval;
2897 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2898 }
2899
2900 return vpc;
2901 #undef FLD
2902 }
2903
2904 /* movdr: mov $Rs1,$Ri */
2905
2906 static SEM_PC
2907 SEM_FN_NAME (fr30bf,movdr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2908 {
2909 #define FLD(f) abuf->fields.sfmt_movdr.f
2910 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2911 int UNUSED written = 0;
2912 IADDR UNUSED pc = abuf->addr;
2913 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2914
2915 {
2916 SI opval = GET_H_DR (FLD (f_Rs1));
2917 * FLD (i_Ri) = opval;
2918 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2919 }
2920
2921 return vpc;
2922 #undef FLD
2923 }
2924
2925 /* movps: mov $ps,$Ri */
2926
2927 static SEM_PC
2928 SEM_FN_NAME (fr30bf,movps) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2929 {
2930 #define FLD(f) abuf->fields.sfmt_movdr.f
2931 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2932 int UNUSED written = 0;
2933 IADDR UNUSED pc = abuf->addr;
2934 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2935
2936 {
2937 SI opval = GET_H_PS ();
2938 * FLD (i_Ri) = opval;
2939 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2940 }
2941
2942 return vpc;
2943 #undef FLD
2944 }
2945
2946 /* mov2dr: mov $Ri,$Rs1 */
2947
2948 static SEM_PC
2949 SEM_FN_NAME (fr30bf,mov2dr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2950 {
2951 #define FLD(f) abuf->fields.sfmt_mov2dr.f
2952 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2953 int UNUSED written = 0;
2954 IADDR UNUSED pc = abuf->addr;
2955 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2956
2957 {
2958 SI opval = * FLD (i_Ri);
2959 SET_H_DR (FLD (f_Rs1), opval);
2960 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
2961 }
2962
2963 return vpc;
2964 #undef FLD
2965 }
2966
2967 /* mov2ps: mov $Ri,$ps */
2968
2969 static SEM_PC
2970 SEM_FN_NAME (fr30bf,mov2ps) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2971 {
2972 #define FLD(f) abuf->fields.sfmt_mov2dr.f
2973 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2974 int UNUSED written = 0;
2975 IADDR UNUSED pc = abuf->addr;
2976 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2977
2978 {
2979 USI opval = * FLD (i_Ri);
2980 SET_H_PS (opval);
2981 TRACE_RESULT (current_cpu, abuf, "ps", 'x', opval);
2982 }
2983
2984 return vpc;
2985 #undef FLD
2986 }
2987
2988 /* jmp: jmp @$Ri */
2989
2990 static SEM_PC
2991 SEM_FN_NAME (fr30bf,jmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2992 {
2993 #define FLD(f) abuf->fields.sfmt_mov2dr.f
2994 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2995 int UNUSED written = 0;
2996 IADDR UNUSED pc = abuf->addr;
2997 SEM_BRANCH_INIT
2998 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2999
3000 {
3001 USI opval = * FLD (i_Ri);
3002 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3003 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3004 }
3005
3006 SEM_BRANCH_FINI (vpc);
3007 return vpc;
3008 #undef FLD
3009 }
3010
3011 /* jmpd: jmp:d @$Ri */
3012
3013 static SEM_PC
3014 SEM_FN_NAME (fr30bf,jmpd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3015 {
3016 #define FLD(f) abuf->fields.sfmt_mov2dr.f
3017 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3018 int UNUSED written = 0;
3019 IADDR UNUSED pc = abuf->addr;
3020 SEM_BRANCH_INIT
3021 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3022
3023 {
3024 {
3025 USI opval = * FLD (i_Ri);
3026 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3027 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3028 }
3029 }
3030
3031 SEM_BRANCH_FINI (vpc);
3032 return vpc;
3033 #undef FLD
3034 }
3035
3036 /* callr: call @$Ri */
3037
3038 static SEM_PC
3039 SEM_FN_NAME (fr30bf,callr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3040 {
3041 #define FLD(f) abuf->fields.sfmt_mov2dr.f
3042 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3043 int UNUSED written = 0;
3044 IADDR UNUSED pc = abuf->addr;
3045 SEM_BRANCH_INIT
3046 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3047
3048 {
3049 {
3050 SI opval = ADDSI (pc, 2);
3051 SET_H_DR (((UINT) 1), opval);
3052 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3053 }
3054 {
3055 USI opval = * FLD (i_Ri);
3056 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3057 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3058 }
3059 }
3060
3061 SEM_BRANCH_FINI (vpc);
3062 return vpc;
3063 #undef FLD
3064 }
3065
3066 /* callrd: call:d @$Ri */
3067
3068 static SEM_PC
3069 SEM_FN_NAME (fr30bf,callrd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3070 {
3071 #define FLD(f) abuf->fields.sfmt_mov2dr.f
3072 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3073 int UNUSED written = 0;
3074 IADDR UNUSED pc = abuf->addr;
3075 SEM_BRANCH_INIT
3076 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3077
3078 {
3079 {
3080 {
3081 SI opval = ADDSI (pc, 4);
3082 SET_H_DR (((UINT) 1), opval);
3083 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3084 }
3085 {
3086 USI opval = * FLD (i_Ri);
3087 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3088 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3089 }
3090 }
3091 }
3092
3093 SEM_BRANCH_FINI (vpc);
3094 return vpc;
3095 #undef FLD
3096 }
3097
3098 /* call: call $label12 */
3099
3100 static SEM_PC
3101 SEM_FN_NAME (fr30bf,call) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3102 {
3103 #define FLD(f) abuf->fields.sfmt_call.f
3104 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3105 int UNUSED written = 0;
3106 IADDR UNUSED pc = abuf->addr;
3107 SEM_BRANCH_INIT
3108 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3109
3110 {
3111 {
3112 SI opval = ADDSI (pc, 2);
3113 SET_H_DR (((UINT) 1), opval);
3114 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3115 }
3116 {
3117 USI opval = FLD (i_label12);
3118 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3119 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3120 }
3121 }
3122
3123 SEM_BRANCH_FINI (vpc);
3124 return vpc;
3125 #undef FLD
3126 }
3127
3128 /* calld: call:d $label12 */
3129
3130 static SEM_PC
3131 SEM_FN_NAME (fr30bf,calld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3132 {
3133 #define FLD(f) abuf->fields.sfmt_call.f
3134 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3135 int UNUSED written = 0;
3136 IADDR UNUSED pc = abuf->addr;
3137 SEM_BRANCH_INIT
3138 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3139
3140 {
3141 {
3142 {
3143 SI opval = ADDSI (pc, 4);
3144 SET_H_DR (((UINT) 1), opval);
3145 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3146 }
3147 {
3148 USI opval = FLD (i_label12);
3149 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3150 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3151 }
3152 }
3153 }
3154
3155 SEM_BRANCH_FINI (vpc);
3156 return vpc;
3157 #undef FLD
3158 }
3159
3160 /* ret: ret */
3161
3162 static SEM_PC
3163 SEM_FN_NAME (fr30bf,ret) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3164 {
3165 #define FLD(f) abuf->fields.fmt_empty.f
3166 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3167 int UNUSED written = 0;
3168 IADDR UNUSED pc = abuf->addr;
3169 SEM_BRANCH_INIT
3170 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3171
3172 {
3173 USI opval = GET_H_DR (((UINT) 1));
3174 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3175 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3176 }
3177
3178 SEM_BRANCH_FINI (vpc);
3179 return vpc;
3180 #undef FLD
3181 }
3182
3183 /* ret:d: ret:d */
3184
3185 static SEM_PC
3186 SEM_FN_NAME (fr30bf,ret_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3187 {
3188 #define FLD(f) abuf->fields.fmt_empty.f
3189 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3190 int UNUSED written = 0;
3191 IADDR UNUSED pc = abuf->addr;
3192 SEM_BRANCH_INIT
3193 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3194
3195 {
3196 {
3197 USI opval = GET_H_DR (((UINT) 1));
3198 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3199 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3200 }
3201 }
3202
3203 SEM_BRANCH_FINI (vpc);
3204 return vpc;
3205 #undef FLD
3206 }
3207
3208 /* int: int $u8 */
3209
3210 static SEM_PC
3211 SEM_FN_NAME (fr30bf,int) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3212 {
3213 #define FLD(f) abuf->fields.sfmt_int.f
3214 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3215 int UNUSED written = 0;
3216 IADDR UNUSED pc = abuf->addr;
3217 SEM_BRANCH_INIT
3218 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3219
3220 {
3221 ; /*clobber*/
3222 ; /*clobber*/
3223 ; /*clobber*/
3224 {
3225 SI opval = fr30_int (current_cpu, pc, FLD (f_u8));
3226 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3227 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3228 }
3229 }
3230
3231 SEM_BRANCH_FINI (vpc);
3232 return vpc;
3233 #undef FLD
3234 }
3235
3236 /* inte: inte */
3237
3238 static SEM_PC
3239 SEM_FN_NAME (fr30bf,inte) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3240 {
3241 #define FLD(f) abuf->fields.fmt_empty.f
3242 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3243 int UNUSED written = 0;
3244 IADDR UNUSED pc = abuf->addr;
3245 SEM_BRANCH_INIT
3246 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3247
3248 {
3249 ; /*clobber*/
3250 ; /*clobber*/
3251 ; /*clobber*/
3252 {
3253 SI opval = fr30_inte (current_cpu, pc);
3254 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3255 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3256 }
3257 }
3258
3259 SEM_BRANCH_FINI (vpc);
3260 return vpc;
3261 #undef FLD
3262 }
3263
3264 /* reti: reti */
3265
3266 static SEM_PC
3267 SEM_FN_NAME (fr30bf,reti) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3268 {
3269 #define FLD(f) abuf->fields.fmt_empty.f
3270 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3271 int UNUSED written = 0;
3272 IADDR UNUSED pc = abuf->addr;
3273 SEM_BRANCH_INIT
3274 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3275
3276 if (EQBI (GET_H_SBIT (), 0)) {
3277 {
3278 {
3279 SI opval = GETMEMSI (current_cpu, pc, GET_H_DR (((UINT) 2)));
3280 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3281 written |= (1 << 7);
3282 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3283 }
3284 {
3285 SI opval = ADDSI (GET_H_DR (((UINT) 2)), 4);
3286 SET_H_DR (((UINT) 2), opval);
3287 written |= (1 << 5);
3288 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3289 }
3290 {
3291 SI opval = GETMEMSI (current_cpu, pc, GET_H_DR (((UINT) 2)));
3292 SET_H_PS (opval);
3293 written |= (1 << 8);
3294 TRACE_RESULT (current_cpu, abuf, "ps", 'x', opval);
3295 }
3296 {
3297 SI opval = ADDSI (GET_H_DR (((UINT) 2)), 4);
3298 SET_H_DR (((UINT) 2), opval);
3299 written |= (1 << 5);
3300 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3301 }
3302 }
3303 } else {
3304 {
3305 {
3306 SI opval = GETMEMSI (current_cpu, pc, GET_H_DR (((UINT) 3)));
3307 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3308 written |= (1 << 7);
3309 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3310 }
3311 {
3312 SI opval = ADDSI (GET_H_DR (((UINT) 3)), 4);
3313 SET_H_DR (((UINT) 3), opval);
3314 written |= (1 << 6);
3315 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3316 }
3317 {
3318 SI opval = GETMEMSI (current_cpu, pc, GET_H_DR (((UINT) 3)));
3319 SET_H_PS (opval);
3320 written |= (1 << 8);
3321 TRACE_RESULT (current_cpu, abuf, "ps", 'x', opval);
3322 }
3323 {
3324 SI opval = ADDSI (GET_H_DR (((UINT) 3)), 4);
3325 SET_H_DR (((UINT) 3), opval);
3326 written |= (1 << 6);
3327 TRACE_RESULT (current_cpu, abuf, "dr", 'x', opval);
3328 }
3329 }
3330 }
3331
3332 abuf->written = written;
3333 SEM_BRANCH_FINI (vpc);
3334 return vpc;
3335 #undef FLD
3336 }
3337
3338 /* brad: bra:d $label9 */
3339
3340 static SEM_PC
3341 SEM_FN_NAME (fr30bf,brad) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3342 {
3343 #define FLD(f) abuf->fields.sfmt_brad.f
3344 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3345 int UNUSED written = 0;
3346 IADDR UNUSED pc = abuf->addr;
3347 SEM_BRANCH_INIT
3348 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3349
3350 {
3351 {
3352 USI opval = FLD (i_label9);
3353 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3354 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3355 }
3356 }
3357
3358 SEM_BRANCH_FINI (vpc);
3359 return vpc;
3360 #undef FLD
3361 }
3362
3363 /* bra: bra $label9 */
3364
3365 static SEM_PC
3366 SEM_FN_NAME (fr30bf,bra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3367 {
3368 #define FLD(f) abuf->fields.sfmt_brad.f
3369 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3370 int UNUSED written = 0;
3371 IADDR UNUSED pc = abuf->addr;
3372 SEM_BRANCH_INIT
3373 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3374
3375 {
3376 USI opval = FLD (i_label9);
3377 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3378 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3379 }
3380
3381 SEM_BRANCH_FINI (vpc);
3382 return vpc;
3383 #undef FLD
3384 }
3385
3386 /* bnod: bno:d $label9 */
3387
3388 static SEM_PC
3389 SEM_FN_NAME (fr30bf,bnod) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3390 {
3391 #define FLD(f) abuf->fields.fmt_empty.f
3392 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3393 int UNUSED written = 0;
3394 IADDR UNUSED pc = abuf->addr;
3395 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3396
3397 {
3398 ((void) 0); /*nop*/
3399 }
3400
3401 return vpc;
3402 #undef FLD
3403 }
3404
3405 /* bno: bno $label9 */
3406
3407 static SEM_PC
3408 SEM_FN_NAME (fr30bf,bno) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3409 {
3410 #define FLD(f) abuf->fields.fmt_empty.f
3411 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3412 int UNUSED written = 0;
3413 IADDR UNUSED pc = abuf->addr;
3414 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3415
3416 ((void) 0); /*nop*/
3417
3418 return vpc;
3419 #undef FLD
3420 }
3421
3422 /* beqd: beq:d $label9 */
3423
3424 static SEM_PC
3425 SEM_FN_NAME (fr30bf,beqd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3426 {
3427 #define FLD(f) abuf->fields.sfmt_brad.f
3428 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3429 int UNUSED written = 0;
3430 IADDR UNUSED pc = abuf->addr;
3431 SEM_BRANCH_INIT
3432 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3433
3434 {
3435 if (CPU (h_zbit)) {
3436 {
3437 USI opval = FLD (i_label9);
3438 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3439 written |= (1 << 2);
3440 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3441 }
3442 }
3443 }
3444
3445 abuf->written = written;
3446 SEM_BRANCH_FINI (vpc);
3447 return vpc;
3448 #undef FLD
3449 }
3450
3451 /* beq: beq $label9 */
3452
3453 static SEM_PC
3454 SEM_FN_NAME (fr30bf,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3455 {
3456 #define FLD(f) abuf->fields.sfmt_brad.f
3457 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3458 int UNUSED written = 0;
3459 IADDR UNUSED pc = abuf->addr;
3460 SEM_BRANCH_INIT
3461 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3462
3463 if (CPU (h_zbit)) {
3464 {
3465 USI opval = FLD (i_label9);
3466 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3467 written |= (1 << 2);
3468 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3469 }
3470 }
3471
3472 abuf->written = written;
3473 SEM_BRANCH_FINI (vpc);
3474 return vpc;
3475 #undef FLD
3476 }
3477
3478 /* bned: bne:d $label9 */
3479
3480 static SEM_PC
3481 SEM_FN_NAME (fr30bf,bned) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3482 {
3483 #define FLD(f) abuf->fields.sfmt_brad.f
3484 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3485 int UNUSED written = 0;
3486 IADDR UNUSED pc = abuf->addr;
3487 SEM_BRANCH_INIT
3488 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3489
3490 {
3491 if (NOTBI (CPU (h_zbit))) {
3492 {
3493 USI opval = FLD (i_label9);
3494 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3495 written |= (1 << 2);
3496 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3497 }
3498 }
3499 }
3500
3501 abuf->written = written;
3502 SEM_BRANCH_FINI (vpc);
3503 return vpc;
3504 #undef FLD
3505 }
3506
3507 /* bne: bne $label9 */
3508
3509 static SEM_PC
3510 SEM_FN_NAME (fr30bf,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3511 {
3512 #define FLD(f) abuf->fields.sfmt_brad.f
3513 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3514 int UNUSED written = 0;
3515 IADDR UNUSED pc = abuf->addr;
3516 SEM_BRANCH_INIT
3517 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3518
3519 if (NOTBI (CPU (h_zbit))) {
3520 {
3521 USI opval = FLD (i_label9);
3522 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3523 written |= (1 << 2);
3524 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3525 }
3526 }
3527
3528 abuf->written = written;
3529 SEM_BRANCH_FINI (vpc);
3530 return vpc;
3531 #undef FLD
3532 }
3533
3534 /* bcd: bc:d $label9 */
3535
3536 static SEM_PC
3537 SEM_FN_NAME (fr30bf,bcd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3538 {
3539 #define FLD(f) abuf->fields.sfmt_brad.f
3540 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3541 int UNUSED written = 0;
3542 IADDR UNUSED pc = abuf->addr;
3543 SEM_BRANCH_INIT
3544 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3545
3546 {
3547 if (CPU (h_cbit)) {
3548 {
3549 USI opval = FLD (i_label9);
3550 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3551 written |= (1 << 2);
3552 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3553 }
3554 }
3555 }
3556
3557 abuf->written = written;
3558 SEM_BRANCH_FINI (vpc);
3559 return vpc;
3560 #undef FLD
3561 }
3562
3563 /* bc: bc $label9 */
3564
3565 static SEM_PC
3566 SEM_FN_NAME (fr30bf,bc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3567 {
3568 #define FLD(f) abuf->fields.sfmt_brad.f
3569 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3570 int UNUSED written = 0;
3571 IADDR UNUSED pc = abuf->addr;
3572 SEM_BRANCH_INIT
3573 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3574
3575 if (CPU (h_cbit)) {
3576 {
3577 USI opval = FLD (i_label9);
3578 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3579 written |= (1 << 2);
3580 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3581 }
3582 }
3583
3584 abuf->written = written;
3585 SEM_BRANCH_FINI (vpc);
3586 return vpc;
3587 #undef FLD
3588 }
3589
3590 /* bncd: bnc:d $label9 */
3591
3592 static SEM_PC
3593 SEM_FN_NAME (fr30bf,bncd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3594 {
3595 #define FLD(f) abuf->fields.sfmt_brad.f
3596 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3597 int UNUSED written = 0;
3598 IADDR UNUSED pc = abuf->addr;
3599 SEM_BRANCH_INIT
3600 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3601
3602 {
3603 if (NOTBI (CPU (h_cbit))) {
3604 {
3605 USI opval = FLD (i_label9);
3606 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3607 written |= (1 << 2);
3608 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3609 }
3610 }
3611 }
3612
3613 abuf->written = written;
3614 SEM_BRANCH_FINI (vpc);
3615 return vpc;
3616 #undef FLD
3617 }
3618
3619 /* bnc: bnc $label9 */
3620
3621 static SEM_PC
3622 SEM_FN_NAME (fr30bf,bnc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3623 {
3624 #define FLD(f) abuf->fields.sfmt_brad.f
3625 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3626 int UNUSED written = 0;
3627 IADDR UNUSED pc = abuf->addr;
3628 SEM_BRANCH_INIT
3629 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3630
3631 if (NOTBI (CPU (h_cbit))) {
3632 {
3633 USI opval = FLD (i_label9);
3634 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3635 written |= (1 << 2);
3636 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3637 }
3638 }
3639
3640 abuf->written = written;
3641 SEM_BRANCH_FINI (vpc);
3642 return vpc;
3643 #undef FLD
3644 }
3645
3646 /* bnd: bn:d $label9 */
3647
3648 static SEM_PC
3649 SEM_FN_NAME (fr30bf,bnd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3650 {
3651 #define FLD(f) abuf->fields.sfmt_brad.f
3652 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3653 int UNUSED written = 0;
3654 IADDR UNUSED pc = abuf->addr;
3655 SEM_BRANCH_INIT
3656 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3657
3658 {
3659 if (CPU (h_nbit)) {
3660 {
3661 USI opval = FLD (i_label9);
3662 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3663 written |= (1 << 2);
3664 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3665 }
3666 }
3667 }
3668
3669 abuf->written = written;
3670 SEM_BRANCH_FINI (vpc);
3671 return vpc;
3672 #undef FLD
3673 }
3674
3675 /* bn: bn $label9 */
3676
3677 static SEM_PC
3678 SEM_FN_NAME (fr30bf,bn) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3679 {
3680 #define FLD(f) abuf->fields.sfmt_brad.f
3681 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3682 int UNUSED written = 0;
3683 IADDR UNUSED pc = abuf->addr;
3684 SEM_BRANCH_INIT
3685 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3686
3687 if (CPU (h_nbit)) {
3688 {
3689 USI opval = FLD (i_label9);
3690 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3691 written |= (1 << 2);
3692 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3693 }
3694 }
3695
3696 abuf->written = written;
3697 SEM_BRANCH_FINI (vpc);
3698 return vpc;
3699 #undef FLD
3700 }
3701
3702 /* bpd: bp:d $label9 */
3703
3704 static SEM_PC
3705 SEM_FN_NAME (fr30bf,bpd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3706 {
3707 #define FLD(f) abuf->fields.sfmt_brad.f
3708 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3709 int UNUSED written = 0;
3710 IADDR UNUSED pc = abuf->addr;
3711 SEM_BRANCH_INIT
3712 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3713
3714 {
3715 if (NOTBI (CPU (h_nbit))) {
3716 {
3717 USI opval = FLD (i_label9);
3718 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3719 written |= (1 << 2);
3720 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3721 }
3722 }
3723 }
3724
3725 abuf->written = written;
3726 SEM_BRANCH_FINI (vpc);
3727 return vpc;
3728 #undef FLD
3729 }
3730
3731 /* bp: bp $label9 */
3732
3733 static SEM_PC
3734 SEM_FN_NAME (fr30bf,bp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3735 {
3736 #define FLD(f) abuf->fields.sfmt_brad.f
3737 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3738 int UNUSED written = 0;
3739 IADDR UNUSED pc = abuf->addr;
3740 SEM_BRANCH_INIT
3741 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3742
3743 if (NOTBI (CPU (h_nbit))) {
3744 {
3745 USI opval = FLD (i_label9);
3746 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3747 written |= (1 << 2);
3748 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3749 }
3750 }
3751
3752 abuf->written = written;
3753 SEM_BRANCH_FINI (vpc);
3754 return vpc;
3755 #undef FLD
3756 }
3757
3758 /* bvd: bv:d $label9 */
3759
3760 static SEM_PC
3761 SEM_FN_NAME (fr30bf,bvd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3762 {
3763 #define FLD(f) abuf->fields.sfmt_brad.f
3764 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3765 int UNUSED written = 0;
3766 IADDR UNUSED pc = abuf->addr;
3767 SEM_BRANCH_INIT
3768 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3769
3770 {
3771 if (CPU (h_vbit)) {
3772 {
3773 USI opval = FLD (i_label9);
3774 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3775 written |= (1 << 2);
3776 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3777 }
3778 }
3779 }
3780
3781 abuf->written = written;
3782 SEM_BRANCH_FINI (vpc);
3783 return vpc;
3784 #undef FLD
3785 }
3786
3787 /* bv: bv $label9 */
3788
3789 static SEM_PC
3790 SEM_FN_NAME (fr30bf,bv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3791 {
3792 #define FLD(f) abuf->fields.sfmt_brad.f
3793 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3794 int UNUSED written = 0;
3795 IADDR UNUSED pc = abuf->addr;
3796 SEM_BRANCH_INIT
3797 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3798
3799 if (CPU (h_vbit)) {
3800 {
3801 USI opval = FLD (i_label9);
3802 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3803 written |= (1 << 2);
3804 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3805 }
3806 }
3807
3808 abuf->written = written;
3809 SEM_BRANCH_FINI (vpc);
3810 return vpc;
3811 #undef FLD
3812 }
3813
3814 /* bnvd: bnv:d $label9 */
3815
3816 static SEM_PC
3817 SEM_FN_NAME (fr30bf,bnvd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3818 {
3819 #define FLD(f) abuf->fields.sfmt_brad.f
3820 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3821 int UNUSED written = 0;
3822 IADDR UNUSED pc = abuf->addr;
3823 SEM_BRANCH_INIT
3824 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3825
3826 {
3827 if (NOTBI (CPU (h_vbit))) {
3828 {
3829 USI opval = FLD (i_label9);
3830 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3831 written |= (1 << 2);
3832 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3833 }
3834 }
3835 }
3836
3837 abuf->written = written;
3838 SEM_BRANCH_FINI (vpc);
3839 return vpc;
3840 #undef FLD
3841 }
3842
3843 /* bnv: bnv $label9 */
3844
3845 static SEM_PC
3846 SEM_FN_NAME (fr30bf,bnv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3847 {
3848 #define FLD(f) abuf->fields.sfmt_brad.f
3849 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3850 int UNUSED written = 0;
3851 IADDR UNUSED pc = abuf->addr;
3852 SEM_BRANCH_INIT
3853 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3854
3855 if (NOTBI (CPU (h_vbit))) {
3856 {
3857 USI opval = FLD (i_label9);
3858 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3859 written |= (1 << 2);
3860 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3861 }
3862 }
3863
3864 abuf->written = written;
3865 SEM_BRANCH_FINI (vpc);
3866 return vpc;
3867 #undef FLD
3868 }
3869
3870 /* bltd: blt:d $label9 */
3871
3872 static SEM_PC
3873 SEM_FN_NAME (fr30bf,bltd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3874 {
3875 #define FLD(f) abuf->fields.sfmt_brad.f
3876 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3877 int UNUSED written = 0;
3878 IADDR UNUSED pc = abuf->addr;
3879 SEM_BRANCH_INIT
3880 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3881
3882 {
3883 if (XORBI (CPU (h_vbit), CPU (h_nbit))) {
3884 {
3885 USI opval = FLD (i_label9);
3886 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3887 written |= (1 << 3);
3888 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3889 }
3890 }
3891 }
3892
3893 abuf->written = written;
3894 SEM_BRANCH_FINI (vpc);
3895 return vpc;
3896 #undef FLD
3897 }
3898
3899 /* blt: blt $label9 */
3900
3901 static SEM_PC
3902 SEM_FN_NAME (fr30bf,blt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3903 {
3904 #define FLD(f) abuf->fields.sfmt_brad.f
3905 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3906 int UNUSED written = 0;
3907 IADDR UNUSED pc = abuf->addr;
3908 SEM_BRANCH_INIT
3909 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3910
3911 if (XORBI (CPU (h_vbit), CPU (h_nbit))) {
3912 {
3913 USI opval = FLD (i_label9);
3914 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3915 written |= (1 << 3);
3916 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3917 }
3918 }
3919
3920 abuf->written = written;
3921 SEM_BRANCH_FINI (vpc);
3922 return vpc;
3923 #undef FLD
3924 }
3925
3926 /* bged: bge:d $label9 */
3927
3928 static SEM_PC
3929 SEM_FN_NAME (fr30bf,bged) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3930 {
3931 #define FLD(f) abuf->fields.sfmt_brad.f
3932 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3933 int UNUSED written = 0;
3934 IADDR UNUSED pc = abuf->addr;
3935 SEM_BRANCH_INIT
3936 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3937
3938 {
3939 if (NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)))) {
3940 {
3941 USI opval = FLD (i_label9);
3942 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3943 written |= (1 << 3);
3944 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3945 }
3946 }
3947 }
3948
3949 abuf->written = written;
3950 SEM_BRANCH_FINI (vpc);
3951 return vpc;
3952 #undef FLD
3953 }
3954
3955 /* bge: bge $label9 */
3956
3957 static SEM_PC
3958 SEM_FN_NAME (fr30bf,bge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3959 {
3960 #define FLD(f) abuf->fields.sfmt_brad.f
3961 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3962 int UNUSED written = 0;
3963 IADDR UNUSED pc = abuf->addr;
3964 SEM_BRANCH_INIT
3965 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3966
3967 if (NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)))) {
3968 {
3969 USI opval = FLD (i_label9);
3970 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3971 written |= (1 << 3);
3972 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3973 }
3974 }
3975
3976 abuf->written = written;
3977 SEM_BRANCH_FINI (vpc);
3978 return vpc;
3979 #undef FLD
3980 }
3981
3982 /* bled: ble:d $label9 */
3983
3984 static SEM_PC
3985 SEM_FN_NAME (fr30bf,bled) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3986 {
3987 #define FLD(f) abuf->fields.sfmt_brad.f
3988 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3989 int UNUSED written = 0;
3990 IADDR UNUSED pc = abuf->addr;
3991 SEM_BRANCH_INIT
3992 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3993
3994 {
3995 if (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit))) {
3996 {
3997 USI opval = FLD (i_label9);
3998 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
3999 written |= (1 << 4);
4000 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4001 }
4002 }
4003 }
4004
4005 abuf->written = written;
4006 SEM_BRANCH_FINI (vpc);
4007 return vpc;
4008 #undef FLD
4009 }
4010
4011 /* ble: ble $label9 */
4012
4013 static SEM_PC
4014 SEM_FN_NAME (fr30bf,ble) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4015 {
4016 #define FLD(f) abuf->fields.sfmt_brad.f
4017 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4018 int UNUSED written = 0;
4019 IADDR UNUSED pc = abuf->addr;
4020 SEM_BRANCH_INIT
4021 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4022
4023 if (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit))) {
4024 {
4025 USI opval = FLD (i_label9);
4026 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
4027 written |= (1 << 4);
4028 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4029 }
4030 }
4031
4032 abuf->written = written;
4033 SEM_BRANCH_FINI (vpc);
4034 return vpc;
4035 #undef FLD
4036 }
4037
4038 /* bgtd: bgt:d $label9 */
4039
4040 static SEM_PC
4041 SEM_FN_NAME (fr30bf,bgtd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4042 {
4043 #define FLD(f) abuf->fields.sfmt_brad.f
4044 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4045 int UNUSED written = 0;
4046 IADDR UNUSED pc = abuf->addr;
4047 SEM_BRANCH_INIT
4048 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4049
4050 {
4051 if (NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)))) {
4052 {
4053 USI opval = FLD (i_label9);
4054 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
4055 written |= (1 << 4);
4056 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4057 }
4058 }
4059 }
4060
4061 abuf->written = written;
4062 SEM_BRANCH_FINI (vpc);
4063 return vpc;
4064 #undef FLD
4065 }
4066
4067 /* bgt: bgt $label9 */
4068
4069 static SEM_PC
4070 SEM_FN_NAME (fr30bf,bgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4071 {
4072 #define FLD(f) abuf->fields.sfmt_brad.f
4073 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4074 int UNUSED written = 0;
4075 IADDR UNUSED pc = abuf->addr;
4076 SEM_BRANCH_INIT
4077 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4078
4079 if (NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)))) {
4080 {
4081 USI opval = FLD (i_label9);
4082 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
4083 written |= (1 << 4);
4084 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4085 }
4086 }
4087
4088 abuf->written = written;
4089 SEM_BRANCH_FINI (vpc);
4090 return vpc;
4091 #undef FLD
4092 }
4093
4094 /* blsd: bls:d $label9 */
4095
4096 static SEM_PC
4097 SEM_FN_NAME (fr30bf,blsd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4098 {
4099 #define FLD(f) abuf->fields.sfmt_brad.f
4100 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4101 int UNUSED written = 0;
4102 IADDR UNUSED pc = abuf->addr;
4103 SEM_BRANCH_INIT
4104 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4105
4106 {
4107 if (ORBI (CPU (h_cbit), CPU (h_zbit))) {
4108 {
4109 USI opval = FLD (i_label9);
4110 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
4111 written |= (1 << 3);
4112 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4113 }
4114 }
4115 }
4116
4117 abuf->written = written;
4118 SEM_BRANCH_FINI (vpc);
4119 return vpc;
4120 #undef FLD
4121 }
4122
4123 /* bls: bls $label9 */
4124
4125 static SEM_PC
4126 SEM_FN_NAME (fr30bf,bls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4127 {
4128 #define FLD(f) abuf->fields.sfmt_brad.f
4129 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4130 int UNUSED written = 0;
4131 IADDR UNUSED pc = abuf->addr;
4132 SEM_BRANCH_INIT
4133 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4134
4135 if (ORBI (CPU (h_cbit), CPU (h_zbit))) {
4136 {
4137 USI opval = FLD (i_label9);
4138 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
4139 written |= (1 << 3);
4140 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4141 }
4142 }
4143
4144 abuf->written = written;
4145 SEM_BRANCH_FINI (vpc);
4146 return vpc;
4147 #undef FLD
4148 }
4149
4150 /* bhid: bhi:d $label9 */
4151
4152 static SEM_PC
4153 SEM_FN_NAME (fr30bf,bhid) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4154 {
4155 #define FLD(f) abuf->fields.sfmt_brad.f
4156 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4157 int UNUSED written = 0;
4158 IADDR UNUSED pc = abuf->addr;
4159 SEM_BRANCH_INIT
4160 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4161
4162 {
4163 if (NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)))) {
4164 {
4165 USI opval = FLD (i_label9);
4166 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
4167 written |= (1 << 3);
4168 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4169 }
4170 }
4171 }
4172
4173 abuf->written = written;
4174 SEM_BRANCH_FINI (vpc);
4175 return vpc;
4176 #undef FLD
4177 }
4178
4179 /* bhi: bhi $label9 */
4180
4181 static SEM_PC
4182 SEM_FN_NAME (fr30bf,bhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4183 {
4184 #define FLD(f) abuf->fields.sfmt_brad.f
4185 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4186 int UNUSED written = 0;
4187 IADDR UNUSED pc = abuf->addr;
4188 SEM_BRANCH_INIT
4189 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4190
4191 if (NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)))) {
4192 {
4193 USI opval = FLD (i_label9);
4194 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
4195 written |= (1 << 3);
4196 TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4197 }
4198 }
4199
4200 abuf->written = written;
4201 SEM_BRANCH_FINI (vpc);
4202 return vpc;
4203 #undef FLD
4204 }
4205
4206 /* dmovr13: dmov $R13,@$dir10 */
4207
4208 static SEM_PC
4209 SEM_FN_NAME (fr30bf,dmovr13) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4210 {
4211 #define FLD(f) abuf->fields.sfmt_dmovr13pi.f
4212 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4213 int UNUSED written = 0;
4214 IADDR UNUSED pc = abuf->addr;
4215 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4216
4217 {
4218 SI opval = CPU (h_gr[((UINT) 13)]);
4219 SETMEMSI (current_cpu, pc, FLD (f_dir10), opval);
4220 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4221 }
4222
4223 return vpc;
4224 #undef FLD
4225 }
4226
4227 /* dmovr13h: dmovh $R13,@$dir9 */
4228
4229 static SEM_PC
4230 SEM_FN_NAME (fr30bf,dmovr13h) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4231 {
4232 #define FLD(f) abuf->fields.sfmt_dmovr13pih.f
4233 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4234 int UNUSED written = 0;
4235 IADDR UNUSED pc = abuf->addr;
4236 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4237
4238 {
4239 HI opval = CPU (h_gr[((UINT) 13)]);
4240 SETMEMHI (current_cpu, pc, FLD (f_dir9), opval);
4241 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4242 }
4243
4244 return vpc;
4245 #undef FLD
4246 }
4247
4248 /* dmovr13b: dmovb $R13,@$dir8 */
4249
4250 static SEM_PC
4251 SEM_FN_NAME (fr30bf,dmovr13b) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4252 {
4253 #define FLD(f) abuf->fields.sfmt_dmovr13pib.f
4254 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4255 int UNUSED written = 0;
4256 IADDR UNUSED pc = abuf->addr;
4257 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4258
4259 {
4260 QI opval = CPU (h_gr[((UINT) 13)]);
4261 SETMEMQI (current_cpu, pc, FLD (f_dir8), opval);
4262 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4263 }
4264
4265 return vpc;
4266 #undef FLD
4267 }
4268
4269 /* dmovr13pi: dmov @$R13+,@$dir10 */
4270
4271 static SEM_PC
4272 SEM_FN_NAME (fr30bf,dmovr13pi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4273 {
4274 #define FLD(f) abuf->fields.sfmt_dmovr13pi.f
4275 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4276 int UNUSED written = 0;
4277 IADDR UNUSED pc = abuf->addr;
4278 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4279
4280 {
4281 {
4282 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 13)]));
4283 SETMEMSI (current_cpu, pc, FLD (f_dir10), opval);
4284 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4285 }
4286 {
4287 SI opval = ADDSI (CPU (h_gr[((UINT) 13)]), 4);
4288 CPU (h_gr[((UINT) 13)]) = opval;
4289 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4290 }
4291 }
4292
4293 return vpc;
4294 #undef FLD
4295 }
4296
4297 /* dmovr13pih: dmovh @$R13+,@$dir9 */
4298
4299 static SEM_PC
4300 SEM_FN_NAME (fr30bf,dmovr13pih) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4301 {
4302 #define FLD(f) abuf->fields.sfmt_dmovr13pih.f
4303 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4304 int UNUSED written = 0;
4305 IADDR UNUSED pc = abuf->addr;
4306 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4307
4308 {
4309 {
4310 HI opval = GETMEMHI (current_cpu, pc, CPU (h_gr[((UINT) 13)]));
4311 SETMEMHI (current_cpu, pc, FLD (f_dir9), opval);
4312 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4313 }
4314 {
4315 SI opval = ADDSI (CPU (h_gr[((UINT) 13)]), 2);
4316 CPU (h_gr[((UINT) 13)]) = opval;
4317 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4318 }
4319 }
4320
4321 return vpc;
4322 #undef FLD
4323 }
4324
4325 /* dmovr13pib: dmovb @$R13+,@$dir8 */
4326
4327 static SEM_PC
4328 SEM_FN_NAME (fr30bf,dmovr13pib) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4329 {
4330 #define FLD(f) abuf->fields.sfmt_dmovr13pib.f
4331 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4332 int UNUSED written = 0;
4333 IADDR UNUSED pc = abuf->addr;
4334 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4335
4336 {
4337 {
4338 QI opval = GETMEMQI (current_cpu, pc, CPU (h_gr[((UINT) 13)]));
4339 SETMEMQI (current_cpu, pc, FLD (f_dir8), opval);
4340 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4341 }
4342 {
4343 SI opval = ADDSI (CPU (h_gr[((UINT) 13)]), 1);
4344 CPU (h_gr[((UINT) 13)]) = opval;
4345 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4346 }
4347 }
4348
4349 return vpc;
4350 #undef FLD
4351 }
4352
4353 /* dmovr15pi: dmov @$R15+,@$dir10 */
4354
4355 static SEM_PC
4356 SEM_FN_NAME (fr30bf,dmovr15pi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4357 {
4358 #define FLD(f) abuf->fields.sfmt_dmovr15pi.f
4359 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4360 int UNUSED written = 0;
4361 IADDR UNUSED pc = abuf->addr;
4362 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4363
4364 {
4365 {
4366 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
4367 SETMEMSI (current_cpu, pc, FLD (f_dir10), opval);
4368 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4369 }
4370 {
4371 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
4372 CPU (h_gr[((UINT) 15)]) = opval;
4373 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4374 }
4375 }
4376
4377 return vpc;
4378 #undef FLD
4379 }
4380
4381 /* dmov2r13: dmov @$dir10,$R13 */
4382
4383 static SEM_PC
4384 SEM_FN_NAME (fr30bf,dmov2r13) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4385 {
4386 #define FLD(f) abuf->fields.sfmt_dmovr13pi.f
4387 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4388 int UNUSED written = 0;
4389 IADDR UNUSED pc = abuf->addr;
4390 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4391
4392 {
4393 SI opval = GETMEMSI (current_cpu, pc, FLD (f_dir10));
4394 CPU (h_gr[((UINT) 13)]) = opval;
4395 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4396 }
4397
4398 return vpc;
4399 #undef FLD
4400 }
4401
4402 /* dmov2r13h: dmovh @$dir9,$R13 */
4403
4404 static SEM_PC
4405 SEM_FN_NAME (fr30bf,dmov2r13h) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4406 {
4407 #define FLD(f) abuf->fields.sfmt_dmovr13pih.f
4408 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4409 int UNUSED written = 0;
4410 IADDR UNUSED pc = abuf->addr;
4411 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4412
4413 {
4414 SI opval = GETMEMHI (current_cpu, pc, FLD (f_dir9));
4415 CPU (h_gr[((UINT) 13)]) = opval;
4416 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4417 }
4418
4419 return vpc;
4420 #undef FLD
4421 }
4422
4423 /* dmov2r13b: dmovb @$dir8,$R13 */
4424
4425 static SEM_PC
4426 SEM_FN_NAME (fr30bf,dmov2r13b) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4427 {
4428 #define FLD(f) abuf->fields.sfmt_dmovr13pib.f
4429 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4430 int UNUSED written = 0;
4431 IADDR UNUSED pc = abuf->addr;
4432 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4433
4434 {
4435 SI opval = GETMEMQI (current_cpu, pc, FLD (f_dir8));
4436 CPU (h_gr[((UINT) 13)]) = opval;
4437 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4438 }
4439
4440 return vpc;
4441 #undef FLD
4442 }
4443
4444 /* dmov2r13pi: dmov @$dir10,@$R13+ */
4445
4446 static SEM_PC
4447 SEM_FN_NAME (fr30bf,dmov2r13pi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4448 {
4449 #define FLD(f) abuf->fields.sfmt_dmovr13pi.f
4450 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4451 int UNUSED written = 0;
4452 IADDR UNUSED pc = abuf->addr;
4453 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4454
4455 {
4456 {
4457 SI opval = GETMEMSI (current_cpu, pc, FLD (f_dir10));
4458 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 13)]), opval);
4459 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4460 }
4461 {
4462 SI opval = ADDSI (CPU (h_gr[((UINT) 13)]), 4);
4463 CPU (h_gr[((UINT) 13)]) = opval;
4464 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4465 }
4466 }
4467
4468 return vpc;
4469 #undef FLD
4470 }
4471
4472 /* dmov2r13pih: dmovh @$dir9,@$R13+ */
4473
4474 static SEM_PC
4475 SEM_FN_NAME (fr30bf,dmov2r13pih) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4476 {
4477 #define FLD(f) abuf->fields.sfmt_dmovr13pih.f
4478 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4479 int UNUSED written = 0;
4480 IADDR UNUSED pc = abuf->addr;
4481 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4482
4483 {
4484 {
4485 HI opval = GETMEMHI (current_cpu, pc, FLD (f_dir9));
4486 SETMEMHI (current_cpu, pc, CPU (h_gr[((UINT) 13)]), opval);
4487 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4488 }
4489 {
4490 SI opval = ADDSI (CPU (h_gr[((UINT) 13)]), 2);
4491 CPU (h_gr[((UINT) 13)]) = opval;
4492 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4493 }
4494 }
4495
4496 return vpc;
4497 #undef FLD
4498 }
4499
4500 /* dmov2r13pib: dmovb @$dir8,@$R13+ */
4501
4502 static SEM_PC
4503 SEM_FN_NAME (fr30bf,dmov2r13pib) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4504 {
4505 #define FLD(f) abuf->fields.sfmt_dmovr13pib.f
4506 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4507 int UNUSED written = 0;
4508 IADDR UNUSED pc = abuf->addr;
4509 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4510
4511 {
4512 {
4513 QI opval = GETMEMQI (current_cpu, pc, FLD (f_dir8));
4514 SETMEMQI (current_cpu, pc, CPU (h_gr[((UINT) 13)]), opval);
4515 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4516 }
4517 {
4518 SI opval = ADDSI (CPU (h_gr[((UINT) 13)]), 1);
4519 CPU (h_gr[((UINT) 13)]) = opval;
4520 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4521 }
4522 }
4523
4524 return vpc;
4525 #undef FLD
4526 }
4527
4528 /* dmov2r15pd: dmov @$dir10,@-$R15 */
4529
4530 static SEM_PC
4531 SEM_FN_NAME (fr30bf,dmov2r15pd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4532 {
4533 #define FLD(f) abuf->fields.sfmt_dmovr15pi.f
4534 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4535 int UNUSED written = 0;
4536 IADDR UNUSED pc = abuf->addr;
4537 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4538
4539 {
4540 {
4541 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
4542 CPU (h_gr[((UINT) 15)]) = opval;
4543 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4544 }
4545 {
4546 SI opval = GETMEMSI (current_cpu, pc, FLD (f_dir10));
4547 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
4548 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4549 }
4550 }
4551
4552 return vpc;
4553 #undef FLD
4554 }
4555
4556 /* ldres: ldres @$Ri+,$u4 */
4557
4558 static SEM_PC
4559 SEM_FN_NAME (fr30bf,ldres) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4560 {
4561 #define FLD(f) abuf->fields.sfmt_add2.f
4562 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4563 int UNUSED written = 0;
4564 IADDR UNUSED pc = abuf->addr;
4565 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4566
4567 {
4568 SI opval = ADDSI (* FLD (i_Ri), 4);
4569 * FLD (i_Ri) = opval;
4570 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4571 }
4572
4573 return vpc;
4574 #undef FLD
4575 }
4576
4577 /* stres: stres $u4,@$Ri+ */
4578
4579 static SEM_PC
4580 SEM_FN_NAME (fr30bf,stres) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4581 {
4582 #define FLD(f) abuf->fields.sfmt_add2.f
4583 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4584 int UNUSED written = 0;
4585 IADDR UNUSED pc = abuf->addr;
4586 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4587
4588 {
4589 SI opval = ADDSI (* FLD (i_Ri), 4);
4590 * FLD (i_Ri) = opval;
4591 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4592 }
4593
4594 return vpc;
4595 #undef FLD
4596 }
4597
4598 /* copop: copop $u4c,$ccc,$CRj,$CRi */
4599
4600 static SEM_PC
4601 SEM_FN_NAME (fr30bf,copop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4602 {
4603 #define FLD(f) abuf->fields.fmt_empty.f
4604 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4605 int UNUSED written = 0;
4606 IADDR UNUSED pc = abuf->addr;
4607 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4608
4609 ((void) 0); /*nop*/
4610
4611 return vpc;
4612 #undef FLD
4613 }
4614
4615 /* copld: copld $u4c,$ccc,$Rjc,$CRi */
4616
4617 static SEM_PC
4618 SEM_FN_NAME (fr30bf,copld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4619 {
4620 #define FLD(f) abuf->fields.fmt_empty.f
4621 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4622 int UNUSED written = 0;
4623 IADDR UNUSED pc = abuf->addr;
4624 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4625
4626 ((void) 0); /*nop*/
4627
4628 return vpc;
4629 #undef FLD
4630 }
4631
4632 /* copst: copst $u4c,$ccc,$CRj,$Ric */
4633
4634 static SEM_PC
4635 SEM_FN_NAME (fr30bf,copst) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4636 {
4637 #define FLD(f) abuf->fields.fmt_empty.f
4638 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4639 int UNUSED written = 0;
4640 IADDR UNUSED pc = abuf->addr;
4641 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4642
4643 ((void) 0); /*nop*/
4644
4645 return vpc;
4646 #undef FLD
4647 }
4648
4649 /* copsv: copsv $u4c,$ccc,$CRj,$Ric */
4650
4651 static SEM_PC
4652 SEM_FN_NAME (fr30bf,copsv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4653 {
4654 #define FLD(f) abuf->fields.fmt_empty.f
4655 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4656 int UNUSED written = 0;
4657 IADDR UNUSED pc = abuf->addr;
4658 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4659
4660 ((void) 0); /*nop*/
4661
4662 return vpc;
4663 #undef FLD
4664 }
4665
4666 /* nop: nop */
4667
4668 static SEM_PC
4669 SEM_FN_NAME (fr30bf,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4670 {
4671 #define FLD(f) abuf->fields.fmt_empty.f
4672 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4673 int UNUSED written = 0;
4674 IADDR UNUSED pc = abuf->addr;
4675 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4676
4677 ((void) 0); /*nop*/
4678
4679 return vpc;
4680 #undef FLD
4681 }
4682
4683 /* andccr: andccr $u8 */
4684
4685 static SEM_PC
4686 SEM_FN_NAME (fr30bf,andccr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4687 {
4688 #define FLD(f) abuf->fields.sfmt_int.f
4689 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4690 int UNUSED written = 0;
4691 IADDR UNUSED pc = abuf->addr;
4692 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4693
4694 {
4695 UQI opval = ANDQI (GET_H_CCR (), FLD (f_u8));
4696 SET_H_CCR (opval);
4697 TRACE_RESULT (current_cpu, abuf, "ccr", 'x', opval);
4698 }
4699
4700 return vpc;
4701 #undef FLD
4702 }
4703
4704 /* orccr: orccr $u8 */
4705
4706 static SEM_PC
4707 SEM_FN_NAME (fr30bf,orccr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4708 {
4709 #define FLD(f) abuf->fields.sfmt_int.f
4710 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4711 int UNUSED written = 0;
4712 IADDR UNUSED pc = abuf->addr;
4713 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4714
4715 {
4716 UQI opval = ORQI (GET_H_CCR (), FLD (f_u8));
4717 SET_H_CCR (opval);
4718 TRACE_RESULT (current_cpu, abuf, "ccr", 'x', opval);
4719 }
4720
4721 return vpc;
4722 #undef FLD
4723 }
4724
4725 /* stilm: stilm $u8 */
4726
4727 static SEM_PC
4728 SEM_FN_NAME (fr30bf,stilm) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4729 {
4730 #define FLD(f) abuf->fields.sfmt_int.f
4731 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4732 int UNUSED written = 0;
4733 IADDR UNUSED pc = abuf->addr;
4734 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4735
4736 {
4737 UQI opval = ANDSI (FLD (f_u8), 31);
4738 SET_H_ILM (opval);
4739 TRACE_RESULT (current_cpu, abuf, "ilm", 'x', opval);
4740 }
4741
4742 return vpc;
4743 #undef FLD
4744 }
4745
4746 /* addsp: addsp $s10 */
4747
4748 static SEM_PC
4749 SEM_FN_NAME (fr30bf,addsp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4750 {
4751 #define FLD(f) abuf->fields.sfmt_addsp.f
4752 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4753 int UNUSED written = 0;
4754 IADDR UNUSED pc = abuf->addr;
4755 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4756
4757 {
4758 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), FLD (f_s10));
4759 CPU (h_gr[((UINT) 15)]) = opval;
4760 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4761 }
4762
4763 return vpc;
4764 #undef FLD
4765 }
4766
4767 /* extsb: extsb $Ri */
4768
4769 static SEM_PC
4770 SEM_FN_NAME (fr30bf,extsb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4771 {
4772 #define FLD(f) abuf->fields.sfmt_add2.f
4773 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4774 int UNUSED written = 0;
4775 IADDR UNUSED pc = abuf->addr;
4776 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4777
4778 {
4779 SI opval = EXTQISI (ANDQI (* FLD (i_Ri), 255));
4780 * FLD (i_Ri) = opval;
4781 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4782 }
4783
4784 return vpc;
4785 #undef FLD
4786 }
4787
4788 /* extub: extub $Ri */
4789
4790 static SEM_PC
4791 SEM_FN_NAME (fr30bf,extub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4792 {
4793 #define FLD(f) abuf->fields.sfmt_add2.f
4794 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4795 int UNUSED written = 0;
4796 IADDR UNUSED pc = abuf->addr;
4797 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4798
4799 {
4800 SI opval = ZEXTQISI (ANDQI (* FLD (i_Ri), 255));
4801 * FLD (i_Ri) = opval;
4802 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4803 }
4804
4805 return vpc;
4806 #undef FLD
4807 }
4808
4809 /* extsh: extsh $Ri */
4810
4811 static SEM_PC
4812 SEM_FN_NAME (fr30bf,extsh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4813 {
4814 #define FLD(f) abuf->fields.sfmt_add2.f
4815 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4816 int UNUSED written = 0;
4817 IADDR UNUSED pc = abuf->addr;
4818 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4819
4820 {
4821 SI opval = EXTHISI (ANDHI (* FLD (i_Ri), 65535));
4822 * FLD (i_Ri) = opval;
4823 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4824 }
4825
4826 return vpc;
4827 #undef FLD
4828 }
4829
4830 /* extuh: extuh $Ri */
4831
4832 static SEM_PC
4833 SEM_FN_NAME (fr30bf,extuh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4834 {
4835 #define FLD(f) abuf->fields.sfmt_add2.f
4836 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4837 int UNUSED written = 0;
4838 IADDR UNUSED pc = abuf->addr;
4839 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4840
4841 {
4842 SI opval = ZEXTHISI (ANDHI (* FLD (i_Ri), 65535));
4843 * FLD (i_Ri) = opval;
4844 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4845 }
4846
4847 return vpc;
4848 #undef FLD
4849 }
4850
4851 /* ldm0: ldm0 ($reglist_low_ld) */
4852
4853 static SEM_PC
4854 SEM_FN_NAME (fr30bf,ldm0) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4855 {
4856 #define FLD(f) abuf->fields.sfmt_ldm0.f
4857 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4858 int UNUSED written = 0;
4859 IADDR UNUSED pc = abuf->addr;
4860 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4861
4862 {
4863 if (ANDSI (FLD (f_reglist_low_ld), 1)) {
4864 {
4865 {
4866 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
4867 CPU (h_gr[((UINT) 0)]) = opval;
4868 written |= (1 << 3);
4869 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4870 }
4871 {
4872 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
4873 CPU (h_gr[((UINT) 15)]) = opval;
4874 written |= (1 << 5);
4875 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4876 }
4877 }
4878 }
4879 if (ANDSI (FLD (f_reglist_low_ld), 2)) {
4880 {
4881 {
4882 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
4883 CPU (h_gr[((UINT) 1)]) = opval;
4884 written |= (1 << 4);
4885 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4886 }
4887 {
4888 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
4889 CPU (h_gr[((UINT) 15)]) = opval;
4890 written |= (1 << 5);
4891 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4892 }
4893 }
4894 }
4895 if (ANDSI (FLD (f_reglist_low_ld), 4)) {
4896 {
4897 {
4898 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
4899 CPU (h_gr[((UINT) 2)]) = opval;
4900 written |= (1 << 6);
4901 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4902 }
4903 {
4904 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
4905 CPU (h_gr[((UINT) 15)]) = opval;
4906 written |= (1 << 5);
4907 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4908 }
4909 }
4910 }
4911 if (ANDSI (FLD (f_reglist_low_ld), 8)) {
4912 {
4913 {
4914 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
4915 CPU (h_gr[((UINT) 3)]) = opval;
4916 written |= (1 << 7);
4917 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4918 }
4919 {
4920 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
4921 CPU (h_gr[((UINT) 15)]) = opval;
4922 written |= (1 << 5);
4923 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4924 }
4925 }
4926 }
4927 if (ANDSI (FLD (f_reglist_low_ld), 16)) {
4928 {
4929 {
4930 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
4931 CPU (h_gr[((UINT) 4)]) = opval;
4932 written |= (1 << 8);
4933 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4934 }
4935 {
4936 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
4937 CPU (h_gr[((UINT) 15)]) = opval;
4938 written |= (1 << 5);
4939 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4940 }
4941 }
4942 }
4943 if (ANDSI (FLD (f_reglist_low_ld), 32)) {
4944 {
4945 {
4946 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
4947 CPU (h_gr[((UINT) 5)]) = opval;
4948 written |= (1 << 9);
4949 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4950 }
4951 {
4952 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
4953 CPU (h_gr[((UINT) 15)]) = opval;
4954 written |= (1 << 5);
4955 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4956 }
4957 }
4958 }
4959 if (ANDSI (FLD (f_reglist_low_ld), 64)) {
4960 {
4961 {
4962 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
4963 CPU (h_gr[((UINT) 6)]) = opval;
4964 written |= (1 << 10);
4965 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4966 }
4967 {
4968 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
4969 CPU (h_gr[((UINT) 15)]) = opval;
4970 written |= (1 << 5);
4971 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4972 }
4973 }
4974 }
4975 if (ANDSI (FLD (f_reglist_low_ld), 128)) {
4976 {
4977 {
4978 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
4979 CPU (h_gr[((UINT) 7)]) = opval;
4980 written |= (1 << 11);
4981 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4982 }
4983 {
4984 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
4985 CPU (h_gr[((UINT) 15)]) = opval;
4986 written |= (1 << 5);
4987 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4988 }
4989 }
4990 }
4991 }
4992
4993 abuf->written = written;
4994 return vpc;
4995 #undef FLD
4996 }
4997
4998 /* ldm1: ldm1 ($reglist_hi_ld) */
4999
5000 static SEM_PC
5001 SEM_FN_NAME (fr30bf,ldm1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5002 {
5003 #define FLD(f) abuf->fields.sfmt_ldm1.f
5004 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5005 int UNUSED written = 0;
5006 IADDR UNUSED pc = abuf->addr;
5007 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5008
5009 {
5010 if (ANDSI (FLD (f_reglist_hi_ld), 1)) {
5011 {
5012 {
5013 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
5014 CPU (h_gr[((UINT) 8)]) = opval;
5015 written |= (1 << 9);
5016 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5017 }
5018 {
5019 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
5020 CPU (h_gr[((UINT) 15)]) = opval;
5021 written |= (1 << 8);
5022 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5023 }
5024 }
5025 }
5026 if (ANDSI (FLD (f_reglist_hi_ld), 2)) {
5027 {
5028 {
5029 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
5030 CPU (h_gr[((UINT) 9)]) = opval;
5031 written |= (1 << 10);
5032 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5033 }
5034 {
5035 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
5036 CPU (h_gr[((UINT) 15)]) = opval;
5037 written |= (1 << 8);
5038 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5039 }
5040 }
5041 }
5042 if (ANDSI (FLD (f_reglist_hi_ld), 4)) {
5043 {
5044 {
5045 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
5046 CPU (h_gr[((UINT) 10)]) = opval;
5047 written |= (1 << 3);
5048 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5049 }
5050 {
5051 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
5052 CPU (h_gr[((UINT) 15)]) = opval;
5053 written |= (1 << 8);
5054 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5055 }
5056 }
5057 }
5058 if (ANDSI (FLD (f_reglist_hi_ld), 8)) {
5059 {
5060 {
5061 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
5062 CPU (h_gr[((UINT) 11)]) = opval;
5063 written |= (1 << 4);
5064 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5065 }
5066 {
5067 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
5068 CPU (h_gr[((UINT) 15)]) = opval;
5069 written |= (1 << 8);
5070 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5071 }
5072 }
5073 }
5074 if (ANDSI (FLD (f_reglist_hi_ld), 16)) {
5075 {
5076 {
5077 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
5078 CPU (h_gr[((UINT) 12)]) = opval;
5079 written |= (1 << 5);
5080 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5081 }
5082 {
5083 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
5084 CPU (h_gr[((UINT) 15)]) = opval;
5085 written |= (1 << 8);
5086 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5087 }
5088 }
5089 }
5090 if (ANDSI (FLD (f_reglist_hi_ld), 32)) {
5091 {
5092 {
5093 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
5094 CPU (h_gr[((UINT) 13)]) = opval;
5095 written |= (1 << 6);
5096 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5097 }
5098 {
5099 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
5100 CPU (h_gr[((UINT) 15)]) = opval;
5101 written |= (1 << 8);
5102 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5103 }
5104 }
5105 }
5106 if (ANDSI (FLD (f_reglist_hi_ld), 64)) {
5107 {
5108 {
5109 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
5110 CPU (h_gr[((UINT) 14)]) = opval;
5111 written |= (1 << 7);
5112 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5113 }
5114 {
5115 SI opval = ADDSI (CPU (h_gr[((UINT) 15)]), 4);
5116 CPU (h_gr[((UINT) 15)]) = opval;
5117 written |= (1 << 8);
5118 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5119 }
5120 }
5121 }
5122 if (ANDSI (FLD (f_reglist_hi_ld), 128)) {
5123 {
5124 SI opval = GETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]));
5125 CPU (h_gr[((UINT) 15)]) = opval;
5126 written |= (1 << 8);
5127 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5128 }
5129 }
5130 }
5131
5132 abuf->written = written;
5133 return vpc;
5134 #undef FLD
5135 }
5136
5137 /* stm0: stm0 ($reglist_low_st) */
5138
5139 static SEM_PC
5140 SEM_FN_NAME (fr30bf,stm0) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5141 {
5142 #define FLD(f) abuf->fields.sfmt_stm0.f
5143 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5144 int UNUSED written = 0;
5145 IADDR UNUSED pc = abuf->addr;
5146 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5147
5148 {
5149 if (ANDSI (FLD (f_reglist_low_st), 1)) {
5150 {
5151 {
5152 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5153 CPU (h_gr[((UINT) 15)]) = opval;
5154 written |= (1 << 10);
5155 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5156 }
5157 {
5158 SI opval = CPU (h_gr[((UINT) 7)]);
5159 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5160 written |= (1 << 11);
5161 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5162 }
5163 }
5164 }
5165 if (ANDSI (FLD (f_reglist_low_st), 2)) {
5166 {
5167 {
5168 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5169 CPU (h_gr[((UINT) 15)]) = opval;
5170 written |= (1 << 10);
5171 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5172 }
5173 {
5174 SI opval = CPU (h_gr[((UINT) 6)]);
5175 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5176 written |= (1 << 11);
5177 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5178 }
5179 }
5180 }
5181 if (ANDSI (FLD (f_reglist_low_st), 4)) {
5182 {
5183 {
5184 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5185 CPU (h_gr[((UINT) 15)]) = opval;
5186 written |= (1 << 10);
5187 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5188 }
5189 {
5190 SI opval = CPU (h_gr[((UINT) 5)]);
5191 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5192 written |= (1 << 11);
5193 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5194 }
5195 }
5196 }
5197 if (ANDSI (FLD (f_reglist_low_st), 8)) {
5198 {
5199 {
5200 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5201 CPU (h_gr[((UINT) 15)]) = opval;
5202 written |= (1 << 10);
5203 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5204 }
5205 {
5206 SI opval = CPU (h_gr[((UINT) 4)]);
5207 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5208 written |= (1 << 11);
5209 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5210 }
5211 }
5212 }
5213 if (ANDSI (FLD (f_reglist_low_st), 16)) {
5214 {
5215 {
5216 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5217 CPU (h_gr[((UINT) 15)]) = opval;
5218 written |= (1 << 10);
5219 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5220 }
5221 {
5222 SI opval = CPU (h_gr[((UINT) 3)]);
5223 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5224 written |= (1 << 11);
5225 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5226 }
5227 }
5228 }
5229 if (ANDSI (FLD (f_reglist_low_st), 32)) {
5230 {
5231 {
5232 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5233 CPU (h_gr[((UINT) 15)]) = opval;
5234 written |= (1 << 10);
5235 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5236 }
5237 {
5238 SI opval = CPU (h_gr[((UINT) 2)]);
5239 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5240 written |= (1 << 11);
5241 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5242 }
5243 }
5244 }
5245 if (ANDSI (FLD (f_reglist_low_st), 64)) {
5246 {
5247 {
5248 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5249 CPU (h_gr[((UINT) 15)]) = opval;
5250 written |= (1 << 10);
5251 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5252 }
5253 {
5254 SI opval = CPU (h_gr[((UINT) 1)]);
5255 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5256 written |= (1 << 11);
5257 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5258 }
5259 }
5260 }
5261 if (ANDSI (FLD (f_reglist_low_st), 128)) {
5262 {
5263 {
5264 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5265 CPU (h_gr[((UINT) 15)]) = opval;
5266 written |= (1 << 10);
5267 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5268 }
5269 {
5270 SI opval = CPU (h_gr[((UINT) 0)]);
5271 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5272 written |= (1 << 11);
5273 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5274 }
5275 }
5276 }
5277 }
5278
5279 abuf->written = written;
5280 return vpc;
5281 #undef FLD
5282 }
5283
5284 /* stm1: stm1 ($reglist_hi_st) */
5285
5286 static SEM_PC
5287 SEM_FN_NAME (fr30bf,stm1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5288 {
5289 #define FLD(f) abuf->fields.sfmt_stm1.f
5290 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5291 int UNUSED written = 0;
5292 IADDR UNUSED pc = abuf->addr;
5293 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5294
5295 {
5296 if (ANDSI (FLD (f_reglist_hi_st), 1)) {
5297 {
5298 SI tmp_save_r15;
5299 tmp_save_r15 = CPU (h_gr[((UINT) 15)]);
5300 {
5301 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5302 CPU (h_gr[((UINT) 15)]) = opval;
5303 written |= (1 << 9);
5304 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5305 }
5306 {
5307 SI opval = tmp_save_r15;
5308 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5309 written |= (1 << 10);
5310 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5311 }
5312 }
5313 }
5314 if (ANDSI (FLD (f_reglist_hi_st), 2)) {
5315 {
5316 {
5317 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5318 CPU (h_gr[((UINT) 15)]) = opval;
5319 written |= (1 << 9);
5320 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5321 }
5322 {
5323 SI opval = CPU (h_gr[((UINT) 14)]);
5324 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5325 written |= (1 << 10);
5326 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5327 }
5328 }
5329 }
5330 if (ANDSI (FLD (f_reglist_hi_st), 4)) {
5331 {
5332 {
5333 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5334 CPU (h_gr[((UINT) 15)]) = opval;
5335 written |= (1 << 9);
5336 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5337 }
5338 {
5339 SI opval = CPU (h_gr[((UINT) 13)]);
5340 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5341 written |= (1 << 10);
5342 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5343 }
5344 }
5345 }
5346 if (ANDSI (FLD (f_reglist_hi_st), 8)) {
5347 {
5348 {
5349 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5350 CPU (h_gr[((UINT) 15)]) = opval;
5351 written |= (1 << 9);
5352 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5353 }
5354 {
5355 SI opval = CPU (h_gr[((UINT) 12)]);
5356 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5357 written |= (1 << 10);
5358 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5359 }
5360 }
5361 }
5362 if (ANDSI (FLD (f_reglist_hi_st), 16)) {
5363 {
5364 {
5365 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5366 CPU (h_gr[((UINT) 15)]) = opval;
5367 written |= (1 << 9);
5368 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5369 }
5370 {
5371 SI opval = CPU (h_gr[((UINT) 11)]);
5372 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5373 written |= (1 << 10);
5374 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5375 }
5376 }
5377 }
5378 if (ANDSI (FLD (f_reglist_hi_st), 32)) {
5379 {
5380 {
5381 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5382 CPU (h_gr[((UINT) 15)]) = opval;
5383 written |= (1 << 9);
5384 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5385 }
5386 {
5387 SI opval = CPU (h_gr[((UINT) 10)]);
5388 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5389 written |= (1 << 10);
5390 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5391 }
5392 }
5393 }
5394 if (ANDSI (FLD (f_reglist_hi_st), 64)) {
5395 {
5396 {
5397 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5398 CPU (h_gr[((UINT) 15)]) = opval;
5399 written |= (1 << 9);
5400 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5401 }
5402 {
5403 SI opval = CPU (h_gr[((UINT) 9)]);
5404 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5405 written |= (1 << 10);
5406 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5407 }
5408 }
5409 }
5410 if (ANDSI (FLD (f_reglist_hi_st), 128)) {
5411 {
5412 {
5413 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5414 CPU (h_gr[((UINT) 15)]) = opval;
5415 written |= (1 << 9);
5416 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5417 }
5418 {
5419 SI opval = CPU (h_gr[((UINT) 8)]);
5420 SETMEMSI (current_cpu, pc, CPU (h_gr[((UINT) 15)]), opval);
5421 written |= (1 << 10);
5422 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5423 }
5424 }
5425 }
5426 }
5427
5428 abuf->written = written;
5429 return vpc;
5430 #undef FLD
5431 }
5432
5433 /* enter: enter $u10 */
5434
5435 static SEM_PC
5436 SEM_FN_NAME (fr30bf,enter) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5437 {
5438 #define FLD(f) abuf->fields.sfmt_enter.f
5439 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5440 int UNUSED written = 0;
5441 IADDR UNUSED pc = abuf->addr;
5442 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5443
5444 {
5445 SI tmp_tmp;
5446 tmp_tmp = SUBSI (CPU (h_gr[((UINT) 15)]), 4);
5447 {
5448 SI opval = CPU (h_gr[((UINT) 14)]);
5449 SETMEMSI (current_cpu, pc, tmp_tmp, opval);
5450 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5451 }
5452 {
5453 SI opval = tmp_tmp;
5454 CPU (h_gr[((UINT) 14)]) = opval;
5455 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5456 }
5457 {
5458 SI opval = SUBSI (CPU (h_gr[((UINT) 15)]), FLD (f_u10));
5459 CPU (h_gr[((UINT) 15)]) = opval;
5460 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5461 }
5462 }
5463
5464 return vpc;
5465 #undef FLD
5466 }
5467
5468 /* leave: leave */
5469
5470 static SEM_PC
5471 SEM_FN_NAME (fr30bf,leave) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5472 {
5473 #define FLD(f) abuf->fields.sfmt_enter.f
5474 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5475 int UNUSED written = 0;
5476 IADDR UNUSED pc = abuf->addr;
5477 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5478
5479 {
5480 {
5481 SI opval = ADDSI (CPU (h_gr[((UINT) 14)]), 4);
5482 CPU (h_gr[((UINT) 15)]) = opval;
5483 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5484 }
5485 {
5486 SI opval = GETMEMSI (current_cpu, pc, SUBSI (CPU (h_gr[((UINT) 15)]), 4));
5487 CPU (h_gr[((UINT) 14)]) = opval;
5488 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5489 }
5490 }
5491
5492 return vpc;
5493 #undef FLD
5494 }
5495
5496 /* xchb: xchb @$Rj,$Ri */
5497
5498 static SEM_PC
5499 SEM_FN_NAME (fr30bf,xchb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5500 {
5501 #define FLD(f) abuf->fields.sfmt_add.f
5502 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5503 int UNUSED written = 0;
5504 IADDR UNUSED pc = abuf->addr;
5505 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5506
5507 {
5508 SI tmp_tmp;
5509 tmp_tmp = * FLD (i_Ri);
5510 {
5511 SI opval = GETMEMUQI (current_cpu, pc, * FLD (i_Rj));
5512 * FLD (i_Ri) = opval;
5513 TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5514 }
5515 {
5516 UQI opval = tmp_tmp;
5517 SETMEMUQI (current_cpu, pc, * FLD (i_Rj), opval);
5518 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5519 }
5520 }
5521
5522 return vpc;
5523 #undef FLD
5524 }
5525
5526 /* Table of all semantic fns. */
5527
5528 static const struct sem_fn_desc sem_fns[] = {
5529 { FR30BF_INSN_X_INVALID, SEM_FN_NAME (fr30bf,x_invalid) },
5530 { FR30BF_INSN_X_AFTER, SEM_FN_NAME (fr30bf,x_after) },
5531 { FR30BF_INSN_X_BEFORE, SEM_FN_NAME (fr30bf,x_before) },
5532 { FR30BF_INSN_X_CTI_CHAIN, SEM_FN_NAME (fr30bf,x_cti_chain) },
5533 { FR30BF_INSN_X_CHAIN, SEM_FN_NAME (fr30bf,x_chain) },
5534 { FR30BF_INSN_X_BEGIN, SEM_FN_NAME (fr30bf,x_begin) },
5535 { FR30BF_INSN_ADD, SEM_FN_NAME (fr30bf,add) },
5536 { FR30BF_INSN_ADDI, SEM_FN_NAME (fr30bf,addi) },
5537 { FR30BF_INSN_ADD2, SEM_FN_NAME (fr30bf,add2) },
5538 { FR30BF_INSN_ADDC, SEM_FN_NAME (fr30bf,addc) },
5539 { FR30BF_INSN_ADDN, SEM_FN_NAME (fr30bf,addn) },
5540 { FR30BF_INSN_ADDNI, SEM_FN_NAME (fr30bf,addni) },
5541 { FR30BF_INSN_ADDN2, SEM_FN_NAME (fr30bf,addn2) },
5542 { FR30BF_INSN_SUB, SEM_FN_NAME (fr30bf,sub) },
5543 { FR30BF_INSN_SUBC, SEM_FN_NAME (fr30bf,subc) },
5544 { FR30BF_INSN_SUBN, SEM_FN_NAME (fr30bf,subn) },
5545 { FR30BF_INSN_CMP, SEM_FN_NAME (fr30bf,cmp) },
5546 { FR30BF_INSN_CMPI, SEM_FN_NAME (fr30bf,cmpi) },
5547 { FR30BF_INSN_CMP2, SEM_FN_NAME (fr30bf,cmp2) },
5548 { FR30BF_INSN_AND, SEM_FN_NAME (fr30bf,and) },
5549 { FR30BF_INSN_OR, SEM_FN_NAME (fr30bf,or) },
5550 { FR30BF_INSN_EOR, SEM_FN_NAME (fr30bf,eor) },
5551 { FR30BF_INSN_ANDM, SEM_FN_NAME (fr30bf,andm) },
5552 { FR30BF_INSN_ANDH, SEM_FN_NAME (fr30bf,andh) },
5553 { FR30BF_INSN_ANDB, SEM_FN_NAME (fr30bf,andb) },
5554 { FR30BF_INSN_ORM, SEM_FN_NAME (fr30bf,orm) },
5555 { FR30BF_INSN_ORH, SEM_FN_NAME (fr30bf,orh) },
5556 { FR30BF_INSN_ORB, SEM_FN_NAME (fr30bf,orb) },
5557 { FR30BF_INSN_EORM, SEM_FN_NAME (fr30bf,eorm) },
5558 { FR30BF_INSN_EORH, SEM_FN_NAME (fr30bf,eorh) },
5559 { FR30BF_INSN_EORB, SEM_FN_NAME (fr30bf,eorb) },
5560 { FR30BF_INSN_BANDL, SEM_FN_NAME (fr30bf,bandl) },
5561 { FR30BF_INSN_BORL, SEM_FN_NAME (fr30bf,borl) },
5562 { FR30BF_INSN_BEORL, SEM_FN_NAME (fr30bf,beorl) },
5563 { FR30BF_INSN_BANDH, SEM_FN_NAME (fr30bf,bandh) },
5564 { FR30BF_INSN_BORH, SEM_FN_NAME (fr30bf,borh) },
5565 { FR30BF_INSN_BEORH, SEM_FN_NAME (fr30bf,beorh) },
5566 { FR30BF_INSN_BTSTL, SEM_FN_NAME (fr30bf,btstl) },
5567 { FR30BF_INSN_BTSTH, SEM_FN_NAME (fr30bf,btsth) },
5568 { FR30BF_INSN_MUL, SEM_FN_NAME (fr30bf,mul) },
5569 { FR30BF_INSN_MULU, SEM_FN_NAME (fr30bf,mulu) },
5570 { FR30BF_INSN_MULH, SEM_FN_NAME (fr30bf,mulh) },
5571 { FR30BF_INSN_MULUH, SEM_FN_NAME (fr30bf,muluh) },
5572 { FR30BF_INSN_DIV0S, SEM_FN_NAME (fr30bf,div0s) },
5573 { FR30BF_INSN_DIV0U, SEM_FN_NAME (fr30bf,div0u) },
5574 { FR30BF_INSN_DIV1, SEM_FN_NAME (fr30bf,div1) },
5575 { FR30BF_INSN_DIV2, SEM_FN_NAME (fr30bf,div2) },
5576 { FR30BF_INSN_DIV3, SEM_FN_NAME (fr30bf,div3) },
5577 { FR30BF_INSN_DIV4S, SEM_FN_NAME (fr30bf,div4s) },
5578 { FR30BF_INSN_LSL, SEM_FN_NAME (fr30bf,lsl) },
5579 { FR30BF_INSN_LSLI, SEM_FN_NAME (fr30bf,lsli) },
5580 { FR30BF_INSN_LSL2, SEM_FN_NAME (fr30bf,lsl2) },
5581 { FR30BF_INSN_LSR, SEM_FN_NAME (fr30bf,lsr) },
5582 { FR30BF_INSN_LSRI, SEM_FN_NAME (fr30bf,lsri) },
5583 { FR30BF_INSN_LSR2, SEM_FN_NAME (fr30bf,lsr2) },
5584 { FR30BF_INSN_ASR, SEM_FN_NAME (fr30bf,asr) },
5585 { FR30BF_INSN_ASRI, SEM_FN_NAME (fr30bf,asri) },
5586 { FR30BF_INSN_ASR2, SEM_FN_NAME (fr30bf,asr2) },
5587 { FR30BF_INSN_LDI8, SEM_FN_NAME (fr30bf,ldi8) },
5588 { FR30BF_INSN_LDI20, SEM_FN_NAME (fr30bf,ldi20) },
5589 { FR30BF_INSN_LDI32, SEM_FN_NAME (fr30bf,ldi32) },
5590 { FR30BF_INSN_LD, SEM_FN_NAME (fr30bf,ld) },
5591 { FR30BF_INSN_LDUH, SEM_FN_NAME (fr30bf,lduh) },
5592 { FR30BF_INSN_LDUB, SEM_FN_NAME (fr30bf,ldub) },
5593 { FR30BF_INSN_LDR13, SEM_FN_NAME (fr30bf,ldr13) },
5594 { FR30BF_INSN_LDR13UH, SEM_FN_NAME (fr30bf,ldr13uh) },
5595 { FR30BF_INSN_LDR13UB, SEM_FN_NAME (fr30bf,ldr13ub) },
5596 { FR30BF_INSN_LDR14, SEM_FN_NAME (fr30bf,ldr14) },
5597 { FR30BF_INSN_LDR14UH, SEM_FN_NAME (fr30bf,ldr14uh) },
5598 { FR30BF_INSN_LDR14UB, SEM_FN_NAME (fr30bf,ldr14ub) },
5599 { FR30BF_INSN_LDR15, SEM_FN_NAME (fr30bf,ldr15) },
5600 { FR30BF_INSN_LDR15GR, SEM_FN_NAME (fr30bf,ldr15gr) },
5601 { FR30BF_INSN_LDR15DR, SEM_FN_NAME (fr30bf,ldr15dr) },
5602 { FR30BF_INSN_LDR15PS, SEM_FN_NAME (fr30bf,ldr15ps) },
5603 { FR30BF_INSN_ST, SEM_FN_NAME (fr30bf,st) },
5604 { FR30BF_INSN_STH, SEM_FN_NAME (fr30bf,sth) },
5605 { FR30BF_INSN_STB, SEM_FN_NAME (fr30bf,stb) },
5606 { FR30BF_INSN_STR13, SEM_FN_NAME (fr30bf,str13) },
5607 { FR30BF_INSN_STR13H, SEM_FN_NAME (fr30bf,str13h) },
5608 { FR30BF_INSN_STR13B, SEM_FN_NAME (fr30bf,str13b) },
5609 { FR30BF_INSN_STR14, SEM_FN_NAME (fr30bf,str14) },
5610 { FR30BF_INSN_STR14H, SEM_FN_NAME (fr30bf,str14h) },
5611 { FR30BF_INSN_STR14B, SEM_FN_NAME (fr30bf,str14b) },
5612 { FR30BF_INSN_STR15, SEM_FN_NAME (fr30bf,str15) },
5613 { FR30BF_INSN_STR15GR, SEM_FN_NAME (fr30bf,str15gr) },
5614 { FR30BF_INSN_STR15DR, SEM_FN_NAME (fr30bf,str15dr) },
5615 { FR30BF_INSN_STR15PS, SEM_FN_NAME (fr30bf,str15ps) },
5616 { FR30BF_INSN_MOV, SEM_FN_NAME (fr30bf,mov) },
5617 { FR30BF_INSN_MOVDR, SEM_FN_NAME (fr30bf,movdr) },
5618 { FR30BF_INSN_MOVPS, SEM_FN_NAME (fr30bf,movps) },
5619 { FR30BF_INSN_MOV2DR, SEM_FN_NAME (fr30bf,mov2dr) },
5620 { FR30BF_INSN_MOV2PS, SEM_FN_NAME (fr30bf,mov2ps) },
5621 { FR30BF_INSN_JMP, SEM_FN_NAME (fr30bf,jmp) },
5622 { FR30BF_INSN_JMPD, SEM_FN_NAME (fr30bf,jmpd) },
5623 { FR30BF_INSN_CALLR, SEM_FN_NAME (fr30bf,callr) },
5624 { FR30BF_INSN_CALLRD, SEM_FN_NAME (fr30bf,callrd) },
5625 { FR30BF_INSN_CALL, SEM_FN_NAME (fr30bf,call) },
5626 { FR30BF_INSN_CALLD, SEM_FN_NAME (fr30bf,calld) },
5627 { FR30BF_INSN_RET, SEM_FN_NAME (fr30bf,ret) },
5628 { FR30BF_INSN_RET_D, SEM_FN_NAME (fr30bf,ret_d) },
5629 { FR30BF_INSN_INT, SEM_FN_NAME (fr30bf,int) },
5630 { FR30BF_INSN_INTE, SEM_FN_NAME (fr30bf,inte) },
5631 { FR30BF_INSN_RETI, SEM_FN_NAME (fr30bf,reti) },
5632 { FR30BF_INSN_BRAD, SEM_FN_NAME (fr30bf,brad) },
5633 { FR30BF_INSN_BRA, SEM_FN_NAME (fr30bf,bra) },
5634 { FR30BF_INSN_BNOD, SEM_FN_NAME (fr30bf,bnod) },
5635 { FR30BF_INSN_BNO, SEM_FN_NAME (fr30bf,bno) },
5636 { FR30BF_INSN_BEQD, SEM_FN_NAME (fr30bf,beqd) },
5637 { FR30BF_INSN_BEQ, SEM_FN_NAME (fr30bf,beq) },
5638 { FR30BF_INSN_BNED, SEM_FN_NAME (fr30bf,bned) },
5639 { FR30BF_INSN_BNE, SEM_FN_NAME (fr30bf,bne) },
5640 { FR30BF_INSN_BCD, SEM_FN_NAME (fr30bf,bcd) },
5641 { FR30BF_INSN_BC, SEM_FN_NAME (fr30bf,bc) },
5642 { FR30BF_INSN_BNCD, SEM_FN_NAME (fr30bf,bncd) },
5643 { FR30BF_INSN_BNC, SEM_FN_NAME (fr30bf,bnc) },
5644 { FR30BF_INSN_BND, SEM_FN_NAME (fr30bf,bnd) },
5645 { FR30BF_INSN_BN, SEM_FN_NAME (fr30bf,bn) },
5646 { FR30BF_INSN_BPD, SEM_FN_NAME (fr30bf,bpd) },
5647 { FR30BF_INSN_BP, SEM_FN_NAME (fr30bf,bp) },
5648 { FR30BF_INSN_BVD, SEM_FN_NAME (fr30bf,bvd) },
5649 { FR30BF_INSN_BV, SEM_FN_NAME (fr30bf,bv) },
5650 { FR30BF_INSN_BNVD, SEM_FN_NAME (fr30bf,bnvd) },
5651 { FR30BF_INSN_BNV, SEM_FN_NAME (fr30bf,bnv) },
5652 { FR30BF_INSN_BLTD, SEM_FN_NAME (fr30bf,bltd) },
5653 { FR30BF_INSN_BLT, SEM_FN_NAME (fr30bf,blt) },
5654 { FR30BF_INSN_BGED, SEM_FN_NAME (fr30bf,bged) },
5655 { FR30BF_INSN_BGE, SEM_FN_NAME (fr30bf,bge) },
5656 { FR30BF_INSN_BLED, SEM_FN_NAME (fr30bf,bled) },
5657 { FR30BF_INSN_BLE, SEM_FN_NAME (fr30bf,ble) },
5658 { FR30BF_INSN_BGTD, SEM_FN_NAME (fr30bf,bgtd) },
5659 { FR30BF_INSN_BGT, SEM_FN_NAME (fr30bf,bgt) },
5660 { FR30BF_INSN_BLSD, SEM_FN_NAME (fr30bf,blsd) },
5661 { FR30BF_INSN_BLS, SEM_FN_NAME (fr30bf,bls) },
5662 { FR30BF_INSN_BHID, SEM_FN_NAME (fr30bf,bhid) },
5663 { FR30BF_INSN_BHI, SEM_FN_NAME (fr30bf,bhi) },
5664 { FR30BF_INSN_DMOVR13, SEM_FN_NAME (fr30bf,dmovr13) },
5665 { FR30BF_INSN_DMOVR13H, SEM_FN_NAME (fr30bf,dmovr13h) },
5666 { FR30BF_INSN_DMOVR13B, SEM_FN_NAME (fr30bf,dmovr13b) },
5667 { FR30BF_INSN_DMOVR13PI, SEM_FN_NAME (fr30bf,dmovr13pi) },
5668 { FR30BF_INSN_DMOVR13PIH, SEM_FN_NAME (fr30bf,dmovr13pih) },
5669 { FR30BF_INSN_DMOVR13PIB, SEM_FN_NAME (fr30bf,dmovr13pib) },
5670 { FR30BF_INSN_DMOVR15PI, SEM_FN_NAME (fr30bf,dmovr15pi) },
5671 { FR30BF_INSN_DMOV2R13, SEM_FN_NAME (fr30bf,dmov2r13) },
5672 { FR30BF_INSN_DMOV2R13H, SEM_FN_NAME (fr30bf,dmov2r13h) },
5673 { FR30BF_INSN_DMOV2R13B, SEM_FN_NAME (fr30bf,dmov2r13b) },
5674 { FR30BF_INSN_DMOV2R13PI, SEM_FN_NAME (fr30bf,dmov2r13pi) },
5675 { FR30BF_INSN_DMOV2R13PIH, SEM_FN_NAME (fr30bf,dmov2r13pih) },
5676 { FR30BF_INSN_DMOV2R13PIB, SEM_FN_NAME (fr30bf,dmov2r13pib) },
5677 { FR30BF_INSN_DMOV2R15PD, SEM_FN_NAME (fr30bf,dmov2r15pd) },
5678 { FR30BF_INSN_LDRES, SEM_FN_NAME (fr30bf,ldres) },
5679 { FR30BF_INSN_STRES, SEM_FN_NAME (fr30bf,stres) },
5680 { FR30BF_INSN_COPOP, SEM_FN_NAME (fr30bf,copop) },
5681 { FR30BF_INSN_COPLD, SEM_FN_NAME (fr30bf,copld) },
5682 { FR30BF_INSN_COPST, SEM_FN_NAME (fr30bf,copst) },
5683 { FR30BF_INSN_COPSV, SEM_FN_NAME (fr30bf,copsv) },
5684 { FR30BF_INSN_NOP, SEM_FN_NAME (fr30bf,nop) },
5685 { FR30BF_INSN_ANDCCR, SEM_FN_NAME (fr30bf,andccr) },
5686 { FR30BF_INSN_ORCCR, SEM_FN_NAME (fr30bf,orccr) },
5687 { FR30BF_INSN_STILM, SEM_FN_NAME (fr30bf,stilm) },
5688 { FR30BF_INSN_ADDSP, SEM_FN_NAME (fr30bf,addsp) },
5689 { FR30BF_INSN_EXTSB, SEM_FN_NAME (fr30bf,extsb) },
5690 { FR30BF_INSN_EXTUB, SEM_FN_NAME (fr30bf,extub) },
5691 { FR30BF_INSN_EXTSH, SEM_FN_NAME (fr30bf,extsh) },
5692 { FR30BF_INSN_EXTUH, SEM_FN_NAME (fr30bf,extuh) },
5693 { FR30BF_INSN_LDM0, SEM_FN_NAME (fr30bf,ldm0) },
5694 { FR30BF_INSN_LDM1, SEM_FN_NAME (fr30bf,ldm1) },
5695 { FR30BF_INSN_STM0, SEM_FN_NAME (fr30bf,stm0) },
5696 { FR30BF_INSN_STM1, SEM_FN_NAME (fr30bf,stm1) },
5697 { FR30BF_INSN_ENTER, SEM_FN_NAME (fr30bf,enter) },
5698 { FR30BF_INSN_LEAVE, SEM_FN_NAME (fr30bf,leave) },
5699 { FR30BF_INSN_XCHB, SEM_FN_NAME (fr30bf,xchb) },
5700 { 0, 0 }
5701 };
5702
5703 /* Add the semantic fns to IDESC_TABLE. */
5704
5705 void
5706 SEM_FN_NAME (fr30bf,init_idesc_table) (SIM_CPU *current_cpu)
5707 {
5708 IDESC *idesc_table = CPU_IDESC (current_cpu);
5709 const struct sem_fn_desc *sf;
5710 int mach_num = MACH_NUM (CPU_MACH (current_cpu));
5711
5712 for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
5713 {
5714 const CGEN_INSN *insn = idesc_table[sf->index].idata;
5715 int valid_p = (CGEN_INSN_VIRTUAL_P (insn)
5716 || CGEN_INSN_MACH_HAS_P (insn, mach_num));
5717 #if FAST_P
5718 if (valid_p)
5719 idesc_table[sf->index].sem_fast = sf->fn;
5720 else
5721 idesc_table[sf->index].sem_fast = SEM_FN_NAME (fr30bf,x_invalid);
5722 #else
5723 if (valid_p)
5724 idesc_table[sf->index].sem_full = sf->fn;
5725 else
5726 idesc_table[sf->index].sem_full = SEM_FN_NAME (fr30bf,x_invalid);
5727 #endif
5728 }
5729 }
5730