1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2010 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
);