1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2005 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
32 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
33 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
35 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
38 /* This is used so that we can compile two copies of the semantic code,
39 one with full feature support and one without that runs fast(er).
40 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */
42 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
44 #define TRACE_RESULT(cpu, abuf, name, type, val)
46 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
49 /* x-invalid: --invalid-- */
52 SEM_FN_NAME (sh64_compact
,x_invalid
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
54 #define FLD(f) abuf->fields.fmt_empty.f
55 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
56 int UNUSED written
= 0;
57 IADDR UNUSED pc
= abuf
->addr
;
58 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
61 /* Update the recorded pc in the cpu state struct.
62 Only necessary for WITH_SCACHE case, but to avoid the
63 conditional compilation .... */
65 /* Virtual insns have zero size. Overwrite vpc with address of next insn
66 using the default-insn-bitsize spec. When executing insns in parallel
67 we may want to queue the fault and continue execution. */
68 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
69 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
76 /* x-after: --after-- */
79 SEM_FN_NAME (sh64_compact
,x_after
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
81 #define FLD(f) abuf->fields.fmt_empty.f
82 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
83 int UNUSED written
= 0;
84 IADDR UNUSED pc
= abuf
->addr
;
85 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
88 #if WITH_SCACHE_PBB_SH64_COMPACT
89 sh64_compact_pbb_after (current_cpu
, sem_arg
);
97 /* x-before: --before-- */
100 SEM_FN_NAME (sh64_compact
,x_before
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
102 #define FLD(f) abuf->fields.fmt_empty.f
103 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
104 int UNUSED written
= 0;
105 IADDR UNUSED pc
= abuf
->addr
;
106 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
109 #if WITH_SCACHE_PBB_SH64_COMPACT
110 sh64_compact_pbb_before (current_cpu
, sem_arg
);
118 /* x-cti-chain: --cti-chain-- */
121 SEM_FN_NAME (sh64_compact
,x_cti_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
123 #define FLD(f) abuf->fields.fmt_empty.f
124 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
125 int UNUSED written
= 0;
126 IADDR UNUSED pc
= abuf
->addr
;
127 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
130 #if WITH_SCACHE_PBB_SH64_COMPACT
132 vpc
= sh64_compact_pbb_cti_chain (current_cpu
, sem_arg
,
133 pbb_br_type
, pbb_br_npc
);
136 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
137 vpc
= sh64_compact_pbb_cti_chain (current_cpu
, sem_arg
,
138 CPU_PBB_BR_TYPE (current_cpu
),
139 CPU_PBB_BR_NPC (current_cpu
));
148 /* x-chain: --chain-- */
151 SEM_FN_NAME (sh64_compact
,x_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
153 #define FLD(f) abuf->fields.fmt_empty.f
154 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
155 int UNUSED written
= 0;
156 IADDR UNUSED pc
= abuf
->addr
;
157 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
160 #if WITH_SCACHE_PBB_SH64_COMPACT
161 vpc
= sh64_compact_pbb_chain (current_cpu
, sem_arg
);
172 /* x-begin: --begin-- */
175 SEM_FN_NAME (sh64_compact
,x_begin
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
177 #define FLD(f) abuf->fields.fmt_empty.f
178 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
179 int UNUSED written
= 0;
180 IADDR UNUSED pc
= abuf
->addr
;
181 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
184 #if WITH_SCACHE_PBB_SH64_COMPACT
185 #if defined DEFINE_SWITCH || defined FAST_P
186 /* In the switch case FAST_P is a constant, allowing several optimizations
187 in any called inline functions. */
188 vpc
= sh64_compact_pbb_begin (current_cpu
, FAST_P
);
190 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
191 vpc
= sh64_compact_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
193 vpc
= sh64_compact_pbb_begin (current_cpu
, 0);
203 /* add-compact: add $rm, $rn */
206 SEM_FN_NAME (sh64_compact
,add_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
208 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
209 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
210 int UNUSED written
= 0;
211 IADDR UNUSED pc
= abuf
->addr
;
212 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
215 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
216 SET_H_GRC (FLD (f_rn
), opval
);
217 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
224 /* addi-compact: add #$imm8, $rn */
227 SEM_FN_NAME (sh64_compact
,addi_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
229 #define FLD(f) abuf->fields.sfmt_addi_compact.f
230 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
231 int UNUSED written
= 0;
232 IADDR UNUSED pc
= abuf
->addr
;
233 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
236 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), EXTQISI (ANDQI (FLD (f_imm8
), 255)));
237 SET_H_GRC (FLD (f_rn
), opval
);
238 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
245 /* addc-compact: addc $rm, $rn */
248 SEM_FN_NAME (sh64_compact
,addc_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
250 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
251 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
252 int UNUSED written
= 0;
253 IADDR UNUSED pc
= abuf
->addr
;
254 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
258 tmp_flag
= ADDCFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
260 SI opval
= ADDCSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
261 SET_H_GRC (FLD (f_rn
), opval
);
262 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
267 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
275 /* addv-compact: addv $rm, $rn */
278 SEM_FN_NAME (sh64_compact
,addv_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
280 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
281 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
282 int UNUSED written
= 0;
283 IADDR UNUSED pc
= abuf
->addr
;
284 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
288 tmp_t
= ADDOFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), 0);
290 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
291 SET_H_GRC (FLD (f_rn
), opval
);
292 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
297 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
305 /* and-compact: and $rm64, $rn64 */
308 SEM_FN_NAME (sh64_compact
,and_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
310 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
311 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
312 int UNUSED written
= 0;
313 IADDR UNUSED pc
= abuf
->addr
;
314 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
317 DI opval
= ANDDI (GET_H_GR (FLD (f_rm
)), GET_H_GR (FLD (f_rn
)));
318 SET_H_GR (FLD (f_rn
), opval
);
319 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
326 /* andi-compact: and #$uimm8, r0 */
329 SEM_FN_NAME (sh64_compact
,andi_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
331 #define FLD(f) abuf->fields.sfmt_addi_compact.f
332 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
333 int UNUSED written
= 0;
334 IADDR UNUSED pc
= abuf
->addr
;
335 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
338 SI opval
= ANDSI (GET_H_GRC (((UINT
) 0)), ZEXTSIDI (FLD (f_imm8
)));
339 SET_H_GRC (((UINT
) 0), opval
);
340 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
347 /* andb-compact: and.b #$imm8, @(r0, gbr) */
350 SEM_FN_NAME (sh64_compact
,andb_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
352 #define FLD(f) abuf->fields.sfmt_addi_compact.f
353 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
354 int UNUSED written
= 0;
355 IADDR UNUSED pc
= abuf
->addr
;
356 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
361 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
362 tmp_data
= ANDQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
));
364 UQI opval
= tmp_data
;
365 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
366 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
374 /* bf-compact: bf $disp8 */
377 SEM_FN_NAME (sh64_compact
,bf_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
379 #define FLD(f) abuf->fields.sfmt_bf_compact.f
380 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
381 int UNUSED written
= 0;
382 IADDR UNUSED pc
= abuf
->addr
;
384 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
386 if (NOTBI (GET_H_TBIT ())) {
388 UDI opval
= FLD (i_disp8
);
389 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
391 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
395 abuf
->written
= written
;
396 SEM_BRANCH_FINI (vpc
);
401 /* bfs-compact: bf/s $disp8 */
404 SEM_FN_NAME (sh64_compact
,bfs_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
406 #define FLD(f) abuf->fields.sfmt_bf_compact.f
407 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
408 int UNUSED written
= 0;
409 IADDR UNUSED pc
= abuf
->addr
;
411 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
413 if (NOTBI (GET_H_TBIT ())) {
416 UDI opval
= ADDDI (pc
, 2);
417 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
419 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
424 UDI opval
= FLD (i_disp8
);
425 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
427 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
433 abuf
->written
= written
;
434 SEM_BRANCH_FINI (vpc
);
439 /* bra-compact: bra $disp12 */
442 SEM_FN_NAME (sh64_compact
,bra_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
444 #define FLD(f) abuf->fields.sfmt_bra_compact.f
445 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
446 int UNUSED written
= 0;
447 IADDR UNUSED pc
= abuf
->addr
;
449 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
453 UDI opval
= ADDDI (pc
, 2);
454 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
455 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
460 UDI opval
= FLD (i_disp12
);
461 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
462 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
467 SEM_BRANCH_FINI (vpc
);
472 /* braf-compact: braf $rn */
475 SEM_FN_NAME (sh64_compact
,braf_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
477 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
478 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
479 int UNUSED written
= 0;
480 IADDR UNUSED pc
= abuf
->addr
;
482 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
486 UDI opval
= ADDDI (pc
, 2);
487 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
488 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
493 UDI opval
= ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn
))), ADDDI (pc
, 4));
494 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
495 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
500 SEM_BRANCH_FINI (vpc
);
505 /* brk-compact: brk */
508 SEM_FN_NAME (sh64_compact
,brk_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
510 #define FLD(f) abuf->fields.fmt_empty.f
511 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
512 int UNUSED written
= 0;
513 IADDR UNUSED pc
= abuf
->addr
;
514 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
516 sh64_break (current_cpu
, pc
);
522 /* bsr-compact: bsr $disp12 */
525 SEM_FN_NAME (sh64_compact
,bsr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
527 #define FLD(f) abuf->fields.sfmt_bra_compact.f
528 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
529 int UNUSED written
= 0;
530 IADDR UNUSED pc
= abuf
->addr
;
532 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
537 SI opval
= ADDDI (pc
, 4);
539 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
543 UDI opval
= ADDDI (pc
, 2);
544 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
545 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
550 UDI opval
= FLD (i_disp12
);
551 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
552 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
557 SEM_BRANCH_FINI (vpc
);
562 /* bsrf-compact: bsrf $rn */
565 SEM_FN_NAME (sh64_compact
,bsrf_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
567 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
568 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
569 int UNUSED written
= 0;
570 IADDR UNUSED pc
= abuf
->addr
;
572 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
577 SI opval
= ADDDI (pc
, 4);
579 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
583 UDI opval
= ADDDI (pc
, 2);
584 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
585 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
590 UDI opval
= ADDDI (EXTSIDI (GET_H_GRC (FLD (f_rn
))), ADDDI (pc
, 4));
591 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
592 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
597 SEM_BRANCH_FINI (vpc
);
602 /* bt-compact: bt $disp8 */
605 SEM_FN_NAME (sh64_compact
,bt_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
607 #define FLD(f) abuf->fields.sfmt_bf_compact.f
608 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
609 int UNUSED written
= 0;
610 IADDR UNUSED pc
= abuf
->addr
;
612 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
616 UDI opval
= FLD (i_disp8
);
617 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
619 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
623 abuf
->written
= written
;
624 SEM_BRANCH_FINI (vpc
);
629 /* bts-compact: bt/s $disp8 */
632 SEM_FN_NAME (sh64_compact
,bts_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
634 #define FLD(f) abuf->fields.sfmt_bf_compact.f
635 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
636 int UNUSED written
= 0;
637 IADDR UNUSED pc
= abuf
->addr
;
639 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
644 UDI opval
= ADDDI (pc
, 2);
645 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
647 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
652 UDI opval
= FLD (i_disp8
);
653 SEM_BRANCH_VIA_CACHE (current_cpu
, sem_arg
, opval
, vpc
);
655 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
661 abuf
->written
= written
;
662 SEM_BRANCH_FINI (vpc
);
667 /* clrmac-compact: clrmac */
670 SEM_FN_NAME (sh64_compact
,clrmac_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
672 #define FLD(f) abuf->fields.fmt_empty.f
673 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
674 int UNUSED written
= 0;
675 IADDR UNUSED pc
= abuf
->addr
;
676 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
682 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
687 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
695 /* clrs-compact: clrs */
698 SEM_FN_NAME (sh64_compact
,clrs_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
700 #define FLD(f) abuf->fields.fmt_empty.f
701 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
702 int UNUSED written
= 0;
703 IADDR UNUSED pc
= abuf
->addr
;
704 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
709 TRACE_RESULT (current_cpu
, abuf
, "sbit", 'x', opval
);
716 /* clrt-compact: clrt */
719 SEM_FN_NAME (sh64_compact
,clrt_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
721 #define FLD(f) abuf->fields.fmt_empty.f
722 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
723 int UNUSED written
= 0;
724 IADDR UNUSED pc
= abuf
->addr
;
725 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
730 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
737 /* cmpeq-compact: cmp/eq $rm, $rn */
740 SEM_FN_NAME (sh64_compact
,cmpeq_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
742 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
743 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
744 int UNUSED written
= 0;
745 IADDR UNUSED pc
= abuf
->addr
;
746 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
749 BI opval
= EQSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
751 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
758 /* cmpeqi-compact: cmp/eq #$imm8, r0 */
761 SEM_FN_NAME (sh64_compact
,cmpeqi_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
763 #define FLD(f) abuf->fields.sfmt_addi_compact.f
764 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
765 int UNUSED written
= 0;
766 IADDR UNUSED pc
= abuf
->addr
;
767 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
770 BI opval
= EQSI (GET_H_GRC (((UINT
) 0)), EXTQISI (ANDQI (FLD (f_imm8
), 255)));
772 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
779 /* cmpge-compact: cmp/ge $rm, $rn */
782 SEM_FN_NAME (sh64_compact
,cmpge_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
784 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
785 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
786 int UNUSED written
= 0;
787 IADDR UNUSED pc
= abuf
->addr
;
788 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
791 BI opval
= GESI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
793 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
800 /* cmpgt-compact: cmp/gt $rm, $rn */
803 SEM_FN_NAME (sh64_compact
,cmpgt_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
805 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
806 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
807 int UNUSED written
= 0;
808 IADDR UNUSED pc
= abuf
->addr
;
809 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
812 BI opval
= GTSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
814 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
821 /* cmphi-compact: cmp/hi $rm, $rn */
824 SEM_FN_NAME (sh64_compact
,cmphi_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
826 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
827 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
828 int UNUSED written
= 0;
829 IADDR UNUSED pc
= abuf
->addr
;
830 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
833 BI opval
= GTUSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
835 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
842 /* cmphs-compact: cmp/hs $rm, $rn */
845 SEM_FN_NAME (sh64_compact
,cmphs_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
847 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
848 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
849 int UNUSED written
= 0;
850 IADDR UNUSED pc
= abuf
->addr
;
851 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
854 BI opval
= GEUSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
856 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
863 /* cmppl-compact: cmp/pl $rn */
866 SEM_FN_NAME (sh64_compact
,cmppl_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
868 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
869 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
870 int UNUSED written
= 0;
871 IADDR UNUSED pc
= abuf
->addr
;
872 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
875 BI opval
= GTSI (GET_H_GRC (FLD (f_rn
)), 0);
877 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
884 /* cmppz-compact: cmp/pz $rn */
887 SEM_FN_NAME (sh64_compact
,cmppz_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
889 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
890 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
891 int UNUSED written
= 0;
892 IADDR UNUSED pc
= abuf
->addr
;
893 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
896 BI opval
= GESI (GET_H_GRC (FLD (f_rn
)), 0);
898 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
905 /* cmpstr-compact: cmp/str $rm, $rn */
908 SEM_FN_NAME (sh64_compact
,cmpstr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
910 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
911 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
912 int UNUSED written
= 0;
913 IADDR UNUSED pc
= abuf
->addr
;
914 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
919 tmp_temp
= XORSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
920 tmp_t
= EQSI (ANDSI (tmp_temp
, 0xff000000), 0);
921 tmp_t
= ORBI (EQSI (ANDSI (tmp_temp
, 16711680), 0), tmp_t
);
922 tmp_t
= ORBI (EQSI (ANDSI (tmp_temp
, 65280), 0), tmp_t
);
923 tmp_t
= ORBI (EQSI (ANDSI (tmp_temp
, 255), 0), tmp_t
);
925 BI opval
= ((GTUBI (tmp_t
, 0)) ? (1) : (0));
927 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
935 /* div0s-compact: div0s $rm, $rn */
938 SEM_FN_NAME (sh64_compact
,div0s_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
940 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
941 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
942 int UNUSED written
= 0;
943 IADDR UNUSED pc
= abuf
->addr
;
944 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
948 BI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
950 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
953 BI opval
= SRLSI (GET_H_GRC (FLD (f_rm
)), 31);
955 TRACE_RESULT (current_cpu
, abuf
, "mbit", 'x', opval
);
958 BI opval
= ((EQSI (SRLSI (GET_H_GRC (FLD (f_rm
)), 31), SRLSI (GET_H_GRC (FLD (f_rn
)), 31))) ? (0) : (1));
960 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
968 /* div0u-compact: div0u */
971 SEM_FN_NAME (sh64_compact
,div0u_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
973 #define FLD(f) abuf->fields.fmt_empty.f
974 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
975 int UNUSED written
= 0;
976 IADDR UNUSED pc
= abuf
->addr
;
977 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
983 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
988 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
993 TRACE_RESULT (current_cpu
, abuf
, "mbit", 'x', opval
);
1001 /* div1-compact: div1 $rm, $rn */
1004 SEM_FN_NAME (sh64_compact
,div1_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1006 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1007 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1008 int UNUSED written
= 0;
1009 IADDR UNUSED pc
= abuf
->addr
;
1010 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1016 tmp_oldq
= GET_H_QBIT ();
1018 BI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
1020 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1023 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rn
)), 1), ZEXTBISI (GET_H_TBIT ()));
1024 SET_H_GRC (FLD (f_rn
), opval
);
1025 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1027 if (NOTBI (tmp_oldq
)) {
1028 if (NOTBI (GET_H_MBIT ())) {
1030 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1032 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1033 SET_H_GRC (FLD (f_rn
), opval
);
1034 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1036 tmp_tmp1
= GTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1037 if (NOTBI (GET_H_QBIT ())) {
1039 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1041 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1045 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1047 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1053 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1055 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1056 SET_H_GRC (FLD (f_rn
), opval
);
1057 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1059 tmp_tmp1
= LTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1060 if (NOTBI (GET_H_QBIT ())) {
1062 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1064 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1068 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1070 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1076 if (NOTBI (GET_H_MBIT ())) {
1078 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1080 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
1081 SET_H_GRC (FLD (f_rn
), opval
);
1082 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1084 tmp_tmp1
= LTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1085 if (NOTBI (GET_H_QBIT ())) {
1087 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1089 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1093 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1095 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1101 tmp_tmp0
= GET_H_GRC (FLD (f_rn
));
1103 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
1104 SET_H_GRC (FLD (f_rn
), opval
);
1105 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1107 tmp_tmp1
= GTUSI (GET_H_GRC (FLD (f_rn
)), tmp_tmp0
);
1108 if (NOTBI (GET_H_QBIT ())) {
1110 BI opval
= ((EQQI (tmp_tmp1
, 0)) ? (1) : (0));
1112 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1116 BI opval
= ((tmp_tmp1
) ? (1) : (0));
1118 TRACE_RESULT (current_cpu
, abuf
, "qbit", 'x', opval
);
1125 BI opval
= ((EQBI (GET_H_QBIT (), GET_H_MBIT ())) ? (1) : (0));
1127 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1135 /* divu-compact: divu r0, $rn */
1138 SEM_FN_NAME (sh64_compact
,divu_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1140 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1141 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1142 int UNUSED written
= 0;
1143 IADDR UNUSED pc
= abuf
->addr
;
1144 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1147 SI opval
= UDIVSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (((UINT
) 0)));
1148 SET_H_GRC (FLD (f_rn
), opval
);
1149 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1156 /* mulr-compact: mulr r0, $rn */
1159 SEM_FN_NAME (sh64_compact
,mulr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1161 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1162 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1163 int UNUSED written
= 0;
1164 IADDR UNUSED pc
= abuf
->addr
;
1165 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1168 SI opval
= MULSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (((UINT
) 0)));
1169 SET_H_GRC (FLD (f_rn
), opval
);
1170 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1177 /* dmulsl-compact: dmuls.l $rm, $rn */
1180 SEM_FN_NAME (sh64_compact
,dmulsl_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1182 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1183 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1184 int UNUSED written
= 0;
1185 IADDR UNUSED pc
= abuf
->addr
;
1186 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1190 tmp_result
= MULDI (EXTSIDI (GET_H_GRC (FLD (f_rm
))), EXTSIDI (GET_H_GRC (FLD (f_rn
))));
1192 SI opval
= SUBWORDDISI (tmp_result
, 0);
1194 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
1197 SI opval
= SUBWORDDISI (tmp_result
, 1);
1199 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
1207 /* dmulul-compact: dmulu.l $rm, $rn */
1210 SEM_FN_NAME (sh64_compact
,dmulul_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1212 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1213 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1214 int UNUSED written
= 0;
1215 IADDR UNUSED pc
= abuf
->addr
;
1216 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1220 tmp_result
= MULDI (ZEXTSIDI (GET_H_GRC (FLD (f_rm
))), ZEXTSIDI (GET_H_GRC (FLD (f_rn
))));
1222 SI opval
= SUBWORDDISI (tmp_result
, 0);
1224 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
1227 SI opval
= SUBWORDDISI (tmp_result
, 1);
1229 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
1237 /* dt-compact: dt $rn */
1240 SEM_FN_NAME (sh64_compact
,dt_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1242 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1243 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1244 int UNUSED written
= 0;
1245 IADDR UNUSED pc
= abuf
->addr
;
1246 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1250 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), 1);
1251 SET_H_GRC (FLD (f_rn
), opval
);
1252 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1255 BI opval
= EQSI (GET_H_GRC (FLD (f_rn
)), 0);
1257 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1265 /* extsb-compact: exts.b $rm, $rn */
1268 SEM_FN_NAME (sh64_compact
,extsb_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1270 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1271 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1272 int UNUSED written
= 0;
1273 IADDR UNUSED pc
= abuf
->addr
;
1274 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1277 SI opval
= EXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 3));
1278 SET_H_GRC (FLD (f_rn
), opval
);
1279 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1286 /* extsw-compact: exts.w $rm, $rn */
1289 SEM_FN_NAME (sh64_compact
,extsw_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1291 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1292 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1293 int UNUSED written
= 0;
1294 IADDR UNUSED pc
= abuf
->addr
;
1295 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1298 SI opval
= EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1));
1299 SET_H_GRC (FLD (f_rn
), opval
);
1300 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1307 /* extub-compact: extu.b $rm, $rn */
1310 SEM_FN_NAME (sh64_compact
,extub_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1312 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1313 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1314 int UNUSED written
= 0;
1315 IADDR UNUSED pc
= abuf
->addr
;
1316 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1319 SI opval
= ZEXTQISI (SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 3));
1320 SET_H_GRC (FLD (f_rn
), opval
);
1321 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1328 /* extuw-compact: extu.w $rm, $rn */
1331 SEM_FN_NAME (sh64_compact
,extuw_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1333 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1334 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1335 int UNUSED written
= 0;
1336 IADDR UNUSED pc
= abuf
->addr
;
1337 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1340 SI opval
= ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1));
1341 SET_H_GRC (FLD (f_rn
), opval
);
1342 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1349 /* fabs-compact: fabs $fsdn */
1352 SEM_FN_NAME (sh64_compact
,fabs_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1354 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1355 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1356 int UNUSED written
= 0;
1357 IADDR UNUSED pc
= abuf
->addr
;
1358 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1360 if (GET_H_PRBIT ()) {
1362 DF opval
= sh64_fabsd (current_cpu
, GET_H_FSD (FLD (f_rn
)));
1363 SET_H_FSD (FLD (f_rn
), opval
);
1364 written
|= (1 << 2);
1365 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1369 DF opval
= sh64_fabss (current_cpu
, GET_H_FSD (FLD (f_rn
)));
1370 SET_H_FSD (FLD (f_rn
), opval
);
1371 written
|= (1 << 2);
1372 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1376 abuf
->written
= written
;
1381 /* fadd-compact: fadd $fsdm, $fsdn */
1384 SEM_FN_NAME (sh64_compact
,fadd_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1386 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1387 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1388 int UNUSED written
= 0;
1389 IADDR UNUSED pc
= abuf
->addr
;
1390 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1392 if (GET_H_PRBIT ()) {
1394 DF opval
= sh64_faddd (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1395 SET_H_FSD (FLD (f_rn
), opval
);
1396 written
|= (1 << 3);
1397 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1401 DF opval
= sh64_fadds (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1402 SET_H_FSD (FLD (f_rn
), opval
);
1403 written
|= (1 << 3);
1404 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1408 abuf
->written
= written
;
1413 /* fcmpeq-compact: fcmp/eq $fsdm, $fsdn */
1416 SEM_FN_NAME (sh64_compact
,fcmpeq_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1418 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1419 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1420 int UNUSED written
= 0;
1421 IADDR UNUSED pc
= abuf
->addr
;
1422 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1424 if (GET_H_PRBIT ()) {
1426 BI opval
= sh64_fcmpeqd (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1428 written
|= (1 << 3);
1429 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1433 BI opval
= sh64_fcmpeqs (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1435 written
|= (1 << 3);
1436 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1440 abuf
->written
= written
;
1445 /* fcmpgt-compact: fcmp/gt $fsdm, $fsdn */
1448 SEM_FN_NAME (sh64_compact
,fcmpgt_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1450 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1451 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1452 int UNUSED written
= 0;
1453 IADDR UNUSED pc
= abuf
->addr
;
1454 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1456 if (GET_H_PRBIT ()) {
1458 BI opval
= sh64_fcmpgtd (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
1460 written
|= (1 << 3);
1461 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1465 BI opval
= sh64_fcmpgts (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
1467 written
|= (1 << 3);
1468 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
1472 abuf
->written
= written
;
1477 /* fcnvds-compact: fcnvds $drn, fpul */
1480 SEM_FN_NAME (sh64_compact
,fcnvds_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1482 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1483 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1484 int UNUSED written
= 0;
1485 IADDR UNUSED pc
= abuf
->addr
;
1486 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1489 SF opval
= sh64_fcnvds (current_cpu
, GET_H_DRC (FLD (f_dn
)));
1490 CPU (h_fr
[((UINT
) 32)]) = opval
;
1491 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1498 /* fcnvsd-compact: fcnvsd fpul, $drn */
1501 SEM_FN_NAME (sh64_compact
,fcnvsd_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1503 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1504 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1505 int UNUSED written
= 0;
1506 IADDR UNUSED pc
= abuf
->addr
;
1507 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1510 DF opval
= sh64_fcnvsd (current_cpu
, CPU (h_fr
[((UINT
) 32)]));
1511 SET_H_DRC (FLD (f_dn
), opval
);
1512 TRACE_RESULT (current_cpu
, abuf
, "drc", 'f', opval
);
1519 /* fdiv-compact: fdiv $fsdm, $fsdn */
1522 SEM_FN_NAME (sh64_compact
,fdiv_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1524 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1525 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1526 int UNUSED written
= 0;
1527 IADDR UNUSED pc
= abuf
->addr
;
1528 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1530 if (GET_H_PRBIT ()) {
1532 DF opval
= sh64_fdivd (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
1533 SET_H_FSD (FLD (f_rn
), opval
);
1534 written
|= (1 << 3);
1535 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1539 DF opval
= sh64_fdivs (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
1540 SET_H_FSD (FLD (f_rn
), opval
);
1541 written
|= (1 << 3);
1542 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1546 abuf
->written
= written
;
1551 /* fipr-compact: fipr $fvm, $fvn */
1554 SEM_FN_NAME (sh64_compact
,fipr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1556 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
1557 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1558 int UNUSED written
= 0;
1559 IADDR UNUSED pc
= abuf
->addr
;
1560 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1562 sh64_fipr (current_cpu
, FLD (f_vm
), FLD (f_vn
));
1568 /* flds-compact: flds $frn, fpul */
1571 SEM_FN_NAME (sh64_compact
,flds_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1573 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1574 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1575 int UNUSED written
= 0;
1576 IADDR UNUSED pc
= abuf
->addr
;
1577 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1580 SF opval
= GET_H_FRC (FLD (f_rn
));
1581 CPU (h_fr
[((UINT
) 32)]) = opval
;
1582 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1589 /* fldi0-compact: fldi0 $frn */
1592 SEM_FN_NAME (sh64_compact
,fldi0_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1594 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1595 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1596 int UNUSED written
= 0;
1597 IADDR UNUSED pc
= abuf
->addr
;
1598 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1601 SF opval
= sh64_fldi0 (current_cpu
);
1602 SET_H_FRC (FLD (f_rn
), opval
);
1603 TRACE_RESULT (current_cpu
, abuf
, "frc", 'f', opval
);
1610 /* fldi1-compact: fldi1 $frn */
1613 SEM_FN_NAME (sh64_compact
,fldi1_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1615 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1616 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1617 int UNUSED written
= 0;
1618 IADDR UNUSED pc
= abuf
->addr
;
1619 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1622 SF opval
= sh64_fldi1 (current_cpu
);
1623 SET_H_FRC (FLD (f_rn
), opval
);
1624 TRACE_RESULT (current_cpu
, abuf
, "frc", 'f', opval
);
1631 /* float-compact: float fpul, $fsdn */
1634 SEM_FN_NAME (sh64_compact
,float_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1636 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
1637 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1638 int UNUSED written
= 0;
1639 IADDR UNUSED pc
= abuf
->addr
;
1640 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1642 if (GET_H_PRBIT ()) {
1644 DF opval
= sh64_floatld (current_cpu
, CPU (h_fr
[((UINT
) 32)]));
1645 SET_H_FSD (FLD (f_rn
), opval
);
1646 written
|= (1 << 2);
1647 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1651 DF opval
= sh64_floatls (current_cpu
, CPU (h_fr
[((UINT
) 32)]));
1652 SET_H_FSD (FLD (f_rn
), opval
);
1653 written
|= (1 << 2);
1654 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1658 abuf
->written
= written
;
1663 /* fmac-compact: fmac fr0, $frm, $frn */
1666 SEM_FN_NAME (sh64_compact
,fmac_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1668 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1669 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1670 int UNUSED written
= 0;
1671 IADDR UNUSED pc
= abuf
->addr
;
1672 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1675 SF opval
= sh64_fmacs (current_cpu
, GET_H_FRC (((UINT
) 0)), GET_H_FRC (FLD (f_rm
)), GET_H_FRC (FLD (f_rn
)));
1676 SET_H_FRC (FLD (f_rn
), opval
);
1677 TRACE_RESULT (current_cpu
, abuf
, "frc", 'f', opval
);
1684 /* fmov1-compact: fmov $fmovm, $fmovn */
1687 SEM_FN_NAME (sh64_compact
,fmov1_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1689 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1690 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1691 int UNUSED written
= 0;
1692 IADDR UNUSED pc
= abuf
->addr
;
1693 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1696 DF opval
= GET_H_FMOV (FLD (f_rm
));
1697 SET_H_FMOV (FLD (f_rn
), opval
);
1698 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1705 /* fmov2-compact: fmov @$rm, $fmovn */
1708 SEM_FN_NAME (sh64_compact
,fmov2_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1710 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1711 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1712 int UNUSED written
= 0;
1713 IADDR UNUSED pc
= abuf
->addr
;
1714 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1716 if (NOTBI (GET_H_SZBIT ())) {
1718 DF opval
= GETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1719 SET_H_FMOV (FLD (f_rn
), opval
);
1720 written
|= (1 << 4);
1721 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1725 DF opval
= GETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1726 SET_H_FMOV (FLD (f_rn
), opval
);
1727 written
|= (1 << 4);
1728 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1732 abuf
->written
= written
;
1737 /* fmov3-compact: fmov @${rm}+, fmovn */
1740 SEM_FN_NAME (sh64_compact
,fmov3_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1742 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1743 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1744 int UNUSED written
= 0;
1745 IADDR UNUSED pc
= abuf
->addr
;
1746 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1748 if (NOTBI (GET_H_SZBIT ())) {
1751 DF opval
= GETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1752 SET_H_FMOV (FLD (f_rn
), opval
);
1753 written
|= (1 << 4);
1754 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1757 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
1758 SET_H_GRC (FLD (f_rm
), opval
);
1759 written
|= (1 << 5);
1760 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1766 DF opval
= GETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
1767 SET_H_FMOV (FLD (f_rn
), opval
);
1768 written
|= (1 << 4);
1769 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1772 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 8);
1773 SET_H_GRC (FLD (f_rm
), opval
);
1774 written
|= (1 << 5);
1775 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1780 abuf
->written
= written
;
1785 /* fmov4-compact: fmov @(r0, $rm), $fmovn */
1788 SEM_FN_NAME (sh64_compact
,fmov4_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1790 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1791 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1792 int UNUSED written
= 0;
1793 IADDR UNUSED pc
= abuf
->addr
;
1794 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1796 if (NOTBI (GET_H_SZBIT ())) {
1798 DF opval
= GETMEMSF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
1799 SET_H_FMOV (FLD (f_rn
), opval
);
1800 written
|= (1 << 5);
1801 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1805 DF opval
= GETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
1806 SET_H_FMOV (FLD (f_rn
), opval
);
1807 written
|= (1 << 5);
1808 TRACE_RESULT (current_cpu
, abuf
, "fmov", 'f', opval
);
1812 abuf
->written
= written
;
1817 /* fmov5-compact: fmov $fmovm, @$rn */
1820 SEM_FN_NAME (sh64_compact
,fmov5_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1822 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1823 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1824 int UNUSED written
= 0;
1825 IADDR UNUSED pc
= abuf
->addr
;
1826 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1828 if (NOTBI (GET_H_SZBIT ())) {
1830 SF opval
= GET_H_FMOV (FLD (f_rm
));
1831 SETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1832 written
|= (1 << 4);
1833 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1837 DF opval
= GET_H_FMOV (FLD (f_rm
));
1838 SETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1839 written
|= (1 << 3);
1840 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1844 abuf
->written
= written
;
1849 /* fmov6-compact: fmov $fmovm, @-$rn */
1852 SEM_FN_NAME (sh64_compact
,fmov6_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1854 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1855 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1856 int UNUSED written
= 0;
1857 IADDR UNUSED pc
= abuf
->addr
;
1858 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1860 if (NOTBI (GET_H_SZBIT ())) {
1863 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
1864 SET_H_GRC (FLD (f_rn
), opval
);
1865 written
|= (1 << 5);
1866 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1869 SF opval
= GET_H_FMOV (FLD (f_rm
));
1870 SETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1871 written
|= (1 << 4);
1872 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1878 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), 8);
1879 SET_H_GRC (FLD (f_rn
), opval
);
1880 written
|= (1 << 5);
1881 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
1884 DF opval
= GET_H_FMOV (FLD (f_rm
));
1885 SETMEMDF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
1886 written
|= (1 << 3);
1887 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1892 abuf
->written
= written
;
1897 /* fmov7-compact: fmov $fmovm, @(r0, $rn) */
1900 SEM_FN_NAME (sh64_compact
,fmov7_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1902 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1903 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1904 int UNUSED written
= 0;
1905 IADDR UNUSED pc
= abuf
->addr
;
1906 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1908 if (NOTBI (GET_H_SZBIT ())) {
1910 SF opval
= GET_H_FMOV (FLD (f_rm
));
1911 SETMEMSF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
1912 written
|= (1 << 5);
1913 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1917 DF opval
= GET_H_FMOV (FLD (f_rm
));
1918 SETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
1919 written
|= (1 << 4);
1920 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1924 abuf
->written
= written
;
1929 /* fmov8-compact: fmov.d @($imm12x8, $rm), $drn */
1932 SEM_FN_NAME (sh64_compact
,fmov8_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1934 #define FLD(f) abuf->fields.sfmt_fmov8_compact.f
1935 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1936 int UNUSED written
= 0;
1937 IADDR UNUSED pc
= abuf
->addr
;
1938 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1941 DF opval
= GETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm12x8
)));
1942 SET_H_DRC (FLD (f_dn
), opval
);
1943 TRACE_RESULT (current_cpu
, abuf
, "drc", 'f', opval
);
1950 /* fmov9-compact: mov.l $drm, @($imm12x8, $rn) */
1953 SEM_FN_NAME (sh64_compact
,fmov9_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1955 #define FLD(f) abuf->fields.sfmt_fmov9_compact.f
1956 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1957 int UNUSED written
= 0;
1958 IADDR UNUSED pc
= abuf
->addr
;
1959 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1962 DF opval
= GET_H_DRC (FLD (f_dm
));
1963 SETMEMDF (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rn
)), FLD (f_imm12x8
)), opval
);
1964 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1971 /* fmul-compact: fmul $fsdm, $fsdn */
1974 SEM_FN_NAME (sh64_compact
,fmul_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1976 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
1977 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1978 int UNUSED written
= 0;
1979 IADDR UNUSED pc
= abuf
->addr
;
1980 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
1982 if (GET_H_PRBIT ()) {
1984 DF opval
= sh64_fmuld (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1985 SET_H_FSD (FLD (f_rn
), opval
);
1986 written
|= (1 << 3);
1987 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1991 DF opval
= sh64_fmuls (current_cpu
, GET_H_FSD (FLD (f_rm
)), GET_H_FSD (FLD (f_rn
)));
1992 SET_H_FSD (FLD (f_rn
), opval
);
1993 written
|= (1 << 3);
1994 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
1998 abuf
->written
= written
;
2003 /* fneg-compact: fneg $fsdn */
2006 SEM_FN_NAME (sh64_compact
,fneg_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2008 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2009 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2010 int UNUSED written
= 0;
2011 IADDR UNUSED pc
= abuf
->addr
;
2012 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2014 if (GET_H_PRBIT ()) {
2016 DF opval
= sh64_fnegd (current_cpu
, GET_H_FSD (FLD (f_rn
)));
2017 SET_H_FSD (FLD (f_rn
), opval
);
2018 written
|= (1 << 2);
2019 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2023 DF opval
= sh64_fnegs (current_cpu
, GET_H_FSD (FLD (f_rn
)));
2024 SET_H_FSD (FLD (f_rn
), opval
);
2025 written
|= (1 << 2);
2026 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2030 abuf
->written
= written
;
2035 /* frchg-compact: frchg */
2038 SEM_FN_NAME (sh64_compact
,frchg_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2040 #define FLD(f) abuf->fields.fmt_empty.f
2041 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2042 int UNUSED written
= 0;
2043 IADDR UNUSED pc
= abuf
->addr
;
2044 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2047 BI opval
= NOTBI (GET_H_FRBIT ());
2048 SET_H_FRBIT (opval
);
2049 TRACE_RESULT (current_cpu
, abuf
, "frbit", 'x', opval
);
2056 /* fschg-compact: fschg */
2059 SEM_FN_NAME (sh64_compact
,fschg_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2061 #define FLD(f) abuf->fields.fmt_empty.f
2062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2063 int UNUSED written
= 0;
2064 IADDR UNUSED pc
= abuf
->addr
;
2065 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2068 BI opval
= NOTBI (GET_H_SZBIT ());
2069 SET_H_SZBIT (opval
);
2070 TRACE_RESULT (current_cpu
, abuf
, "szbit", 'x', opval
);
2077 /* fsqrt-compact: fsqrt $fsdn */
2080 SEM_FN_NAME (sh64_compact
,fsqrt_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2082 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2083 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2084 int UNUSED written
= 0;
2085 IADDR UNUSED pc
= abuf
->addr
;
2086 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2088 if (GET_H_PRBIT ()) {
2090 DF opval
= sh64_fsqrtd (current_cpu
, GET_H_FSD (FLD (f_rn
)));
2091 SET_H_FSD (FLD (f_rn
), opval
);
2092 written
|= (1 << 2);
2093 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2097 DF opval
= sh64_fsqrts (current_cpu
, GET_H_FSD (FLD (f_rn
)));
2098 SET_H_FSD (FLD (f_rn
), opval
);
2099 written
|= (1 << 2);
2100 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2104 abuf
->written
= written
;
2109 /* fsts-compact: fsts fpul, $frn */
2112 SEM_FN_NAME (sh64_compact
,fsts_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2114 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2115 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2116 int UNUSED written
= 0;
2117 IADDR UNUSED pc
= abuf
->addr
;
2118 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2121 SF opval
= CPU (h_fr
[((UINT
) 32)]);
2122 SET_H_FRC (FLD (f_rn
), opval
);
2123 TRACE_RESULT (current_cpu
, abuf
, "frc", 'f', opval
);
2130 /* fsub-compact: fsub $fsdm, $fsdn */
2133 SEM_FN_NAME (sh64_compact
,fsub_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2135 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2136 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2137 int UNUSED written
= 0;
2138 IADDR UNUSED pc
= abuf
->addr
;
2139 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2141 if (GET_H_PRBIT ()) {
2143 DF opval
= sh64_fsubd (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
2144 SET_H_FSD (FLD (f_rn
), opval
);
2145 written
|= (1 << 3);
2146 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2150 DF opval
= sh64_fsubs (current_cpu
, GET_H_FSD (FLD (f_rn
)), GET_H_FSD (FLD (f_rm
)));
2151 SET_H_FSD (FLD (f_rn
), opval
);
2152 written
|= (1 << 3);
2153 TRACE_RESULT (current_cpu
, abuf
, "fsd", 'f', opval
);
2157 abuf
->written
= written
;
2162 /* ftrc-compact: ftrc $fsdn, fpul */
2165 SEM_FN_NAME (sh64_compact
,ftrc_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2167 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2168 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2169 int UNUSED written
= 0;
2170 IADDR UNUSED pc
= abuf
->addr
;
2171 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2174 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
)))));
2175 CPU (h_fr
[((UINT
) 32)]) = opval
;
2176 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
2183 /* ftrv-compact: ftrv xmtrx, $fvn */
2186 SEM_FN_NAME (sh64_compact
,ftrv_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2188 #define FLD(f) abuf->fields.sfmt_fipr_compact.f
2189 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2190 int UNUSED written
= 0;
2191 IADDR UNUSED pc
= abuf
->addr
;
2192 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2194 sh64_ftrv (current_cpu
, FLD (f_vn
));
2200 /* jmp-compact: jmp @$rn */
2203 SEM_FN_NAME (sh64_compact
,jmp_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2205 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2206 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2207 int UNUSED written
= 0;
2208 IADDR UNUSED pc
= abuf
->addr
;
2210 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2214 UDI opval
= ADDDI (pc
, 2);
2215 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2216 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2221 UDI opval
= GET_H_GRC (FLD (f_rn
));
2222 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2223 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2229 SEM_BRANCH_FINI (vpc
);
2234 /* jsr-compact: jsr @$rn */
2237 SEM_FN_NAME (sh64_compact
,jsr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2239 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2240 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2241 int UNUSED written
= 0;
2242 IADDR UNUSED pc
= abuf
->addr
;
2244 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2249 SI opval
= ADDDI (pc
, 4);
2251 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
2255 UDI opval
= ADDDI (pc
, 2);
2256 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2257 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2262 UDI opval
= GET_H_GRC (FLD (f_rn
));
2263 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
2264 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
2270 SEM_BRANCH_FINI (vpc
);
2275 /* ldc-gbr-compact: ldc $rn, gbr */
2278 SEM_FN_NAME (sh64_compact
,ldc_gbr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2280 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2281 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2282 int UNUSED written
= 0;
2283 IADDR UNUSED pc
= abuf
->addr
;
2284 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2287 SI opval
= GET_H_GRC (FLD (f_rn
));
2289 TRACE_RESULT (current_cpu
, abuf
, "gbr", 'x', opval
);
2296 /* ldc-vbr-compact: ldc $rn, vbr */
2299 SEM_FN_NAME (sh64_compact
,ldc_vbr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2301 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2302 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2303 int UNUSED written
= 0;
2304 IADDR UNUSED pc
= abuf
->addr
;
2305 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2308 SI opval
= GET_H_GRC (FLD (f_rn
));
2310 TRACE_RESULT (current_cpu
, abuf
, "vbr", 'x', opval
);
2317 /* ldc-sr-compact: ldc $rn, sr */
2320 SEM_FN_NAME (sh64_compact
,ldc_sr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2322 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2323 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2324 int UNUSED written
= 0;
2325 IADDR UNUSED pc
= abuf
->addr
;
2326 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2329 SI opval
= GET_H_GRC (FLD (f_rn
));
2331 TRACE_RESULT (current_cpu
, abuf
, "sr", 'x', opval
);
2338 /* ldcl-gbr-compact: ldc.l @${rn}+, gbr */
2341 SEM_FN_NAME (sh64_compact
,ldcl_gbr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2343 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2344 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2345 int UNUSED written
= 0;
2346 IADDR UNUSED pc
= abuf
->addr
;
2347 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2351 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2353 TRACE_RESULT (current_cpu
, abuf
, "gbr", 'x', opval
);
2356 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2357 SET_H_GRC (FLD (f_rn
), opval
);
2358 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2366 /* ldcl-vbr-compact: ldc.l @${rn}+, vbr */
2369 SEM_FN_NAME (sh64_compact
,ldcl_vbr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2371 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2372 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2373 int UNUSED written
= 0;
2374 IADDR UNUSED pc
= abuf
->addr
;
2375 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2379 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2381 TRACE_RESULT (current_cpu
, abuf
, "vbr", 'x', opval
);
2384 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2385 SET_H_GRC (FLD (f_rn
), opval
);
2386 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2394 /* lds-fpscr-compact: lds $rn, fpscr */
2397 SEM_FN_NAME (sh64_compact
,lds_fpscr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2399 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2400 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2401 int UNUSED written
= 0;
2402 IADDR UNUSED pc
= abuf
->addr
;
2403 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2406 SI opval
= GET_H_GRC (FLD (f_rn
));
2407 CPU (h_fpscr
) = opval
;
2408 TRACE_RESULT (current_cpu
, abuf
, "fpscr", 'x', opval
);
2415 /* ldsl-fpscr-compact: lds.l @${rn}+, fpscr */
2418 SEM_FN_NAME (sh64_compact
,ldsl_fpscr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2420 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2421 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2422 int UNUSED written
= 0;
2423 IADDR UNUSED pc
= abuf
->addr
;
2424 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2428 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2429 CPU (h_fpscr
) = opval
;
2430 TRACE_RESULT (current_cpu
, abuf
, "fpscr", 'x', opval
);
2433 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2434 SET_H_GRC (FLD (f_rn
), opval
);
2435 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2443 /* lds-fpul-compact: lds $rn, fpul */
2446 SEM_FN_NAME (sh64_compact
,lds_fpul_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2448 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2449 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2450 int UNUSED written
= 0;
2451 IADDR UNUSED pc
= abuf
->addr
;
2452 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2455 SF opval
= SUBWORDSISF (GET_H_GRC (FLD (f_rn
)));
2456 CPU (h_fr
[((UINT
) 32)]) = opval
;
2457 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
2464 /* ldsl-fpul-compact: lds.l @${rn}+, fpul */
2467 SEM_FN_NAME (sh64_compact
,ldsl_fpul_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2469 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2470 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2471 int UNUSED written
= 0;
2472 IADDR UNUSED pc
= abuf
->addr
;
2473 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2477 SF opval
= GETMEMSF (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2478 CPU (h_fr
[((UINT
) 32)]) = opval
;
2479 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
2482 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2483 SET_H_GRC (FLD (f_rn
), opval
);
2484 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2492 /* lds-mach-compact: lds $rn, mach */
2495 SEM_FN_NAME (sh64_compact
,lds_mach_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2497 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2498 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2499 int UNUSED written
= 0;
2500 IADDR UNUSED pc
= abuf
->addr
;
2501 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2504 SI opval
= GET_H_GRC (FLD (f_rn
));
2506 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2513 /* ldsl-mach-compact: lds.l @${rn}+, mach */
2516 SEM_FN_NAME (sh64_compact
,ldsl_mach_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2518 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2519 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2520 int UNUSED written
= 0;
2521 IADDR UNUSED pc
= abuf
->addr
;
2522 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2526 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2528 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2531 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2532 SET_H_GRC (FLD (f_rn
), opval
);
2533 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2541 /* lds-macl-compact: lds $rn, macl */
2544 SEM_FN_NAME (sh64_compact
,lds_macl_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2546 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2547 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2548 int UNUSED written
= 0;
2549 IADDR UNUSED pc
= abuf
->addr
;
2550 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2553 SI opval
= GET_H_GRC (FLD (f_rn
));
2555 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2562 /* ldsl-macl-compact: lds.l @${rn}+, macl */
2565 SEM_FN_NAME (sh64_compact
,ldsl_macl_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2567 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2568 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2569 int UNUSED written
= 0;
2570 IADDR UNUSED pc
= abuf
->addr
;
2571 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2575 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2577 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2580 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2581 SET_H_GRC (FLD (f_rn
), opval
);
2582 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2590 /* lds-pr-compact: lds $rn, pr */
2593 SEM_FN_NAME (sh64_compact
,lds_pr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2595 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2596 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2597 int UNUSED written
= 0;
2598 IADDR UNUSED pc
= abuf
->addr
;
2599 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2602 SI opval
= GET_H_GRC (FLD (f_rn
));
2604 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
2611 /* ldsl-pr-compact: lds.l @${rn}+, pr */
2614 SEM_FN_NAME (sh64_compact
,ldsl_pr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2616 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
2617 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2618 int UNUSED written
= 0;
2619 IADDR UNUSED pc
= abuf
->addr
;
2620 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2624 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2626 TRACE_RESULT (current_cpu
, abuf
, "pr", 'x', opval
);
2629 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2630 SET_H_GRC (FLD (f_rn
), opval
);
2631 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2639 /* macl-compact: mac.l @${rm}+, @${rn}+ */
2642 SEM_FN_NAME (sh64_compact
,macl_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2644 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2645 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2646 int UNUSED written
= 0;
2647 IADDR UNUSED pc
= abuf
->addr
;
2648 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2656 tmp_x
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2658 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2659 SET_H_GRC (FLD (f_rn
), opval
);
2660 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2662 if (EQSI (FLD (f_rn
), FLD (f_rm
))) {
2665 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
2666 SET_H_GRC (FLD (f_rn
), opval
);
2667 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2670 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
2671 SET_H_GRC (FLD (f_rm
), opval
);
2672 written
|= (1 << 11);
2673 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2677 tmp_y
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
2679 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
2680 SET_H_GRC (FLD (f_rm
), opval
);
2681 written
|= (1 << 11);
2682 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2684 tmp_tmpry
= MULDI (ZEXTSIDI (tmp_x
), ZEXTSIDI (tmp_y
));
2685 tmp_mac
= ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2686 tmp_result
= ADDDI (tmp_mac
, tmp_tmpry
);
2688 if (GET_H_SBIT ()) {
2692 tmp_max
= SRLDI (INVDI (0), 16);
2693 tmp_min
= SRLDI (INVDI (0), 15);
2694 if (GTDI (tmp_result
, tmp_max
)) {
2695 tmp_result
= tmp_max
;
2697 if (LTDI (tmp_result
, tmp_min
)) {
2698 tmp_result
= tmp_min
;
2704 SI opval
= SUBWORDDISI (tmp_result
, 0);
2706 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2709 SI opval
= SUBWORDDISI (tmp_result
, 1);
2711 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2716 abuf
->written
= written
;
2721 /* macw-compact: mac.w @${rm}+, @${rn}+ */
2724 SEM_FN_NAME (sh64_compact
,macw_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2726 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2727 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2728 int UNUSED written
= 0;
2729 IADDR UNUSED pc
= abuf
->addr
;
2730 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2738 tmp_x
= GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
2740 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 2);
2741 SET_H_GRC (FLD (f_rn
), opval
);
2742 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2744 if (EQSI (FLD (f_rn
), FLD (f_rm
))) {
2747 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 2);
2748 SET_H_GRC (FLD (f_rn
), opval
);
2749 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2752 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 2);
2753 SET_H_GRC (FLD (f_rm
), opval
);
2754 written
|= (1 << 11);
2755 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2759 tmp_y
= GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
2761 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 2);
2762 SET_H_GRC (FLD (f_rm
), opval
);
2763 written
|= (1 << 11);
2764 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2766 tmp_tmpry
= MULSI (ZEXTHISI (tmp_x
), ZEXTHISI (tmp_y
));
2767 if (GET_H_SBIT ()) {
2769 if (ADDOFSI (tmp_tmpry
, GET_H_MACL (), 0)) {
2773 written
|= (1 << 9);
2774 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2778 SI opval
= ADDSI (tmp_tmpry
, GET_H_MACL ());
2780 written
|= (1 << 10);
2781 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2786 tmp_mac
= ORDI (SLLDI (ZEXTSIDI (GET_H_MACH ()), 32), ZEXTSIDI (GET_H_MACL ()));
2787 tmp_result
= ADDDI (tmp_mac
, EXTSIDI (tmp_tmpry
));
2789 SI opval
= SUBWORDDISI (tmp_result
, 0);
2791 written
|= (1 << 9);
2792 TRACE_RESULT (current_cpu
, abuf
, "mach", 'x', opval
);
2795 SI opval
= SUBWORDDISI (tmp_result
, 1);
2797 written
|= (1 << 10);
2798 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
2804 abuf
->written
= written
;
2809 /* mov-compact: mov $rm64, $rn64 */
2812 SEM_FN_NAME (sh64_compact
,mov_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2814 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2815 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2816 int UNUSED written
= 0;
2817 IADDR UNUSED pc
= abuf
->addr
;
2818 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2821 DI opval
= GET_H_GR (FLD (f_rm
));
2822 SET_H_GR (FLD (f_rn
), opval
);
2823 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2830 /* movi-compact: mov #$imm8, $rn */
2833 SEM_FN_NAME (sh64_compact
,movi_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2835 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2836 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2837 int UNUSED written
= 0;
2838 IADDR UNUSED pc
= abuf
->addr
;
2839 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2842 SI opval
= EXTQIDI (ANDQI (FLD (f_imm8
), 255));
2843 SET_H_GRC (FLD (f_rn
), opval
);
2844 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2851 /* movi20-compact: movi20 #$imm20, $rn */
2854 SEM_FN_NAME (sh64_compact
,movi20_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2856 #define FLD(f) abuf->fields.sfmt_movi20_compact.f
2857 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2858 int UNUSED written
= 0;
2859 IADDR UNUSED pc
= abuf
->addr
;
2860 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2863 SI opval
= FLD (f_imm20
);
2864 SET_H_GRC (FLD (f_rn
), opval
);
2865 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2872 /* movb1-compact: mov.b $rm, @$rn */
2875 SEM_FN_NAME (sh64_compact
,movb1_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2877 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2878 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2879 int UNUSED written
= 0;
2880 IADDR UNUSED pc
= abuf
->addr
;
2881 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2884 UQI opval
= SUBWORDSIUQI (GET_H_GRC (FLD (f_rm
)), 3);
2885 SETMEMUQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
2886 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2893 /* movb2-compact: mov.b $rm, @-$rn */
2896 SEM_FN_NAME (sh64_compact
,movb2_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2898 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2899 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2900 int UNUSED written
= 0;
2901 IADDR UNUSED pc
= abuf
->addr
;
2902 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2906 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 1);
2908 UQI opval
= SUBWORDSIUQI (GET_H_GRC (FLD (f_rm
)), 3);
2909 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
2910 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2913 SI opval
= tmp_addr
;
2914 SET_H_GRC (FLD (f_rn
), opval
);
2915 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
2923 /* movb3-compact: mov.b $rm, @(r0,$rn) */
2926 SEM_FN_NAME (sh64_compact
,movb3_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2928 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
2929 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2930 int UNUSED written
= 0;
2931 IADDR UNUSED pc
= abuf
->addr
;
2932 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2935 UQI opval
= SUBWORDSIUQI (GET_H_GRC (FLD (f_rm
)), 3);
2936 SETMEMUQI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
2937 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2944 /* movb4-compact: mov.b r0, @($imm8, gbr) */
2947 SEM_FN_NAME (sh64_compact
,movb4_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2949 #define FLD(f) abuf->fields.sfmt_addi_compact.f
2950 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2951 int UNUSED written
= 0;
2952 IADDR UNUSED pc
= abuf
->addr
;
2953 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2957 tmp_addr
= ADDSI (GET_H_GBR (), FLD (f_imm8
));
2959 UQI opval
= SUBWORDSIUQI (GET_H_GRC (((UINT
) 0)), 3);
2960 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
2961 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2969 /* movb5-compact: mov.b r0, @($imm4, $rm) */
2972 SEM_FN_NAME (sh64_compact
,movb5_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2974 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
2975 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2976 int UNUSED written
= 0;
2977 IADDR UNUSED pc
= abuf
->addr
;
2978 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
2982 tmp_addr
= ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4
));
2984 UQI opval
= SUBWORDSIUQI (GET_H_GRC (((UINT
) 0)), 3);
2985 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
2986 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
2994 /* movb6-compact: mov.b @$rm, $rn */
2997 SEM_FN_NAME (sh64_compact
,movb6_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2999 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3000 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3001 int UNUSED written
= 0;
3002 IADDR UNUSED pc
= abuf
->addr
;
3003 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3006 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
))));
3007 SET_H_GRC (FLD (f_rn
), opval
);
3008 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3015 /* movb7-compact: mov.b @${rm}+, $rn */
3018 SEM_FN_NAME (sh64_compact
,movb7_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3020 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3021 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3022 int UNUSED written
= 0;
3023 IADDR UNUSED pc
= abuf
->addr
;
3024 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3028 tmp_data
= GETMEMQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3029 if (EQSI (FLD (f_rm
), FLD (f_rn
))) {
3031 SI opval
= EXTQISI (tmp_data
);
3032 SET_H_GRC (FLD (f_rm
), opval
);
3033 written
|= (1 << 4);
3034 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3038 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 1);
3039 SET_H_GRC (FLD (f_rm
), opval
);
3040 written
|= (1 << 4);
3041 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3045 SI opval
= EXTQISI (tmp_data
);
3046 SET_H_GRC (FLD (f_rn
), opval
);
3047 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3051 abuf
->written
= written
;
3056 /* movb8-compact: mov.b @(r0, $rm), $rn */
3059 SEM_FN_NAME (sh64_compact
,movb8_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3061 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3063 int UNUSED written
= 0;
3064 IADDR UNUSED pc
= abuf
->addr
;
3065 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3068 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
)))));
3069 SET_H_GRC (FLD (f_rn
), opval
);
3070 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3077 /* movb9-compact: mov.b @($imm8, gbr), r0 */
3080 SEM_FN_NAME (sh64_compact
,movb9_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3082 #define FLD(f) abuf->fields.sfmt_addi_compact.f
3083 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3084 int UNUSED written
= 0;
3085 IADDR UNUSED pc
= abuf
->addr
;
3086 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3089 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8
))));
3090 SET_H_GRC (((UINT
) 0), opval
);
3091 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3098 /* movb10-compact: mov.b @($imm4, $rm), r0 */
3101 SEM_FN_NAME (sh64_compact
,movb10_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3103 #define FLD(f) abuf->fields.sfmt_movb5_compact.f
3104 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3105 int UNUSED written
= 0;
3106 IADDR UNUSED pc
= abuf
->addr
;
3107 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3110 SI opval
= EXTQISI (GETMEMQI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4
))));
3111 SET_H_GRC (((UINT
) 0), opval
);
3112 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3119 /* movl1-compact: mov.l $rm, @$rn */
3122 SEM_FN_NAME (sh64_compact
,movl1_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3124 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3125 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3126 int UNUSED written
= 0;
3127 IADDR UNUSED pc
= abuf
->addr
;
3128 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3131 SI opval
= GET_H_GRC (FLD (f_rm
));
3132 SETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
3133 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3140 /* movl2-compact: mov.l $rm, @-$rn */
3143 SEM_FN_NAME (sh64_compact
,movl2_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3145 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3146 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3147 int UNUSED written
= 0;
3148 IADDR UNUSED pc
= abuf
->addr
;
3149 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3153 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
3155 SI opval
= GET_H_GRC (FLD (f_rm
));
3156 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
3157 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3160 SI opval
= tmp_addr
;
3161 SET_H_GRC (FLD (f_rn
), opval
);
3162 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3170 /* movl3-compact: mov.l $rm, @(r0, $rn) */
3173 SEM_FN_NAME (sh64_compact
,movl3_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3175 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3176 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3177 int UNUSED written
= 0;
3178 IADDR UNUSED pc
= abuf
->addr
;
3179 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3182 SI opval
= GET_H_GRC (FLD (f_rm
));
3183 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
3184 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3191 /* movl4-compact: mov.l r0, @($imm8x4, gbr) */
3194 SEM_FN_NAME (sh64_compact
,movl4_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3196 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3197 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3198 int UNUSED written
= 0;
3199 IADDR UNUSED pc
= abuf
->addr
;
3200 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3203 SI opval
= GET_H_GRC (((UINT
) 0));
3204 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x4
)), opval
);
3205 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3212 /* movl5-compact: mov.l $rm, @($imm4x4, $rn) */
3215 SEM_FN_NAME (sh64_compact
,movl5_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3217 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3218 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3219 int UNUSED written
= 0;
3220 IADDR UNUSED pc
= abuf
->addr
;
3221 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3224 SI opval
= GET_H_GRC (FLD (f_rm
));
3225 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rn
)), FLD (f_imm4x4
)), opval
);
3226 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3233 /* movl6-compact: mov.l @$rm, $rn */
3236 SEM_FN_NAME (sh64_compact
,movl6_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3238 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3239 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3240 int UNUSED written
= 0;
3241 IADDR UNUSED pc
= abuf
->addr
;
3242 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3245 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3246 SET_H_GRC (FLD (f_rn
), opval
);
3247 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3254 /* movl7-compact: mov.l @${rm}+, $rn */
3257 SEM_FN_NAME (sh64_compact
,movl7_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3259 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3260 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3261 int UNUSED written
= 0;
3262 IADDR UNUSED pc
= abuf
->addr
;
3263 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3267 SI opval
= GETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3268 SET_H_GRC (FLD (f_rn
), opval
);
3269 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3271 if (EQSI (FLD (f_rm
), FLD (f_rn
))) {
3273 SI opval
= GET_H_GRC (FLD (f_rn
));
3274 SET_H_GRC (FLD (f_rm
), opval
);
3275 written
|= (1 << 5);
3276 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3280 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 4);
3281 SET_H_GRC (FLD (f_rm
), opval
);
3282 written
|= (1 << 5);
3283 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3288 abuf
->written
= written
;
3293 /* movl8-compact: mov.l @(r0, $rm), $rn */
3296 SEM_FN_NAME (sh64_compact
,movl8_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3298 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3299 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3300 int UNUSED written
= 0;
3301 IADDR UNUSED pc
= abuf
->addr
;
3302 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3305 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
))));
3306 SET_H_GRC (FLD (f_rn
), opval
);
3307 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3314 /* movl9-compact: mov.l @($imm8x4, gbr), r0 */
3317 SEM_FN_NAME (sh64_compact
,movl9_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3319 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3320 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3321 int UNUSED written
= 0;
3322 IADDR UNUSED pc
= abuf
->addr
;
3323 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3326 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x4
)));
3327 SET_H_GRC (((UINT
) 0), opval
);
3328 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3335 /* movl10-compact: mov.l @($imm8x4, pc), $rn */
3338 SEM_FN_NAME (sh64_compact
,movl10_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3340 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3341 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3342 int UNUSED written
= 0;
3343 IADDR UNUSED pc
= abuf
->addr
;
3344 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3347 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (FLD (f_imm8x4
), ANDDI (ADDDI (pc
, 4), INVSI (3))));
3348 SET_H_GRC (FLD (f_rn
), opval
);
3349 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3356 /* movl11-compact: mov.l @($imm4x4, $rm), $rn */
3359 SEM_FN_NAME (sh64_compact
,movl11_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3361 #define FLD(f) abuf->fields.sfmt_movl5_compact.f
3362 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3363 int UNUSED written
= 0;
3364 IADDR UNUSED pc
= abuf
->addr
;
3365 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3368 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4x4
)));
3369 SET_H_GRC (FLD (f_rn
), opval
);
3370 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3377 /* movl12-compact: mov.l @($imm12x4, $rm), $rn */
3380 SEM_FN_NAME (sh64_compact
,movl12_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3382 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3383 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3384 int UNUSED written
= 0;
3385 IADDR UNUSED pc
= abuf
->addr
;
3386 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3389 SI opval
= GETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm12x4
)));
3390 SET_H_GRC (FLD (f_rn
), opval
);
3391 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3398 /* movl13-compact: mov.l $rm, @($imm12x4, $rn) */
3401 SEM_FN_NAME (sh64_compact
,movl13_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3403 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3404 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3405 int UNUSED written
= 0;
3406 IADDR UNUSED pc
= abuf
->addr
;
3407 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3410 SI opval
= GET_H_GRC (FLD (f_rm
));
3411 SETMEMSI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rn
)), FLD (f_imm12x4
)), opval
);
3412 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3419 /* movw1-compact: mov.w $rm, @$rn */
3422 SEM_FN_NAME (sh64_compact
,movw1_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3424 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3425 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3426 int UNUSED written
= 0;
3427 IADDR UNUSED pc
= abuf
->addr
;
3428 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3431 HI opval
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1);
3432 SETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
3433 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3440 /* movw2-compact: mov.w $rm, @-$rn */
3443 SEM_FN_NAME (sh64_compact
,movw2_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3445 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3446 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3447 int UNUSED written
= 0;
3448 IADDR UNUSED pc
= abuf
->addr
;
3449 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3453 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 2);
3455 HI opval
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1);
3456 SETMEMHI (current_cpu
, pc
, tmp_addr
, opval
);
3457 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3460 SI opval
= tmp_addr
;
3461 SET_H_GRC (FLD (f_rn
), opval
);
3462 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3470 /* movw3-compact: mov.w $rm, @(r0, $rn) */
3473 SEM_FN_NAME (sh64_compact
,movw3_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3475 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3476 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3477 int UNUSED written
= 0;
3478 IADDR UNUSED pc
= abuf
->addr
;
3479 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3482 HI opval
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1);
3483 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rn
))), opval
);
3484 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3491 /* movw4-compact: mov.w r0, @($imm8x2, gbr) */
3494 SEM_FN_NAME (sh64_compact
,movw4_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3496 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3497 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3498 int UNUSED written
= 0;
3499 IADDR UNUSED pc
= abuf
->addr
;
3500 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3503 HI opval
= SUBWORDSIHI (GET_H_GRC (((UINT
) 0)), 1);
3504 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x2
)), opval
);
3505 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3512 /* movw5-compact: mov.w r0, @($imm4x2, $rm) */
3515 SEM_FN_NAME (sh64_compact
,movw5_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3517 #define FLD(f) abuf->fields.sfmt_movw5_compact.f
3518 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3519 int UNUSED written
= 0;
3520 IADDR UNUSED pc
= abuf
->addr
;
3521 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3524 HI opval
= SUBWORDSIHI (GET_H_GRC (((UINT
) 0)), 1);
3525 SETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4x2
)), opval
);
3526 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3533 /* movw6-compact: mov.w @$rm, $rn */
3536 SEM_FN_NAME (sh64_compact
,movw6_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3538 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3539 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3540 int UNUSED written
= 0;
3541 IADDR UNUSED pc
= abuf
->addr
;
3542 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3545 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
))));
3546 SET_H_GRC (FLD (f_rn
), opval
);
3547 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3554 /* movw7-compact: mov.w @${rm}+, $rn */
3557 SEM_FN_NAME (sh64_compact
,movw7_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3559 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3560 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3561 int UNUSED written
= 0;
3562 IADDR UNUSED pc
= abuf
->addr
;
3563 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3567 tmp_data
= GETMEMHI (current_cpu
, pc
, GET_H_GRC (FLD (f_rm
)));
3568 if (EQSI (FLD (f_rm
), FLD (f_rn
))) {
3570 SI opval
= EXTHISI (tmp_data
);
3571 SET_H_GRC (FLD (f_rm
), opval
);
3572 written
|= (1 << 4);
3573 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3577 SI opval
= ADDSI (GET_H_GRC (FLD (f_rm
)), 2);
3578 SET_H_GRC (FLD (f_rm
), opval
);
3579 written
|= (1 << 4);
3580 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3584 SI opval
= EXTHISI (tmp_data
);
3585 SET_H_GRC (FLD (f_rn
), opval
);
3586 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3590 abuf
->written
= written
;
3595 /* movw8-compact: mov.w @(r0, $rm), $rn */
3598 SEM_FN_NAME (sh64_compact
,movw8_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3600 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3601 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3602 int UNUSED written
= 0;
3603 IADDR UNUSED pc
= abuf
->addr
;
3604 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3607 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GRC (FLD (f_rm
)))));
3608 SET_H_GRC (FLD (f_rn
), opval
);
3609 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3616 /* movw9-compact: mov.w @($imm8x2, gbr), r0 */
3619 SEM_FN_NAME (sh64_compact
,movw9_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3621 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3622 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3623 int UNUSED written
= 0;
3624 IADDR UNUSED pc
= abuf
->addr
;
3625 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3628 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GBR (), FLD (f_imm8x2
))));
3629 SET_H_GRC (((UINT
) 0), opval
);
3630 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3637 /* movw10-compact: mov.w @($imm8x2, pc), $rn */
3640 SEM_FN_NAME (sh64_compact
,movw10_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3642 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3643 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3644 int UNUSED written
= 0;
3645 IADDR UNUSED pc
= abuf
->addr
;
3646 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3649 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDDI (ADDDI (pc
, 4), FLD (f_imm8x2
))));
3650 SET_H_GRC (FLD (f_rn
), opval
);
3651 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3658 /* movw11-compact: mov.w @($imm4x2, $rm), r0 */
3661 SEM_FN_NAME (sh64_compact
,movw11_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3663 #define FLD(f) abuf->fields.sfmt_movw5_compact.f
3664 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3665 int UNUSED written
= 0;
3666 IADDR UNUSED pc
= abuf
->addr
;
3667 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3670 SI opval
= EXTHISI (GETMEMHI (current_cpu
, pc
, ADDSI (GET_H_GRC (FLD (f_rm
)), FLD (f_imm4x2
))));
3671 SET_H_GRC (((UINT
) 0), opval
);
3672 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3679 /* mova-compact: mova @($imm8x4, pc), r0 */
3682 SEM_FN_NAME (sh64_compact
,mova_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3684 #define FLD(f) abuf->fields.sfmt_movl10_compact.f
3685 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3686 int UNUSED written
= 0;
3687 IADDR UNUSED pc
= abuf
->addr
;
3688 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3691 SI opval
= ADDDI (ANDDI (ADDDI (pc
, 4), INVSI (3)), FLD (f_imm8x4
));
3692 SET_H_GRC (((UINT
) 0), opval
);
3693 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3700 /* movcal-compact: movca.l r0, @$rn */
3703 SEM_FN_NAME (sh64_compact
,movcal_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3705 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3706 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3707 int UNUSED written
= 0;
3708 IADDR UNUSED pc
= abuf
->addr
;
3709 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3712 SI opval
= GET_H_GRC (((UINT
) 0));
3713 SETMEMSI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
3714 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
3721 /* movcol-compact: movco.l r0, @$rn */
3724 SEM_FN_NAME (sh64_compact
,movcol_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3726 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3727 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3728 int UNUSED written
= 0;
3729 IADDR UNUSED pc
= abuf
->addr
;
3730 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3733 SI opval
= GET_H_GRC (FLD (f_rn
));
3734 SET_H_GRC (FLD (f_rn
), opval
);
3735 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3742 /* movt-compact: movt $rn */
3745 SEM_FN_NAME (sh64_compact
,movt_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3747 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3748 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3749 int UNUSED written
= 0;
3750 IADDR UNUSED pc
= abuf
->addr
;
3751 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3754 SI opval
= ZEXTBISI (GET_H_TBIT ());
3755 SET_H_GRC (FLD (f_rn
), opval
);
3756 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3763 /* movual-compact: movua.l @$rn, r0 */
3766 SEM_FN_NAME (sh64_compact
,movual_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3768 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3769 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3770 int UNUSED written
= 0;
3771 IADDR UNUSED pc
= abuf
->addr
;
3772 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3775 SI opval
= sh64_movua (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
3776 SET_H_GRC (((UINT
) 0), opval
);
3777 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3784 /* movual2-compact: movua.l @$rn+, r0 */
3787 SEM_FN_NAME (sh64_compact
,movual2_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3789 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3790 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3791 int UNUSED written
= 0;
3792 IADDR UNUSED pc
= abuf
->addr
;
3793 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3797 SI opval
= sh64_movua (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
3798 SET_H_GRC (((UINT
) 0), opval
);
3799 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3802 SI opval
= ADDSI (GET_H_GRC (FLD (f_rn
)), 4);
3803 SET_H_GRC (FLD (f_rn
), opval
);
3804 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3812 /* mull-compact: mul.l $rm, $rn */
3815 SEM_FN_NAME (sh64_compact
,mull_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3817 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3818 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3819 int UNUSED written
= 0;
3820 IADDR UNUSED pc
= abuf
->addr
;
3821 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3824 SI opval
= MULSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
)));
3826 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
3833 /* mulsw-compact: muls.w $rm, $rn */
3836 SEM_FN_NAME (sh64_compact
,mulsw_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3838 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3839 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3840 int UNUSED written
= 0;
3841 IADDR UNUSED pc
= abuf
->addr
;
3842 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3845 SI opval
= MULSI (EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1)), EXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn
)), 1)));
3847 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
3854 /* muluw-compact: mulu.w $rm, $rn */
3857 SEM_FN_NAME (sh64_compact
,muluw_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3859 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3860 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3861 int UNUSED written
= 0;
3862 IADDR UNUSED pc
= abuf
->addr
;
3863 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3866 SI opval
= MULSI (ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 1)), ZEXTHISI (SUBWORDSIHI (GET_H_GRC (FLD (f_rn
)), 1)));
3868 TRACE_RESULT (current_cpu
, abuf
, "macl", 'x', opval
);
3875 /* neg-compact: neg $rm, $rn */
3878 SEM_FN_NAME (sh64_compact
,neg_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3880 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3881 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3882 int UNUSED written
= 0;
3883 IADDR UNUSED pc
= abuf
->addr
;
3884 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3887 SI opval
= NEGSI (GET_H_GRC (FLD (f_rm
)));
3888 SET_H_GRC (FLD (f_rn
), opval
);
3889 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3896 /* negc-compact: negc $rm, $rn */
3899 SEM_FN_NAME (sh64_compact
,negc_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3901 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3902 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3903 int UNUSED written
= 0;
3904 IADDR UNUSED pc
= abuf
->addr
;
3905 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3909 tmp_flag
= SUBCFSI (0, GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
3911 SI opval
= SUBCSI (0, GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
3912 SET_H_GRC (FLD (f_rn
), opval
);
3913 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3916 BI opval
= tmp_flag
;
3918 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
3926 /* nop-compact: nop */
3929 SEM_FN_NAME (sh64_compact
,nop_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3931 #define FLD(f) abuf->fields.fmt_empty.f
3932 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3933 int UNUSED written
= 0;
3934 IADDR UNUSED pc
= abuf
->addr
;
3935 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3943 /* not-compact: not $rm64, $rn64 */
3946 SEM_FN_NAME (sh64_compact
,not_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3948 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
3949 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3950 int UNUSED written
= 0;
3951 IADDR UNUSED pc
= abuf
->addr
;
3952 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3955 DI opval
= INVDI (GET_H_GR (FLD (f_rm
)));
3956 SET_H_GR (FLD (f_rn
), opval
);
3957 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3964 /* ocbi-compact: ocbi @$rn */
3967 SEM_FN_NAME (sh64_compact
,ocbi_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3969 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3970 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3971 int UNUSED written
= 0;
3972 IADDR UNUSED pc
= abuf
->addr
;
3973 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
3977 SI opval
= GET_H_GRC (FLD (f_rn
));
3978 SET_H_GRC (FLD (f_rn
), opval
);
3979 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
3988 /* ocbp-compact: ocbp @$rn */
3991 SEM_FN_NAME (sh64_compact
,ocbp_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3993 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
3994 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3995 int UNUSED written
= 0;
3996 IADDR UNUSED pc
= abuf
->addr
;
3997 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4001 SI opval
= GET_H_GRC (FLD (f_rn
));
4002 SET_H_GRC (FLD (f_rn
), opval
);
4003 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4012 /* ocbwb-compact: ocbwb @$rn */
4015 SEM_FN_NAME (sh64_compact
,ocbwb_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4017 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4018 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4019 int UNUSED written
= 0;
4020 IADDR UNUSED pc
= abuf
->addr
;
4021 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4025 SI opval
= GET_H_GRC (FLD (f_rn
));
4026 SET_H_GRC (FLD (f_rn
), opval
);
4027 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4036 /* or-compact: or $rm64, $rn64 */
4039 SEM_FN_NAME (sh64_compact
,or_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4041 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4042 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4043 int UNUSED written
= 0;
4044 IADDR UNUSED pc
= abuf
->addr
;
4045 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4048 DI opval
= ORDI (GET_H_GR (FLD (f_rm
)), GET_H_GR (FLD (f_rn
)));
4049 SET_H_GR (FLD (f_rn
), opval
);
4050 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4057 /* ori-compact: or #$uimm8, r0 */
4060 SEM_FN_NAME (sh64_compact
,ori_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4062 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4063 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4064 int UNUSED written
= 0;
4065 IADDR UNUSED pc
= abuf
->addr
;
4066 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4069 SI opval
= ORSI (GET_H_GRC (((UINT
) 0)), ZEXTSIDI (FLD (f_imm8
)));
4070 SET_H_GRC (((UINT
) 0), opval
);
4071 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4078 /* orb-compact: or.b #$imm8, @(r0, gbr) */
4081 SEM_FN_NAME (sh64_compact
,orb_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4083 #define FLD(f) abuf->fields.sfmt_addi_compact.f
4084 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4085 int UNUSED written
= 0;
4086 IADDR UNUSED pc
= abuf
->addr
;
4087 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4092 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
4093 tmp_data
= ORQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
));
4095 UQI opval
= tmp_data
;
4096 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
4097 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4105 /* pref-compact: pref @$rn */
4108 SEM_FN_NAME (sh64_compact
,pref_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4110 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4111 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4112 int UNUSED written
= 0;
4113 IADDR UNUSED pc
= abuf
->addr
;
4114 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4116 sh64_pref (current_cpu
, GET_H_GRC (FLD (f_rn
)));
4122 /* rotcl-compact: rotcl $rn */
4125 SEM_FN_NAME (sh64_compact
,rotcl_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4127 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4128 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4129 int UNUSED written
= 0;
4130 IADDR UNUSED pc
= abuf
->addr
;
4131 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4135 tmp_temp
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4137 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rn
)), 1), GET_H_TBIT ());
4138 SET_H_GRC (FLD (f_rn
), opval
);
4139 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4142 BI opval
= ((tmp_temp
) ? (1) : (0));
4144 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4152 /* rotcr-compact: rotcr $rn */
4155 SEM_FN_NAME (sh64_compact
,rotcr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4157 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4158 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4159 int UNUSED written
= 0;
4160 IADDR UNUSED pc
= abuf
->addr
;
4161 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4166 tmp_lsbit
= ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn
)), 1), 0)) ? (0) : (1));
4167 tmp_temp
= GET_H_TBIT ();
4169 SI opval
= ORSI (SRLSI (GET_H_GRC (FLD (f_rn
)), 1), SLLSI (tmp_temp
, 31));
4170 SET_H_GRC (FLD (f_rn
), opval
);
4171 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4174 BI opval
= ((tmp_lsbit
) ? (1) : (0));
4176 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4184 /* rotl-compact: rotl $rn */
4187 SEM_FN_NAME (sh64_compact
,rotl_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4189 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4190 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4191 int UNUSED written
= 0;
4192 IADDR UNUSED pc
= abuf
->addr
;
4193 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4197 tmp_temp
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4199 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rn
)), 1), tmp_temp
);
4200 SET_H_GRC (FLD (f_rn
), opval
);
4201 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4204 BI opval
= ((tmp_temp
) ? (1) : (0));
4206 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4214 /* rotr-compact: rotr $rn */
4217 SEM_FN_NAME (sh64_compact
,rotr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4219 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4220 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4221 int UNUSED written
= 0;
4222 IADDR UNUSED pc
= abuf
->addr
;
4223 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4228 tmp_lsbit
= ((EQSI (ANDSI (GET_H_GRC (FLD (f_rn
)), 1), 0)) ? (0) : (1));
4229 tmp_temp
= tmp_lsbit
;
4231 SI opval
= ORSI (SRLSI (GET_H_GRC (FLD (f_rn
)), 1), SLLSI (tmp_temp
, 31));
4232 SET_H_GRC (FLD (f_rn
), opval
);
4233 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4236 BI opval
= ((tmp_lsbit
) ? (1) : (0));
4238 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4246 /* rts-compact: rts */
4249 SEM_FN_NAME (sh64_compact
,rts_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4251 #define FLD(f) abuf->fields.fmt_empty.f
4252 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4253 int UNUSED written
= 0;
4254 IADDR UNUSED pc
= abuf
->addr
;
4256 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4260 UDI opval
= ADDDI (pc
, 2);
4261 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4262 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
4267 UDI opval
= GET_H_PR ();
4268 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
4269 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
4275 SEM_BRANCH_FINI (vpc
);
4280 /* sets-compact: sets */
4283 SEM_FN_NAME (sh64_compact
,sets_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4285 #define FLD(f) abuf->fields.fmt_empty.f
4286 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4287 int UNUSED written
= 0;
4288 IADDR UNUSED pc
= abuf
->addr
;
4289 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4294 TRACE_RESULT (current_cpu
, abuf
, "sbit", 'x', opval
);
4301 /* sett-compact: sett */
4304 SEM_FN_NAME (sh64_compact
,sett_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4306 #define FLD(f) abuf->fields.fmt_empty.f
4307 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4308 int UNUSED written
= 0;
4309 IADDR UNUSED pc
= abuf
->addr
;
4310 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4315 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4322 /* shad-compact: shad $rm, $rn */
4325 SEM_FN_NAME (sh64_compact
,shad_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4327 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4328 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4329 int UNUSED written
= 0;
4330 IADDR UNUSED pc
= abuf
->addr
;
4331 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4335 tmp_shamt
= ANDSI (GET_H_GRC (FLD (f_rm
)), 31);
4336 if (GESI (GET_H_GRC (FLD (f_rm
)), 0)) {
4338 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), tmp_shamt
);
4339 SET_H_GRC (FLD (f_rn
), opval
);
4340 written
|= (1 << 2);
4341 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4344 if (NESI (tmp_shamt
, 0)) {
4346 SI opval
= SRASI (GET_H_GRC (FLD (f_rn
)), SUBSI (32, tmp_shamt
));
4347 SET_H_GRC (FLD (f_rn
), opval
);
4348 written
|= (1 << 2);
4349 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4352 if (LTSI (GET_H_GRC (FLD (f_rn
)), 0)) {
4354 SI opval
= NEGSI (1);
4355 SET_H_GRC (FLD (f_rn
), opval
);
4356 written
|= (1 << 2);
4357 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4362 SET_H_GRC (FLD (f_rn
), opval
);
4363 written
|= (1 << 2);
4364 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4371 abuf
->written
= written
;
4376 /* shal-compact: shal $rn */
4379 SEM_FN_NAME (sh64_compact
,shal_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4381 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4382 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4383 int UNUSED written
= 0;
4384 IADDR UNUSED pc
= abuf
->addr
;
4385 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4389 tmp_t
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4391 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 1);
4392 SET_H_GRC (FLD (f_rn
), opval
);
4393 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4396 BI opval
= ((tmp_t
) ? (1) : (0));
4398 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4406 /* shar-compact: shar $rn */
4409 SEM_FN_NAME (sh64_compact
,shar_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4411 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4412 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4413 int UNUSED written
= 0;
4414 IADDR UNUSED pc
= abuf
->addr
;
4415 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4419 tmp_t
= ANDSI (GET_H_GRC (FLD (f_rn
)), 1);
4421 SI opval
= SRASI (GET_H_GRC (FLD (f_rn
)), 1);
4422 SET_H_GRC (FLD (f_rn
), opval
);
4423 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4426 BI opval
= ((tmp_t
) ? (1) : (0));
4428 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4436 /* shld-compact: shld $rm, $rn */
4439 SEM_FN_NAME (sh64_compact
,shld_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4441 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
4442 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4443 int UNUSED written
= 0;
4444 IADDR UNUSED pc
= abuf
->addr
;
4445 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4449 tmp_shamt
= ANDSI (GET_H_GRC (FLD (f_rm
)), 31);
4450 if (GESI (GET_H_GRC (FLD (f_rm
)), 0)) {
4452 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), tmp_shamt
);
4453 SET_H_GRC (FLD (f_rn
), opval
);
4454 written
|= (1 << 2);
4455 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4458 if (NESI (tmp_shamt
, 0)) {
4460 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), SUBSI (32, tmp_shamt
));
4461 SET_H_GRC (FLD (f_rn
), opval
);
4462 written
|= (1 << 2);
4463 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4468 SET_H_GRC (FLD (f_rn
), opval
);
4469 written
|= (1 << 2);
4470 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4476 abuf
->written
= written
;
4481 /* shll-compact: shll $rn */
4484 SEM_FN_NAME (sh64_compact
,shll_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4486 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4487 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4488 int UNUSED written
= 0;
4489 IADDR UNUSED pc
= abuf
->addr
;
4490 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4494 tmp_t
= SRLSI (GET_H_GRC (FLD (f_rn
)), 31);
4496 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 1);
4497 SET_H_GRC (FLD (f_rn
), opval
);
4498 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4501 BI opval
= ((tmp_t
) ? (1) : (0));
4503 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4511 /* shll2-compact: shll2 $rn */
4514 SEM_FN_NAME (sh64_compact
,shll2_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4516 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4517 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4518 int UNUSED written
= 0;
4519 IADDR UNUSED pc
= abuf
->addr
;
4520 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4523 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 2);
4524 SET_H_GRC (FLD (f_rn
), opval
);
4525 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4532 /* shll8-compact: shll8 $rn */
4535 SEM_FN_NAME (sh64_compact
,shll8_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4537 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4538 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4539 int UNUSED written
= 0;
4540 IADDR UNUSED pc
= abuf
->addr
;
4541 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4544 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 8);
4545 SET_H_GRC (FLD (f_rn
), opval
);
4546 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4553 /* shll16-compact: shll16 $rn */
4556 SEM_FN_NAME (sh64_compact
,shll16_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4558 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4559 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4560 int UNUSED written
= 0;
4561 IADDR UNUSED pc
= abuf
->addr
;
4562 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4565 SI opval
= SLLSI (GET_H_GRC (FLD (f_rn
)), 16);
4566 SET_H_GRC (FLD (f_rn
), opval
);
4567 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4574 /* shlr-compact: shlr $rn */
4577 SEM_FN_NAME (sh64_compact
,shlr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4579 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4580 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4581 int UNUSED written
= 0;
4582 IADDR UNUSED pc
= abuf
->addr
;
4583 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4587 tmp_t
= ANDSI (GET_H_GRC (FLD (f_rn
)), 1);
4589 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 1);
4590 SET_H_GRC (FLD (f_rn
), opval
);
4591 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4594 BI opval
= ((tmp_t
) ? (1) : (0));
4596 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
4604 /* shlr2-compact: shlr2 $rn */
4607 SEM_FN_NAME (sh64_compact
,shlr2_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4609 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4610 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4611 int UNUSED written
= 0;
4612 IADDR UNUSED pc
= abuf
->addr
;
4613 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4616 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 2);
4617 SET_H_GRC (FLD (f_rn
), opval
);
4618 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4625 /* shlr8-compact: shlr8 $rn */
4628 SEM_FN_NAME (sh64_compact
,shlr8_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4630 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4631 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4632 int UNUSED written
= 0;
4633 IADDR UNUSED pc
= abuf
->addr
;
4634 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4637 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 8);
4638 SET_H_GRC (FLD (f_rn
), opval
);
4639 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4646 /* shlr16-compact: shlr16 $rn */
4649 SEM_FN_NAME (sh64_compact
,shlr16_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4651 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4652 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4653 int UNUSED written
= 0;
4654 IADDR UNUSED pc
= abuf
->addr
;
4655 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4658 SI opval
= SRLSI (GET_H_GRC (FLD (f_rn
)), 16);
4659 SET_H_GRC (FLD (f_rn
), opval
);
4660 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4667 /* stc-gbr-compact: stc gbr, $rn */
4670 SEM_FN_NAME (sh64_compact
,stc_gbr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4672 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4673 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4674 int UNUSED written
= 0;
4675 IADDR UNUSED pc
= abuf
->addr
;
4676 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4679 SI opval
= GET_H_GBR ();
4680 SET_H_GRC (FLD (f_rn
), opval
);
4681 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4688 /* stc-vbr-compact: stc vbr, $rn */
4691 SEM_FN_NAME (sh64_compact
,stc_vbr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4693 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4694 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4695 int UNUSED written
= 0;
4696 IADDR UNUSED pc
= abuf
->addr
;
4697 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4700 SI opval
= GET_H_VBR ();
4701 SET_H_GRC (FLD (f_rn
), opval
);
4702 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4709 /* stcl-gbr-compact: stc.l gbr, @-$rn */
4712 SEM_FN_NAME (sh64_compact
,stcl_gbr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4714 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4715 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4716 int UNUSED written
= 0;
4717 IADDR UNUSED pc
= abuf
->addr
;
4718 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4722 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4724 SI opval
= GET_H_GBR ();
4725 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4726 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4729 SI opval
= tmp_addr
;
4730 SET_H_GRC (FLD (f_rn
), opval
);
4731 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4739 /* stcl-vbr-compact: stc.l vbr, @-$rn */
4742 SEM_FN_NAME (sh64_compact
,stcl_vbr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4744 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4745 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4746 int UNUSED written
= 0;
4747 IADDR UNUSED pc
= abuf
->addr
;
4748 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4752 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4754 SI opval
= GET_H_VBR ();
4755 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4756 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4759 SI opval
= tmp_addr
;
4760 SET_H_GRC (FLD (f_rn
), opval
);
4761 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4769 /* sts-fpscr-compact: sts fpscr, $rn */
4772 SEM_FN_NAME (sh64_compact
,sts_fpscr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4774 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4775 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4776 int UNUSED written
= 0;
4777 IADDR UNUSED pc
= abuf
->addr
;
4778 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4781 SI opval
= CPU (h_fpscr
);
4782 SET_H_GRC (FLD (f_rn
), opval
);
4783 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4790 /* stsl-fpscr-compact: sts.l fpscr, @-$rn */
4793 SEM_FN_NAME (sh64_compact
,stsl_fpscr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4795 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4796 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4797 int UNUSED written
= 0;
4798 IADDR UNUSED pc
= abuf
->addr
;
4799 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4803 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4805 SI opval
= CPU (h_fpscr
);
4806 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4807 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4810 SI opval
= tmp_addr
;
4811 SET_H_GRC (FLD (f_rn
), opval
);
4812 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4820 /* sts-fpul-compact: sts fpul, $rn */
4823 SEM_FN_NAME (sh64_compact
,sts_fpul_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4825 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4826 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4827 int UNUSED written
= 0;
4828 IADDR UNUSED pc
= abuf
->addr
;
4829 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4832 SI opval
= SUBWORDSFSI (CPU (h_fr
[((UINT
) 32)]));
4833 SET_H_GRC (FLD (f_rn
), opval
);
4834 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4841 /* stsl-fpul-compact: sts.l fpul, @-$rn */
4844 SEM_FN_NAME (sh64_compact
,stsl_fpul_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4846 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4847 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4848 int UNUSED written
= 0;
4849 IADDR UNUSED pc
= abuf
->addr
;
4850 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4854 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4856 SF opval
= CPU (h_fr
[((UINT
) 32)]);
4857 SETMEMSF (current_cpu
, pc
, tmp_addr
, opval
);
4858 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
4861 SI opval
= tmp_addr
;
4862 SET_H_GRC (FLD (f_rn
), opval
);
4863 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4871 /* sts-mach-compact: sts mach, $rn */
4874 SEM_FN_NAME (sh64_compact
,sts_mach_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4876 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4877 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4878 int UNUSED written
= 0;
4879 IADDR UNUSED pc
= abuf
->addr
;
4880 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4883 SI opval
= GET_H_MACH ();
4884 SET_H_GRC (FLD (f_rn
), opval
);
4885 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4892 /* stsl-mach-compact: sts.l mach, @-$rn */
4895 SEM_FN_NAME (sh64_compact
,stsl_mach_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4897 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4898 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4899 int UNUSED written
= 0;
4900 IADDR UNUSED pc
= abuf
->addr
;
4901 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4905 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4907 SI opval
= GET_H_MACH ();
4908 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4909 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4912 SI opval
= tmp_addr
;
4913 SET_H_GRC (FLD (f_rn
), opval
);
4914 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4922 /* sts-macl-compact: sts macl, $rn */
4925 SEM_FN_NAME (sh64_compact
,sts_macl_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4927 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4928 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4929 int UNUSED written
= 0;
4930 IADDR UNUSED pc
= abuf
->addr
;
4931 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4934 SI opval
= GET_H_MACL ();
4935 SET_H_GRC (FLD (f_rn
), opval
);
4936 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4943 /* stsl-macl-compact: sts.l macl, @-$rn */
4946 SEM_FN_NAME (sh64_compact
,stsl_macl_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4948 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4949 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4950 int UNUSED written
= 0;
4951 IADDR UNUSED pc
= abuf
->addr
;
4952 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4956 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
4958 SI opval
= GET_H_MACL ();
4959 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
4960 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4963 SI opval
= tmp_addr
;
4964 SET_H_GRC (FLD (f_rn
), opval
);
4965 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4973 /* sts-pr-compact: sts pr, $rn */
4976 SEM_FN_NAME (sh64_compact
,sts_pr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4978 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
4979 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4980 int UNUSED written
= 0;
4981 IADDR UNUSED pc
= abuf
->addr
;
4982 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
4985 SI opval
= GET_H_PR ();
4986 SET_H_GRC (FLD (f_rn
), opval
);
4987 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
4994 /* stsl-pr-compact: sts.l pr, @-$rn */
4997 SEM_FN_NAME (sh64_compact
,stsl_pr_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4999 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
5000 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5001 int UNUSED written
= 0;
5002 IADDR UNUSED pc
= abuf
->addr
;
5003 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5007 tmp_addr
= SUBSI (GET_H_GRC (FLD (f_rn
)), 4);
5009 SI opval
= GET_H_PR ();
5010 SETMEMSI (current_cpu
, pc
, tmp_addr
, opval
);
5011 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5014 SI opval
= tmp_addr
;
5015 SET_H_GRC (FLD (f_rn
), opval
);
5016 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5024 /* sub-compact: sub $rm, $rn */
5027 SEM_FN_NAME (sh64_compact
,sub_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5029 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5030 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5031 int UNUSED written
= 0;
5032 IADDR UNUSED pc
= abuf
->addr
;
5033 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5036 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
5037 SET_H_GRC (FLD (f_rn
), opval
);
5038 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5045 /* subc-compact: subc $rm, $rn */
5048 SEM_FN_NAME (sh64_compact
,subc_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5050 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5051 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5052 int UNUSED written
= 0;
5053 IADDR UNUSED pc
= abuf
->addr
;
5054 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5058 tmp_flag
= SUBCFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
5060 SI opval
= SUBCSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), GET_H_TBIT ());
5061 SET_H_GRC (FLD (f_rn
), opval
);
5062 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5065 BI opval
= tmp_flag
;
5067 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5075 /* subv-compact: subv $rm, $rn */
5078 SEM_FN_NAME (sh64_compact
,subv_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5080 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5081 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5082 int UNUSED written
= 0;
5083 IADDR UNUSED pc
= abuf
->addr
;
5084 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5088 tmp_t
= SUBOFSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)), 0);
5090 SI opval
= SUBSI (GET_H_GRC (FLD (f_rn
)), GET_H_GRC (FLD (f_rm
)));
5091 SET_H_GRC (FLD (f_rn
), opval
);
5092 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5095 BI opval
= ((tmp_t
) ? (1) : (0));
5097 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5105 /* swapb-compact: swap.b $rm, $rn */
5108 SEM_FN_NAME (sh64_compact
,swapb_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5110 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5111 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5112 int UNUSED written
= 0;
5113 IADDR UNUSED pc
= abuf
->addr
;
5114 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5120 tmp_top_half
= SUBWORDSIHI (GET_H_GRC (FLD (f_rm
)), 0);
5121 tmp_byte1
= SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 2);
5122 tmp_byte0
= SUBWORDSIQI (GET_H_GRC (FLD (f_rm
)), 3);
5124 SI opval
= ORSI (SLLSI (tmp_top_half
, 16), ORSI (SLLSI (tmp_byte0
, 8), tmp_byte1
));
5125 SET_H_GRC (FLD (f_rn
), opval
);
5126 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5134 /* swapw-compact: swap.w $rm, $rn */
5137 SEM_FN_NAME (sh64_compact
,swapw_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5139 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5140 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5141 int UNUSED written
= 0;
5142 IADDR UNUSED pc
= abuf
->addr
;
5143 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5146 SI opval
= ORSI (SRLSI (GET_H_GRC (FLD (f_rm
)), 16), SLLSI (GET_H_GRC (FLD (f_rm
)), 16));
5147 SET_H_GRC (FLD (f_rn
), opval
);
5148 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5155 /* tasb-compact: tas.b @$rn */
5158 SEM_FN_NAME (sh64_compact
,tasb_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5160 #define FLD(f) abuf->fields.sfmt_movw10_compact.f
5161 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5162 int UNUSED written
= 0;
5163 IADDR UNUSED pc
= abuf
->addr
;
5164 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5168 tmp_byte
= GETMEMUQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)));
5170 BI opval
= ((EQQI (tmp_byte
, 0)) ? (1) : (0));
5172 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5174 tmp_byte
= ORQI (tmp_byte
, 128);
5176 UQI opval
= tmp_byte
;
5177 SETMEMUQI (current_cpu
, pc
, GET_H_GRC (FLD (f_rn
)), opval
);
5178 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5186 /* trapa-compact: trapa #$uimm8 */
5189 SEM_FN_NAME (sh64_compact
,trapa_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5191 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5192 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5193 int UNUSED written
= 0;
5194 IADDR UNUSED pc
= abuf
->addr
;
5195 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5197 sh64_compact_trapa (current_cpu
, FLD (f_imm8
), pc
);
5203 /* tst-compact: tst $rm, $rn */
5206 SEM_FN_NAME (sh64_compact
,tst_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5208 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5209 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5210 int UNUSED written
= 0;
5211 IADDR UNUSED pc
= abuf
->addr
;
5212 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5215 BI opval
= ((EQSI (ANDSI (GET_H_GRC (FLD (f_rm
)), GET_H_GRC (FLD (f_rn
))), 0)) ? (1) : (0));
5217 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5224 /* tsti-compact: tst #$uimm8, r0 */
5227 SEM_FN_NAME (sh64_compact
,tsti_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5229 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5230 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5231 int UNUSED written
= 0;
5232 IADDR UNUSED pc
= abuf
->addr
;
5233 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5236 BI opval
= ((EQSI (ANDSI (GET_H_GRC (((UINT
) 0)), ZEXTSISI (FLD (f_imm8
))), 0)) ? (1) : (0));
5238 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5245 /* tstb-compact: tst.b #$imm8, @(r0, gbr) */
5248 SEM_FN_NAME (sh64_compact
,tstb_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5250 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5251 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5252 int UNUSED written
= 0;
5253 IADDR UNUSED pc
= abuf
->addr
;
5254 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5258 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
5260 BI opval
= ((EQQI (ANDQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
)), 0)) ? (1) : (0));
5262 TRACE_RESULT (current_cpu
, abuf
, "tbit", 'x', opval
);
5270 /* xor-compact: xor $rm64, $rn64 */
5273 SEM_FN_NAME (sh64_compact
,xor_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5275 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5276 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5277 int UNUSED written
= 0;
5278 IADDR UNUSED pc
= abuf
->addr
;
5279 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5282 DI opval
= XORDI (GET_H_GR (FLD (f_rn
)), GET_H_GR (FLD (f_rm
)));
5283 SET_H_GR (FLD (f_rn
), opval
);
5284 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5291 /* xori-compact: xor #$uimm8, r0 */
5294 SEM_FN_NAME (sh64_compact
,xori_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5296 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5297 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5298 int UNUSED written
= 0;
5299 IADDR UNUSED pc
= abuf
->addr
;
5300 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5303 SI opval
= XORSI (GET_H_GRC (((UINT
) 0)), ZEXTSIDI (FLD (f_imm8
)));
5304 SET_H_GRC (((UINT
) 0), opval
);
5305 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5312 /* xorb-compact: xor.b #$imm8, @(r0, gbr) */
5315 SEM_FN_NAME (sh64_compact
,xorb_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5317 #define FLD(f) abuf->fields.sfmt_addi_compact.f
5318 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5319 int UNUSED written
= 0;
5320 IADDR UNUSED pc
= abuf
->addr
;
5321 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5326 tmp_addr
= ADDSI (GET_H_GRC (((UINT
) 0)), GET_H_GBR ());
5327 tmp_data
= XORQI (GETMEMUQI (current_cpu
, pc
, tmp_addr
), FLD (f_imm8
));
5329 UQI opval
= tmp_data
;
5330 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5331 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5339 /* xtrct-compact: xtrct $rm, $rn */
5342 SEM_FN_NAME (sh64_compact
,xtrct_compact
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5344 #define FLD(f) abuf->fields.sfmt_movl12_compact.f
5345 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5346 int UNUSED written
= 0;
5347 IADDR UNUSED pc
= abuf
->addr
;
5348 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 2);
5351 SI opval
= ORSI (SLLSI (GET_H_GRC (FLD (f_rm
)), 16), SRLSI (GET_H_GRC (FLD (f_rn
)), 16));
5352 SET_H_GRC (FLD (f_rn
), opval
);
5353 TRACE_RESULT (current_cpu
, abuf
, "grc", 'x', opval
);
5360 /* Table of all semantic fns. */
5362 static const struct sem_fn_desc sem_fns
[] = {
5363 { SH64_COMPACT_INSN_X_INVALID
, SEM_FN_NAME (sh64_compact
,x_invalid
) },
5364 { SH64_COMPACT_INSN_X_AFTER
, SEM_FN_NAME (sh64_compact
,x_after
) },
5365 { SH64_COMPACT_INSN_X_BEFORE
, SEM_FN_NAME (sh64_compact
,x_before
) },
5366 { SH64_COMPACT_INSN_X_CTI_CHAIN
, SEM_FN_NAME (sh64_compact
,x_cti_chain
) },
5367 { SH64_COMPACT_INSN_X_CHAIN
, SEM_FN_NAME (sh64_compact
,x_chain
) },
5368 { SH64_COMPACT_INSN_X_BEGIN
, SEM_FN_NAME (sh64_compact
,x_begin
) },
5369 { SH64_COMPACT_INSN_ADD_COMPACT
, SEM_FN_NAME (sh64_compact
,add_compact
) },
5370 { SH64_COMPACT_INSN_ADDI_COMPACT
, SEM_FN_NAME (sh64_compact
,addi_compact
) },
5371 { SH64_COMPACT_INSN_ADDC_COMPACT
, SEM_FN_NAME (sh64_compact
,addc_compact
) },
5372 { SH64_COMPACT_INSN_ADDV_COMPACT
, SEM_FN_NAME (sh64_compact
,addv_compact
) },
5373 { SH64_COMPACT_INSN_AND_COMPACT
, SEM_FN_NAME (sh64_compact
,and_compact
) },
5374 { SH64_COMPACT_INSN_ANDI_COMPACT
, SEM_FN_NAME (sh64_compact
,andi_compact
) },
5375 { SH64_COMPACT_INSN_ANDB_COMPACT
, SEM_FN_NAME (sh64_compact
,andb_compact
) },
5376 { SH64_COMPACT_INSN_BF_COMPACT
, SEM_FN_NAME (sh64_compact
,bf_compact
) },
5377 { SH64_COMPACT_INSN_BFS_COMPACT
, SEM_FN_NAME (sh64_compact
,bfs_compact
) },
5378 { SH64_COMPACT_INSN_BRA_COMPACT
, SEM_FN_NAME (sh64_compact
,bra_compact
) },
5379 { SH64_COMPACT_INSN_BRAF_COMPACT
, SEM_FN_NAME (sh64_compact
,braf_compact
) },
5380 { SH64_COMPACT_INSN_BRK_COMPACT
, SEM_FN_NAME (sh64_compact
,brk_compact
) },
5381 { SH64_COMPACT_INSN_BSR_COMPACT
, SEM_FN_NAME (sh64_compact
,bsr_compact
) },
5382 { SH64_COMPACT_INSN_BSRF_COMPACT
, SEM_FN_NAME (sh64_compact
,bsrf_compact
) },
5383 { SH64_COMPACT_INSN_BT_COMPACT
, SEM_FN_NAME (sh64_compact
,bt_compact
) },
5384 { SH64_COMPACT_INSN_BTS_COMPACT
, SEM_FN_NAME (sh64_compact
,bts_compact
) },
5385 { SH64_COMPACT_INSN_CLRMAC_COMPACT
, SEM_FN_NAME (sh64_compact
,clrmac_compact
) },
5386 { SH64_COMPACT_INSN_CLRS_COMPACT
, SEM_FN_NAME (sh64_compact
,clrs_compact
) },
5387 { SH64_COMPACT_INSN_CLRT_COMPACT
, SEM_FN_NAME (sh64_compact
,clrt_compact
) },
5388 { SH64_COMPACT_INSN_CMPEQ_COMPACT
, SEM_FN_NAME (sh64_compact
,cmpeq_compact
) },
5389 { SH64_COMPACT_INSN_CMPEQI_COMPACT
, SEM_FN_NAME (sh64_compact
,cmpeqi_compact
) },
5390 { SH64_COMPACT_INSN_CMPGE_COMPACT
, SEM_FN_NAME (sh64_compact
,cmpge_compact
) },
5391 { SH64_COMPACT_INSN_CMPGT_COMPACT
, SEM_FN_NAME (sh64_compact
,cmpgt_compact
) },
5392 { SH64_COMPACT_INSN_CMPHI_COMPACT
, SEM_FN_NAME (sh64_compact
,cmphi_compact
) },
5393 { SH64_COMPACT_INSN_CMPHS_COMPACT
, SEM_FN_NAME (sh64_compact
,cmphs_compact
) },
5394 { SH64_COMPACT_INSN_CMPPL_COMPACT
, SEM_FN_NAME (sh64_compact
,cmppl_compact
) },
5395 { SH64_COMPACT_INSN_CMPPZ_COMPACT
, SEM_FN_NAME (sh64_compact
,cmppz_compact
) },
5396 { SH64_COMPACT_INSN_CMPSTR_COMPACT
, SEM_FN_NAME (sh64_compact
,cmpstr_compact
) },
5397 { SH64_COMPACT_INSN_DIV0S_COMPACT
, SEM_FN_NAME (sh64_compact
,div0s_compact
) },
5398 { SH64_COMPACT_INSN_DIV0U_COMPACT
, SEM_FN_NAME (sh64_compact
,div0u_compact
) },
5399 { SH64_COMPACT_INSN_DIV1_COMPACT
, SEM_FN_NAME (sh64_compact
,div1_compact
) },
5400 { SH64_COMPACT_INSN_DIVU_COMPACT
, SEM_FN_NAME (sh64_compact
,divu_compact
) },
5401 { SH64_COMPACT_INSN_MULR_COMPACT
, SEM_FN_NAME (sh64_compact
,mulr_compact
) },
5402 { SH64_COMPACT_INSN_DMULSL_COMPACT
, SEM_FN_NAME (sh64_compact
,dmulsl_compact
) },
5403 { SH64_COMPACT_INSN_DMULUL_COMPACT
, SEM_FN_NAME (sh64_compact
,dmulul_compact
) },
5404 { SH64_COMPACT_INSN_DT_COMPACT
, SEM_FN_NAME (sh64_compact
,dt_compact
) },
5405 { SH64_COMPACT_INSN_EXTSB_COMPACT
, SEM_FN_NAME (sh64_compact
,extsb_compact
) },
5406 { SH64_COMPACT_INSN_EXTSW_COMPACT
, SEM_FN_NAME (sh64_compact
,extsw_compact
) },
5407 { SH64_COMPACT_INSN_EXTUB_COMPACT
, SEM_FN_NAME (sh64_compact
,extub_compact
) },
5408 { SH64_COMPACT_INSN_EXTUW_COMPACT
, SEM_FN_NAME (sh64_compact
,extuw_compact
) },
5409 { SH64_COMPACT_INSN_FABS_COMPACT
, SEM_FN_NAME (sh64_compact
,fabs_compact
) },
5410 { SH64_COMPACT_INSN_FADD_COMPACT
, SEM_FN_NAME (sh64_compact
,fadd_compact
) },
5411 { SH64_COMPACT_INSN_FCMPEQ_COMPACT
, SEM_FN_NAME (sh64_compact
,fcmpeq_compact
) },
5412 { SH64_COMPACT_INSN_FCMPGT_COMPACT
, SEM_FN_NAME (sh64_compact
,fcmpgt_compact
) },
5413 { SH64_COMPACT_INSN_FCNVDS_COMPACT
, SEM_FN_NAME (sh64_compact
,fcnvds_compact
) },
5414 { SH64_COMPACT_INSN_FCNVSD_COMPACT
, SEM_FN_NAME (sh64_compact
,fcnvsd_compact
) },
5415 { SH64_COMPACT_INSN_FDIV_COMPACT
, SEM_FN_NAME (sh64_compact
,fdiv_compact
) },
5416 { SH64_COMPACT_INSN_FIPR_COMPACT
, SEM_FN_NAME (sh64_compact
,fipr_compact
) },
5417 { SH64_COMPACT_INSN_FLDS_COMPACT
, SEM_FN_NAME (sh64_compact
,flds_compact
) },
5418 { SH64_COMPACT_INSN_FLDI0_COMPACT
, SEM_FN_NAME (sh64_compact
,fldi0_compact
) },
5419 { SH64_COMPACT_INSN_FLDI1_COMPACT
, SEM_FN_NAME (sh64_compact
,fldi1_compact
) },
5420 { SH64_COMPACT_INSN_FLOAT_COMPACT
, SEM_FN_NAME (sh64_compact
,float_compact
) },
5421 { SH64_COMPACT_INSN_FMAC_COMPACT
, SEM_FN_NAME (sh64_compact
,fmac_compact
) },
5422 { SH64_COMPACT_INSN_FMOV1_COMPACT
, SEM_FN_NAME (sh64_compact
,fmov1_compact
) },
5423 { SH64_COMPACT_INSN_FMOV2_COMPACT
, SEM_FN_NAME (sh64_compact
,fmov2_compact
) },
5424 { SH64_COMPACT_INSN_FMOV3_COMPACT
, SEM_FN_NAME (sh64_compact
,fmov3_compact
) },
5425 { SH64_COMPACT_INSN_FMOV4_COMPACT
, SEM_FN_NAME (sh64_compact
,fmov4_compact
) },
5426 { SH64_COMPACT_INSN_FMOV5_COMPACT
, SEM_FN_NAME (sh64_compact
,fmov5_compact
) },
5427 { SH64_COMPACT_INSN_FMOV6_COMPACT
, SEM_FN_NAME (sh64_compact
,fmov6_compact
) },
5428 { SH64_COMPACT_INSN_FMOV7_COMPACT
, SEM_FN_NAME (sh64_compact
,fmov7_compact
) },
5429 { SH64_COMPACT_INSN_FMOV8_COMPACT
, SEM_FN_NAME (sh64_compact
,fmov8_compact
) },
5430 { SH64_COMPACT_INSN_FMOV9_COMPACT
, SEM_FN_NAME (sh64_compact
,fmov9_compact
) },
5431 { SH64_COMPACT_INSN_FMUL_COMPACT
, SEM_FN_NAME (sh64_compact
,fmul_compact
) },
5432 { SH64_COMPACT_INSN_FNEG_COMPACT
, SEM_FN_NAME (sh64_compact
,fneg_compact
) },
5433 { SH64_COMPACT_INSN_FRCHG_COMPACT
, SEM_FN_NAME (sh64_compact
,frchg_compact
) },
5434 { SH64_COMPACT_INSN_FSCHG_COMPACT
, SEM_FN_NAME (sh64_compact
,fschg_compact
) },
5435 { SH64_COMPACT_INSN_FSQRT_COMPACT
, SEM_FN_NAME (sh64_compact
,fsqrt_compact
) },
5436 { SH64_COMPACT_INSN_FSTS_COMPACT
, SEM_FN_NAME (sh64_compact
,fsts_compact
) },
5437 { SH64_COMPACT_INSN_FSUB_COMPACT
, SEM_FN_NAME (sh64_compact
,fsub_compact
) },
5438 { SH64_COMPACT_INSN_FTRC_COMPACT
, SEM_FN_NAME (sh64_compact
,ftrc_compact
) },
5439 { SH64_COMPACT_INSN_FTRV_COMPACT
, SEM_FN_NAME (sh64_compact
,ftrv_compact
) },
5440 { SH64_COMPACT_INSN_JMP_COMPACT
, SEM_FN_NAME (sh64_compact
,jmp_compact
) },
5441 { SH64_COMPACT_INSN_JSR_COMPACT
, SEM_FN_NAME (sh64_compact
,jsr_compact
) },
5442 { SH64_COMPACT_INSN_LDC_GBR_COMPACT
, SEM_FN_NAME (sh64_compact
,ldc_gbr_compact
) },
5443 { SH64_COMPACT_INSN_LDC_VBR_COMPACT
, SEM_FN_NAME (sh64_compact
,ldc_vbr_compact
) },
5444 { SH64_COMPACT_INSN_LDC_SR_COMPACT
, SEM_FN_NAME (sh64_compact
,ldc_sr_compact
) },
5445 { SH64_COMPACT_INSN_LDCL_GBR_COMPACT
, SEM_FN_NAME (sh64_compact
,ldcl_gbr_compact
) },
5446 { SH64_COMPACT_INSN_LDCL_VBR_COMPACT
, SEM_FN_NAME (sh64_compact
,ldcl_vbr_compact
) },
5447 { SH64_COMPACT_INSN_LDS_FPSCR_COMPACT
, SEM_FN_NAME (sh64_compact
,lds_fpscr_compact
) },
5448 { SH64_COMPACT_INSN_LDSL_FPSCR_COMPACT
, SEM_FN_NAME (sh64_compact
,ldsl_fpscr_compact
) },
5449 { SH64_COMPACT_INSN_LDS_FPUL_COMPACT
, SEM_FN_NAME (sh64_compact
,lds_fpul_compact
) },
5450 { SH64_COMPACT_INSN_LDSL_FPUL_COMPACT
, SEM_FN_NAME (sh64_compact
,ldsl_fpul_compact
) },
5451 { SH64_COMPACT_INSN_LDS_MACH_COMPACT
, SEM_FN_NAME (sh64_compact
,lds_mach_compact
) },
5452 { SH64_COMPACT_INSN_LDSL_MACH_COMPACT
, SEM_FN_NAME (sh64_compact
,ldsl_mach_compact
) },
5453 { SH64_COMPACT_INSN_LDS_MACL_COMPACT
, SEM_FN_NAME (sh64_compact
,lds_macl_compact
) },
5454 { SH64_COMPACT_INSN_LDSL_MACL_COMPACT
, SEM_FN_NAME (sh64_compact
,ldsl_macl_compact
) },
5455 { SH64_COMPACT_INSN_LDS_PR_COMPACT
, SEM_FN_NAME (sh64_compact
,lds_pr_compact
) },
5456 { SH64_COMPACT_INSN_LDSL_PR_COMPACT
, SEM_FN_NAME (sh64_compact
,ldsl_pr_compact
) },
5457 { SH64_COMPACT_INSN_MACL_COMPACT
, SEM_FN_NAME (sh64_compact
,macl_compact
) },
5458 { SH64_COMPACT_INSN_MACW_COMPACT
, SEM_FN_NAME (sh64_compact
,macw_compact
) },
5459 { SH64_COMPACT_INSN_MOV_COMPACT
, SEM_FN_NAME (sh64_compact
,mov_compact
) },
5460 { SH64_COMPACT_INSN_MOVI_COMPACT
, SEM_FN_NAME (sh64_compact
,movi_compact
) },
5461 { SH64_COMPACT_INSN_MOVI20_COMPACT
, SEM_FN_NAME (sh64_compact
,movi20_compact
) },
5462 { SH64_COMPACT_INSN_MOVB1_COMPACT
, SEM_FN_NAME (sh64_compact
,movb1_compact
) },
5463 { SH64_COMPACT_INSN_MOVB2_COMPACT
, SEM_FN_NAME (sh64_compact
,movb2_compact
) },
5464 { SH64_COMPACT_INSN_MOVB3_COMPACT
, SEM_FN_NAME (sh64_compact
,movb3_compact
) },
5465 { SH64_COMPACT_INSN_MOVB4_COMPACT
, SEM_FN_NAME (sh64_compact
,movb4_compact
) },
5466 { SH64_COMPACT_INSN_MOVB5_COMPACT
, SEM_FN_NAME (sh64_compact
,movb5_compact
) },
5467 { SH64_COMPACT_INSN_MOVB6_COMPACT
, SEM_FN_NAME (sh64_compact
,movb6_compact
) },
5468 { SH64_COMPACT_INSN_MOVB7_COMPACT
, SEM_FN_NAME (sh64_compact
,movb7_compact
) },
5469 { SH64_COMPACT_INSN_MOVB8_COMPACT
, SEM_FN_NAME (sh64_compact
,movb8_compact
) },
5470 { SH64_COMPACT_INSN_MOVB9_COMPACT
, SEM_FN_NAME (sh64_compact
,movb9_compact
) },
5471 { SH64_COMPACT_INSN_MOVB10_COMPACT
, SEM_FN_NAME (sh64_compact
,movb10_compact
) },
5472 { SH64_COMPACT_INSN_MOVL1_COMPACT
, SEM_FN_NAME (sh64_compact
,movl1_compact
) },
5473 { SH64_COMPACT_INSN_MOVL2_COMPACT
, SEM_FN_NAME (sh64_compact
,movl2_compact
) },
5474 { SH64_COMPACT_INSN_MOVL3_COMPACT
, SEM_FN_NAME (sh64_compact
,movl3_compact
) },
5475 { SH64_COMPACT_INSN_MOVL4_COMPACT
, SEM_FN_NAME (sh64_compact
,movl4_compact
) },
5476 { SH64_COMPACT_INSN_MOVL5_COMPACT
, SEM_FN_NAME (sh64_compact
,movl5_compact
) },
5477 { SH64_COMPACT_INSN_MOVL6_COMPACT
, SEM_FN_NAME (sh64_compact
,movl6_compact
) },
5478 { SH64_COMPACT_INSN_MOVL7_COMPACT
, SEM_FN_NAME (sh64_compact
,movl7_compact
) },
5479 { SH64_COMPACT_INSN_MOVL8_COMPACT
, SEM_FN_NAME (sh64_compact
,movl8_compact
) },
5480 { SH64_COMPACT_INSN_MOVL9_COMPACT
, SEM_FN_NAME (sh64_compact
,movl9_compact
) },
5481 { SH64_COMPACT_INSN_MOVL10_COMPACT
, SEM_FN_NAME (sh64_compact
,movl10_compact
) },
5482 { SH64_COMPACT_INSN_MOVL11_COMPACT
, SEM_FN_NAME (sh64_compact
,movl11_compact
) },
5483 { SH64_COMPACT_INSN_MOVL12_COMPACT
, SEM_FN_NAME (sh64_compact
,movl12_compact
) },
5484 { SH64_COMPACT_INSN_MOVL13_COMPACT
, SEM_FN_NAME (sh64_compact
,movl13_compact
) },
5485 { SH64_COMPACT_INSN_MOVW1_COMPACT
, SEM_FN_NAME (sh64_compact
,movw1_compact
) },
5486 { SH64_COMPACT_INSN_MOVW2_COMPACT
, SEM_FN_NAME (sh64_compact
,movw2_compact
) },
5487 { SH64_COMPACT_INSN_MOVW3_COMPACT
, SEM_FN_NAME (sh64_compact
,movw3_compact
) },
5488 { SH64_COMPACT_INSN_MOVW4_COMPACT
, SEM_FN_NAME (sh64_compact
,movw4_compact
) },
5489 { SH64_COMPACT_INSN_MOVW5_COMPACT
, SEM_FN_NAME (sh64_compact
,movw5_compact
) },
5490 { SH64_COMPACT_INSN_MOVW6_COMPACT
, SEM_FN_NAME (sh64_compact
,movw6_compact
) },
5491 { SH64_COMPACT_INSN_MOVW7_COMPACT
, SEM_FN_NAME (sh64_compact
,movw7_compact
) },
5492 { SH64_COMPACT_INSN_MOVW8_COMPACT
, SEM_FN_NAME (sh64_compact
,movw8_compact
) },
5493 { SH64_COMPACT_INSN_MOVW9_COMPACT
, SEM_FN_NAME (sh64_compact
,movw9_compact
) },
5494 { SH64_COMPACT_INSN_MOVW10_COMPACT
, SEM_FN_NAME (sh64_compact
,movw10_compact
) },
5495 { SH64_COMPACT_INSN_MOVW11_COMPACT
, SEM_FN_NAME (sh64_compact
,movw11_compact
) },
5496 { SH64_COMPACT_INSN_MOVA_COMPACT
, SEM_FN_NAME (sh64_compact
,mova_compact
) },
5497 { SH64_COMPACT_INSN_MOVCAL_COMPACT
, SEM_FN_NAME (sh64_compact
,movcal_compact
) },
5498 { SH64_COMPACT_INSN_MOVCOL_COMPACT
, SEM_FN_NAME (sh64_compact
,movcol_compact
) },
5499 { SH64_COMPACT_INSN_MOVT_COMPACT
, SEM_FN_NAME (sh64_compact
,movt_compact
) },
5500 { SH64_COMPACT_INSN_MOVUAL_COMPACT
, SEM_FN_NAME (sh64_compact
,movual_compact
) },
5501 { SH64_COMPACT_INSN_MOVUAL2_COMPACT
, SEM_FN_NAME (sh64_compact
,movual2_compact
) },
5502 { SH64_COMPACT_INSN_MULL_COMPACT
, SEM_FN_NAME (sh64_compact
,mull_compact
) },
5503 { SH64_COMPACT_INSN_MULSW_COMPACT
, SEM_FN_NAME (sh64_compact
,mulsw_compact
) },
5504 { SH64_COMPACT_INSN_MULUW_COMPACT
, SEM_FN_NAME (sh64_compact
,muluw_compact
) },
5505 { SH64_COMPACT_INSN_NEG_COMPACT
, SEM_FN_NAME (sh64_compact
,neg_compact
) },
5506 { SH64_COMPACT_INSN_NEGC_COMPACT
, SEM_FN_NAME (sh64_compact
,negc_compact
) },
5507 { SH64_COMPACT_INSN_NOP_COMPACT
, SEM_FN_NAME (sh64_compact
,nop_compact
) },
5508 { SH64_COMPACT_INSN_NOT_COMPACT
, SEM_FN_NAME (sh64_compact
,not_compact
) },
5509 { SH64_COMPACT_INSN_OCBI_COMPACT
, SEM_FN_NAME (sh64_compact
,ocbi_compact
) },
5510 { SH64_COMPACT_INSN_OCBP_COMPACT
, SEM_FN_NAME (sh64_compact
,ocbp_compact
) },
5511 { SH64_COMPACT_INSN_OCBWB_COMPACT
, SEM_FN_NAME (sh64_compact
,ocbwb_compact
) },
5512 { SH64_COMPACT_INSN_OR_COMPACT
, SEM_FN_NAME (sh64_compact
,or_compact
) },
5513 { SH64_COMPACT_INSN_ORI_COMPACT
, SEM_FN_NAME (sh64_compact
,ori_compact
) },
5514 { SH64_COMPACT_INSN_ORB_COMPACT
, SEM_FN_NAME (sh64_compact
,orb_compact
) },
5515 { SH64_COMPACT_INSN_PREF_COMPACT
, SEM_FN_NAME (sh64_compact
,pref_compact
) },
5516 { SH64_COMPACT_INSN_ROTCL_COMPACT
, SEM_FN_NAME (sh64_compact
,rotcl_compact
) },
5517 { SH64_COMPACT_INSN_ROTCR_COMPACT
, SEM_FN_NAME (sh64_compact
,rotcr_compact
) },
5518 { SH64_COMPACT_INSN_ROTL_COMPACT
, SEM_FN_NAME (sh64_compact
,rotl_compact
) },
5519 { SH64_COMPACT_INSN_ROTR_COMPACT
, SEM_FN_NAME (sh64_compact
,rotr_compact
) },
5520 { SH64_COMPACT_INSN_RTS_COMPACT
, SEM_FN_NAME (sh64_compact
,rts_compact
) },
5521 { SH64_COMPACT_INSN_SETS_COMPACT
, SEM_FN_NAME (sh64_compact
,sets_compact
) },
5522 { SH64_COMPACT_INSN_SETT_COMPACT
, SEM_FN_NAME (sh64_compact
,sett_compact
) },
5523 { SH64_COMPACT_INSN_SHAD_COMPACT
, SEM_FN_NAME (sh64_compact
,shad_compact
) },
5524 { SH64_COMPACT_INSN_SHAL_COMPACT
, SEM_FN_NAME (sh64_compact
,shal_compact
) },
5525 { SH64_COMPACT_INSN_SHAR_COMPACT
, SEM_FN_NAME (sh64_compact
,shar_compact
) },
5526 { SH64_COMPACT_INSN_SHLD_COMPACT
, SEM_FN_NAME (sh64_compact
,shld_compact
) },
5527 { SH64_COMPACT_INSN_SHLL_COMPACT
, SEM_FN_NAME (sh64_compact
,shll_compact
) },
5528 { SH64_COMPACT_INSN_SHLL2_COMPACT
, SEM_FN_NAME (sh64_compact
,shll2_compact
) },
5529 { SH64_COMPACT_INSN_SHLL8_COMPACT
, SEM_FN_NAME (sh64_compact
,shll8_compact
) },
5530 { SH64_COMPACT_INSN_SHLL16_COMPACT
, SEM_FN_NAME (sh64_compact
,shll16_compact
) },
5531 { SH64_COMPACT_INSN_SHLR_COMPACT
, SEM_FN_NAME (sh64_compact
,shlr_compact
) },
5532 { SH64_COMPACT_INSN_SHLR2_COMPACT
, SEM_FN_NAME (sh64_compact
,shlr2_compact
) },
5533 { SH64_COMPACT_INSN_SHLR8_COMPACT
, SEM_FN_NAME (sh64_compact
,shlr8_compact
) },
5534 { SH64_COMPACT_INSN_SHLR16_COMPACT
, SEM_FN_NAME (sh64_compact
,shlr16_compact
) },
5535 { SH64_COMPACT_INSN_STC_GBR_COMPACT
, SEM_FN_NAME (sh64_compact
,stc_gbr_compact
) },
5536 { SH64_COMPACT_INSN_STC_VBR_COMPACT
, SEM_FN_NAME (sh64_compact
,stc_vbr_compact
) },
5537 { SH64_COMPACT_INSN_STCL_GBR_COMPACT
, SEM_FN_NAME (sh64_compact
,stcl_gbr_compact
) },
5538 { SH64_COMPACT_INSN_STCL_VBR_COMPACT
, SEM_FN_NAME (sh64_compact
,stcl_vbr_compact
) },
5539 { SH64_COMPACT_INSN_STS_FPSCR_COMPACT
, SEM_FN_NAME (sh64_compact
,sts_fpscr_compact
) },
5540 { SH64_COMPACT_INSN_STSL_FPSCR_COMPACT
, SEM_FN_NAME (sh64_compact
,stsl_fpscr_compact
) },
5541 { SH64_COMPACT_INSN_STS_FPUL_COMPACT
, SEM_FN_NAME (sh64_compact
,sts_fpul_compact
) },
5542 { SH64_COMPACT_INSN_STSL_FPUL_COMPACT
, SEM_FN_NAME (sh64_compact
,stsl_fpul_compact
) },
5543 { SH64_COMPACT_INSN_STS_MACH_COMPACT
, SEM_FN_NAME (sh64_compact
,sts_mach_compact
) },
5544 { SH64_COMPACT_INSN_STSL_MACH_COMPACT
, SEM_FN_NAME (sh64_compact
,stsl_mach_compact
) },
5545 { SH64_COMPACT_INSN_STS_MACL_COMPACT
, SEM_FN_NAME (sh64_compact
,sts_macl_compact
) },
5546 { SH64_COMPACT_INSN_STSL_MACL_COMPACT
, SEM_FN_NAME (sh64_compact
,stsl_macl_compact
) },
5547 { SH64_COMPACT_INSN_STS_PR_COMPACT
, SEM_FN_NAME (sh64_compact
,sts_pr_compact
) },
5548 { SH64_COMPACT_INSN_STSL_PR_COMPACT
, SEM_FN_NAME (sh64_compact
,stsl_pr_compact
) },
5549 { SH64_COMPACT_INSN_SUB_COMPACT
, SEM_FN_NAME (sh64_compact
,sub_compact
) },
5550 { SH64_COMPACT_INSN_SUBC_COMPACT
, SEM_FN_NAME (sh64_compact
,subc_compact
) },
5551 { SH64_COMPACT_INSN_SUBV_COMPACT
, SEM_FN_NAME (sh64_compact
,subv_compact
) },
5552 { SH64_COMPACT_INSN_SWAPB_COMPACT
, SEM_FN_NAME (sh64_compact
,swapb_compact
) },
5553 { SH64_COMPACT_INSN_SWAPW_COMPACT
, SEM_FN_NAME (sh64_compact
,swapw_compact
) },
5554 { SH64_COMPACT_INSN_TASB_COMPACT
, SEM_FN_NAME (sh64_compact
,tasb_compact
) },
5555 { SH64_COMPACT_INSN_TRAPA_COMPACT
, SEM_FN_NAME (sh64_compact
,trapa_compact
) },
5556 { SH64_COMPACT_INSN_TST_COMPACT
, SEM_FN_NAME (sh64_compact
,tst_compact
) },
5557 { SH64_COMPACT_INSN_TSTI_COMPACT
, SEM_FN_NAME (sh64_compact
,tsti_compact
) },
5558 { SH64_COMPACT_INSN_TSTB_COMPACT
, SEM_FN_NAME (sh64_compact
,tstb_compact
) },
5559 { SH64_COMPACT_INSN_XOR_COMPACT
, SEM_FN_NAME (sh64_compact
,xor_compact
) },
5560 { SH64_COMPACT_INSN_XORI_COMPACT
, SEM_FN_NAME (sh64_compact
,xori_compact
) },
5561 { SH64_COMPACT_INSN_XORB_COMPACT
, SEM_FN_NAME (sh64_compact
,xorb_compact
) },
5562 { SH64_COMPACT_INSN_XTRCT_COMPACT
, SEM_FN_NAME (sh64_compact
,xtrct_compact
) },
5566 /* Add the semantic fns to IDESC_TABLE. */
5569 SEM_FN_NAME (sh64_compact
,init_idesc_table
) (SIM_CPU
*current_cpu
)
5571 IDESC
*idesc_table
= CPU_IDESC (current_cpu
);
5572 const struct sem_fn_desc
*sf
;
5573 int mach_num
= MACH_NUM (CPU_MACH (current_cpu
));
5575 for (sf
= &sem_fns
[0]; sf
->fn
!= 0; ++sf
)
5577 const CGEN_INSN
*insn
= idesc_table
[sf
->index
].idata
;
5578 int valid_p
= (CGEN_INSN_VIRTUAL_P (insn
)
5579 || CGEN_INSN_MACH_HAS_P (insn
, mach_num
));
5582 idesc_table
[sf
->index
].sem_fast
= sf
->fn
;
5584 idesc_table
[sf
->index
].sem_fast
= SEM_FN_NAME (sh64_compact
,x_invalid
);
5587 idesc_table
[sf
->index
].sem_full
= sf
->fn
;
5589 idesc_table
[sf
->index
].sem_full
= SEM_FN_NAME (sh64_compact
,x_invalid
);