1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2010, 2012 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
9 This file is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
33 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
35 /* This is used so that we can compile two copies of the semantic code,
36 one with full feature support and one without that runs fast(er).
37 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */
39 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
41 #define TRACE_RESULT(cpu, abuf, name, type, val)
43 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
46 /* x-invalid: --invalid-- */
49 SEM_FN_NAME (sh64_compact,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
51 #define FLD(f) abuf->fields.sfmt_empty.f
52 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
53 int UNUSED written = 0;
54 IADDR UNUSED pc = abuf->addr;
55 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
58 /* Update the recorded pc in the cpu state struct.
59 Only necessary for WITH_SCACHE case, but to avoid the
60 conditional compilation .... */
62 /* Virtual insns have zero size. Overwrite vpc with address of next insn
63 using the default-insn-bitsize spec. When executing insns in parallel
64 we may want to queue the fault and continue execution. */
65 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
66 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
73 /* x-after: --after-- */
76 SEM_FN_NAME (sh64_compact,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
78 #define FLD(f) abuf->fields.sfmt_empty.f
79 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
80 int UNUSED written = 0;
81 IADDR UNUSED pc = abuf->addr;
82 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
85 #if WITH_SCACHE_PBB_SH64_COMPACT
86 sh64_compact_pbb_after (current_cpu, sem_arg);
94 /* x-before: --before-- */
97 SEM_FN_NAME (sh64_compact,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
99 #define FLD(f) abuf->fields.sfmt_empty.f
100 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
101 int UNUSED written = 0;
102 IADDR UNUSED pc = abuf->addr;
103 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
106 #if WITH_SCACHE_PBB_SH64_COMPACT
107 sh64_compact_pbb_before (current_cpu, sem_arg);
115 /* x-cti-chain: --cti-chain-- */
118 SEM_FN_NAME (sh64_compact,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
120 #define FLD(f) abuf->fields.sfmt_empty.f
121 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
122 int UNUSED written = 0;
123 IADDR UNUSED pc = abuf->addr;
124 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
127 #if WITH_SCACHE_PBB_SH64_COMPACT
129 vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
130 pbb_br_type, pbb_br_npc);
133 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
134 vpc = sh64_compact_pbb_cti_chain (current_cpu, sem_arg,
135 CPU_PBB_BR_TYPE (current_cpu),
136 CPU_PBB_BR_NPC (current_cpu));
145 /* x-chain: --chain-- */
148 SEM_FN_NAME (sh64_compact,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
150 #define FLD(f) abuf->fields.sfmt_empty.f
151 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
152 int UNUSED written = 0;
153 IADDR UNUSED pc = abuf->addr;
154 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
157 #if WITH_SCACHE_PBB_SH64_COMPACT
158 vpc = sh64_compact_pbb_chain (current_cpu, sem_arg);
169 /* x-begin: --begin-- */
172 SEM_FN_NAME (sh64_compact,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
174 #define FLD(f) abuf->fields.sfmt_empty.f
175 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
176 int UNUSED written = 0;
177 IADDR UNUSED pc = abuf->addr;
178 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
181 #if WITH_SCACHE_PBB_SH64_COMPACT
182 #if defined DEFINE_SWITCH || defined FAST_P
183 /* In the switch case FAST_P is a constant, allowing several optimizations
184 in any called inline functions. */
185 vpc = sh64_compact_pbb_begin (current_cpu, FAST_P);
187 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
188 vpc = sh64_compact_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
190 vpc = sh64_compact_pbb_begin (current_cpu, 0);
200 /* add-compact: add $rm, $rn */
203 SEM_FN_NAME (sh64_compact,add_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
205 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
206 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
207 int UNUSED written = 0;
208 IADDR UNUSED pc = abuf->addr;
209 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
212 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
213 SET_H_GRC (FLD (f_rn), opval);
214 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
221 /* addi-compact: add #$imm8, $rn */
224 SEM_FN_NAME (sh64_compact,addi_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
226 #define FLD(f) abuf->fields.sfmt_addi_compact.f
227 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
228 int UNUSED written = 0;
229 IADDR UNUSED pc = abuf->addr;
230 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
233 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
234 SET_H_GRC (FLD (f_rn), opval);
235 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
242 /* addc-compact: addc $rm, $rn */
245 SEM_FN_NAME (sh64_compact,addc_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
247 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
248 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
249 int UNUSED written = 0;
250 IADDR UNUSED pc = abuf->addr;
251 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
255 tmp_flag = ADDCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
257 SI opval = ADDCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
258 SET_H_GRC (FLD (f_rn), opval);
259 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
264 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
272 /* addv-compact: addv $rm, $rn */
275 SEM_FN_NAME (sh64_compact,addv_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
277 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
278 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
279 int UNUSED written = 0;
280 IADDR UNUSED pc = abuf->addr;
281 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
285 tmp_t = ADDOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
287 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
288 SET_H_GRC (FLD (f_rn), opval);
289 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
294 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
302 /* and-compact: and $rm64, $rn64 */
305 SEM_FN_NAME (sh64_compact,and_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
307 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
308 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
309 int UNUSED written = 0;
310 IADDR UNUSED pc = abuf->addr;
311 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
314 DI opval = ANDDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
315 SET_H_GR (FLD (f_rn), opval);
316 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
323 /* andi-compact: and #$uimm8, r0 */
326 SEM_FN_NAME (sh64_compact,andi_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
328 #define FLD(f) abuf->fields.sfmt_addi_compact.f
329 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
330 int UNUSED written = 0;
331 IADDR UNUSED pc = abuf->addr;
332 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
335 SI opval = ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
336 SET_H_GRC (((UINT) 0), opval);
337 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
344 /* andb-compact: and.b #$imm8, @(r0, gbr) */
347 SEM_FN_NAME (sh64_compact,andb_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
349 #define FLD(f) abuf->fields.sfmt_addi_compact.f
350 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
351 int UNUSED written = 0;
352 IADDR UNUSED pc = abuf->addr;
353 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
358 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
359 tmp_data = ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
361 UQI opval = tmp_data;
362 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
363 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
371 /* bf-compact: bf $disp8 */
374 SEM_FN_NAME (sh64_compact,bf_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
376 #define FLD(f) abuf->fields.sfmt_bf_compact.f
377 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
378 int UNUSED written = 0;
379 IADDR UNUSED pc = abuf->addr;
381 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
383 if (NOTBI (GET_H_TBIT ())) {
385 UDI opval = FLD (i_disp8);
386 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
388 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
392 abuf->written = written;
393 SEM_BRANCH_FINI (vpc);
398 /* bfs-compact: bf/s $disp8 */
401 SEM_FN_NAME (sh64_compact,bfs_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
403 #define FLD(f) abuf->fields.sfmt_bf_compact.f
404 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
405 int UNUSED written = 0;
406 IADDR UNUSED pc = abuf->addr;
408 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
410 if (NOTBI (GET_H_TBIT ())) {
413 UDI opval = ADDDI (pc, 2);
414 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
416 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
421 UDI opval = FLD (i_disp8);
422 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
424 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
430 abuf->written = written;
431 SEM_BRANCH_FINI (vpc);
436 /* bra-compact: bra $disp12 */
439 SEM_FN_NAME (sh64_compact,bra_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
441 #define FLD(f) abuf->fields.sfmt_bra_compact.f
442 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
443 int UNUSED written = 0;
444 IADDR UNUSED pc = abuf->addr;
446 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
450 UDI opval = ADDDI (pc, 2);
451 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
452 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
457 UDI opval = FLD (i_disp12);
458 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
459 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
464 SEM_BRANCH_FINI (vpc);
469 /* braf-compact: braf $rn */
472 SEM_FN_NAME (sh64_compact,braf_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
474 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
475 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
476 int UNUSED written = 0;
477 IADDR UNUSED pc = abuf->addr;
479 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
483 UDI opval = ADDDI (pc, 2);
484 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
485 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
490 UDI opval = ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn))), ADDDI (pc, 4));
491 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
492 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
497 SEM_BRANCH_FINI (vpc);
502 /* brk-compact: brk */
505 SEM_FN_NAME (sh64_compact,brk_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
507 #define FLD(f) abuf->fields.sfmt_empty.f
508 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
509 int UNUSED written = 0;
510 IADDR UNUSED pc = abuf->addr;
511 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
513 sh64_break (current_cpu, pc);
519 /* bsr-compact: bsr $disp12 */
522 SEM_FN_NAME (sh64_compact,bsr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
524 #define FLD(f) abuf->fields.sfmt_bra_compact.f
525 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
526 int UNUSED written = 0;
527 IADDR UNUSED pc = abuf->addr;
529 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
534 SI opval = ADDDI (pc, 4);
536 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
540 UDI opval = ADDDI (pc, 2);
541 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
542 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
547 UDI opval = FLD (i_disp12);
548 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
549 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
554 SEM_BRANCH_FINI (vpc);
559 /* bsrf-compact: bsrf $rn */
562 SEM_FN_NAME (sh64_compact,bsrf_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
564 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
565 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
566 int UNUSED written = 0;
567 IADDR UNUSED pc = abuf->addr;
569 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
574 SI opval = ADDDI (pc, 4);
576 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
580 UDI opval = ADDDI (pc, 2);
581 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
582 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
587 UDI opval = ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn))), ADDDI (pc, 4));
588 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
589 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
594 SEM_BRANCH_FINI (vpc);
599 /* bt-compact: bt $disp8 */
602 SEM_FN_NAME (sh64_compact,bt_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
604 #define FLD(f) abuf->fields.sfmt_bf_compact.f
605 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
606 int UNUSED written = 0;
607 IADDR UNUSED pc = abuf->addr;
609 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
613 UDI opval = FLD (i_disp8);
614 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
616 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
620 abuf->written = written;
621 SEM_BRANCH_FINI (vpc);
626 /* bts-compact: bt/s $disp8 */
629 SEM_FN_NAME (sh64_compact,bts_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
631 #define FLD(f) abuf->fields.sfmt_bf_compact.f
632 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
633 int UNUSED written = 0;
634 IADDR UNUSED pc = abuf->addr;
636 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
641 UDI opval = ADDDI (pc, 2);
642 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
644 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
649 UDI opval = FLD (i_disp8);
650 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
652 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
658 abuf->written = written;
659 SEM_BRANCH_FINI (vpc);
664 /* clrmac-compact: clrmac */
667 SEM_FN_NAME (sh64_compact,clrmac_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
669 #define FLD(f) abuf->fields.sfmt_empty.f
670 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
671 int UNUSED written = 0;
672 IADDR UNUSED pc = abuf->addr;
673 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
679 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
684 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
692 /* clrs-compact: clrs */
695 SEM_FN_NAME (sh64_compact,clrs_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
697 #define FLD(f) abuf->fields.sfmt_empty.f
698 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
699 int UNUSED written = 0;
700 IADDR UNUSED pc = abuf->addr;
701 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
706 TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
713 /* clrt-compact: clrt */
716 SEM_FN_NAME (sh64_compact,clrt_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
718 #define FLD(f) abuf->fields.sfmt_empty.f
719 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
720 int UNUSED written = 0;
721 IADDR UNUSED pc = abuf->addr;
722 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
727 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
734 /* cmpeq-compact: cmp/eq $rm, $rn */
737 SEM_FN_NAME (sh64_compact,cmpeq_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
739 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
740 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
741 int UNUSED written = 0;
742 IADDR UNUSED pc = abuf->addr;
743 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
746 BI opval = EQSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
748 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
755 /* cmpeqi-compact: cmp/eq #$imm8, r0 */
758 SEM_FN_NAME (sh64_compact,cmpeqi_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
760 #define FLD(f) abuf->fields.sfmt_addi_compact.f
761 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
762 int UNUSED written = 0;
763 IADDR UNUSED pc = abuf->addr;
764 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
767 BI opval = EQSI (GET_H_GRC (((UINT) 0)), EXTQISI (ANDQI (FLD (f_imm8), 255)));
769 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
776 /* cmpge-compact: cmp/ge $rm, $rn */
779 SEM_FN_NAME (sh64_compact,cmpge_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
781 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
782 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
783 int UNUSED written = 0;
784 IADDR UNUSED pc = abuf->addr;
785 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
788 BI opval = GESI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
790 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
797 /* cmpgt-compact: cmp/gt $rm, $rn */
800 SEM_FN_NAME (sh64_compact,cmpgt_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
802 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
803 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
804 int UNUSED written = 0;
805 IADDR UNUSED pc = abuf->addr;
806 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
809 BI opval = GTSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
811 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
818 /* cmphi-compact: cmp/hi $rm, $rn */
821 SEM_FN_NAME (sh64_compact,cmphi_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
823 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
824 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
825 int UNUSED written = 0;
826 IADDR UNUSED pc = abuf->addr;
827 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
830 BI opval = GTUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
832 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
839 /* cmphs-compact: cmp/hs $rm, $rn */
842 SEM_FN_NAME (sh64_compact,cmphs_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
844 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
845 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
846 int UNUSED written = 0;
847 IADDR UNUSED pc = abuf->addr;
848 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
851 BI opval = GEUSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
853 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
860 /* cmppl-compact: cmp/pl $rn */
863 SEM_FN_NAME (sh64_compact,cmppl_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
865 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
866 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
867 int UNUSED written = 0;
868 IADDR UNUSED pc = abuf->addr;
869 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
872 BI opval = GTSI (GET_H_GRC (FLD (f_rn)), 0);
874 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
881 /* cmppz-compact: cmp/pz $rn */
884 SEM_FN_NAME (sh64_compact,cmppz_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
886 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
887 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
888 int UNUSED written = 0;
889 IADDR UNUSED pc = abuf->addr;
890 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
893 BI opval = GESI (GET_H_GRC (FLD (f_rn)), 0);
895 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
902 /* cmpstr-compact: cmp/str $rm, $rn */
905 SEM_FN_NAME (sh64_compact,cmpstr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
907 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
908 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
909 int UNUSED written = 0;
910 IADDR UNUSED pc = abuf->addr;
911 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
916 tmp_temp = XORSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
917 tmp_t = EQSI (ANDSI (tmp_temp, 0xff000000), 0);
918 tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 16711680), 0), tmp_t);
919 tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 65280), 0), tmp_t);
920 tmp_t = ORBI (EQSI (ANDSI (tmp_temp, 255), 0), tmp_t);
922 BI opval = ((GTUBI (tmp_t, 0)) ? (1) : (0));
924 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
932 /* div0s-compact: div0s $rm, $rn */
935 SEM_FN_NAME (sh64_compact,div0s_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
937 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
938 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
939 int UNUSED written = 0;
940 IADDR UNUSED pc = abuf->addr;
941 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
945 BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
947 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
950 BI opval = SRLSI (GET_H_GRC (FLD (f_rm)), 31);
952 TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
955 BI opval = ((EQSI (SRLSI (GET_H_GRC (FLD (f_rm)), 31), SRLSI (GET_H_GRC (FLD (f_rn)), 31))) ? (0) : (1));
957 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
965 /* div0u-compact: div0u */
968 SEM_FN_NAME (sh64_compact,div0u_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
970 #define FLD(f) abuf->fields.sfmt_empty.f
971 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
972 int UNUSED written = 0;
973 IADDR UNUSED pc = abuf->addr;
974 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
980 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
985 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
990 TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
998 /* div1-compact: div1 $rm, $rn */
1001 SEM_FN_NAME (sh64_compact,div1_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1003 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1004 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1005 int UNUSED written = 0;
1006 IADDR UNUSED pc = abuf->addr;
1007 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1013 tmp_oldq = GET_H_QBIT ();
1015 BI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
1017 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1020 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), ZEXTBISI (GET_H_TBIT ()));
1021 SET_H_GRC (FLD (f_rn), opval);
1022 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1024 if (NOTBI (tmp_oldq)) {
1025 if (NOTBI (GET_H_MBIT ())) {
1027 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1029 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1030 SET_H_GRC (FLD (f_rn), opval);
1031 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1033 tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1034 if (NOTBI (GET_H_QBIT ())) {
1036 BI opval = ((tmp_tmp1) ? (1) : (0));
1038 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1042 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1044 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1050 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1052 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1053 SET_H_GRC (FLD (f_rn), opval);
1054 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1056 tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1057 if (NOTBI (GET_H_QBIT ())) {
1059 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1061 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1065 BI opval = ((tmp_tmp1) ? (1) : (0));
1067 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1073 if (NOTBI (GET_H_MBIT ())) {
1075 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1077 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
1078 SET_H_GRC (FLD (f_rn), opval);
1079 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1081 tmp_tmp1 = LTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1082 if (NOTBI (GET_H_QBIT ())) {
1084 BI opval = ((tmp_tmp1) ? (1) : (0));
1086 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1090 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1092 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1098 tmp_tmp0 = GET_H_GRC (FLD (f_rn));
1100 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
1101 SET_H_GRC (FLD (f_rn), opval);
1102 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1104 tmp_tmp1 = GTUSI (GET_H_GRC (FLD (f_rn)), tmp_tmp0);
1105 if (NOTBI (GET_H_QBIT ())) {
1107 BI opval = ((EQQI (tmp_tmp1, 0)) ? (1) : (0));
1109 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1113 BI opval = ((tmp_tmp1) ? (1) : (0));
1115 TRACE_RESULT (current_cpu, abuf, "qbit", 'x', opval);
1122 BI opval = ((EQBI (GET_H_QBIT (), GET_H_MBIT ())) ? (1) : (0));
1124 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1132 /* divu-compact: divu r0, $rn */
1135 SEM_FN_NAME (sh64_compact,divu_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1137 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1138 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1139 int UNUSED written = 0;
1140 IADDR UNUSED pc = abuf->addr;
1141 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1144 SI opval = UDIVSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (((UINT) 0)));
1145 SET_H_GRC (FLD (f_rn), opval);
1146 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1153 /* mulr-compact: mulr r0, $rn */
1156 SEM_FN_NAME (sh64_compact,mulr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1158 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1159 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1160 int UNUSED written = 0;
1161 IADDR UNUSED pc = abuf->addr;
1162 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1165 SI opval = MULSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (((UINT) 0)));
1166 SET_H_GRC (FLD (f_rn), opval);
1167 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1174 /* dmulsl-compact: dmuls.l $rm, $rn */
1177 SEM_FN_NAME (sh64_compact,dmulsl_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1179 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1180 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1181 int UNUSED written = 0;
1182 IADDR UNUSED pc = abuf->addr;
1183 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1187 tmp_result = MULDI (EXTSIDI (GET_H_GRC (FLD (f_rm))), EXTSIDI (GET_H_GRC (FLD (f_rn))));
1189 SI opval = SUBWORDDISI (tmp_result, 0);
1191 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
1194 SI opval = SUBWORDDISI (tmp_result, 1);
1196 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
1204 /* dmulul-compact: dmulu.l $rm, $rn */
1207 SEM_FN_NAME (sh64_compact,dmulul_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1209 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1210 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1211 int UNUSED written = 0;
1212 IADDR UNUSED pc = abuf->addr;
1213 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1217 tmp_result = MULDI (ZEXTSIDI (GET_H_GRC (FLD (f_rm))), ZEXTSIDI (GET_H_GRC (FLD (f_rn))));
1219 SI opval = SUBWORDDISI (tmp_result, 0);
1221 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
1224 SI opval = SUBWORDDISI (tmp_result, 1);
1226 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
1234 /* dt-compact: dt $rn */
1237 SEM_FN_NAME (sh64_compact,dt_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1239 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1240 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1241 int UNUSED written = 0;
1242 IADDR UNUSED pc = abuf->addr;
1243 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1247 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
1248 SET_H_GRC (FLD (f_rn), opval);
1249 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1252 BI opval = EQSI (GET_H_GRC (FLD (f_rn)), 0);
1254 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1262 /* extsb-compact: exts.b $rm, $rn */
1265 SEM_FN_NAME (sh64_compact,extsb_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1267 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1268 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1269 int UNUSED written = 0;
1270 IADDR UNUSED pc = abuf->addr;
1271 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1274 SI opval = EXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
1275 SET_H_GRC (FLD (f_rn), opval);
1276 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1283 /* extsw-compact: exts.w $rm, $rn */
1286 SEM_FN_NAME (sh64_compact,extsw_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1288 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1289 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1290 int UNUSED written = 0;
1291 IADDR UNUSED pc = abuf->addr;
1292 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1295 SI opval = EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
1296 SET_H_GRC (FLD (f_rn), opval);
1297 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1304 /* extub-compact: extu.b $rm, $rn */
1307 SEM_FN_NAME (sh64_compact,extub_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1309 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1310 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1311 int UNUSED written = 0;
1312 IADDR UNUSED pc = abuf->addr;
1313 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1316 SI opval = ZEXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3));
1317 SET_H_GRC (FLD (f_rn), opval);
1318 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1325 /* extuw-compact: extu.w $rm, $rn */
1328 SEM_FN_NAME (sh64_compact,extuw_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1330 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1331 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1332 int UNUSED written = 0;
1333 IADDR UNUSED pc = abuf->addr;
1334 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1337 SI opval = ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1));
1338 SET_H_GRC (FLD (f_rn), opval);
1339 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1346 /* fabs-compact: fabs $fsdn */
1349 SEM_FN_NAME (sh64_compact,fabs_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1351 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1352 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1353 int UNUSED written = 0;
1354 IADDR UNUSED pc = abuf->addr;
1355 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1357 if (GET_H_PRBIT ()) {
1359 DF opval = sh64_fabsd (current_cpu, GET_H_FSD (FLD (f_rn)));
1360 SET_H_FSD (FLD (f_rn), opval);
1361 written |= (1 << 2);
1362 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1366 DF opval = sh64_fabss (current_cpu, GET_H_FSD (FLD (f_rn)));
1367 SET_H_FSD (FLD (f_rn), opval);
1368 written |= (1 << 2);
1369 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1373 abuf->written = written;
1378 /* fadd-compact: fadd $fsdm, $fsdn */
1381 SEM_FN_NAME (sh64_compact,fadd_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1383 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1384 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1385 int UNUSED written = 0;
1386 IADDR UNUSED pc = abuf->addr;
1387 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1389 if (GET_H_PRBIT ()) {
1391 DF opval = sh64_faddd (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
1392 SET_H_FSD (FLD (f_rn), opval);
1393 written |= (1 << 3);
1394 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1398 DF opval = sh64_fadds (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
1399 SET_H_FSD (FLD (f_rn), opval);
1400 written |= (1 << 3);
1401 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1405 abuf->written = written;
1410 /* fcmpeq-compact: fcmp/eq $fsdm, $fsdn */
1413 SEM_FN_NAME (sh64_compact,fcmpeq_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1415 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1416 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1417 int UNUSED written = 0;
1418 IADDR UNUSED pc = abuf->addr;
1419 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1421 if (GET_H_PRBIT ()) {
1423 BI opval = sh64_fcmpeqd (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
1425 written |= (1 << 3);
1426 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1430 BI opval = sh64_fcmpeqs (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
1432 written |= (1 << 3);
1433 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1437 abuf->written = written;
1442 /* fcmpgt-compact: fcmp/gt $fsdm, $fsdn */
1445 SEM_FN_NAME (sh64_compact,fcmpgt_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1447 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1448 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1449 int UNUSED written = 0;
1450 IADDR UNUSED pc = abuf->addr;
1451 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1453 if (GET_H_PRBIT ()) {
1455 BI opval = sh64_fcmpgtd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
1457 written |= (1 << 3);
1458 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1462 BI opval = sh64_fcmpgts (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
1464 written |= (1 << 3);
1465 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
1469 abuf->written = written;
1474 /* fcnvds-compact: fcnvds $drn, fpul */
1477 SEM_FN_NAME (sh64_compact,fcnvds_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1479 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1480 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1481 int UNUSED written = 0;
1482 IADDR UNUSED pc = abuf->addr;
1483 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1486 SF opval = sh64_fcnvds (current_cpu, GET_H_DRC (FLD (f_dn)));
1487 CPU (h_fr[((UINT) 32)]) = opval;
1488 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1495 /* fcnvsd-compact: fcnvsd fpul, $drn */
1498 SEM_FN_NAME (sh64_compact,fcnvsd_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1500 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1501 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1502 int UNUSED written = 0;
1503 IADDR UNUSED pc = abuf->addr;
1504 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1507 DF opval = sh64_fcnvsd (current_cpu, CPU (h_fr[((UINT) 32)]));
1508 SET_H_DRC (FLD (f_dn), opval);
1509 TRACE_RESULT (current_cpu, abuf, "drc", 'f', opval);
1516 /* fdiv-compact: fdiv $fsdm, $fsdn */
1519 SEM_FN_NAME (sh64_compact,fdiv_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1521 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1522 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1523 int UNUSED written = 0;
1524 IADDR UNUSED pc = abuf->addr;
1525 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1527 if (GET_H_PRBIT ()) {
1529 DF opval = sh64_fdivd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
1530 SET_H_FSD (FLD (f_rn), opval);
1531 written |= (1 << 3);
1532 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1536 DF opval = sh64_fdivs (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
1537 SET_H_FSD (FLD (f_rn), opval);
1538 written |= (1 << 3);
1539 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1543 abuf->written = written;
1548 /* fipr-compact: fipr $fvm, $fvn */
1551 SEM_FN_NAME (sh64_compact,fipr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1553 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
1554 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1555 int UNUSED written = 0;
1556 IADDR UNUSED pc = abuf->addr;
1557 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1559 sh64_fipr (current_cpu, FLD (f_vm), FLD (f_vn));
1565 /* flds-compact: flds $frn, fpul */
1568 SEM_FN_NAME (sh64_compact,flds_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1570 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1571 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1572 int UNUSED written = 0;
1573 IADDR UNUSED pc = abuf->addr;
1574 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1577 SF opval = GET_H_FRC (FLD (f_rn));
1578 CPU (h_fr[((UINT) 32)]) = opval;
1579 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
1586 /* fldi0-compact: fldi0 $frn */
1589 SEM_FN_NAME (sh64_compact,fldi0_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1591 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1592 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1593 int UNUSED written = 0;
1594 IADDR UNUSED pc = abuf->addr;
1595 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1598 SF opval = sh64_fldi0 (current_cpu);
1599 SET_H_FRC (FLD (f_rn), opval);
1600 TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
1607 /* fldi1-compact: fldi1 $frn */
1610 SEM_FN_NAME (sh64_compact,fldi1_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1612 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1613 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1614 int UNUSED written = 0;
1615 IADDR UNUSED pc = abuf->addr;
1616 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1619 SF opval = sh64_fldi1 (current_cpu);
1620 SET_H_FRC (FLD (f_rn), opval);
1621 TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
1628 /* float-compact: float fpul, $fsdn */
1631 SEM_FN_NAME (sh64_compact,float_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1633 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1634 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1635 int UNUSED written = 0;
1636 IADDR UNUSED pc = abuf->addr;
1637 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1639 if (GET_H_PRBIT ()) {
1641 DF opval = sh64_floatld (current_cpu, CPU (h_fr[((UINT) 32)]));
1642 SET_H_FSD (FLD (f_rn), opval);
1643 written |= (1 << 2);
1644 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1648 DF opval = sh64_floatls (current_cpu, CPU (h_fr[((UINT) 32)]));
1649 SET_H_FSD (FLD (f_rn), opval);
1650 written |= (1 << 2);
1651 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1655 abuf->written = written;
1660 /* fmac-compact: fmac fr0, $frm, $frn */
1663 SEM_FN_NAME (sh64_compact,fmac_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1665 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1666 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1667 int UNUSED written = 0;
1668 IADDR UNUSED pc = abuf->addr;
1669 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1672 SF opval = sh64_fmacs (current_cpu, GET_H_FRC (((UINT) 0)), GET_H_FRC (FLD (f_rm)), GET_H_FRC (FLD (f_rn)));
1673 SET_H_FRC (FLD (f_rn), opval);
1674 TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
1681 /* fmov1-compact: fmov $fmovm, $fmovn */
1684 SEM_FN_NAME (sh64_compact,fmov1_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1686 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1687 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1688 int UNUSED written = 0;
1689 IADDR UNUSED pc = abuf->addr;
1690 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1693 DF opval = GET_H_FMOV (FLD (f_rm));
1694 SET_H_FMOV (FLD (f_rn), opval);
1695 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1702 /* fmov2-compact: fmov @$rm, $fmovn */
1705 SEM_FN_NAME (sh64_compact,fmov2_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1707 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1708 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1709 int UNUSED written = 0;
1710 IADDR UNUSED pc = abuf->addr;
1711 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1713 if (NOTBI (GET_H_SZBIT ())) {
1715 DF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1716 SET_H_FMOV (FLD (f_rn), opval);
1717 written |= (1 << 4);
1718 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1722 DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1723 SET_H_FMOV (FLD (f_rn), opval);
1724 written |= (1 << 4);
1725 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1729 abuf->written = written;
1734 /* fmov3-compact: fmov @${rm}+, fmovn */
1737 SEM_FN_NAME (sh64_compact,fmov3_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1739 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1740 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1741 int UNUSED written = 0;
1742 IADDR UNUSED pc = abuf->addr;
1743 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1745 if (NOTBI (GET_H_SZBIT ())) {
1748 DF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1749 SET_H_FMOV (FLD (f_rn), opval);
1750 written |= (1 << 4);
1751 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1754 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
1755 SET_H_GRC (FLD (f_rm), opval);
1756 written |= (1 << 5);
1757 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1763 DF opval = GETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
1764 SET_H_FMOV (FLD (f_rn), opval);
1765 written |= (1 << 4);
1766 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1769 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 8);
1770 SET_H_GRC (FLD (f_rm), opval);
1771 written |= (1 << 5);
1772 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1777 abuf->written = written;
1782 /* fmov4-compact: fmov @(r0, $rm), $fmovn */
1785 SEM_FN_NAME (sh64_compact,fmov4_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1787 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1788 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1789 int UNUSED written = 0;
1790 IADDR UNUSED pc = abuf->addr;
1791 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1793 if (NOTBI (GET_H_SZBIT ())) {
1795 DF opval = GETMEMSF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
1796 SET_H_FMOV (FLD (f_rn), opval);
1797 written |= (1 << 5);
1798 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1802 DF opval = GETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
1803 SET_H_FMOV (FLD (f_rn), opval);
1804 written |= (1 << 5);
1805 TRACE_RESULT (current_cpu, abuf, "fmov", 'f', opval);
1809 abuf->written = written;
1814 /* fmov5-compact: fmov $fmovm, @$rn */
1817 SEM_FN_NAME (sh64_compact,fmov5_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1819 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1820 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1821 int UNUSED written = 0;
1822 IADDR UNUSED pc = abuf->addr;
1823 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1825 if (NOTBI (GET_H_SZBIT ())) {
1827 SF opval = GET_H_FMOV (FLD (f_rm));
1828 SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1829 written |= (1 << 4);
1830 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1834 DF opval = GET_H_FMOV (FLD (f_rm));
1835 SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1836 written |= (1 << 3);
1837 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1841 abuf->written = written;
1846 /* fmov6-compact: fmov $fmovm, @-$rn */
1849 SEM_FN_NAME (sh64_compact,fmov6_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1851 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1852 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1853 int UNUSED written = 0;
1854 IADDR UNUSED pc = abuf->addr;
1855 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1857 if (NOTBI (GET_H_SZBIT ())) {
1860 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
1861 SET_H_GRC (FLD (f_rn), opval);
1862 written |= (1 << 5);
1863 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1866 SF opval = GET_H_FMOV (FLD (f_rm));
1867 SETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1868 written |= (1 << 4);
1869 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1875 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), 8);
1876 SET_H_GRC (FLD (f_rn), opval);
1877 written |= (1 << 5);
1878 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
1881 DF opval = GET_H_FMOV (FLD (f_rm));
1882 SETMEMDF (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
1883 written |= (1 << 3);
1884 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1889 abuf->written = written;
1894 /* fmov7-compact: fmov $fmovm, @(r0, $rn) */
1897 SEM_FN_NAME (sh64_compact,fmov7_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1899 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1900 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1901 int UNUSED written = 0;
1902 IADDR UNUSED pc = abuf->addr;
1903 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1905 if (NOTBI (GET_H_SZBIT ())) {
1907 SF opval = GET_H_FMOV (FLD (f_rm));
1908 SETMEMSF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
1909 written |= (1 << 5);
1910 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1914 DF opval = GET_H_FMOV (FLD (f_rm));
1915 SETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
1916 written |= (1 << 4);
1917 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1921 abuf->written = written;
1926 /* fmov8-compact: fmov.d @($imm12x8, $rm), $drn */
1929 SEM_FN_NAME (sh64_compact,fmov8_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1931 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1932 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1933 int UNUSED written = 0;
1934 IADDR UNUSED pc = abuf->addr;
1935 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1938 DF opval = GETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm12x8)));
1939 SET_H_DRC (FLD (f_dn), opval);
1940 TRACE_RESULT (current_cpu, abuf, "drc", 'f', opval);
1947 /* fmov9-compact: mov.l $drm, @($imm12x8, $rn) */
1950 SEM_FN_NAME (sh64_compact,fmov9_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1952 #define FLD(f) abuf->fields.sfmt_fmov9_compact.f
1953 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1954 int UNUSED written = 0;
1955 IADDR UNUSED pc = abuf->addr;
1956 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1959 DF opval = GET_H_DRC (FLD (f_dm));
1960 SETMEMDF (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm12x8)), opval);
1961 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1968 /* fmul-compact: fmul $fsdm, $fsdn */
1971 SEM_FN_NAME (sh64_compact,fmul_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1973 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1974 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1975 int UNUSED written = 0;
1976 IADDR UNUSED pc = abuf->addr;
1977 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1979 if (GET_H_PRBIT ()) {
1981 DF opval = sh64_fmuld (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
1982 SET_H_FSD (FLD (f_rn), opval);
1983 written |= (1 << 3);
1984 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1988 DF opval = sh64_fmuls (current_cpu, GET_H_FSD (FLD (f_rm)), GET_H_FSD (FLD (f_rn)));
1989 SET_H_FSD (FLD (f_rn), opval);
1990 written |= (1 << 3);
1991 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
1995 abuf->written = written;
2000 /* fneg-compact: fneg $fsdn */
2003 SEM_FN_NAME (sh64_compact,fneg_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2005 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2006 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2007 int UNUSED written = 0;
2008 IADDR UNUSED pc = abuf->addr;
2009 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2011 if (GET_H_PRBIT ()) {
2013 DF opval = sh64_fnegd (current_cpu, GET_H_FSD (FLD (f_rn)));
2014 SET_H_FSD (FLD (f_rn), opval);
2015 written |= (1 << 2);
2016 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
2020 DF opval = sh64_fnegs (current_cpu, GET_H_FSD (FLD (f_rn)));
2021 SET_H_FSD (FLD (f_rn), opval);
2022 written |= (1 << 2);
2023 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
2027 abuf->written = written;
2032 /* frchg-compact: frchg */
2035 SEM_FN_NAME (sh64_compact,frchg_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2037 #define FLD(f) abuf->fields.sfmt_empty.f
2038 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2039 int UNUSED written = 0;
2040 IADDR UNUSED pc = abuf->addr;
2041 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2044 BI opval = NOTBI (GET_H_FRBIT ());
2045 SET_H_FRBIT (opval);
2046 TRACE_RESULT (current_cpu, abuf, "frbit", 'x', opval);
2053 /* fschg-compact: fschg */
2056 SEM_FN_NAME (sh64_compact,fschg_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2058 #define FLD(f) abuf->fields.sfmt_empty.f
2059 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2060 int UNUSED written = 0;
2061 IADDR UNUSED pc = abuf->addr;
2062 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2065 BI opval = NOTBI (GET_H_SZBIT ());
2066 SET_H_SZBIT (opval);
2067 TRACE_RESULT (current_cpu, abuf, "szbit", 'x', opval);
2074 /* fsqrt-compact: fsqrt $fsdn */
2077 SEM_FN_NAME (sh64_compact,fsqrt_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2079 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2080 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2081 int UNUSED written = 0;
2082 IADDR UNUSED pc = abuf->addr;
2083 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2085 if (GET_H_PRBIT ()) {
2087 DF opval = sh64_fsqrtd (current_cpu, GET_H_FSD (FLD (f_rn)));
2088 SET_H_FSD (FLD (f_rn), opval);
2089 written |= (1 << 2);
2090 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
2094 DF opval = sh64_fsqrts (current_cpu, GET_H_FSD (FLD (f_rn)));
2095 SET_H_FSD (FLD (f_rn), opval);
2096 written |= (1 << 2);
2097 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
2101 abuf->written = written;
2106 /* fsts-compact: fsts fpul, $frn */
2109 SEM_FN_NAME (sh64_compact,fsts_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2111 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2112 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2113 int UNUSED written = 0;
2114 IADDR UNUSED pc = abuf->addr;
2115 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2118 SF opval = CPU (h_fr[((UINT) 32)]);
2119 SET_H_FRC (FLD (f_rn), opval);
2120 TRACE_RESULT (current_cpu, abuf, "frc", 'f', opval);
2127 /* fsub-compact: fsub $fsdm, $fsdn */
2130 SEM_FN_NAME (sh64_compact,fsub_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2132 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2133 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2134 int UNUSED written = 0;
2135 IADDR UNUSED pc = abuf->addr;
2136 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2138 if (GET_H_PRBIT ()) {
2140 DF opval = sh64_fsubd (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
2141 SET_H_FSD (FLD (f_rn), opval);
2142 written |= (1 << 3);
2143 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
2147 DF opval = sh64_fsubs (current_cpu, GET_H_FSD (FLD (f_rn)), GET_H_FSD (FLD (f_rm)));
2148 SET_H_FSD (FLD (f_rn), opval);
2149 written |= (1 << 3);
2150 TRACE_RESULT (current_cpu, abuf, "fsd", 'f', opval);
2154 abuf->written = written;
2159 /* ftrc-compact: ftrc $fsdn, fpul */
2162 SEM_FN_NAME (sh64_compact,ftrc_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2164 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2165 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2166 int UNUSED written = 0;
2167 IADDR UNUSED pc = abuf->addr;
2168 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2171 SF opval = ((GET_H_PRBIT ()) ? (sh64_ftrcdl (current_cpu, GET_H_FSD (FLD (f_rn)))) : (sh64_ftrcsl (current_cpu, GET_H_FSD (FLD (f_rn)))));
2172 CPU (h_fr[((UINT) 32)]) = opval;
2173 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
2180 /* ftrv-compact: ftrv xmtrx, $fvn */
2183 SEM_FN_NAME (sh64_compact,ftrv_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2185 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
2186 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2187 int UNUSED written = 0;
2188 IADDR UNUSED pc = abuf->addr;
2189 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2191 sh64_ftrv (current_cpu, FLD (f_vn));
2197 /* jmp-compact: jmp @$rn */
2200 SEM_FN_NAME (sh64_compact,jmp_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2202 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2203 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2204 int UNUSED written = 0;
2205 IADDR UNUSED pc = abuf->addr;
2207 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2211 UDI opval = ADDDI (pc, 2);
2212 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2213 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
2218 UDI opval = GET_H_GRC (FLD (f_rn));
2219 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2220 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
2226 SEM_BRANCH_FINI (vpc);
2231 /* jsr-compact: jsr @$rn */
2234 SEM_FN_NAME (sh64_compact,jsr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2236 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2237 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2238 int UNUSED written = 0;
2239 IADDR UNUSED pc = abuf->addr;
2241 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2246 SI opval = ADDDI (pc, 4);
2248 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
2252 UDI opval = ADDDI (pc, 2);
2253 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2254 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
2259 UDI opval = GET_H_GRC (FLD (f_rn));
2260 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2261 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
2267 SEM_BRANCH_FINI (vpc);
2272 /* ldc-gbr-compact: ldc $rn, gbr */
2275 SEM_FN_NAME (sh64_compact,ldc_gbr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2277 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2278 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2279 int UNUSED written = 0;
2280 IADDR UNUSED pc = abuf->addr;
2281 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2284 SI opval = GET_H_GRC (FLD (f_rn));
2286 TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
2293 /* ldc-vbr-compact: ldc $rn, vbr */
2296 SEM_FN_NAME (sh64_compact,ldc_vbr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2298 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2299 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2300 int UNUSED written = 0;
2301 IADDR UNUSED pc = abuf->addr;
2302 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2305 SI opval = GET_H_GRC (FLD (f_rn));
2307 TRACE_RESULT (current_cpu, abuf, "vbr", 'x', opval);
2314 /* ldc-sr-compact: ldc $rn, sr */
2317 SEM_FN_NAME (sh64_compact,ldc_sr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2319 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2320 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2321 int UNUSED written = 0;
2322 IADDR UNUSED pc = abuf->addr;
2323 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2326 SI opval = GET_H_GRC (FLD (f_rn));
2328 TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
2335 /* ldcl-gbr-compact: ldc.l @${rn}+, gbr */
2338 SEM_FN_NAME (sh64_compact,ldcl_gbr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2340 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2341 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2342 int UNUSED written = 0;
2343 IADDR UNUSED pc = abuf->addr;
2344 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2348 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2350 TRACE_RESULT (current_cpu, abuf, "gbr", 'x', opval);
2353 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2354 SET_H_GRC (FLD (f_rn), opval);
2355 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2363 /* ldcl-vbr-compact: ldc.l @${rn}+, vbr */
2366 SEM_FN_NAME (sh64_compact,ldcl_vbr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2368 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2369 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2370 int UNUSED written = 0;
2371 IADDR UNUSED pc = abuf->addr;
2372 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2376 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2378 TRACE_RESULT (current_cpu, abuf, "vbr", 'x', opval);
2381 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2382 SET_H_GRC (FLD (f_rn), opval);
2383 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2391 /* lds-fpscr-compact: lds $rn, fpscr */
2394 SEM_FN_NAME (sh64_compact,lds_fpscr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2396 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2397 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2398 int UNUSED written = 0;
2399 IADDR UNUSED pc = abuf->addr;
2400 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2403 SI opval = GET_H_GRC (FLD (f_rn));
2404 CPU (h_fpscr) = opval;
2405 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
2412 /* ldsl-fpscr-compact: lds.l @${rn}+, fpscr */
2415 SEM_FN_NAME (sh64_compact,ldsl_fpscr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2417 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2418 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2419 int UNUSED written = 0;
2420 IADDR UNUSED pc = abuf->addr;
2421 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2425 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2426 CPU (h_fpscr) = opval;
2427 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval);
2430 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2431 SET_H_GRC (FLD (f_rn), opval);
2432 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2440 /* lds-fpul-compact: lds $rn, fpul */
2443 SEM_FN_NAME (sh64_compact,lds_fpul_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2445 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2446 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2447 int UNUSED written = 0;
2448 IADDR UNUSED pc = abuf->addr;
2449 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2452 SF opval = SUBWORDSISF (GET_H_GRC (FLD (f_rn)));
2453 CPU (h_fr[((UINT) 32)]) = opval;
2454 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
2461 /* ldsl-fpul-compact: lds.l @${rn}+, fpul */
2464 SEM_FN_NAME (sh64_compact,ldsl_fpul_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2466 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2467 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2468 int UNUSED written = 0;
2469 IADDR UNUSED pc = abuf->addr;
2470 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2474 SF opval = GETMEMSF (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2475 CPU (h_fr[((UINT) 32)]) = opval;
2476 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
2479 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2480 SET_H_GRC (FLD (f_rn), opval);
2481 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2489 /* lds-mach-compact: lds $rn, mach */
2492 SEM_FN_NAME (sh64_compact,lds_mach_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2494 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2495 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2496 int UNUSED written = 0;
2497 IADDR UNUSED pc = abuf->addr;
2498 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2501 SI opval = GET_H_GRC (FLD (f_rn));
2503 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2510 /* ldsl-mach-compact: lds.l @${rn}+, mach */
2513 SEM_FN_NAME (sh64_compact,ldsl_mach_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2515 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2516 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2517 int UNUSED written = 0;
2518 IADDR UNUSED pc = abuf->addr;
2519 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2523 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2525 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2528 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2529 SET_H_GRC (FLD (f_rn), opval);
2530 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2538 /* lds-macl-compact: lds $rn, macl */
2541 SEM_FN_NAME (sh64_compact,lds_macl_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2543 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2544 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2545 int UNUSED written = 0;
2546 IADDR UNUSED pc = abuf->addr;
2547 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2550 SI opval = GET_H_GRC (FLD (f_rn));
2552 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2559 /* ldsl-macl-compact: lds.l @${rn}+, macl */
2562 SEM_FN_NAME (sh64_compact,ldsl_macl_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2564 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2565 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2566 int UNUSED written = 0;
2567 IADDR UNUSED pc = abuf->addr;
2568 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2572 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2574 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2577 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2578 SET_H_GRC (FLD (f_rn), opval);
2579 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2587 /* lds-pr-compact: lds $rn, pr */
2590 SEM_FN_NAME (sh64_compact,lds_pr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2592 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2593 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2594 int UNUSED written = 0;
2595 IADDR UNUSED pc = abuf->addr;
2596 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2599 SI opval = GET_H_GRC (FLD (f_rn));
2601 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
2608 /* ldsl-pr-compact: lds.l @${rn}+, pr */
2611 SEM_FN_NAME (sh64_compact,ldsl_pr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2613 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2614 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2615 int UNUSED written = 0;
2616 IADDR UNUSED pc = abuf->addr;
2617 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2621 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2623 TRACE_RESULT (current_cpu, abuf, "pr", 'x', opval);
2626 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2627 SET_H_GRC (FLD (f_rn), opval);
2628 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2636 /* macl-compact: mac.l @${rm}+, @${rn}+ */
2639 SEM_FN_NAME (sh64_compact,macl_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2641 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2642 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2643 int UNUSED written = 0;
2644 IADDR UNUSED pc = abuf->addr;
2645 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2653 tmp_x = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2655 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2656 SET_H_GRC (FLD (f_rn), opval);
2657 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2659 if (EQSI (FLD (f_rn), FLD (f_rm))) {
2662 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
2663 SET_H_GRC (FLD (f_rn), opval);
2664 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2667 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
2668 SET_H_GRC (FLD (f_rm), opval);
2669 written |= (1 << 11);
2670 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2674 tmp_y = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
2676 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
2677 SET_H_GRC (FLD (f_rm), opval);
2678 written |= (1 << 11);
2679 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2681 tmp_tmpry = MULDI (ZEXTSIDI (tmp_x), ZEXTSIDI (tmp_y));
2682 tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2683 tmp_result = ADDDI (tmp_mac, tmp_tmpry);
2685 if (GET_H_SBIT ()) {
2689 tmp_max = SRLDI (INVDI (0), 16);
2690 tmp_min = SRLDI (INVDI (0), 15);
2691 if (GTDI (tmp_result, tmp_max)) {
2692 tmp_result = tmp_max;
2694 if (LTDI (tmp_result, tmp_min)) {
2695 tmp_result = tmp_min;
2701 SI opval = SUBWORDDISI (tmp_result, 0);
2703 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2706 SI opval = SUBWORDDISI (tmp_result, 1);
2708 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2713 abuf->written = written;
2718 /* macw-compact: mac.w @${rm}+, @${rn}+ */
2721 SEM_FN_NAME (sh64_compact,macw_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2723 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2724 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2725 int UNUSED written = 0;
2726 IADDR UNUSED pc = abuf->addr;
2727 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2735 tmp_x = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
2737 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
2738 SET_H_GRC (FLD (f_rn), opval);
2739 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2741 if (EQSI (FLD (f_rn), FLD (f_rm))) {
2744 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 2);
2745 SET_H_GRC (FLD (f_rn), opval);
2746 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2749 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
2750 SET_H_GRC (FLD (f_rm), opval);
2751 written |= (1 << 11);
2752 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2756 tmp_y = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
2758 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
2759 SET_H_GRC (FLD (f_rm), opval);
2760 written |= (1 << 11);
2761 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2763 tmp_tmpry = MULSI (ZEXTHISI (tmp_x), ZEXTHISI (tmp_y));
2764 if (GET_H_SBIT ()) {
2766 if (ADDOFSI (tmp_tmpry, GET_H_MACL (), 0)) {
2770 written |= (1 << 9);
2771 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2775 SI opval = ADDSI (tmp_tmpry, GET_H_MACL ());
2777 written |= (1 << 10);
2778 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2783 tmp_mac = ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2784 tmp_result = ADDDI (tmp_mac, EXTSIDI (tmp_tmpry));
2786 SI opval = SUBWORDDISI (tmp_result, 0);
2788 written |= (1 << 9);
2789 TRACE_RESULT (current_cpu, abuf, "mach", 'x', opval);
2792 SI opval = SUBWORDDISI (tmp_result, 1);
2794 written |= (1 << 10);
2795 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
2801 abuf->written = written;
2806 /* mov-compact: mov $rm64, $rn64 */
2809 SEM_FN_NAME (sh64_compact,mov_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2811 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2812 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2813 int UNUSED written = 0;
2814 IADDR UNUSED pc = abuf->addr;
2815 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2818 DI opval = GET_H_GR (FLD (f_rm));
2819 SET_H_GR (FLD (f_rn), opval);
2820 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2827 /* movi-compact: mov #$imm8, $rn */
2830 SEM_FN_NAME (sh64_compact,movi_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2832 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2833 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2834 int UNUSED written = 0;
2835 IADDR UNUSED pc = abuf->addr;
2836 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2839 SI opval = EXTQIDI (ANDQI (FLD (f_imm8), 255));
2840 SET_H_GRC (FLD (f_rn), opval);
2841 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2848 /* movi20-compact: movi20 #$imm20, $rn */
2851 SEM_FN_NAME (sh64_compact,movi20_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2853 #define FLD(f) abuf->fields.sfmt_movi20_compact.f
2854 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2855 int UNUSED written = 0;
2856 IADDR UNUSED pc = abuf->addr;
2857 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2860 SI opval = FLD (f_imm20);
2861 SET_H_GRC (FLD (f_rn), opval);
2862 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2869 /* movb1-compact: mov.b $rm, @$rn */
2872 SEM_FN_NAME (sh64_compact,movb1_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2874 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2875 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2876 int UNUSED written = 0;
2877 IADDR UNUSED pc = abuf->addr;
2878 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2881 UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
2882 SETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
2883 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2890 /* movb2-compact: mov.b $rm, @-$rn */
2893 SEM_FN_NAME (sh64_compact,movb2_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2895 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2896 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2897 int UNUSED written = 0;
2898 IADDR UNUSED pc = abuf->addr;
2899 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2903 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 1);
2905 UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
2906 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
2907 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2910 SI opval = tmp_addr;
2911 SET_H_GRC (FLD (f_rn), opval);
2912 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
2920 /* movb3-compact: mov.b $rm, @(r0,$rn) */
2923 SEM_FN_NAME (sh64_compact,movb3_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2925 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2926 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2927 int UNUSED written = 0;
2928 IADDR UNUSED pc = abuf->addr;
2929 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2932 UQI opval = SUBWORDSIUQI (GET_H_GRC (FLD (f_rm)), 3);
2933 SETMEMUQI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
2934 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2941 /* movb4-compact: mov.b r0, @($imm8, gbr) */
2944 SEM_FN_NAME (sh64_compact,movb4_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2946 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2947 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2948 int UNUSED written = 0;
2949 IADDR UNUSED pc = abuf->addr;
2950 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2954 tmp_addr = ADDSI (GET_H_GBR (), FLD (f_imm8));
2956 UQI opval = SUBWORDSIUQI (GET_H_GRC (((UINT) 0)), 3);
2957 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
2958 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2966 /* movb5-compact: mov.b r0, @($imm4, $rm) */
2969 SEM_FN_NAME (sh64_compact,movb5_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2971 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
2972 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2973 int UNUSED written = 0;
2974 IADDR UNUSED pc = abuf->addr;
2975 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2979 tmp_addr = ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4));
2981 UQI opval = SUBWORDSIUQI (GET_H_GRC (((UINT) 0)), 3);
2982 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
2983 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2991 /* movb6-compact: mov.b @$rm, $rn */
2994 SEM_FN_NAME (sh64_compact,movb6_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2996 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2997 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2998 int UNUSED written = 0;
2999 IADDR UNUSED pc = abuf->addr;
3000 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3003 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
3004 SET_H_GRC (FLD (f_rn), opval);
3005 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3012 /* movb7-compact: mov.b @${rm}+, $rn */
3015 SEM_FN_NAME (sh64_compact,movb7_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3017 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3018 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3019 int UNUSED written = 0;
3020 IADDR UNUSED pc = abuf->addr;
3021 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3025 tmp_data = GETMEMQI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3026 if (EQSI (FLD (f_rm), FLD (f_rn))) {
3028 SI opval = EXTQISI (tmp_data);
3029 SET_H_GRC (FLD (f_rm), opval);
3030 written |= (1 << 4);
3031 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3035 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 1);
3036 SET_H_GRC (FLD (f_rm), opval);
3037 written |= (1 << 4);
3038 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3042 SI opval = EXTQISI (tmp_data);
3043 SET_H_GRC (FLD (f_rn), opval);
3044 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3048 abuf->written = written;
3053 /* movb8-compact: mov.b @(r0, $rm), $rn */
3056 SEM_FN_NAME (sh64_compact,movb8_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3058 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3059 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3060 int UNUSED written = 0;
3061 IADDR UNUSED pc = abuf->addr;
3062 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3065 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
3066 SET_H_GRC (FLD (f_rn), opval);
3067 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3074 /* movb9-compact: mov.b @($imm8, gbr), r0 */
3077 SEM_FN_NAME (sh64_compact,movb9_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3079 #define FLD(f) abuf->fields.sfmt_addi_compact.f
3080 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3081 int UNUSED written = 0;
3082 IADDR UNUSED pc = abuf->addr;
3083 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3086 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8))));
3087 SET_H_GRC (((UINT) 0), opval);
3088 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3095 /* movb10-compact: mov.b @($imm4, $rm), r0 */
3098 SEM_FN_NAME (sh64_compact,movb10_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3100 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
3101 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3102 int UNUSED written = 0;
3103 IADDR UNUSED pc = abuf->addr;
3104 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3107 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4))));
3108 SET_H_GRC (((UINT) 0), opval);
3109 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3116 /* movl1-compact: mov.l $rm, @$rn */
3119 SEM_FN_NAME (sh64_compact,movl1_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3121 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3122 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3123 int UNUSED written = 0;
3124 IADDR UNUSED pc = abuf->addr;
3125 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3128 SI opval = GET_H_GRC (FLD (f_rm));
3129 SETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
3130 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3137 /* movl2-compact: mov.l $rm, @-$rn */
3140 SEM_FN_NAME (sh64_compact,movl2_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3142 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3143 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3144 int UNUSED written = 0;
3145 IADDR UNUSED pc = abuf->addr;
3146 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3150 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
3152 SI opval = GET_H_GRC (FLD (f_rm));
3153 SETMEMSI (current_cpu, pc, tmp_addr, opval);
3154 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3157 SI opval = tmp_addr;
3158 SET_H_GRC (FLD (f_rn), opval);
3159 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3167 /* movl3-compact: mov.l $rm, @(r0, $rn) */
3170 SEM_FN_NAME (sh64_compact,movl3_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3172 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3173 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3174 int UNUSED written = 0;
3175 IADDR UNUSED pc = abuf->addr;
3176 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3179 SI opval = GET_H_GRC (FLD (f_rm));
3180 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
3181 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3188 /* movl4-compact: mov.l r0, @($imm8x4, gbr) */
3191 SEM_FN_NAME (sh64_compact,movl4_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3193 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3194 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3195 int UNUSED written = 0;
3196 IADDR UNUSED pc = abuf->addr;
3197 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3200 SI opval = GET_H_GRC (((UINT) 0));
3201 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x4)), opval);
3202 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3209 /* movl5-compact: mov.l $rm, @($imm4x4, $rn) */
3212 SEM_FN_NAME (sh64_compact,movl5_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3214 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3215 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3216 int UNUSED written = 0;
3217 IADDR UNUSED pc = abuf->addr;
3218 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3221 SI opval = GET_H_GRC (FLD (f_rm));
3222 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm4x4)), opval);
3223 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3230 /* movl6-compact: mov.l @$rm, $rn */
3233 SEM_FN_NAME (sh64_compact,movl6_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3235 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3236 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3237 int UNUSED written = 0;
3238 IADDR UNUSED pc = abuf->addr;
3239 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3242 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3243 SET_H_GRC (FLD (f_rn), opval);
3244 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3251 /* movl7-compact: mov.l @${rm}+, $rn */
3254 SEM_FN_NAME (sh64_compact,movl7_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3256 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3257 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3258 int UNUSED written = 0;
3259 IADDR UNUSED pc = abuf->addr;
3260 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3264 SI opval = GETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3265 SET_H_GRC (FLD (f_rn), opval);
3266 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3268 if (EQSI (FLD (f_rm), FLD (f_rn))) {
3270 SI opval = GET_H_GRC (FLD (f_rn));
3271 SET_H_GRC (FLD (f_rm), opval);
3272 written |= (1 << 5);
3273 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3277 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 4);
3278 SET_H_GRC (FLD (f_rm), opval);
3279 written |= (1 << 5);
3280 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3285 abuf->written = written;
3290 /* movl8-compact: mov.l @(r0, $rm), $rn */
3293 SEM_FN_NAME (sh64_compact,movl8_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3295 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3296 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3297 int UNUSED written = 0;
3298 IADDR UNUSED pc = abuf->addr;
3299 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3302 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm))));
3303 SET_H_GRC (FLD (f_rn), opval);
3304 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3311 /* movl9-compact: mov.l @($imm8x4, gbr), r0 */
3314 SEM_FN_NAME (sh64_compact,movl9_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3316 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3317 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3318 int UNUSED written = 0;
3319 IADDR UNUSED pc = abuf->addr;
3320 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3323 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x4)));
3324 SET_H_GRC (((UINT) 0), opval);
3325 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3332 /* movl10-compact: mov.l @($imm8x4, pc), $rn */
3335 SEM_FN_NAME (sh64_compact,movl10_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3337 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3338 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3339 int UNUSED written = 0;
3340 IADDR UNUSED pc = abuf->addr;
3341 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3344 SI opval = GETMEMSI (current_cpu, pc, ADDSI (FLD (f_imm8x4), ANDDI (ADDDI (pc, 4), INVSI (3))));
3345 SET_H_GRC (FLD (f_rn), opval);
3346 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3353 /* movl11-compact: mov.l @($imm4x4, $rm), $rn */
3356 SEM_FN_NAME (sh64_compact,movl11_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3358 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3359 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3360 int UNUSED written = 0;
3361 IADDR UNUSED pc = abuf->addr;
3362 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3365 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x4)));
3366 SET_H_GRC (FLD (f_rn), opval);
3367 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3374 /* movl12-compact: mov.l @($imm12x4, $rm), $rn */
3377 SEM_FN_NAME (sh64_compact,movl12_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3379 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3380 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3381 int UNUSED written = 0;
3382 IADDR UNUSED pc = abuf->addr;
3383 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3386 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm12x4)));
3387 SET_H_GRC (FLD (f_rn), opval);
3388 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3395 /* movl13-compact: mov.l $rm, @($imm12x4, $rn) */
3398 SEM_FN_NAME (sh64_compact,movl13_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3400 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3401 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3402 int UNUSED written = 0;
3403 IADDR UNUSED pc = abuf->addr;
3404 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3407 SI opval = GET_H_GRC (FLD (f_rm));
3408 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rn)), FLD (f_imm12x4)), opval);
3409 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3416 /* movw1-compact: mov.w $rm, @$rn */
3419 SEM_FN_NAME (sh64_compact,movw1_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3421 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3422 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3423 int UNUSED written = 0;
3424 IADDR UNUSED pc = abuf->addr;
3425 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3428 HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
3429 SETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
3430 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3437 /* movw2-compact: mov.w $rm, @-$rn */
3440 SEM_FN_NAME (sh64_compact,movw2_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3442 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3443 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3444 int UNUSED written = 0;
3445 IADDR UNUSED pc = abuf->addr;
3446 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3450 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 2);
3452 HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
3453 SETMEMHI (current_cpu, pc, tmp_addr, opval);
3454 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3457 SI opval = tmp_addr;
3458 SET_H_GRC (FLD (f_rn), opval);
3459 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3467 /* movw3-compact: mov.w $rm, @(r0, $rn) */
3470 SEM_FN_NAME (sh64_compact,movw3_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3472 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3473 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3474 int UNUSED written = 0;
3475 IADDR UNUSED pc = abuf->addr;
3476 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3479 HI opval = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1);
3480 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rn))), opval);
3481 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3488 /* movw4-compact: mov.w r0, @($imm8x2, gbr) */
3491 SEM_FN_NAME (sh64_compact,movw4_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3493 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3494 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3495 int UNUSED written = 0;
3496 IADDR UNUSED pc = abuf->addr;
3497 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3500 HI opval = SUBWORDSIHI (GET_H_GRC (((UINT) 0)), 1);
3501 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x2)), opval);
3502 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3509 /* movw5-compact: mov.w r0, @($imm4x2, $rm) */
3512 SEM_FN_NAME (sh64_compact,movw5_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3514 #define FLD(f) abuf->fields.sfmt_movw5_compact.f
3515 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3516 int UNUSED written = 0;
3517 IADDR UNUSED pc = abuf->addr;
3518 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3521 HI opval = SUBWORDSIHI (GET_H_GRC (((UINT) 0)), 1);
3522 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x2)), opval);
3523 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3530 /* movw6-compact: mov.w @$rm, $rn */
3533 SEM_FN_NAME (sh64_compact,movw6_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3535 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3536 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3537 int UNUSED written = 0;
3538 IADDR UNUSED pc = abuf->addr;
3539 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3542 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm))));
3543 SET_H_GRC (FLD (f_rn), opval);
3544 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3551 /* movw7-compact: mov.w @${rm}+, $rn */
3554 SEM_FN_NAME (sh64_compact,movw7_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3556 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3557 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3558 int UNUSED written = 0;
3559 IADDR UNUSED pc = abuf->addr;
3560 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3564 tmp_data = GETMEMHI (current_cpu, pc, GET_H_GRC (FLD (f_rm)));
3565 if (EQSI (FLD (f_rm), FLD (f_rn))) {
3567 SI opval = EXTHISI (tmp_data);
3568 SET_H_GRC (FLD (f_rm), opval);
3569 written |= (1 << 4);
3570 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3574 SI opval = ADDSI (GET_H_GRC (FLD (f_rm)), 2);
3575 SET_H_GRC (FLD (f_rm), opval);
3576 written |= (1 << 4);
3577 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3581 SI opval = EXTHISI (tmp_data);
3582 SET_H_GRC (FLD (f_rn), opval);
3583 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3587 abuf->written = written;
3592 /* movw8-compact: mov.w @(r0, $rm), $rn */
3595 SEM_FN_NAME (sh64_compact,movw8_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3597 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3598 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3599 int UNUSED written = 0;
3600 IADDR UNUSED pc = abuf->addr;
3601 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3604 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GRC (FLD (f_rm)))));
3605 SET_H_GRC (FLD (f_rn), opval);
3606 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3613 /* movw9-compact: mov.w @($imm8x2, gbr), r0 */
3616 SEM_FN_NAME (sh64_compact,movw9_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3618 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3619 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3620 int UNUSED written = 0;
3621 IADDR UNUSED pc = abuf->addr;
3622 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3625 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GBR (), FLD (f_imm8x2))));
3626 SET_H_GRC (((UINT) 0), opval);
3627 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3634 /* movw10-compact: mov.w @($imm8x2, pc), $rn */
3637 SEM_FN_NAME (sh64_compact,movw10_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3639 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3640 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3641 int UNUSED written = 0;
3642 IADDR UNUSED pc = abuf->addr;
3643 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3646 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDDI (ADDDI (pc, 4), FLD (f_imm8x2))));
3647 SET_H_GRC (FLD (f_rn), opval);
3648 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3655 /* movw11-compact: mov.w @($imm4x2, $rm), r0 */
3658 SEM_FN_NAME (sh64_compact,movw11_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3660 #define FLD(f) abuf->fields.sfmt_movw5_compact.f
3661 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3662 int UNUSED written = 0;
3663 IADDR UNUSED pc = abuf->addr;
3664 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3667 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GRC (FLD (f_rm)), FLD (f_imm4x2))));
3668 SET_H_GRC (((UINT) 0), opval);
3669 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3676 /* mova-compact: mova @($imm8x4, pc), r0 */
3679 SEM_FN_NAME (sh64_compact,mova_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3681 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3682 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3683 int UNUSED written = 0;
3684 IADDR UNUSED pc = abuf->addr;
3685 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3688 SI opval = ADDDI (ANDDI (ADDDI (pc, 4), INVSI (3)), FLD (f_imm8x4));
3689 SET_H_GRC (((UINT) 0), opval);
3690 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3697 /* movcal-compact: movca.l r0, @$rn */
3700 SEM_FN_NAME (sh64_compact,movcal_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3702 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3703 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3704 int UNUSED written = 0;
3705 IADDR UNUSED pc = abuf->addr;
3706 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3709 SI opval = GET_H_GRC (((UINT) 0));
3710 SETMEMSI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
3711 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3718 /* movcol-compact: movco.l r0, @$rn */
3721 SEM_FN_NAME (sh64_compact,movcol_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3723 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3724 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3725 int UNUSED written = 0;
3726 IADDR UNUSED pc = abuf->addr;
3727 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3730 SI opval = GET_H_GRC (FLD (f_rn));
3731 SET_H_GRC (FLD (f_rn), opval);
3732 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3739 /* movt-compact: movt $rn */
3742 SEM_FN_NAME (sh64_compact,movt_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3744 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3745 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3746 int UNUSED written = 0;
3747 IADDR UNUSED pc = abuf->addr;
3748 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3751 SI opval = ZEXTBISI (GET_H_TBIT ());
3752 SET_H_GRC (FLD (f_rn), opval);
3753 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3760 /* movual-compact: movua.l @$rn, r0 */
3763 SEM_FN_NAME (sh64_compact,movual_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3765 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3766 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3767 int UNUSED written = 0;
3768 IADDR UNUSED pc = abuf->addr;
3769 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3772 SI opval = sh64_movua (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
3773 SET_H_GRC (((UINT) 0), opval);
3774 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3781 /* movual2-compact: movua.l @$rn+, r0 */
3784 SEM_FN_NAME (sh64_compact,movual2_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3786 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3787 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3788 int UNUSED written = 0;
3789 IADDR UNUSED pc = abuf->addr;
3790 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3794 SI opval = sh64_movua (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
3795 SET_H_GRC (((UINT) 0), opval);
3796 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3799 SI opval = ADDSI (GET_H_GRC (FLD (f_rn)), 4);
3800 SET_H_GRC (FLD (f_rn), opval);
3801 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3809 /* mull-compact: mul.l $rm, $rn */
3812 SEM_FN_NAME (sh64_compact,mull_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3814 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3815 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3816 int UNUSED written = 0;
3817 IADDR UNUSED pc = abuf->addr;
3818 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3821 SI opval = MULSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn)));
3823 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3830 /* mulsw-compact: muls.w $rm, $rn */
3833 SEM_FN_NAME (sh64_compact,mulsw_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3835 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3836 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3837 int UNUSED written = 0;
3838 IADDR UNUSED pc = abuf->addr;
3839 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3842 SI opval = MULSI (EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
3844 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3851 /* muluw-compact: mulu.w $rm, $rn */
3854 SEM_FN_NAME (sh64_compact,muluw_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3856 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3857 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3858 int UNUSED written = 0;
3859 IADDR UNUSED pc = abuf->addr;
3860 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3863 SI opval = MULSI (ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 1)), ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn)), 1)));
3865 TRACE_RESULT (current_cpu, abuf, "macl", 'x', opval);
3872 /* neg-compact: neg $rm, $rn */
3875 SEM_FN_NAME (sh64_compact,neg_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3877 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3878 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3879 int UNUSED written = 0;
3880 IADDR UNUSED pc = abuf->addr;
3881 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3884 SI opval = NEGSI (GET_H_GRC (FLD (f_rm)));
3885 SET_H_GRC (FLD (f_rn), opval);
3886 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3893 /* negc-compact: negc $rm, $rn */
3896 SEM_FN_NAME (sh64_compact,negc_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3898 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3899 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3900 int UNUSED written = 0;
3901 IADDR UNUSED pc = abuf->addr;
3902 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3906 tmp_flag = SUBCFSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
3908 SI opval = SUBCSI (0, GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
3909 SET_H_GRC (FLD (f_rn), opval);
3910 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3913 BI opval = tmp_flag;
3915 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
3923 /* nop-compact: nop */
3926 SEM_FN_NAME (sh64_compact,nop_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3928 #define FLD(f) abuf->fields.sfmt_empty.f
3929 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3930 int UNUSED written = 0;
3931 IADDR UNUSED pc = abuf->addr;
3932 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3940 /* not-compact: not $rm64, $rn64 */
3943 SEM_FN_NAME (sh64_compact,not_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3945 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3946 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3947 int UNUSED written = 0;
3948 IADDR UNUSED pc = abuf->addr;
3949 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3952 DI opval = INVDI (GET_H_GR (FLD (f_rm)));
3953 SET_H_GR (FLD (f_rn), opval);
3954 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
3961 /* ocbi-compact: ocbi @$rn */
3964 SEM_FN_NAME (sh64_compact,ocbi_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3966 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3967 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3968 int UNUSED written = 0;
3969 IADDR UNUSED pc = abuf->addr;
3970 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3974 SI opval = GET_H_GRC (FLD (f_rn));
3975 SET_H_GRC (FLD (f_rn), opval);
3976 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
3985 /* ocbp-compact: ocbp @$rn */
3988 SEM_FN_NAME (sh64_compact,ocbp_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3990 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3991 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3992 int UNUSED written = 0;
3993 IADDR UNUSED pc = abuf->addr;
3994 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3998 SI opval = GET_H_GRC (FLD (f_rn));
3999 SET_H_GRC (FLD (f_rn), opval);
4000 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4009 /* ocbwb-compact: ocbwb @$rn */
4012 SEM_FN_NAME (sh64_compact,ocbwb_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4014 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4015 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4016 int UNUSED written = 0;
4017 IADDR UNUSED pc = abuf->addr;
4018 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4022 SI opval = GET_H_GRC (FLD (f_rn));
4023 SET_H_GRC (FLD (f_rn), opval);
4024 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4033 /* or-compact: or $rm64, $rn64 */
4036 SEM_FN_NAME (sh64_compact,or_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4038 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4039 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4040 int UNUSED written = 0;
4041 IADDR UNUSED pc = abuf->addr;
4042 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4045 DI opval = ORDI (GET_H_GR (FLD (f_rm)), GET_H_GR (FLD (f_rn)));
4046 SET_H_GR (FLD (f_rn), opval);
4047 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
4054 /* ori-compact: or #$uimm8, r0 */
4057 SEM_FN_NAME (sh64_compact,ori_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4059 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4060 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4061 int UNUSED written = 0;
4062 IADDR UNUSED pc = abuf->addr;
4063 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4066 SI opval = ORSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
4067 SET_H_GRC (((UINT) 0), opval);
4068 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4075 /* orb-compact: or.b #$imm8, @(r0, gbr) */
4078 SEM_FN_NAME (sh64_compact,orb_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4080 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4081 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4082 int UNUSED written = 0;
4083 IADDR UNUSED pc = abuf->addr;
4084 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4089 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
4090 tmp_data = ORQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
4092 UQI opval = tmp_data;
4093 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4094 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4102 /* pref-compact: pref @$rn */
4105 SEM_FN_NAME (sh64_compact,pref_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4107 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4108 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4109 int UNUSED written = 0;
4110 IADDR UNUSED pc = abuf->addr;
4111 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4113 sh64_pref (current_cpu, GET_H_GRC (FLD (f_rn)));
4119 /* rotcl-compact: rotcl $rn */
4122 SEM_FN_NAME (sh64_compact,rotcl_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4124 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4125 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4126 int UNUSED written = 0;
4127 IADDR UNUSED pc = abuf->addr;
4128 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4132 tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4134 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), GET_H_TBIT ());
4135 SET_H_GRC (FLD (f_rn), opval);
4136 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4139 BI opval = ((tmp_temp) ? (1) : (0));
4141 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4149 /* rotcr-compact: rotcr $rn */
4152 SEM_FN_NAME (sh64_compact,rotcr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4154 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4155 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4156 int UNUSED written = 0;
4157 IADDR UNUSED pc = abuf->addr;
4158 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4163 tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
4164 tmp_temp = GET_H_TBIT ();
4166 SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
4167 SET_H_GRC (FLD (f_rn), opval);
4168 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4171 BI opval = ((tmp_lsbit) ? (1) : (0));
4173 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4181 /* rotl-compact: rotl $rn */
4184 SEM_FN_NAME (sh64_compact,rotl_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4186 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4187 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4188 int UNUSED written = 0;
4189 IADDR UNUSED pc = abuf->addr;
4190 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4194 tmp_temp = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4196 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rn)), 1), tmp_temp);
4197 SET_H_GRC (FLD (f_rn), opval);
4198 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4201 BI opval = ((tmp_temp) ? (1) : (0));
4203 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4211 /* rotr-compact: rotr $rn */
4214 SEM_FN_NAME (sh64_compact,rotr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4216 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4217 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4218 int UNUSED written = 0;
4219 IADDR UNUSED pc = abuf->addr;
4220 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4225 tmp_lsbit = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn)), 1), 0)) ? (0) : (1));
4226 tmp_temp = tmp_lsbit;
4228 SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rn)), 1), SLLSI (tmp_temp, 31));
4229 SET_H_GRC (FLD (f_rn), opval);
4230 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4233 BI opval = ((tmp_lsbit) ? (1) : (0));
4235 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4243 /* rts-compact: rts */
4246 SEM_FN_NAME (sh64_compact,rts_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4248 #define FLD(f) abuf->fields.sfmt_empty.f
4249 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4250 int UNUSED written = 0;
4251 IADDR UNUSED pc = abuf->addr;
4253 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4257 UDI opval = ADDDI (pc, 2);
4258 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
4259 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
4264 UDI opval = GET_H_PR ();
4265 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
4266 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
4272 SEM_BRANCH_FINI (vpc);
4277 /* sets-compact: sets */
4280 SEM_FN_NAME (sh64_compact,sets_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4282 #define FLD(f) abuf->fields.sfmt_empty.f
4283 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4284 int UNUSED written = 0;
4285 IADDR UNUSED pc = abuf->addr;
4286 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4291 TRACE_RESULT (current_cpu, abuf, "sbit", 'x', opval);
4298 /* sett-compact: sett */
4301 SEM_FN_NAME (sh64_compact,sett_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4303 #define FLD(f) abuf->fields.sfmt_empty.f
4304 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4305 int UNUSED written = 0;
4306 IADDR UNUSED pc = abuf->addr;
4307 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4312 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4319 /* shad-compact: shad $rm, $rn */
4322 SEM_FN_NAME (sh64_compact,shad_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4324 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4325 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4326 int UNUSED written = 0;
4327 IADDR UNUSED pc = abuf->addr;
4328 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4332 tmp_shamt = ANDSI (GET_H_GRC (FLD (f_rm)), 31);
4333 if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
4335 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
4336 SET_H_GRC (FLD (f_rn), opval);
4337 written |= (1 << 2);
4338 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4341 if (NESI (tmp_shamt, 0)) {
4343 SI opval = SRASI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
4344 SET_H_GRC (FLD (f_rn), opval);
4345 written |= (1 << 2);
4346 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4349 if (LTSI (GET_H_GRC (FLD (f_rn)), 0)) {
4351 SI opval = NEGSI (1);
4352 SET_H_GRC (FLD (f_rn), opval);
4353 written |= (1 << 2);
4354 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4359 SET_H_GRC (FLD (f_rn), opval);
4360 written |= (1 << 2);
4361 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4368 abuf->written = written;
4373 /* shal-compact: shal $rn */
4376 SEM_FN_NAME (sh64_compact,shal_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4378 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4379 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4380 int UNUSED written = 0;
4381 IADDR UNUSED pc = abuf->addr;
4382 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4386 tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4388 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
4389 SET_H_GRC (FLD (f_rn), opval);
4390 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4393 BI opval = ((tmp_t) ? (1) : (0));
4395 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4403 /* shar-compact: shar $rn */
4406 SEM_FN_NAME (sh64_compact,shar_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4408 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4409 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4410 int UNUSED written = 0;
4411 IADDR UNUSED pc = abuf->addr;
4412 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4416 tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
4418 SI opval = SRASI (GET_H_GRC (FLD (f_rn)), 1);
4419 SET_H_GRC (FLD (f_rn), opval);
4420 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4423 BI opval = ((tmp_t) ? (1) : (0));
4425 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4433 /* shld-compact: shld $rm, $rn */
4436 SEM_FN_NAME (sh64_compact,shld_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4438 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4439 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4440 int UNUSED written = 0;
4441 IADDR UNUSED pc = abuf->addr;
4442 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4446 tmp_shamt = ANDSI (GET_H_GRC (FLD (f_rm)), 31);
4447 if (GESI (GET_H_GRC (FLD (f_rm)), 0)) {
4449 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), tmp_shamt);
4450 SET_H_GRC (FLD (f_rn), opval);
4451 written |= (1 << 2);
4452 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4455 if (NESI (tmp_shamt, 0)) {
4457 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), SUBSI (32, tmp_shamt));
4458 SET_H_GRC (FLD (f_rn), opval);
4459 written |= (1 << 2);
4460 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4465 SET_H_GRC (FLD (f_rn), opval);
4466 written |= (1 << 2);
4467 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4473 abuf->written = written;
4478 /* shll-compact: shll $rn */
4481 SEM_FN_NAME (sh64_compact,shll_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4483 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4484 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4485 int UNUSED written = 0;
4486 IADDR UNUSED pc = abuf->addr;
4487 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4491 tmp_t = SRLSI (GET_H_GRC (FLD (f_rn)), 31);
4493 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 1);
4494 SET_H_GRC (FLD (f_rn), opval);
4495 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4498 BI opval = ((tmp_t) ? (1) : (0));
4500 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4508 /* shll2-compact: shll2 $rn */
4511 SEM_FN_NAME (sh64_compact,shll2_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4513 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4514 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4515 int UNUSED written = 0;
4516 IADDR UNUSED pc = abuf->addr;
4517 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4520 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 2);
4521 SET_H_GRC (FLD (f_rn), opval);
4522 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4529 /* shll8-compact: shll8 $rn */
4532 SEM_FN_NAME (sh64_compact,shll8_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4534 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4535 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4536 int UNUSED written = 0;
4537 IADDR UNUSED pc = abuf->addr;
4538 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4541 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 8);
4542 SET_H_GRC (FLD (f_rn), opval);
4543 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4550 /* shll16-compact: shll16 $rn */
4553 SEM_FN_NAME (sh64_compact,shll16_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4555 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4556 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4557 int UNUSED written = 0;
4558 IADDR UNUSED pc = abuf->addr;
4559 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4562 SI opval = SLLSI (GET_H_GRC (FLD (f_rn)), 16);
4563 SET_H_GRC (FLD (f_rn), opval);
4564 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4571 /* shlr-compact: shlr $rn */
4574 SEM_FN_NAME (sh64_compact,shlr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4576 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4577 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4578 int UNUSED written = 0;
4579 IADDR UNUSED pc = abuf->addr;
4580 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4584 tmp_t = ANDSI (GET_H_GRC (FLD (f_rn)), 1);
4586 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 1);
4587 SET_H_GRC (FLD (f_rn), opval);
4588 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4591 BI opval = ((tmp_t) ? (1) : (0));
4593 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
4601 /* shlr2-compact: shlr2 $rn */
4604 SEM_FN_NAME (sh64_compact,shlr2_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4606 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4607 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4608 int UNUSED written = 0;
4609 IADDR UNUSED pc = abuf->addr;
4610 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4613 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 2);
4614 SET_H_GRC (FLD (f_rn), opval);
4615 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4622 /* shlr8-compact: shlr8 $rn */
4625 SEM_FN_NAME (sh64_compact,shlr8_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4627 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4628 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4629 int UNUSED written = 0;
4630 IADDR UNUSED pc = abuf->addr;
4631 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4634 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 8);
4635 SET_H_GRC (FLD (f_rn), opval);
4636 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4643 /* shlr16-compact: shlr16 $rn */
4646 SEM_FN_NAME (sh64_compact,shlr16_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4648 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4649 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4650 int UNUSED written = 0;
4651 IADDR UNUSED pc = abuf->addr;
4652 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4655 SI opval = SRLSI (GET_H_GRC (FLD (f_rn)), 16);
4656 SET_H_GRC (FLD (f_rn), opval);
4657 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4664 /* stc-gbr-compact: stc gbr, $rn */
4667 SEM_FN_NAME (sh64_compact,stc_gbr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4669 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4670 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4671 int UNUSED written = 0;
4672 IADDR UNUSED pc = abuf->addr;
4673 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4676 SI opval = GET_H_GBR ();
4677 SET_H_GRC (FLD (f_rn), opval);
4678 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4685 /* stc-vbr-compact: stc vbr, $rn */
4688 SEM_FN_NAME (sh64_compact,stc_vbr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4690 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4691 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4692 int UNUSED written = 0;
4693 IADDR UNUSED pc = abuf->addr;
4694 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4697 SI opval = GET_H_VBR ();
4698 SET_H_GRC (FLD (f_rn), opval);
4699 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4706 /* stcl-gbr-compact: stc.l gbr, @-$rn */
4709 SEM_FN_NAME (sh64_compact,stcl_gbr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4711 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4712 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4713 int UNUSED written = 0;
4714 IADDR UNUSED pc = abuf->addr;
4715 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4719 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4721 SI opval = GET_H_GBR ();
4722 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4723 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4726 SI opval = tmp_addr;
4727 SET_H_GRC (FLD (f_rn), opval);
4728 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4736 /* stcl-vbr-compact: stc.l vbr, @-$rn */
4739 SEM_FN_NAME (sh64_compact,stcl_vbr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4741 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4742 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4743 int UNUSED written = 0;
4744 IADDR UNUSED pc = abuf->addr;
4745 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4749 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4751 SI opval = GET_H_VBR ();
4752 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4753 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4756 SI opval = tmp_addr;
4757 SET_H_GRC (FLD (f_rn), opval);
4758 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4766 /* sts-fpscr-compact: sts fpscr, $rn */
4769 SEM_FN_NAME (sh64_compact,sts_fpscr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4771 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4772 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4773 int UNUSED written = 0;
4774 IADDR UNUSED pc = abuf->addr;
4775 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4778 SI opval = CPU (h_fpscr);
4779 SET_H_GRC (FLD (f_rn), opval);
4780 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4787 /* stsl-fpscr-compact: sts.l fpscr, @-$rn */
4790 SEM_FN_NAME (sh64_compact,stsl_fpscr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4792 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4793 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4794 int UNUSED written = 0;
4795 IADDR UNUSED pc = abuf->addr;
4796 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4800 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4802 SI opval = CPU (h_fpscr);
4803 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4804 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4807 SI opval = tmp_addr;
4808 SET_H_GRC (FLD (f_rn), opval);
4809 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4817 /* sts-fpul-compact: sts fpul, $rn */
4820 SEM_FN_NAME (sh64_compact,sts_fpul_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4822 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4823 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4824 int UNUSED written = 0;
4825 IADDR UNUSED pc = abuf->addr;
4826 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4829 SI opval = SUBWORDSFSI (CPU (h_fr[((UINT) 32)]));
4830 SET_H_GRC (FLD (f_rn), opval);
4831 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4838 /* stsl-fpul-compact: sts.l fpul, @-$rn */
4841 SEM_FN_NAME (sh64_compact,stsl_fpul_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4843 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4844 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4845 int UNUSED written = 0;
4846 IADDR UNUSED pc = abuf->addr;
4847 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4851 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4853 SF opval = CPU (h_fr[((UINT) 32)]);
4854 SETMEMSF (current_cpu, pc, tmp_addr, opval);
4855 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
4858 SI opval = tmp_addr;
4859 SET_H_GRC (FLD (f_rn), opval);
4860 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4868 /* sts-mach-compact: sts mach, $rn */
4871 SEM_FN_NAME (sh64_compact,sts_mach_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4873 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4874 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4875 int UNUSED written = 0;
4876 IADDR UNUSED pc = abuf->addr;
4877 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4880 SI opval = GET_H_MACH ();
4881 SET_H_GRC (FLD (f_rn), opval);
4882 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4889 /* stsl-mach-compact: sts.l mach, @-$rn */
4892 SEM_FN_NAME (sh64_compact,stsl_mach_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4894 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4895 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4896 int UNUSED written = 0;
4897 IADDR UNUSED pc = abuf->addr;
4898 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4902 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4904 SI opval = GET_H_MACH ();
4905 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4906 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4909 SI opval = tmp_addr;
4910 SET_H_GRC (FLD (f_rn), opval);
4911 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4919 /* sts-macl-compact: sts macl, $rn */
4922 SEM_FN_NAME (sh64_compact,sts_macl_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4924 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4925 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4926 int UNUSED written = 0;
4927 IADDR UNUSED pc = abuf->addr;
4928 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4931 SI opval = GET_H_MACL ();
4932 SET_H_GRC (FLD (f_rn), opval);
4933 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4940 /* stsl-macl-compact: sts.l macl, @-$rn */
4943 SEM_FN_NAME (sh64_compact,stsl_macl_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4945 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4946 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4947 int UNUSED written = 0;
4948 IADDR UNUSED pc = abuf->addr;
4949 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4953 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
4955 SI opval = GET_H_MACL ();
4956 SETMEMSI (current_cpu, pc, tmp_addr, opval);
4957 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4960 SI opval = tmp_addr;
4961 SET_H_GRC (FLD (f_rn), opval);
4962 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4970 /* sts-pr-compact: sts pr, $rn */
4973 SEM_FN_NAME (sh64_compact,sts_pr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4975 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4976 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4977 int UNUSED written = 0;
4978 IADDR UNUSED pc = abuf->addr;
4979 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4982 SI opval = GET_H_PR ();
4983 SET_H_GRC (FLD (f_rn), opval);
4984 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
4991 /* stsl-pr-compact: sts.l pr, @-$rn */
4994 SEM_FN_NAME (sh64_compact,stsl_pr_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4996 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4997 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4998 int UNUSED written = 0;
4999 IADDR UNUSED pc = abuf->addr;
5000 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5004 tmp_addr = SUBSI (GET_H_GRC (FLD (f_rn)), 4);
5006 SI opval = GET_H_PR ();
5007 SETMEMSI (current_cpu, pc, tmp_addr, opval);
5008 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5011 SI opval = tmp_addr;
5012 SET_H_GRC (FLD (f_rn), opval);
5013 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5021 /* sub-compact: sub $rm, $rn */
5024 SEM_FN_NAME (sh64_compact,sub_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5026 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5027 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5028 int UNUSED written = 0;
5029 IADDR UNUSED pc = abuf->addr;
5030 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5033 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
5034 SET_H_GRC (FLD (f_rn), opval);
5035 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5042 /* subc-compact: subc $rm, $rn */
5045 SEM_FN_NAME (sh64_compact,subc_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5047 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5048 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5049 int UNUSED written = 0;
5050 IADDR UNUSED pc = abuf->addr;
5051 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5055 tmp_flag = SUBCFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
5057 SI opval = SUBCSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), GET_H_TBIT ());
5058 SET_H_GRC (FLD (f_rn), opval);
5059 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5062 BI opval = tmp_flag;
5064 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5072 /* subv-compact: subv $rm, $rn */
5075 SEM_FN_NAME (sh64_compact,subv_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5077 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5078 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5079 int UNUSED written = 0;
5080 IADDR UNUSED pc = abuf->addr;
5081 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5085 tmp_t = SUBOFSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)), 0);
5087 SI opval = SUBSI (GET_H_GRC (FLD (f_rn)), GET_H_GRC (FLD (f_rm)));
5088 SET_H_GRC (FLD (f_rn), opval);
5089 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5092 BI opval = ((tmp_t) ? (1) : (0));
5094 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5102 /* swapb-compact: swap.b $rm, $rn */
5105 SEM_FN_NAME (sh64_compact,swapb_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5107 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5108 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5109 int UNUSED written = 0;
5110 IADDR UNUSED pc = abuf->addr;
5111 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5117 tmp_top_half = SUBWORDSIHI (GET_H_GRC (FLD (f_rm)), 0);
5118 tmp_byte1 = SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 2);
5119 tmp_byte0 = SUBWORDSIQI (GET_H_GRC (FLD (f_rm)), 3);
5121 SI opval = ORSI (SLLSI (tmp_top_half, 16), ORSI (SLLSI (tmp_byte0, 8), tmp_byte1));
5122 SET_H_GRC (FLD (f_rn), opval);
5123 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5131 /* swapw-compact: swap.w $rm, $rn */
5134 SEM_FN_NAME (sh64_compact,swapw_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5136 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5137 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5138 int UNUSED written = 0;
5139 IADDR UNUSED pc = abuf->addr;
5140 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5143 SI opval = ORSI (SRLSI (GET_H_GRC (FLD (f_rm)), 16), SLLSI (GET_H_GRC (FLD (f_rm)), 16));
5144 SET_H_GRC (FLD (f_rn), opval);
5145 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5152 /* tasb-compact: tas.b @$rn */
5155 SEM_FN_NAME (sh64_compact,tasb_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5157 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
5158 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5159 int UNUSED written = 0;
5160 IADDR UNUSED pc = abuf->addr;
5161 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5165 tmp_byte = GETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)));
5167 BI opval = ((EQQI (tmp_byte, 0)) ? (1) : (0));
5169 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5171 tmp_byte = ORQI (tmp_byte, 128);
5173 UQI opval = tmp_byte;
5174 SETMEMUQI (current_cpu, pc, GET_H_GRC (FLD (f_rn)), opval);
5175 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5183 /* trapa-compact: trapa #$uimm8 */
5186 SEM_FN_NAME (sh64_compact,trapa_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5188 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5189 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5190 int UNUSED written = 0;
5191 IADDR UNUSED pc = abuf->addr;
5192 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5194 sh64_compact_trapa (current_cpu, FLD (f_imm8), pc);
5200 /* tst-compact: tst $rm, $rn */
5203 SEM_FN_NAME (sh64_compact,tst_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5205 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5206 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5207 int UNUSED written = 0;
5208 IADDR UNUSED pc = abuf->addr;
5209 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5212 BI opval = ((EQSI (ANDSI (GET_H_GRC (FLD (f_rm)), GET_H_GRC (FLD (f_rn))), 0)) ? (1) : (0));
5214 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5221 /* tsti-compact: tst #$uimm8, r0 */
5224 SEM_FN_NAME (sh64_compact,tsti_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5226 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5227 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5228 int UNUSED written = 0;
5229 IADDR UNUSED pc = abuf->addr;
5230 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5233 BI opval = ((EQSI (ANDSI (GET_H_GRC (((UINT) 0)), ZEXTSISI (FLD (f_imm8))), 0)) ? (1) : (0));
5235 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5242 /* tstb-compact: tst.b #$imm8, @(r0, gbr) */
5245 SEM_FN_NAME (sh64_compact,tstb_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5247 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5248 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5249 int UNUSED written = 0;
5250 IADDR UNUSED pc = abuf->addr;
5251 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5255 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
5257 BI opval = ((EQQI (ANDQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8)), 0)) ? (1) : (0));
5259 TRACE_RESULT (current_cpu, abuf, "tbit", 'x', opval);
5267 /* xor-compact: xor $rm64, $rn64 */
5270 SEM_FN_NAME (sh64_compact,xor_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5272 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5273 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5274 int UNUSED written = 0;
5275 IADDR UNUSED pc = abuf->addr;
5276 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5279 DI opval = XORDI (GET_H_GR (FLD (f_rn)), GET_H_GR (FLD (f_rm)));
5280 SET_H_GR (FLD (f_rn), opval);
5281 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
5288 /* xori-compact: xor #$uimm8, r0 */
5291 SEM_FN_NAME (sh64_compact,xori_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5293 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5294 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5295 int UNUSED written = 0;
5296 IADDR UNUSED pc = abuf->addr;
5297 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5300 SI opval = XORSI (GET_H_GRC (((UINT) 0)), ZEXTSIDI (FLD (f_imm8)));
5301 SET_H_GRC (((UINT) 0), opval);
5302 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5309 /* xorb-compact: xor.b #$imm8, @(r0, gbr) */
5312 SEM_FN_NAME (sh64_compact,xorb_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5314 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5315 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5316 int UNUSED written = 0;
5317 IADDR UNUSED pc = abuf->addr;
5318 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5323 tmp_addr = ADDSI (GET_H_GRC (((UINT) 0)), GET_H_GBR ());
5324 tmp_data = XORQI (GETMEMUQI (current_cpu, pc, tmp_addr), FLD (f_imm8));
5326 UQI opval = tmp_data;
5327 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5328 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5336 /* xtrct-compact: xtrct $rm, $rn */
5339 SEM_FN_NAME (sh64_compact,xtrct_compact) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5341 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5342 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5343 int UNUSED written = 0;
5344 IADDR UNUSED pc = abuf->addr;
5345 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5348 SI opval = ORSI (SLLSI (GET_H_GRC (FLD (f_rm)), 16), SRLSI (GET_H_GRC (FLD (f_rn)), 16));
5349 SET_H_GRC (FLD (f_rn), opval);
5350 TRACE_RESULT (current_cpu, abuf, "grc", 'x', opval);
5357 /* Table of all semantic fns. */
5359 static const struct sem_fn_desc sem_fns[] = {
5360 { SH64_COMPACT_INSN_X_INVALID, SEM_FN_NAME (sh64_compact,x_invalid) },
5361 { SH64_COMPACT_INSN_X_AFTER, SEM_FN_NAME (sh64_compact,x_after) },
5362 { SH64_COMPACT_INSN_X_BEFORE, SEM_FN_NAME (sh64_compact,x_before) },
5363 { SH64_COMPACT_INSN_X_CTI_CHAIN, SEM_FN_NAME (sh64_compact,x_cti_chain) },
5364 { SH64_COMPACT_INSN_X_CHAIN, SEM_FN_NAME (sh64_compact,x_chain) },
5365 { SH64_COMPACT_INSN_X_BEGIN, SEM_FN_NAME (sh64_compact,x_begin) },
5366 { SH64_COMPACT_INSN_ADD_COMPACT, SEM_FN_NAME (sh64_compact,add_compact) },
5367 { SH64_COMPACT_INSN_ADDI_COMPACT, SEM_FN_NAME (sh64_compact,addi_compact) },
5368 { SH64_COMPACT_INSN_ADDC_COMPACT, SEM_FN_NAME (sh64_compact,addc_compact) },
5369 { SH64_COMPACT_INSN_ADDV_COMPACT, SEM_FN_NAME (sh64_compact,addv_compact) },
5370 { SH64_COMPACT_INSN_AND_COMPACT, SEM_FN_NAME (sh64_compact,and_compact) },
5371 { SH64_COMPACT_INSN_ANDI_COMPACT, SEM_FN_NAME (sh64_compact,andi_compact) },
5372 { SH64_COMPACT_INSN_ANDB_COMPACT, SEM_FN_NAME (sh64_compact,andb_compact) },
5373 { SH64_COMPACT_INSN_BF_COMPACT, SEM_FN_NAME (sh64_compact,bf_compact) },
5374 { SH64_COMPACT_INSN_BFS_COMPACT, SEM_FN_NAME (sh64_compact,bfs_compact) },
5375 { SH64_COMPACT_INSN_BRA_COMPACT, SEM_FN_NAME (sh64_compact,bra_compact) },
5376 { SH64_COMPACT_INSN_BRAF_COMPACT, SEM_FN_NAME (sh64_compact,braf_compact) },
5377 { SH64_COMPACT_INSN_BRK_COMPACT, SEM_FN_NAME (sh64_compact,brk_compact) },
5378 { SH64_COMPACT_INSN_BSR_COMPACT, SEM_FN_NAME (sh64_compact,bsr_compact) },
5379 { SH64_COMPACT_INSN_BSRF_COMPACT, SEM_FN_NAME (sh64_compact,bsrf_compact) },
5380 { SH64_COMPACT_INSN_BT_COMPACT, SEM_FN_NAME (sh64_compact,bt_compact) },
5381 { SH64_COMPACT_INSN_BTS_COMPACT, SEM_FN_NAME (sh64_compact,bts_compact) },
5382 { SH64_COMPACT_INSN_CLRMAC_COMPACT, SEM_FN_NAME (sh64_compact,clrmac_compact) },
5383 { SH64_COMPACT_INSN_CLRS_COMPACT, SEM_FN_NAME (sh64_compact,clrs_compact) },
5384 { SH64_COMPACT_INSN_CLRT_COMPACT, SEM_FN_NAME (sh64_compact,clrt_compact) },
5385 { SH64_COMPACT_INSN_CMPEQ_COMPACT, SEM_FN_NAME (sh64_compact,cmpeq_compact) },
5386 { SH64_COMPACT_INSN_CMPEQI_COMPACT, SEM_FN_NAME (sh64_compact,cmpeqi_compact) },
5387 { SH64_COMPACT_INSN_CMPGE_COMPACT, SEM_FN_NAME (sh64_compact,cmpge_compact) },
5388 { SH64_COMPACT_INSN_CMPGT_COMPACT, SEM_FN_NAME (sh64_compact,cmpgt_compact) },
5389 { SH64_COMPACT_INSN_CMPHI_COMPACT, SEM_FN_NAME (sh64_compact,cmphi_compact) },
5390 { SH64_COMPACT_INSN_CMPHS_COMPACT, SEM_FN_NAME (sh64_compact,cmphs_compact) },
5391 { SH64_COMPACT_INSN_CMPPL_COMPACT, SEM_FN_NAME (sh64_compact,cmppl_compact) },
5392 { SH64_COMPACT_INSN_CMPPZ_COMPACT, SEM_FN_NAME (sh64_compact,cmppz_compact) },
5393 { SH64_COMPACT_INSN_CMPSTR_COMPACT, SEM_FN_NAME (sh64_compact,cmpstr_compact) },
5394 { SH64_COMPACT_INSN_DIV0S_COMPACT, SEM_FN_NAME (sh64_compact,div0s_compact) },
5395 { SH64_COMPACT_INSN_DIV0U_COMPACT, SEM_FN_NAME (sh64_compact,div0u_compact) },
5396 { SH64_COMPACT_INSN_DIV1_COMPACT, SEM_FN_NAME (sh64_compact,div1_compact) },
5397 { SH64_COMPACT_INSN_DIVU_COMPACT, SEM_FN_NAME (sh64_compact,divu_compact) },
5398 { SH64_COMPACT_INSN_MULR_COMPACT, SEM_FN_NAME (sh64_compact,mulr_compact) },
5399 { SH64_COMPACT_INSN_DMULSL_COMPACT, SEM_FN_NAME (sh64_compact,dmulsl_compact) },
5400 { SH64_COMPACT_INSN_DMULUL_COMPACT, SEM_FN_NAME (sh64_compact,dmulul_compact) },
5401 { SH64_COMPACT_INSN_DT_COMPACT, SEM_FN_NAME (sh64_compact,dt_compact) },
5402 { SH64_COMPACT_INSN_EXTSB_COMPACT, SEM_FN_NAME (sh64_compact,extsb_compact) },
5403 { SH64_COMPACT_INSN_EXTSW_COMPACT, SEM_FN_NAME (sh64_compact,extsw_compact) },
5404 { SH64_COMPACT_INSN_EXTUB_COMPACT, SEM_FN_NAME (sh64_compact,extub_compact) },
5405 { SH64_COMPACT_INSN_EXTUW_COMPACT, SEM_FN_NAME (sh64_compact,extuw_compact) },
5406 { SH64_COMPACT_INSN_FABS_COMPACT, SEM_FN_NAME (sh64_compact,fabs_compact) },
5407 { SH64_COMPACT_INSN_FADD_COMPACT, SEM_FN_NAME (sh64_compact,fadd_compact) },
5408 { SH64_COMPACT_INSN_FCMPEQ_COMPACT, SEM_FN_NAME (sh64_compact,fcmpeq_compact) },
5409 { SH64_COMPACT_INSN_FCMPGT_COMPACT, SEM_FN_NAME (sh64_compact,fcmpgt_compact) },
5410 { SH64_COMPACT_INSN_FCNVDS_COMPACT, SEM_FN_NAME (sh64_compact,fcnvds_compact) },
5411 { SH64_COMPACT_INSN_FCNVSD_COMPACT, SEM_FN_NAME (sh64_compact,fcnvsd_compact) },
5412 { SH64_COMPACT_INSN_FDIV_COMPACT, SEM_FN_NAME (sh64_compact,fdiv_compact) },
5413 { SH64_COMPACT_INSN_FIPR_COMPACT, SEM_FN_NAME (sh64_compact,fipr_compact) },
5414 { SH64_COMPACT_INSN_FLDS_COMPACT, SEM_FN_NAME (sh64_compact,flds_compact) },
5415 { SH64_COMPACT_INSN_FLDI0_COMPACT, SEM_FN_NAME (sh64_compact,fldi0_compact) },
5416 { SH64_COMPACT_INSN_FLDI1_COMPACT, SEM_FN_NAME (sh64_compact,fldi1_compact) },
5417 { SH64_COMPACT_INSN_FLOAT_COMPACT, SEM_FN_NAME (sh64_compact,float_compact) },
5418 { SH64_COMPACT_INSN_FMAC_COMPACT, SEM_FN_NAME (sh64_compact,fmac_compact) },
5419 { SH64_COMPACT_INSN_FMOV1_COMPACT, SEM_FN_NAME (sh64_compact,fmov1_compact) },
5420 { SH64_COMPACT_INSN_FMOV2_COMPACT, SEM_FN_NAME (sh64_compact,fmov2_compact) },
5421 { SH64_COMPACT_INSN_FMOV3_COMPACT, SEM_FN_NAME (sh64_compact,fmov3_compact) },
5422 { SH64_COMPACT_INSN_FMOV4_COMPACT, SEM_FN_NAME (sh64_compact,fmov4_compact) },
5423 { SH64_COMPACT_INSN_FMOV5_COMPACT, SEM_FN_NAME (sh64_compact,fmov5_compact) },
5424 { SH64_COMPACT_INSN_FMOV6_COMPACT, SEM_FN_NAME (sh64_compact,fmov6_compact) },
5425 { SH64_COMPACT_INSN_FMOV7_COMPACT, SEM_FN_NAME (sh64_compact,fmov7_compact) },
5426 { SH64_COMPACT_INSN_FMOV8_COMPACT, SEM_FN_NAME (sh64_compact,fmov8_compact) },
5427 { SH64_COMPACT_INSN_FMOV9_COMPACT, SEM_FN_NAME (sh64_compact,fmov9_compact) },
5428 { SH64_COMPACT_INSN_FMUL_COMPACT, SEM_FN_NAME (sh64_compact,fmul_compact) },
5429 { SH64_COMPACT_INSN_FNEG_COMPACT, SEM_FN_NAME (sh64_compact,fneg_compact) },
5430 { SH64_COMPACT_INSN_FRCHG_COMPACT, SEM_FN_NAME (sh64_compact,frchg_compact) },
5431 { SH64_COMPACT_INSN_FSCHG_COMPACT, SEM_FN_NAME (sh64_compact,fschg_compact) },
5432 { SH64_COMPACT_INSN_FSQRT_COMPACT, SEM_FN_NAME (sh64_compact,fsqrt_compact) },
5433 { SH64_COMPACT_INSN_FSTS_COMPACT, SEM_FN_NAME (sh64_compact,fsts_compact) },
5434 { SH64_COMPACT_INSN_FSUB_COMPACT, SEM_FN_NAME (sh64_compact,fsub_compact) },
5435 { SH64_COMPACT_INSN_FTRC_COMPACT, SEM_FN_NAME (sh64_compact,ftrc_compact) },
5436 { SH64_COMPACT_INSN_FTRV_COMPACT, SEM_FN_NAME (sh64_compact,ftrv_compact) },
5437 { SH64_COMPACT_INSN_JMP_COMPACT, SEM_FN_NAME (sh64_compact,jmp_compact) },
5438 { SH64_COMPACT_INSN_JSR_COMPACT, SEM_FN_NAME (sh64_compact,jsr_compact) },
5439 { SH64_COMPACT_INSN_LDC_GBR_COMPACT, SEM_FN_NAME (sh64_compact,ldc_gbr_compact) },
5440 { SH64_COMPACT_INSN_LDC_VBR_COMPACT, SEM_FN_NAME (sh64_compact,ldc_vbr_compact) },
5441 { SH64_COMPACT_INSN_LDC_SR_COMPACT, SEM_FN_NAME (sh64_compact,ldc_sr_compact) },
5442 { SH64_COMPACT_INSN_LDCL_GBR_COMPACT, SEM_FN_NAME (sh64_compact,ldcl_gbr_compact) },
5443 { SH64_COMPACT_INSN_LDCL_VBR_COMPACT, SEM_FN_NAME (sh64_compact,ldcl_vbr_compact) },
5444 { SH64_COMPACT_INSN_LDS_FPSCR_COMPACT, SEM_FN_NAME (sh64_compact,lds_fpscr_compact) },
5445 { SH64_COMPACT_INSN_LDSL_FPSCR_COMPACT, SEM_FN_NAME (sh64_compact,ldsl_fpscr_compact) },
5446 { SH64_COMPACT_INSN_LDS_FPUL_COMPACT, SEM_FN_NAME (sh64_compact,lds_fpul_compact) },
5447 { SH64_COMPACT_INSN_LDSL_FPUL_COMPACT, SEM_FN_NAME (sh64_compact,ldsl_fpul_compact) },
5448 { SH64_COMPACT_INSN_LDS_MACH_COMPACT, SEM_FN_NAME (sh64_compact,lds_mach_compact) },
5449 { SH64_COMPACT_INSN_LDSL_MACH_COMPACT, SEM_FN_NAME (sh64_compact,ldsl_mach_compact) },
5450 { SH64_COMPACT_INSN_LDS_MACL_COMPACT, SEM_FN_NAME (sh64_compact,lds_macl_compact) },
5451 { SH64_COMPACT_INSN_LDSL_MACL_COMPACT, SEM_FN_NAME (sh64_compact,ldsl_macl_compact) },
5452 { SH64_COMPACT_INSN_LDS_PR_COMPACT, SEM_FN_NAME (sh64_compact,lds_pr_compact) },
5453 { SH64_COMPACT_INSN_LDSL_PR_COMPACT, SEM_FN_NAME (sh64_compact,ldsl_pr_compact) },
5454 { SH64_COMPACT_INSN_MACL_COMPACT, SEM_FN_NAME (sh64_compact,macl_compact) },
5455 { SH64_COMPACT_INSN_MACW_COMPACT, SEM_FN_NAME (sh64_compact,macw_compact) },
5456 { SH64_COMPACT_INSN_MOV_COMPACT, SEM_FN_NAME (sh64_compact,mov_compact) },
5457 { SH64_COMPACT_INSN_MOVI_COMPACT, SEM_FN_NAME (sh64_compact,movi_compact) },
5458 { SH64_COMPACT_INSN_MOVI20_COMPACT, SEM_FN_NAME (sh64_compact,movi20_compact) },
5459 { SH64_COMPACT_INSN_MOVB1_COMPACT, SEM_FN_NAME (sh64_compact,movb1_compact) },
5460 { SH64_COMPACT_INSN_MOVB2_COMPACT, SEM_FN_NAME (sh64_compact,movb2_compact) },
5461 { SH64_COMPACT_INSN_MOVB3_COMPACT, SEM_FN_NAME (sh64_compact,movb3_compact) },
5462 { SH64_COMPACT_INSN_MOVB4_COMPACT, SEM_FN_NAME (sh64_compact,movb4_compact) },
5463 { SH64_COMPACT_INSN_MOVB5_COMPACT, SEM_FN_NAME (sh64_compact,movb5_compact) },
5464 { SH64_COMPACT_INSN_MOVB6_COMPACT, SEM_FN_NAME (sh64_compact,movb6_compact) },
5465 { SH64_COMPACT_INSN_MOVB7_COMPACT, SEM_FN_NAME (sh64_compact,movb7_compact) },
5466 { SH64_COMPACT_INSN_MOVB8_COMPACT, SEM_FN_NAME (sh64_compact,movb8_compact) },
5467 { SH64_COMPACT_INSN_MOVB9_COMPACT, SEM_FN_NAME (sh64_compact,movb9_compact) },
5468 { SH64_COMPACT_INSN_MOVB10_COMPACT, SEM_FN_NAME (sh64_compact,movb10_compact) },
5469 { SH64_COMPACT_INSN_MOVL1_COMPACT, SEM_FN_NAME (sh64_compact,movl1_compact) },
5470 { SH64_COMPACT_INSN_MOVL2_COMPACT, SEM_FN_NAME (sh64_compact,movl2_compact) },
5471 { SH64_COMPACT_INSN_MOVL3_COMPACT, SEM_FN_NAME (sh64_compact,movl3_compact) },
5472 { SH64_COMPACT_INSN_MOVL4_COMPACT, SEM_FN_NAME (sh64_compact,movl4_compact) },
5473 { SH64_COMPACT_INSN_MOVL5_COMPACT, SEM_FN_NAME (sh64_compact,movl5_compact) },
5474 { SH64_COMPACT_INSN_MOVL6_COMPACT, SEM_FN_NAME (sh64_compact,movl6_compact) },
5475 { SH64_COMPACT_INSN_MOVL7_COMPACT, SEM_FN_NAME (sh64_compact,movl7_compact) },
5476 { SH64_COMPACT_INSN_MOVL8_COMPACT, SEM_FN_NAME (sh64_compact,movl8_compact) },
5477 { SH64_COMPACT_INSN_MOVL9_COMPACT, SEM_FN_NAME (sh64_compact,movl9_compact) },
5478 { SH64_COMPACT_INSN_MOVL10_COMPACT, SEM_FN_NAME (sh64_compact,movl10_compact) },
5479 { SH64_COMPACT_INSN_MOVL11_COMPACT, SEM_FN_NAME (sh64_compact,movl11_compact) },
5480 { SH64_COMPACT_INSN_MOVL12_COMPACT, SEM_FN_NAME (sh64_compact,movl12_compact) },
5481 { SH64_COMPACT_INSN_MOVL13_COMPACT, SEM_FN_NAME (sh64_compact,movl13_compact) },
5482 { SH64_COMPACT_INSN_MOVW1_COMPACT, SEM_FN_NAME (sh64_compact,movw1_compact) },
5483 { SH64_COMPACT_INSN_MOVW2_COMPACT, SEM_FN_NAME (sh64_compact,movw2_compact) },
5484 { SH64_COMPACT_INSN_MOVW3_COMPACT, SEM_FN_NAME (sh64_compact,movw3_compact) },
5485 { SH64_COMPACT_INSN_MOVW4_COMPACT, SEM_FN_NAME (sh64_compact,movw4_compact) },
5486 { SH64_COMPACT_INSN_MOVW5_COMPACT, SEM_FN_NAME (sh64_compact,movw5_compact) },
5487 { SH64_COMPACT_INSN_MOVW6_COMPACT, SEM_FN_NAME (sh64_compact,movw6_compact) },
5488 { SH64_COMPACT_INSN_MOVW7_COMPACT, SEM_FN_NAME (sh64_compact,movw7_compact) },
5489 { SH64_COMPACT_INSN_MOVW8_COMPACT, SEM_FN_NAME (sh64_compact,movw8_compact) },
5490 { SH64_COMPACT_INSN_MOVW9_COMPACT, SEM_FN_NAME (sh64_compact,movw9_compact) },
5491 { SH64_COMPACT_INSN_MOVW10_COMPACT, SEM_FN_NAME (sh64_compact,movw10_compact) },
5492 { SH64_COMPACT_INSN_MOVW11_COMPACT, SEM_FN_NAME (sh64_compact,movw11_compact) },
5493 { SH64_COMPACT_INSN_MOVA_COMPACT, SEM_FN_NAME (sh64_compact,mova_compact) },
5494 { SH64_COMPACT_INSN_MOVCAL_COMPACT, SEM_FN_NAME (sh64_compact,movcal_compact) },
5495 { SH64_COMPACT_INSN_MOVCOL_COMPACT, SEM_FN_NAME (sh64_compact,movcol_compact) },
5496 { SH64_COMPACT_INSN_MOVT_COMPACT, SEM_FN_NAME (sh64_compact,movt_compact) },
5497 { SH64_COMPACT_INSN_MOVUAL_COMPACT, SEM_FN_NAME (sh64_compact,movual_compact) },
5498 { SH64_COMPACT_INSN_MOVUAL2_COMPACT, SEM_FN_NAME (sh64_compact,movual2_compact) },
5499 { SH64_COMPACT_INSN_MULL_COMPACT, SEM_FN_NAME (sh64_compact,mull_compact) },
5500 { SH64_COMPACT_INSN_MULSW_COMPACT, SEM_FN_NAME (sh64_compact,mulsw_compact) },
5501 { SH64_COMPACT_INSN_MULUW_COMPACT, SEM_FN_NAME (sh64_compact,muluw_compact) },
5502 { SH64_COMPACT_INSN_NEG_COMPACT, SEM_FN_NAME (sh64_compact,neg_compact) },
5503 { SH64_COMPACT_INSN_NEGC_COMPACT, SEM_FN_NAME (sh64_compact,negc_compact) },
5504 { SH64_COMPACT_INSN_NOP_COMPACT, SEM_FN_NAME (sh64_compact,nop_compact) },
5505 { SH64_COMPACT_INSN_NOT_COMPACT, SEM_FN_NAME (sh64_compact,not_compact) },
5506 { SH64_COMPACT_INSN_OCBI_COMPACT, SEM_FN_NAME (sh64_compact,ocbi_compact) },
5507 { SH64_COMPACT_INSN_OCBP_COMPACT, SEM_FN_NAME (sh64_compact,ocbp_compact) },
5508 { SH64_COMPACT_INSN_OCBWB_COMPACT, SEM_FN_NAME (sh64_compact,ocbwb_compact) },
5509 { SH64_COMPACT_INSN_OR_COMPACT, SEM_FN_NAME (sh64_compact,or_compact) },
5510 { SH64_COMPACT_INSN_ORI_COMPACT, SEM_FN_NAME (sh64_compact,ori_compact) },
5511 { SH64_COMPACT_INSN_ORB_COMPACT, SEM_FN_NAME (sh64_compact,orb_compact) },
5512 { SH64_COMPACT_INSN_PREF_COMPACT, SEM_FN_NAME (sh64_compact,pref_compact) },
5513 { SH64_COMPACT_INSN_ROTCL_COMPACT, SEM_FN_NAME (sh64_compact,rotcl_compact) },
5514 { SH64_COMPACT_INSN_ROTCR_COMPACT, SEM_FN_NAME (sh64_compact,rotcr_compact) },
5515 { SH64_COMPACT_INSN_ROTL_COMPACT, SEM_FN_NAME (sh64_compact,rotl_compact) },
5516 { SH64_COMPACT_INSN_ROTR_COMPACT, SEM_FN_NAME (sh64_compact,rotr_compact) },
5517 { SH64_COMPACT_INSN_RTS_COMPACT, SEM_FN_NAME (sh64_compact,rts_compact) },
5518 { SH64_COMPACT_INSN_SETS_COMPACT, SEM_FN_NAME (sh64_compact,sets_compact) },
5519 { SH64_COMPACT_INSN_SETT_COMPACT, SEM_FN_NAME (sh64_compact,sett_compact) },
5520 { SH64_COMPACT_INSN_SHAD_COMPACT, SEM_FN_NAME (sh64_compact,shad_compact) },
5521 { SH64_COMPACT_INSN_SHAL_COMPACT, SEM_FN_NAME (sh64_compact,shal_compact) },
5522 { SH64_COMPACT_INSN_SHAR_COMPACT, SEM_FN_NAME (sh64_compact,shar_compact) },
5523 { SH64_COMPACT_INSN_SHLD_COMPACT, SEM_FN_NAME (sh64_compact,shld_compact) },
5524 { SH64_COMPACT_INSN_SHLL_COMPACT, SEM_FN_NAME (sh64_compact,shll_compact) },
5525 { SH64_COMPACT_INSN_SHLL2_COMPACT, SEM_FN_NAME (sh64_compact,shll2_compact) },
5526 { SH64_COMPACT_INSN_SHLL8_COMPACT, SEM_FN_NAME (sh64_compact,shll8_compact) },
5527 { SH64_COMPACT_INSN_SHLL16_COMPACT, SEM_FN_NAME (sh64_compact,shll16_compact) },
5528 { SH64_COMPACT_INSN_SHLR_COMPACT, SEM_FN_NAME (sh64_compact,shlr_compact) },
5529 { SH64_COMPACT_INSN_SHLR2_COMPACT, SEM_FN_NAME (sh64_compact,shlr2_compact) },
5530 { SH64_COMPACT_INSN_SHLR8_COMPACT, SEM_FN_NAME (sh64_compact,shlr8_compact) },
5531 { SH64_COMPACT_INSN_SHLR16_COMPACT, SEM_FN_NAME (sh64_compact,shlr16_compact) },
5532 { SH64_COMPACT_INSN_STC_GBR_COMPACT, SEM_FN_NAME (sh64_compact,stc_gbr_compact) },
5533 { SH64_COMPACT_INSN_STC_VBR_COMPACT, SEM_FN_NAME (sh64_compact,stc_vbr_compact) },
5534 { SH64_COMPACT_INSN_STCL_GBR_COMPACT, SEM_FN_NAME (sh64_compact,stcl_gbr_compact) },
5535 { SH64_COMPACT_INSN_STCL_VBR_COMPACT, SEM_FN_NAME (sh64_compact,stcl_vbr_compact) },
5536 { SH64_COMPACT_INSN_STS_FPSCR_COMPACT, SEM_FN_NAME (sh64_compact,sts_fpscr_compact) },
5537 { SH64_COMPACT_INSN_STSL_FPSCR_COMPACT, SEM_FN_NAME (sh64_compact,stsl_fpscr_compact) },
5538 { SH64_COMPACT_INSN_STS_FPUL_COMPACT, SEM_FN_NAME (sh64_compact,sts_fpul_compact) },
5539 { SH64_COMPACT_INSN_STSL_FPUL_COMPACT, SEM_FN_NAME (sh64_compact,stsl_fpul_compact) },
5540 { SH64_COMPACT_INSN_STS_MACH_COMPACT, SEM_FN_NAME (sh64_compact,sts_mach_compact) },
5541 { SH64_COMPACT_INSN_STSL_MACH_COMPACT, SEM_FN_NAME (sh64_compact,stsl_mach_compact) },
5542 { SH64_COMPACT_INSN_STS_MACL_COMPACT, SEM_FN_NAME (sh64_compact,sts_macl_compact) },
5543 { SH64_COMPACT_INSN_STSL_MACL_COMPACT, SEM_FN_NAME (sh64_compact,stsl_macl_compact) },
5544 { SH64_COMPACT_INSN_STS_PR_COMPACT, SEM_FN_NAME (sh64_compact,sts_pr_compact) },
5545 { SH64_COMPACT_INSN_STSL_PR_COMPACT, SEM_FN_NAME (sh64_compact,stsl_pr_compact) },
5546 { SH64_COMPACT_INSN_SUB_COMPACT, SEM_FN_NAME (sh64_compact,sub_compact) },
5547 { SH64_COMPACT_INSN_SUBC_COMPACT, SEM_FN_NAME (sh64_compact,subc_compact) },
5548 { SH64_COMPACT_INSN_SUBV_COMPACT, SEM_FN_NAME (sh64_compact,subv_compact) },
5549 { SH64_COMPACT_INSN_SWAPB_COMPACT, SEM_FN_NAME (sh64_compact,swapb_compact) },
5550 { SH64_COMPACT_INSN_SWAPW_COMPACT, SEM_FN_NAME (sh64_compact,swapw_compact) },
5551 { SH64_COMPACT_INSN_TASB_COMPACT, SEM_FN_NAME (sh64_compact,tasb_compact) },
5552 { SH64_COMPACT_INSN_TRAPA_COMPACT, SEM_FN_NAME (sh64_compact,trapa_compact) },
5553 { SH64_COMPACT_INSN_TST_COMPACT, SEM_FN_NAME (sh64_compact,tst_compact) },
5554 { SH64_COMPACT_INSN_TSTI_COMPACT, SEM_FN_NAME (sh64_compact,tsti_compact) },
5555 { SH64_COMPACT_INSN_TSTB_COMPACT, SEM_FN_NAME (sh64_compact,tstb_compact) },
5556 { SH64_COMPACT_INSN_XOR_COMPACT, SEM_FN_NAME (sh64_compact,xor_compact) },
5557 { SH64_COMPACT_INSN_XORI_COMPACT, SEM_FN_NAME (sh64_compact,xori_compact) },
5558 { SH64_COMPACT_INSN_XORB_COMPACT, SEM_FN_NAME (sh64_compact,xorb_compact) },
5559 { SH64_COMPACT_INSN_XTRCT_COMPACT, SEM_FN_NAME (sh64_compact,xtrct_compact) },
5563 /* Add the semantic fns to IDESC_TABLE. */
5566 SEM_FN_NAME (sh64_compact,init_idesc_table) (SIM_CPU *current_cpu)
5568 IDESC *idesc_table = CPU_IDESC (current_cpu);
5569 const struct sem_fn_desc *sf;
5570 int mach_num = MACH_NUM (CPU_MACH (current_cpu));
5572 for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
5574 const CGEN_INSN *insn = idesc_table[sf->index].idata;
5575 int valid_p = (CGEN_INSN_VIRTUAL_P (insn)
5576 || CGEN_INSN_MACH_HAS_P (insn, mach_num));
5579 idesc_table[sf->index].sem_fast = sf->fn;
5581 idesc_table[sf->index].sem_fast = SEM_FN_NAME (sh64_compact,x_invalid);
5584 idesc_table[sf->index].sem_full = sf->fn;
5586 idesc_table[sf->index].sem_full = SEM_FN_NAME (sh64_compact,x_invalid);