1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2010 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
9 This file is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
33 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
34 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
36 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
39 /* This is used so that we can compile two copies of the semantic code,
40 one with full feature support and one without that runs fast(er).
41 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */
43 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
45 #define TRACE_RESULT(cpu, abuf, name, type, val)
47 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
50 /* x-invalid: --invalid-- */
53 SEM_FN_NAME (sh64_media
,x_invalid
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
55 #define FLD(f) abuf->fields.fmt_empty.f
56 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
57 int UNUSED written
= 0;
58 IADDR UNUSED pc
= abuf
->addr
;
59 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
62 /* Update the recorded pc in the cpu state struct.
63 Only necessary for WITH_SCACHE case, but to avoid the
64 conditional compilation .... */
66 /* Virtual insns have zero size. Overwrite vpc with address of next insn
67 using the default-insn-bitsize spec. When executing insns in parallel
68 we may want to queue the fault and continue execution. */
69 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
70 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
77 /* x-after: --after-- */
80 SEM_FN_NAME (sh64_media
,x_after
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
82 #define FLD(f) abuf->fields.fmt_empty.f
83 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
84 int UNUSED written
= 0;
85 IADDR UNUSED pc
= abuf
->addr
;
86 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
89 #if WITH_SCACHE_PBB_SH64_MEDIA
90 sh64_media_pbb_after (current_cpu
, sem_arg
);
98 /* x-before: --before-- */
101 SEM_FN_NAME (sh64_media
,x_before
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
103 #define FLD(f) abuf->fields.fmt_empty.f
104 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
105 int UNUSED written
= 0;
106 IADDR UNUSED pc
= abuf
->addr
;
107 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
110 #if WITH_SCACHE_PBB_SH64_MEDIA
111 sh64_media_pbb_before (current_cpu
, sem_arg
);
119 /* x-cti-chain: --cti-chain-- */
122 SEM_FN_NAME (sh64_media
,x_cti_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
124 #define FLD(f) abuf->fields.fmt_empty.f
125 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
126 int UNUSED written
= 0;
127 IADDR UNUSED pc
= abuf
->addr
;
128 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
131 #if WITH_SCACHE_PBB_SH64_MEDIA
133 vpc
= sh64_media_pbb_cti_chain (current_cpu
, sem_arg
,
134 pbb_br_type
, pbb_br_npc
);
137 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
138 vpc
= sh64_media_pbb_cti_chain (current_cpu
, sem_arg
,
139 CPU_PBB_BR_TYPE (current_cpu
),
140 CPU_PBB_BR_NPC (current_cpu
));
149 /* x-chain: --chain-- */
152 SEM_FN_NAME (sh64_media
,x_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
154 #define FLD(f) abuf->fields.fmt_empty.f
155 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
156 int UNUSED written
= 0;
157 IADDR UNUSED pc
= abuf
->addr
;
158 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
161 #if WITH_SCACHE_PBB_SH64_MEDIA
162 vpc
= sh64_media_pbb_chain (current_cpu
, sem_arg
);
173 /* x-begin: --begin-- */
176 SEM_FN_NAME (sh64_media
,x_begin
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
178 #define FLD(f) abuf->fields.fmt_empty.f
179 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
180 int UNUSED written
= 0;
181 IADDR UNUSED pc
= abuf
->addr
;
182 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
185 #if WITH_SCACHE_PBB_SH64_MEDIA
186 #if defined DEFINE_SWITCH || defined FAST_P
187 /* In the switch case FAST_P is a constant, allowing several optimizations
188 in any called inline functions. */
189 vpc
= sh64_media_pbb_begin (current_cpu
, FAST_P
);
191 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
192 vpc
= sh64_media_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
194 vpc
= sh64_media_pbb_begin (current_cpu
, 0);
204 /* add: add $rm, $rn, $rd */
207 SEM_FN_NAME (sh64_media
,add
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
209 #define FLD(f) abuf->fields.sfmt_add.f
210 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
211 int UNUSED written
= 0;
212 IADDR UNUSED pc
= abuf
->addr
;
213 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
216 DI opval
= ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
217 SET_H_GR (FLD (f_dest
), opval
);
218 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
225 /* addl: add.l $rm, $rn, $rd */
228 SEM_FN_NAME (sh64_media
,addl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
230 #define FLD(f) abuf->fields.sfmt_add.f
231 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
232 int UNUSED written
= 0;
233 IADDR UNUSED pc
= abuf
->addr
;
234 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
237 DI opval
= ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
238 SET_H_GR (FLD (f_dest
), opval
);
239 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
246 /* addi: addi $rm, $disp10, $rd */
249 SEM_FN_NAME (sh64_media
,addi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
251 #define FLD(f) abuf->fields.sfmt_addi.f
252 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
253 int UNUSED written
= 0;
254 IADDR UNUSED pc
= abuf
->addr
;
255 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
258 DI opval
= ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)));
259 SET_H_GR (FLD (f_dest
), opval
);
260 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
267 /* addil: addi.l $rm, $disp10, $rd */
270 SEM_FN_NAME (sh64_media
,addil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
272 #define FLD(f) abuf->fields.sfmt_addi.f
273 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
274 int UNUSED written
= 0;
275 IADDR UNUSED pc
= abuf
->addr
;
276 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
279 DI opval
= EXTSIDI (ADDSI (EXTSISI (FLD (f_disp10
)), SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)));
280 SET_H_GR (FLD (f_dest
), opval
);
281 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
288 /* addzl: addz.l $rm, $rn, $rd */
291 SEM_FN_NAME (sh64_media
,addzl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
293 #define FLD(f) abuf->fields.sfmt_add.f
294 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
295 int UNUSED written
= 0;
296 IADDR UNUSED pc
= abuf
->addr
;
297 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
300 DI opval
= ZEXTSIDI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
301 SET_H_GR (FLD (f_dest
), opval
);
302 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
309 /* alloco: alloco $rm, $disp6x32 */
312 SEM_FN_NAME (sh64_media
,alloco
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
314 #define FLD(f) abuf->fields.sfmt_xori.f
315 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
316 int UNUSED written
= 0;
317 IADDR UNUSED pc
= abuf
->addr
;
318 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
322 DI opval
= GET_H_GR (FLD (f_left
));
323 SET_H_GR (FLD (f_left
), opval
);
324 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
333 /* and: and $rm, $rn, $rd */
336 SEM_FN_NAME (sh64_media
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
338 #define FLD(f) abuf->fields.sfmt_add.f
339 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
340 int UNUSED written
= 0;
341 IADDR UNUSED pc
= abuf
->addr
;
342 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
345 DI opval
= ANDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
346 SET_H_GR (FLD (f_dest
), opval
);
347 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
354 /* andc: andc $rm, $rn, $rd */
357 SEM_FN_NAME (sh64_media
,andc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
359 #define FLD(f) abuf->fields.sfmt_add.f
360 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
361 int UNUSED written
= 0;
362 IADDR UNUSED pc
= abuf
->addr
;
363 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
366 DI opval
= ANDDI (GET_H_GR (FLD (f_left
)), INVDI (GET_H_GR (FLD (f_right
))));
367 SET_H_GR (FLD (f_dest
), opval
);
368 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
375 /* andi: andi $rm, $disp10, $rd */
378 SEM_FN_NAME (sh64_media
,andi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
380 #define FLD(f) abuf->fields.sfmt_addi.f
381 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
382 int UNUSED written
= 0;
383 IADDR UNUSED pc
= abuf
->addr
;
384 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
387 DI opval
= ANDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)));
388 SET_H_GR (FLD (f_dest
), opval
);
389 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
396 /* beq: beq$likely $rm, $rn, $tra */
399 SEM_FN_NAME (sh64_media
,beq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
401 #define FLD(f) abuf->fields.sfmt_beq.f
402 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
403 int UNUSED written
= 0;
404 IADDR UNUSED pc
= abuf
->addr
;
406 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
410 if (EQDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
412 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
413 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
415 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
420 abuf
->written
= written
;
421 SEM_BRANCH_FINI (vpc
);
426 /* beqi: beqi$likely $rm, $imm6, $tra */
429 SEM_FN_NAME (sh64_media
,beqi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
431 #define FLD(f) abuf->fields.sfmt_beqi.f
432 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
433 int UNUSED written
= 0;
434 IADDR UNUSED pc
= abuf
->addr
;
436 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
440 if (EQDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm6
)))) {
442 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
443 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
445 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
450 abuf
->written
= written
;
451 SEM_BRANCH_FINI (vpc
);
456 /* bge: bge$likely $rm, $rn, $tra */
459 SEM_FN_NAME (sh64_media
,bge
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
461 #define FLD(f) abuf->fields.sfmt_beq.f
462 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
463 int UNUSED written
= 0;
464 IADDR UNUSED pc
= abuf
->addr
;
466 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
470 if (GEDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
472 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
473 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
475 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
480 abuf
->written
= written
;
481 SEM_BRANCH_FINI (vpc
);
486 /* bgeu: bgeu$likely $rm, $rn, $tra */
489 SEM_FN_NAME (sh64_media
,bgeu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
491 #define FLD(f) abuf->fields.sfmt_beq.f
492 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
493 int UNUSED written
= 0;
494 IADDR UNUSED pc
= abuf
->addr
;
496 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
500 if (GEUDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
502 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
503 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
505 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
510 abuf
->written
= written
;
511 SEM_BRANCH_FINI (vpc
);
516 /* bgt: bgt$likely $rm, $rn, $tra */
519 SEM_FN_NAME (sh64_media
,bgt
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
521 #define FLD(f) abuf->fields.sfmt_beq.f
522 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
523 int UNUSED written
= 0;
524 IADDR UNUSED pc
= abuf
->addr
;
526 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
530 if (GTDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
532 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
533 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
535 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
540 abuf
->written
= written
;
541 SEM_BRANCH_FINI (vpc
);
546 /* bgtu: bgtu$likely $rm, $rn, $tra */
549 SEM_FN_NAME (sh64_media
,bgtu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
551 #define FLD(f) abuf->fields.sfmt_beq.f
552 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
553 int UNUSED written
= 0;
554 IADDR UNUSED pc
= abuf
->addr
;
556 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
560 if (GTUDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
562 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
563 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
565 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
570 abuf
->written
= written
;
571 SEM_BRANCH_FINI (vpc
);
576 /* blink: blink $trb, $rd */
579 SEM_FN_NAME (sh64_media
,blink
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
581 #define FLD(f) abuf->fields.sfmt_blink.f
582 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
583 int UNUSED written
= 0;
584 IADDR UNUSED pc
= abuf
->addr
;
586 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
590 DI opval
= ORDI (ADDDI (pc
, 4), 1);
591 SET_H_GR (FLD (f_dest
), opval
);
592 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
595 UDI opval
= CPU (h_tr
[FLD (f_trb
)]);
596 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
597 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
599 if (EQSI (FLD (f_dest
), 63)) {
606 SEM_BRANCH_FINI (vpc
);
611 /* bne: bne$likely $rm, $rn, $tra */
614 SEM_FN_NAME (sh64_media
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
616 #define FLD(f) abuf->fields.sfmt_beq.f
617 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
618 int UNUSED written
= 0;
619 IADDR UNUSED pc
= abuf
->addr
;
621 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
625 if (NEDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
627 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
628 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
630 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
635 abuf
->written
= written
;
636 SEM_BRANCH_FINI (vpc
);
641 /* bnei: bnei$likely $rm, $imm6, $tra */
644 SEM_FN_NAME (sh64_media
,bnei
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
646 #define FLD(f) abuf->fields.sfmt_beqi.f
647 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
648 int UNUSED written
= 0;
649 IADDR UNUSED pc
= abuf
->addr
;
651 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
655 if (NEDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm6
)))) {
657 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
658 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
660 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
665 abuf
->written
= written
;
666 SEM_BRANCH_FINI (vpc
);
674 SEM_FN_NAME (sh64_media
,brk
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
676 #define FLD(f) abuf->fields.fmt_empty.f
677 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
678 int UNUSED written
= 0;
679 IADDR UNUSED pc
= abuf
->addr
;
680 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
682 sh64_break (current_cpu
, pc
);
688 /* byterev: byterev $rm, $rd */
691 SEM_FN_NAME (sh64_media
,byterev
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
693 #define FLD(f) abuf->fields.sfmt_xori.f
694 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
695 int UNUSED written
= 0;
696 IADDR UNUSED pc
= abuf
->addr
;
697 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
702 tmp_source
= GET_H_GR (FLD (f_left
));
705 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
706 tmp_source
= SRLDI (tmp_source
, 8);
709 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
710 tmp_source
= SRLDI (tmp_source
, 8);
713 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
714 tmp_source
= SRLDI (tmp_source
, 8);
717 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
718 tmp_source
= SRLDI (tmp_source
, 8);
721 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
722 tmp_source
= SRLDI (tmp_source
, 8);
725 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
726 tmp_source
= SRLDI (tmp_source
, 8);
729 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
730 tmp_source
= SRLDI (tmp_source
, 8);
733 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
734 tmp_source
= SRLDI (tmp_source
, 8);
737 DI opval
= tmp_result
;
738 SET_H_GR (FLD (f_dest
), opval
);
739 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
747 /* cmpeq: cmpeq $rm, $rn, $rd */
750 SEM_FN_NAME (sh64_media
,cmpeq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
752 #define FLD(f) abuf->fields.sfmt_add.f
753 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
754 int UNUSED written
= 0;
755 IADDR UNUSED pc
= abuf
->addr
;
756 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
759 DI opval
= ((EQDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) ? (1) : (0));
760 SET_H_GR (FLD (f_dest
), opval
);
761 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
768 /* cmpgt: cmpgt $rm, $rn, $rd */
771 SEM_FN_NAME (sh64_media
,cmpgt
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
773 #define FLD(f) abuf->fields.sfmt_add.f
774 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
775 int UNUSED written
= 0;
776 IADDR UNUSED pc
= abuf
->addr
;
777 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
780 DI opval
= ((GTDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) ? (1) : (0));
781 SET_H_GR (FLD (f_dest
), opval
);
782 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
789 /* cmpgtu: cmpgtu $rm,$rn, $rd */
792 SEM_FN_NAME (sh64_media
,cmpgtu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
794 #define FLD(f) abuf->fields.sfmt_add.f
795 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
796 int UNUSED written
= 0;
797 IADDR UNUSED pc
= abuf
->addr
;
798 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
801 DI opval
= ((GTUDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) ? (1) : (0));
802 SET_H_GR (FLD (f_dest
), opval
);
803 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
810 /* cmveq: cmveq $rm, $rn, $rd */
813 SEM_FN_NAME (sh64_media
,cmveq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
815 #define FLD(f) abuf->fields.sfmt_add.f
816 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
817 int UNUSED written
= 0;
818 IADDR UNUSED pc
= abuf
->addr
;
819 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
821 if (EQDI (GET_H_GR (FLD (f_left
)), 0)) {
823 DI opval
= GET_H_GR (FLD (f_right
));
824 SET_H_GR (FLD (f_dest
), opval
);
826 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
830 abuf
->written
= written
;
835 /* cmvne: cmvne $rm, $rn, $rd */
838 SEM_FN_NAME (sh64_media
,cmvne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
840 #define FLD(f) abuf->fields.sfmt_add.f
841 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
842 int UNUSED written
= 0;
843 IADDR UNUSED pc
= abuf
->addr
;
844 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
846 if (NEDI (GET_H_GR (FLD (f_left
)), 0)) {
848 DI opval
= GET_H_GR (FLD (f_right
));
849 SET_H_GR (FLD (f_dest
), opval
);
851 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
855 abuf
->written
= written
;
860 /* fabsd: fabs.d $drgh, $drf */
863 SEM_FN_NAME (sh64_media
,fabsd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
865 #define FLD(f) abuf->fields.sfmt_fabsd.f
866 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
867 int UNUSED written
= 0;
868 IADDR UNUSED pc
= abuf
->addr
;
869 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
872 DF opval
= sh64_fabsd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
873 SET_H_DR (FLD (f_dest
), opval
);
874 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
881 /* fabss: fabs.s $frgh, $frf */
884 SEM_FN_NAME (sh64_media
,fabss
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
886 #define FLD(f) abuf->fields.sfmt_fabsd.f
887 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
888 int UNUSED written
= 0;
889 IADDR UNUSED pc
= abuf
->addr
;
890 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
893 SF opval
= sh64_fabss (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
894 CPU (h_fr
[FLD (f_dest
)]) = opval
;
895 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
902 /* faddd: fadd.d $drg, $drh, $drf */
905 SEM_FN_NAME (sh64_media
,faddd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
907 #define FLD(f) abuf->fields.sfmt_add.f
908 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
909 int UNUSED written
= 0;
910 IADDR UNUSED pc
= abuf
->addr
;
911 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
914 DF opval
= sh64_faddd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
915 SET_H_DR (FLD (f_dest
), opval
);
916 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
923 /* fadds: fadd.s $frg, $frh, $frf */
926 SEM_FN_NAME (sh64_media
,fadds
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
928 #define FLD(f) abuf->fields.sfmt_add.f
929 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
930 int UNUSED written
= 0;
931 IADDR UNUSED pc
= abuf
->addr
;
932 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
935 SF opval
= sh64_fadds (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
936 CPU (h_fr
[FLD (f_dest
)]) = opval
;
937 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
944 /* fcmpeqd: fcmpeq.d $drg, $drh, $rd */
947 SEM_FN_NAME (sh64_media
,fcmpeqd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
949 #define FLD(f) abuf->fields.sfmt_add.f
950 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
951 int UNUSED written
= 0;
952 IADDR UNUSED pc
= abuf
->addr
;
953 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
956 DI opval
= ZEXTBIDI (sh64_fcmpeqd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
957 SET_H_GR (FLD (f_dest
), opval
);
958 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
965 /* fcmpeqs: fcmpeq.s $frg, $frh, $rd */
968 SEM_FN_NAME (sh64_media
,fcmpeqs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
970 #define FLD(f) abuf->fields.sfmt_add.f
971 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
972 int UNUSED written
= 0;
973 IADDR UNUSED pc
= abuf
->addr
;
974 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
977 DI opval
= ZEXTBIDI (sh64_fcmpeqs (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
978 SET_H_GR (FLD (f_dest
), opval
);
979 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
986 /* fcmpged: fcmpge.d $drg, $drh, $rd */
989 SEM_FN_NAME (sh64_media
,fcmpged
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
991 #define FLD(f) abuf->fields.sfmt_add.f
992 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
993 int UNUSED written
= 0;
994 IADDR UNUSED pc
= abuf
->addr
;
995 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
998 DI opval
= ZEXTBIDI (sh64_fcmpged (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
999 SET_H_GR (FLD (f_dest
), opval
);
1000 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1007 /* fcmpges: fcmpge.s $frg, $frh, $rd */
1010 SEM_FN_NAME (sh64_media
,fcmpges
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1012 #define FLD(f) abuf->fields.sfmt_add.f
1013 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1014 int UNUSED written
= 0;
1015 IADDR UNUSED pc
= abuf
->addr
;
1016 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1019 DI opval
= ZEXTBIDI (sh64_fcmpges (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
1020 SET_H_GR (FLD (f_dest
), opval
);
1021 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1028 /* fcmpgtd: fcmpgt.d $drg, $drh, $rd */
1031 SEM_FN_NAME (sh64_media
,fcmpgtd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1033 #define FLD(f) abuf->fields.sfmt_add.f
1034 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1035 int UNUSED written
= 0;
1036 IADDR UNUSED pc
= abuf
->addr
;
1037 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1040 DI opval
= ZEXTBIDI (sh64_fcmpgtd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
1041 SET_H_GR (FLD (f_dest
), opval
);
1042 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1049 /* fcmpgts: fcmpgt.s $frg, $frh, $rd */
1052 SEM_FN_NAME (sh64_media
,fcmpgts
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1054 #define FLD(f) abuf->fields.sfmt_add.f
1055 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1056 int UNUSED written
= 0;
1057 IADDR UNUSED pc
= abuf
->addr
;
1058 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1061 DI opval
= ZEXTBIDI (sh64_fcmpgts (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
1062 SET_H_GR (FLD (f_dest
), opval
);
1063 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1070 /* fcmpund: fcmpun.d $drg, $drh, $rd */
1073 SEM_FN_NAME (sh64_media
,fcmpund
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1075 #define FLD(f) abuf->fields.sfmt_add.f
1076 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1077 int UNUSED written
= 0;
1078 IADDR UNUSED pc
= abuf
->addr
;
1079 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1082 DI opval
= ZEXTBIDI (sh64_fcmpund (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
1083 SET_H_GR (FLD (f_dest
), opval
);
1084 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1091 /* fcmpuns: fcmpun.s $frg, $frh, $rd */
1094 SEM_FN_NAME (sh64_media
,fcmpuns
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1096 #define FLD(f) abuf->fields.sfmt_add.f
1097 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1098 int UNUSED written
= 0;
1099 IADDR UNUSED pc
= abuf
->addr
;
1100 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1103 DI opval
= ZEXTBIDI (sh64_fcmpuns (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
1104 SET_H_GR (FLD (f_dest
), opval
);
1105 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1112 /* fcnvds: fcnv.ds $drgh, $frf */
1115 SEM_FN_NAME (sh64_media
,fcnvds
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1117 #define FLD(f) abuf->fields.sfmt_fabsd.f
1118 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1119 int UNUSED written
= 0;
1120 IADDR UNUSED pc
= abuf
->addr
;
1121 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1124 SF opval
= sh64_fcnvds (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1125 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1126 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1133 /* fcnvsd: fcnv.sd $frgh, $drf */
1136 SEM_FN_NAME (sh64_media
,fcnvsd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1138 #define FLD(f) abuf->fields.sfmt_fabsd.f
1139 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1140 int UNUSED written
= 0;
1141 IADDR UNUSED pc
= abuf
->addr
;
1142 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1145 DF opval
= sh64_fcnvsd (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1146 SET_H_DR (FLD (f_dest
), opval
);
1147 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1154 /* fdivd: fdiv.d $drg, $drh, $drf */
1157 SEM_FN_NAME (sh64_media
,fdivd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1159 #define FLD(f) abuf->fields.sfmt_add.f
1160 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1161 int UNUSED written
= 0;
1162 IADDR UNUSED pc
= abuf
->addr
;
1163 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1166 DF opval
= sh64_fdivd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
1167 SET_H_DR (FLD (f_dest
), opval
);
1168 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1175 /* fdivs: fdiv.s $frg, $frh, $frf */
1178 SEM_FN_NAME (sh64_media
,fdivs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1180 #define FLD(f) abuf->fields.sfmt_add.f
1181 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1182 int UNUSED written
= 0;
1183 IADDR UNUSED pc
= abuf
->addr
;
1184 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1187 SF opval
= sh64_fdivs (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
1188 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1189 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1196 /* fgetscr: fgetscr $frf */
1199 SEM_FN_NAME (sh64_media
,fgetscr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1201 #define FLD(f) abuf->fields.sfmt_shori.f
1202 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1203 int UNUSED written
= 0;
1204 IADDR UNUSED pc
= abuf
->addr
;
1205 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1208 SF opval
= SUBWORDSISF (CPU (h_fpscr
));
1209 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1210 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1217 /* fiprs: fipr.s $fvg, $fvh, $frf */
1220 SEM_FN_NAME (sh64_media
,fiprs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1222 #define FLD(f) abuf->fields.sfmt_add.f
1223 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1224 int UNUSED written
= 0;
1225 IADDR UNUSED pc
= abuf
->addr
;
1226 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1230 SF opval
= GET_H_FV (FLD (f_left
));
1231 SET_H_FV (FLD (f_left
), opval
);
1232 TRACE_RESULT (current_cpu
, abuf
, "fv", 'f', opval
);
1235 SF opval
= GET_H_FV (FLD (f_right
));
1236 SET_H_FV (FLD (f_right
), opval
);
1237 TRACE_RESULT (current_cpu
, abuf
, "fv", 'f', opval
);
1240 SF opval
= sh64_fiprs (current_cpu
, FLD (f_left
), FLD (f_right
));
1241 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1242 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1250 /* fldd: fld.d $rm, $disp10x8, $drf */
1253 SEM_FN_NAME (sh64_media
,fldd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1255 #define FLD(f) abuf->fields.sfmt_fldd.f
1256 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1257 int UNUSED written
= 0;
1258 IADDR UNUSED pc
= abuf
->addr
;
1259 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1262 DF opval
= GETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
)));
1263 SET_H_DR (FLD (f_dest
), opval
);
1264 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1271 /* fldp: fld.p $rm, $disp10x8, $fpf */
1274 SEM_FN_NAME (sh64_media
,fldp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1276 #define FLD(f) abuf->fields.sfmt_fldd.f
1277 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1278 int UNUSED written
= 0;
1279 IADDR UNUSED pc
= abuf
->addr
;
1280 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1284 SF opval
= GET_H_FP (FLD (f_dest
));
1285 SET_H_FP (FLD (f_dest
), opval
);
1286 TRACE_RESULT (current_cpu
, abuf
, "fp", 'f', opval
);
1288 sh64_fldp (current_cpu
, pc
, GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
), FLD (f_dest
));
1295 /* flds: fld.s $rm, $disp10x4, $frf */
1298 SEM_FN_NAME (sh64_media
,flds
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1300 #define FLD(f) abuf->fields.sfmt_flds.f
1301 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1302 int UNUSED written
= 0;
1303 IADDR UNUSED pc
= abuf
->addr
;
1304 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1307 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x4
)));
1308 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1309 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1316 /* fldxd: fldx.d $rm, $rn, $drf */
1319 SEM_FN_NAME (sh64_media
,fldxd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1321 #define FLD(f) abuf->fields.sfmt_add.f
1322 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1323 int UNUSED written
= 0;
1324 IADDR UNUSED pc
= abuf
->addr
;
1325 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1328 DF opval
= GETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
1329 SET_H_DR (FLD (f_dest
), opval
);
1330 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1337 /* fldxp: fldx.p $rm, $rn, $fpf */
1340 SEM_FN_NAME (sh64_media
,fldxp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1342 #define FLD(f) abuf->fields.sfmt_add.f
1343 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1344 int UNUSED written
= 0;
1345 IADDR UNUSED pc
= abuf
->addr
;
1346 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1350 SF opval
= GET_H_FP (FLD (f_dest
));
1351 SET_H_FP (FLD (f_dest
), opval
);
1352 TRACE_RESULT (current_cpu
, abuf
, "fp", 'f', opval
);
1354 sh64_fldp (current_cpu
, pc
, GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)), FLD (f_dest
));
1361 /* fldxs: fldx.s $rm, $rn, $frf */
1364 SEM_FN_NAME (sh64_media
,fldxs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1366 #define FLD(f) abuf->fields.sfmt_add.f
1367 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1368 int UNUSED written
= 0;
1369 IADDR UNUSED pc
= abuf
->addr
;
1370 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1373 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
1374 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1375 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1382 /* floatld: float.ld $frgh, $drf */
1385 SEM_FN_NAME (sh64_media
,floatld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1387 #define FLD(f) abuf->fields.sfmt_fabsd.f
1388 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1389 int UNUSED written
= 0;
1390 IADDR UNUSED pc
= abuf
->addr
;
1391 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1394 DF opval
= sh64_floatld (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1395 SET_H_DR (FLD (f_dest
), opval
);
1396 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1403 /* floatls: float.ls $frgh, $frf */
1406 SEM_FN_NAME (sh64_media
,floatls
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1408 #define FLD(f) abuf->fields.sfmt_fabsd.f
1409 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1410 int UNUSED written
= 0;
1411 IADDR UNUSED pc
= abuf
->addr
;
1412 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1415 SF opval
= sh64_floatls (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1416 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1417 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1424 /* floatqd: float.qd $drgh, $drf */
1427 SEM_FN_NAME (sh64_media
,floatqd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1429 #define FLD(f) abuf->fields.sfmt_fabsd.f
1430 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1431 int UNUSED written
= 0;
1432 IADDR UNUSED pc
= abuf
->addr
;
1433 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1436 DF opval
= sh64_floatqd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1437 SET_H_DR (FLD (f_dest
), opval
);
1438 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1445 /* floatqs: float.qs $drgh, $frf */
1448 SEM_FN_NAME (sh64_media
,floatqs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1450 #define FLD(f) abuf->fields.sfmt_fabsd.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
, 4);
1457 SF opval
= sh64_floatqs (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1458 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1459 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1466 /* fmacs: fmac.s $frg, $frh, $frf */
1469 SEM_FN_NAME (sh64_media
,fmacs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1471 #define FLD(f) abuf->fields.sfmt_add.f
1472 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1473 int UNUSED written
= 0;
1474 IADDR UNUSED pc
= abuf
->addr
;
1475 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1478 SF opval
= sh64_fadds (current_cpu
, CPU (h_fr
[FLD (f_dest
)]), sh64_fmuls (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
1479 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1480 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1487 /* fmovd: fmov.d $drgh, $drf */
1490 SEM_FN_NAME (sh64_media
,fmovd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1492 #define FLD(f) abuf->fields.sfmt_fabsd.f
1493 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1494 int UNUSED written
= 0;
1495 IADDR UNUSED pc
= abuf
->addr
;
1496 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1499 DF opval
= GET_H_DR (FLD (f_left_right
));
1500 SET_H_DR (FLD (f_dest
), opval
);
1501 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1508 /* fmovdq: fmov.dq $drgh, $rd */
1511 SEM_FN_NAME (sh64_media
,fmovdq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1513 #define FLD(f) abuf->fields.sfmt_fabsd.f
1514 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1515 int UNUSED written
= 0;
1516 IADDR UNUSED pc
= abuf
->addr
;
1517 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1520 DI opval
= SUBWORDDFDI (GET_H_DR (FLD (f_left_right
)));
1521 SET_H_GR (FLD (f_dest
), opval
);
1522 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1529 /* fmovls: fmov.ls $rm, $frf */
1532 SEM_FN_NAME (sh64_media
,fmovls
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1534 #define FLD(f) abuf->fields.sfmt_xori.f
1535 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1536 int UNUSED written
= 0;
1537 IADDR UNUSED pc
= abuf
->addr
;
1538 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1541 SF opval
= SUBWORDSISF (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1));
1542 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1543 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1550 /* fmovqd: fmov.qd $rm, $drf */
1553 SEM_FN_NAME (sh64_media
,fmovqd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1555 #define FLD(f) abuf->fields.sfmt_xori.f
1556 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1557 int UNUSED written
= 0;
1558 IADDR UNUSED pc
= abuf
->addr
;
1559 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1562 DF opval
= SUBWORDDIDF (GET_H_GR (FLD (f_left
)));
1563 SET_H_DR (FLD (f_dest
), opval
);
1564 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1571 /* fmovs: fmov.s $frgh, $frf */
1574 SEM_FN_NAME (sh64_media
,fmovs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1576 #define FLD(f) abuf->fields.sfmt_fabsd.f
1577 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1578 int UNUSED written
= 0;
1579 IADDR UNUSED pc
= abuf
->addr
;
1580 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1583 SF opval
= CPU (h_fr
[FLD (f_left_right
)]);
1584 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1585 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1592 /* fmovsl: fmov.sl $frgh, $rd */
1595 SEM_FN_NAME (sh64_media
,fmovsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1597 #define FLD(f) abuf->fields.sfmt_fabsd.f
1598 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1599 int UNUSED written
= 0;
1600 IADDR UNUSED pc
= abuf
->addr
;
1601 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1604 DI opval
= EXTSIDI (SUBWORDSFSI (CPU (h_fr
[FLD (f_left_right
)])));
1605 SET_H_GR (FLD (f_dest
), opval
);
1606 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1613 /* fmuld: fmul.d $drg, $drh, $drf */
1616 SEM_FN_NAME (sh64_media
,fmuld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1618 #define FLD(f) abuf->fields.sfmt_add.f
1619 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1620 int UNUSED written
= 0;
1621 IADDR UNUSED pc
= abuf
->addr
;
1622 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1625 DF opval
= sh64_fmuld (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
1626 SET_H_DR (FLD (f_dest
), opval
);
1627 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1634 /* fmuls: fmul.s $frg, $frh, $frf */
1637 SEM_FN_NAME (sh64_media
,fmuls
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1639 #define FLD(f) abuf->fields.sfmt_add.f
1640 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1641 int UNUSED written
= 0;
1642 IADDR UNUSED pc
= abuf
->addr
;
1643 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1646 SF opval
= sh64_fmuls (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
1647 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1648 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1655 /* fnegd: fneg.d $drgh, $drf */
1658 SEM_FN_NAME (sh64_media
,fnegd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1660 #define FLD(f) abuf->fields.sfmt_fabsd.f
1661 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1662 int UNUSED written
= 0;
1663 IADDR UNUSED pc
= abuf
->addr
;
1664 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1667 DF opval
= sh64_fnegd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1668 SET_H_DR (FLD (f_dest
), opval
);
1669 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1676 /* fnegs: fneg.s $frgh, $frf */
1679 SEM_FN_NAME (sh64_media
,fnegs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1681 #define FLD(f) abuf->fields.sfmt_fabsd.f
1682 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1683 int UNUSED written
= 0;
1684 IADDR UNUSED pc
= abuf
->addr
;
1685 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1688 SF opval
= sh64_fnegs (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1689 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1690 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1697 /* fputscr: fputscr $frgh */
1700 SEM_FN_NAME (sh64_media
,fputscr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1702 #define FLD(f) abuf->fields.sfmt_fabsd.f
1703 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1704 int UNUSED written
= 0;
1705 IADDR UNUSED pc
= abuf
->addr
;
1706 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1709 SI opval
= SUBWORDSFSI (CPU (h_fr
[FLD (f_left_right
)]));
1710 CPU (h_fpscr
) = opval
;
1711 TRACE_RESULT (current_cpu
, abuf
, "fpscr", 'x', opval
);
1718 /* fsqrtd: fsqrt.d $drgh, $drf */
1721 SEM_FN_NAME (sh64_media
,fsqrtd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1723 #define FLD(f) abuf->fields.sfmt_fabsd.f
1724 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1725 int UNUSED written
= 0;
1726 IADDR UNUSED pc
= abuf
->addr
;
1727 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1730 DF opval
= sh64_fsqrtd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1731 SET_H_DR (FLD (f_dest
), opval
);
1732 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1739 /* fsqrts: fsqrt.s $frgh, $frf */
1742 SEM_FN_NAME (sh64_media
,fsqrts
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1744 #define FLD(f) abuf->fields.sfmt_fabsd.f
1745 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1746 int UNUSED written
= 0;
1747 IADDR UNUSED pc
= abuf
->addr
;
1748 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1751 SF opval
= sh64_fsqrts (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1752 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1753 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1760 /* fstd: fst.d $rm, $disp10x8, $drf */
1763 SEM_FN_NAME (sh64_media
,fstd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1765 #define FLD(f) abuf->fields.sfmt_fldd.f
1766 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1767 int UNUSED written
= 0;
1768 IADDR UNUSED pc
= abuf
->addr
;
1769 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1772 DF opval
= GET_H_DR (FLD (f_dest
));
1773 SETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
)), opval
);
1774 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1781 /* fstp: fst.p $rm, $disp10x8, $fpf */
1784 SEM_FN_NAME (sh64_media
,fstp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1786 #define FLD(f) abuf->fields.sfmt_fldd.f
1787 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1788 int UNUSED written
= 0;
1789 IADDR UNUSED pc
= abuf
->addr
;
1790 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1794 SF opval
= GET_H_FP (FLD (f_dest
));
1795 SET_H_FP (FLD (f_dest
), opval
);
1796 TRACE_RESULT (current_cpu
, abuf
, "fp", 'f', opval
);
1798 sh64_fstp (current_cpu
, pc
, GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
), FLD (f_dest
));
1805 /* fsts: fst.s $rm, $disp10x4, $frf */
1808 SEM_FN_NAME (sh64_media
,fsts
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1810 #define FLD(f) abuf->fields.sfmt_flds.f
1811 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1812 int UNUSED written
= 0;
1813 IADDR UNUSED pc
= abuf
->addr
;
1814 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1817 SF opval
= CPU (h_fr
[FLD (f_dest
)]);
1818 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x4
)), opval
);
1819 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1826 /* fstxd: fstx.d $rm, $rn, $drf */
1829 SEM_FN_NAME (sh64_media
,fstxd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1831 #define FLD(f) abuf->fields.sfmt_add.f
1832 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1833 int UNUSED written
= 0;
1834 IADDR UNUSED pc
= abuf
->addr
;
1835 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1838 DF opval
= GET_H_DR (FLD (f_dest
));
1839 SETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
1840 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1847 /* fstxp: fstx.p $rm, $rn, $fpf */
1850 SEM_FN_NAME (sh64_media
,fstxp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1852 #define FLD(f) abuf->fields.sfmt_add.f
1853 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1854 int UNUSED written
= 0;
1855 IADDR UNUSED pc
= abuf
->addr
;
1856 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1860 SF opval
= GET_H_FP (FLD (f_dest
));
1861 SET_H_FP (FLD (f_dest
), opval
);
1862 TRACE_RESULT (current_cpu
, abuf
, "fp", 'f', opval
);
1864 sh64_fstp (current_cpu
, pc
, GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)), FLD (f_dest
));
1871 /* fstxs: fstx.s $rm, $rn, $frf */
1874 SEM_FN_NAME (sh64_media
,fstxs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1876 #define FLD(f) abuf->fields.sfmt_add.f
1877 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1878 int UNUSED written
= 0;
1879 IADDR UNUSED pc
= abuf
->addr
;
1880 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1883 SF opval
= CPU (h_fr
[FLD (f_dest
)]);
1884 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
1885 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1892 /* fsubd: fsub.d $drg, $drh, $drf */
1895 SEM_FN_NAME (sh64_media
,fsubd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1897 #define FLD(f) abuf->fields.sfmt_add.f
1898 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1899 int UNUSED written
= 0;
1900 IADDR UNUSED pc
= abuf
->addr
;
1901 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1904 DF opval
= sh64_fsubd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
1905 SET_H_DR (FLD (f_dest
), opval
);
1906 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1913 /* fsubs: fsub.s $frg, $frh, $frf */
1916 SEM_FN_NAME (sh64_media
,fsubs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1918 #define FLD(f) abuf->fields.sfmt_add.f
1919 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1920 int UNUSED written
= 0;
1921 IADDR UNUSED pc
= abuf
->addr
;
1922 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1925 SF opval
= sh64_fsubs (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
1926 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1927 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1934 /* ftrcdl: ftrc.dl $drgh, $frf */
1937 SEM_FN_NAME (sh64_media
,ftrcdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1939 #define FLD(f) abuf->fields.sfmt_fabsd.f
1940 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1941 int UNUSED written
= 0;
1942 IADDR UNUSED pc
= abuf
->addr
;
1943 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1946 SF opval
= sh64_ftrcdl (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1947 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1948 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1955 /* ftrcsl: ftrc.sl $frgh, $frf */
1958 SEM_FN_NAME (sh64_media
,ftrcsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1960 #define FLD(f) abuf->fields.sfmt_fabsd.f
1961 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1962 int UNUSED written
= 0;
1963 IADDR UNUSED pc
= abuf
->addr
;
1964 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1967 SF opval
= sh64_ftrcsl (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1968 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1969 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1976 /* ftrcdq: ftrc.dq $drgh, $drf */
1979 SEM_FN_NAME (sh64_media
,ftrcdq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1981 #define FLD(f) abuf->fields.sfmt_fabsd.f
1982 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1983 int UNUSED written
= 0;
1984 IADDR UNUSED pc
= abuf
->addr
;
1985 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1988 DF opval
= sh64_ftrcdq (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1989 SET_H_DR (FLD (f_dest
), opval
);
1990 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1997 /* ftrcsq: ftrc.sq $frgh, $drf */
2000 SEM_FN_NAME (sh64_media
,ftrcsq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2002 #define FLD(f) abuf->fields.sfmt_fabsd.f
2003 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2004 int UNUSED written
= 0;
2005 IADDR UNUSED pc
= abuf
->addr
;
2006 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2009 DF opval
= sh64_ftrcsq (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
2010 SET_H_DR (FLD (f_dest
), opval
);
2011 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
2018 /* ftrvs: ftrv.s $mtrxg, $fvh, $fvf */
2021 SEM_FN_NAME (sh64_media
,ftrvs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2023 #define FLD(f) abuf->fields.sfmt_add.f
2024 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2025 int UNUSED written
= 0;
2026 IADDR UNUSED pc
= abuf
->addr
;
2027 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2031 SF opval
= GET_H_FMTX (FLD (f_left
));
2032 SET_H_FMTX (FLD (f_left
), opval
);
2033 TRACE_RESULT (current_cpu
, abuf
, "fmtx", 'f', opval
);
2036 SF opval
= GET_H_FV (FLD (f_right
));
2037 SET_H_FV (FLD (f_right
), opval
);
2038 TRACE_RESULT (current_cpu
, abuf
, "fv", 'f', opval
);
2041 SF opval
= GET_H_FV (FLD (f_dest
));
2042 SET_H_FV (FLD (f_dest
), opval
);
2043 TRACE_RESULT (current_cpu
, abuf
, "fv", 'f', opval
);
2045 sh64_ftrvs (current_cpu
, FLD (f_left
), FLD (f_right
), FLD (f_dest
));
2052 /* getcfg: getcfg $rm, $disp6, $rd */
2055 SEM_FN_NAME (sh64_media
,getcfg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2057 #define FLD(f) abuf->fields.sfmt_getcfg.f
2058 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2059 int UNUSED written
= 0;
2060 IADDR UNUSED pc
= abuf
->addr
;
2061 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2065 tmp_address
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2068 DI opval
= GETMEMSI (current_cpu
, pc
, tmp_address
);
2069 SET_H_GR (FLD (f_dest
), opval
);
2070 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2078 /* getcon: getcon $crk, $rd */
2081 SEM_FN_NAME (sh64_media
,getcon
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2083 #define FLD(f) abuf->fields.sfmt_xori.f
2084 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2085 int UNUSED written
= 0;
2086 IADDR UNUSED pc
= abuf
->addr
;
2087 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2090 DI opval
= GET_H_CR (FLD (f_left
));
2091 SET_H_GR (FLD (f_dest
), opval
);
2092 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2099 /* gettr: gettr $trb, $rd */
2102 SEM_FN_NAME (sh64_media
,gettr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2104 #define FLD(f) abuf->fields.sfmt_blink.f
2105 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2106 int UNUSED written
= 0;
2107 IADDR UNUSED pc
= abuf
->addr
;
2108 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2111 DI opval
= CPU (h_tr
[FLD (f_trb
)]);
2112 SET_H_GR (FLD (f_dest
), opval
);
2113 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2120 /* icbi: icbi $rm, $disp6x32 */
2123 SEM_FN_NAME (sh64_media
,icbi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2125 #define FLD(f) abuf->fields.sfmt_xori.f
2126 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2127 int UNUSED written
= 0;
2128 IADDR UNUSED pc
= abuf
->addr
;
2129 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2133 DI opval
= GET_H_GR (FLD (f_left
));
2134 SET_H_GR (FLD (f_left
), opval
);
2135 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2144 /* ldb: ld.b $rm, $disp10, $rd */
2147 SEM_FN_NAME (sh64_media
,ldb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2149 #define FLD(f) abuf->fields.sfmt_addi.f
2150 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2151 int UNUSED written
= 0;
2152 IADDR UNUSED pc
= abuf
->addr
;
2153 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2156 DI opval
= EXTQIDI (GETMEMQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)))));
2157 SET_H_GR (FLD (f_dest
), opval
);
2158 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2165 /* ldl: ld.l $rm, $disp10x4, $rd */
2168 SEM_FN_NAME (sh64_media
,ldl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2170 #define FLD(f) abuf->fields.sfmt_flds.f
2171 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2172 int UNUSED written
= 0;
2173 IADDR UNUSED pc
= abuf
->addr
;
2174 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2177 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x4
)))));
2178 SET_H_GR (FLD (f_dest
), opval
);
2179 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2186 /* ldq: ld.q $rm, $disp10x8, $rd */
2189 SEM_FN_NAME (sh64_media
,ldq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2191 #define FLD(f) abuf->fields.sfmt_fldd.f
2192 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2193 int UNUSED written
= 0;
2194 IADDR UNUSED pc
= abuf
->addr
;
2195 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2198 DI opval
= GETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x8
))));
2199 SET_H_GR (FLD (f_dest
), opval
);
2200 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2207 /* ldub: ld.ub $rm, $disp10, $rd */
2210 SEM_FN_NAME (sh64_media
,ldub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2212 #define FLD(f) abuf->fields.sfmt_addi.f
2213 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2214 int UNUSED written
= 0;
2215 IADDR UNUSED pc
= abuf
->addr
;
2216 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2219 DI opval
= ZEXTQIDI (GETMEMQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)))));
2220 SET_H_GR (FLD (f_dest
), opval
);
2221 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2228 /* lduw: ld.uw $rm, $disp10x2, $rd */
2231 SEM_FN_NAME (sh64_media
,lduw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2233 #define FLD(f) abuf->fields.sfmt_lduw.f
2234 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2235 int UNUSED written
= 0;
2236 IADDR UNUSED pc
= abuf
->addr
;
2237 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2240 DI opval
= ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x2
)))));
2241 SET_H_GR (FLD (f_dest
), opval
);
2242 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2249 /* ldw: ld.w $rm, $disp10x2, $rd */
2252 SEM_FN_NAME (sh64_media
,ldw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2254 #define FLD(f) abuf->fields.sfmt_lduw.f
2255 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2256 int UNUSED written
= 0;
2257 IADDR UNUSED pc
= abuf
->addr
;
2258 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2261 DI opval
= EXTHIDI (GETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x2
)))));
2262 SET_H_GR (FLD (f_dest
), opval
);
2263 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2270 /* ldhil: ldhi.l $rm, $disp6, $rd */
2273 SEM_FN_NAME (sh64_media
,ldhil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2275 #define FLD(f) abuf->fields.sfmt_getcfg.f
2276 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2277 int UNUSED written
= 0;
2278 IADDR UNUSED pc
= abuf
->addr
;
2279 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2285 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2286 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 3), 1);
2288 if (ANDQI (tmp_bytecount
, 4)) {
2290 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -4)));
2291 SET_H_GR (FLD (f_dest
), opval
);
2292 written
|= (1 << 6);
2293 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2296 if (GET_H_ENDIAN ()) {
2298 if (ANDQI (tmp_bytecount
, 2)) {
2299 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2301 if (ANDQI (tmp_bytecount
, 1)) {
2302 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2305 DI opval
= EXTSIDI (tmp_val
);
2306 SET_H_GR (FLD (f_dest
), opval
);
2307 written
|= (1 << 6);
2308 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2313 if (ANDQI (tmp_bytecount
, 1)) {
2314 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2316 if (ANDQI (tmp_bytecount
, 2)) {
2317 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2320 DI opval
= EXTSIDI (SLLSI (tmp_val
, SUBSI (32, MULSI (8, tmp_bytecount
))));
2321 SET_H_GR (FLD (f_dest
), opval
);
2322 written
|= (1 << 6);
2323 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2330 abuf
->written
= written
;
2335 /* ldhiq: ldhi.q $rm, $disp6, $rd */
2338 SEM_FN_NAME (sh64_media
,ldhiq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2340 #define FLD(f) abuf->fields.sfmt_getcfg.f
2341 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2342 int UNUSED written
= 0;
2343 IADDR UNUSED pc
= abuf
->addr
;
2344 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2350 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2351 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 7), 1);
2353 if (ANDQI (tmp_bytecount
, 8)) {
2355 DI opval
= GETMEMDI (current_cpu
, pc
, ANDDI (tmp_addr
, -8));
2356 SET_H_GR (FLD (f_dest
), opval
);
2357 written
|= (1 << 7);
2358 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2361 if (GET_H_ENDIAN ()) {
2363 if (ANDQI (tmp_bytecount
, 4)) {
2364 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8))));
2366 if (ANDQI (tmp_bytecount
, 2)) {
2367 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2369 if (ANDQI (tmp_bytecount
, 1)) {
2370 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2374 SET_H_GR (FLD (f_dest
), opval
);
2375 written
|= (1 << 7);
2376 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2381 if (ANDQI (tmp_bytecount
, 1)) {
2382 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2384 if (ANDQI (tmp_bytecount
, 2)) {
2385 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2387 if (ANDQI (tmp_bytecount
, 4)) {
2388 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8))));
2391 DI opval
= SLLDI (tmp_val
, SUBSI (64, MULSI (8, tmp_bytecount
)));
2392 SET_H_GR (FLD (f_dest
), opval
);
2393 written
|= (1 << 7);
2394 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2401 abuf
->written
= written
;
2406 /* ldlol: ldlo.l $rm, $disp6, $rd */
2409 SEM_FN_NAME (sh64_media
,ldlol
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2411 #define FLD(f) abuf->fields.sfmt_getcfg.f
2412 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2413 int UNUSED written
= 0;
2414 IADDR UNUSED pc
= abuf
->addr
;
2415 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2421 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2422 tmp_bytecount
= SUBSI (4, ANDDI (tmp_addr
, 3));
2424 if (ANDQI (tmp_bytecount
, 4)) {
2426 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, tmp_addr
));
2427 SET_H_GR (FLD (f_dest
), opval
);
2428 written
|= (1 << 6);
2429 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2432 if (GET_H_ENDIAN ()) {
2434 if (ANDQI (tmp_bytecount
, 1)) {
2435 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2437 if (ANDQI (tmp_bytecount
, 2)) {
2438 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2441 DI opval
= EXTSIDI (SLLSI (tmp_val
, SUBSI (32, MULSI (8, tmp_bytecount
))));
2442 SET_H_GR (FLD (f_dest
), opval
);
2443 written
|= (1 << 6);
2444 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2449 if (ANDQI (tmp_bytecount
, 2)) {
2450 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2452 if (ANDQI (tmp_bytecount
, 1)) {
2453 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2456 DI opval
= EXTSIDI (tmp_val
);
2457 SET_H_GR (FLD (f_dest
), opval
);
2458 written
|= (1 << 6);
2459 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2466 abuf
->written
= written
;
2471 /* ldloq: ldlo.q $rm, $disp6, $rd */
2474 SEM_FN_NAME (sh64_media
,ldloq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2476 #define FLD(f) abuf->fields.sfmt_getcfg.f
2477 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2478 int UNUSED written
= 0;
2479 IADDR UNUSED pc
= abuf
->addr
;
2480 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2486 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2487 tmp_bytecount
= SUBSI (8, ANDDI (tmp_addr
, 7));
2489 if (ANDQI (tmp_bytecount
, 8)) {
2491 DI opval
= GETMEMDI (current_cpu
, pc
, tmp_addr
);
2492 SET_H_GR (FLD (f_dest
), opval
);
2493 written
|= (1 << 7);
2494 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2497 if (GET_H_ENDIAN ()) {
2499 if (ANDQI (tmp_bytecount
, 1)) {
2500 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2502 if (ANDQI (tmp_bytecount
, 2)) {
2503 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2505 if (ANDQI (tmp_bytecount
, 4)) {
2506 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4))));
2509 DI opval
= SLLDI (tmp_val
, SUBSI (64, MULSI (8, tmp_bytecount
)));
2510 SET_H_GR (FLD (f_dest
), opval
);
2511 written
|= (1 << 7);
2512 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2517 if (ANDQI (tmp_bytecount
, 4)) {
2518 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4))));
2520 if (ANDQI (tmp_bytecount
, 2)) {
2521 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2523 if (ANDQI (tmp_bytecount
, 1)) {
2524 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2528 SET_H_GR (FLD (f_dest
), opval
);
2529 written
|= (1 << 7);
2530 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2537 abuf
->written
= written
;
2542 /* ldxb: ldx.b $rm, $rn, $rd */
2545 SEM_FN_NAME (sh64_media
,ldxb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2547 #define FLD(f) abuf->fields.sfmt_add.f
2548 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2549 int UNUSED written
= 0;
2550 IADDR UNUSED pc
= abuf
->addr
;
2551 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2554 DI opval
= EXTQIDI (GETMEMQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2555 SET_H_GR (FLD (f_dest
), opval
);
2556 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2563 /* ldxl: ldx.l $rm, $rn, $rd */
2566 SEM_FN_NAME (sh64_media
,ldxl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2568 #define FLD(f) abuf->fields.sfmt_add.f
2569 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2570 int UNUSED written
= 0;
2571 IADDR UNUSED pc
= abuf
->addr
;
2572 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2575 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2576 SET_H_GR (FLD (f_dest
), opval
);
2577 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2584 /* ldxq: ldx.q $rm, $rn, $rd */
2587 SEM_FN_NAME (sh64_media
,ldxq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2589 #define FLD(f) abuf->fields.sfmt_add.f
2590 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2591 int UNUSED written
= 0;
2592 IADDR UNUSED pc
= abuf
->addr
;
2593 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2596 DI opval
= GETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
2597 SET_H_GR (FLD (f_dest
), opval
);
2598 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2605 /* ldxub: ldx.ub $rm, $rn, $rd */
2608 SEM_FN_NAME (sh64_media
,ldxub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2610 #define FLD(f) abuf->fields.sfmt_add.f
2611 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2612 int UNUSED written
= 0;
2613 IADDR UNUSED pc
= abuf
->addr
;
2614 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2617 DI opval
= ZEXTQIDI (GETMEMUQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2618 SET_H_GR (FLD (f_dest
), opval
);
2619 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2626 /* ldxuw: ldx.uw $rm, $rn, $rd */
2629 SEM_FN_NAME (sh64_media
,ldxuw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2631 #define FLD(f) abuf->fields.sfmt_add.f
2632 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2633 int UNUSED written
= 0;
2634 IADDR UNUSED pc
= abuf
->addr
;
2635 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2638 DI opval
= ZEXTHIDI (GETMEMUHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2639 SET_H_GR (FLD (f_dest
), opval
);
2640 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2647 /* ldxw: ldx.w $rm, $rn, $rd */
2650 SEM_FN_NAME (sh64_media
,ldxw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2652 #define FLD(f) abuf->fields.sfmt_add.f
2653 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2654 int UNUSED written
= 0;
2655 IADDR UNUSED pc
= abuf
->addr
;
2656 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2659 DI opval
= EXTHIDI (GETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2660 SET_H_GR (FLD (f_dest
), opval
);
2661 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2668 /* mabsl: mabs.l $rm, $rd */
2671 SEM_FN_NAME (sh64_media
,mabsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2673 #define FLD(f) abuf->fields.sfmt_xori.f
2674 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2675 int UNUSED written
= 0;
2676 IADDR UNUSED pc
= abuf
->addr
;
2677 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2682 tmp_result0
= ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1));
2683 tmp_result1
= ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0));
2685 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2686 SET_H_GR (FLD (f_dest
), opval
);
2687 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2695 /* mabsw: mabs.w $rm, $rd */
2698 SEM_FN_NAME (sh64_media
,mabsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2700 #define FLD(f) abuf->fields.sfmt_xori.f
2701 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2702 int UNUSED written
= 0;
2703 IADDR UNUSED pc
= abuf
->addr
;
2704 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2711 tmp_result0
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3));
2712 tmp_result1
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2));
2713 tmp_result2
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1));
2714 tmp_result3
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0));
2716 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2717 SET_H_GR (FLD (f_dest
), opval
);
2718 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2726 /* maddl: madd.l $rm, $rn, $rd */
2729 SEM_FN_NAME (sh64_media
,maddl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2731 #define FLD(f) abuf->fields.sfmt_add.f
2732 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2733 int UNUSED written
= 0;
2734 IADDR UNUSED pc
= abuf
->addr
;
2735 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2740 tmp_result0
= ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
2741 tmp_result1
= ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0));
2743 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2744 SET_H_GR (FLD (f_dest
), opval
);
2745 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2753 /* maddw: madd.w $rm, $rn, $rd */
2756 SEM_FN_NAME (sh64_media
,maddw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2758 #define FLD(f) abuf->fields.sfmt_add.f
2759 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2760 int UNUSED written
= 0;
2761 IADDR UNUSED pc
= abuf
->addr
;
2762 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2769 tmp_result0
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3));
2770 tmp_result1
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2));
2771 tmp_result2
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1));
2772 tmp_result3
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0));
2774 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2775 SET_H_GR (FLD (f_dest
), opval
);
2776 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2784 /* maddsl: madds.l $rm, $rn, $rd */
2787 SEM_FN_NAME (sh64_media
,maddsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2789 #define FLD(f) abuf->fields.sfmt_add.f
2790 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2791 int UNUSED written
= 0;
2792 IADDR UNUSED pc
= abuf
->addr
;
2793 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2798 tmp_result0
= ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2799 tmp_result1
= ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2801 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2802 SET_H_GR (FLD (f_dest
), opval
);
2803 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2811 /* maddsub: madds.ub $rm, $rn, $rd */
2814 SEM_FN_NAME (sh64_media
,maddsub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2816 #define FLD(f) abuf->fields.sfmt_add.f
2817 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2818 int UNUSED written
= 0;
2819 IADDR UNUSED pc
= abuf
->addr
;
2820 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2831 tmp_result0
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7)))) : (SUBQI (SLLQI (1, 8), 1)))));
2832 tmp_result1
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6)))) : (SUBQI (SLLQI (1, 8), 1)))));
2833 tmp_result2
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5)))) : (SUBQI (SLLQI (1, 8), 1)))));
2834 tmp_result3
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4)))) : (SUBQI (SLLQI (1, 8), 1)))));
2835 tmp_result4
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3)))) : (SUBQI (SLLQI (1, 8), 1)))));
2836 tmp_result5
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2)))) : (SUBQI (SLLQI (1, 8), 1)))));
2837 tmp_result6
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBQI (SLLQI (1, 8), 1)))));
2838 tmp_result7
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBQI (SLLQI (1, 8), 1)))));
2840 DI opval
= ORDI (SLLDI (ZEXTQIDI (tmp_result7
), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6
), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5
), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4
), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3
), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2
), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1
), 8), ZEXTQIDI (tmp_result0
))))))));
2841 SET_H_GR (FLD (f_dest
), opval
);
2842 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2850 /* maddsw: madds.w $rm, $rn, $rd */
2853 SEM_FN_NAME (sh64_media
,maddsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2855 #define FLD(f) abuf->fields.sfmt_add.f
2856 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2857 int UNUSED written
= 0;
2858 IADDR UNUSED pc
= abuf
->addr
;
2859 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2866 tmp_result0
= ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2867 tmp_result1
= ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2868 tmp_result2
= ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2869 tmp_result3
= ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2871 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2872 SET_H_GR (FLD (f_dest
), opval
);
2873 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2881 /* mcmpeqb: mcmpeq.b $rm, $rn, $rd */
2884 SEM_FN_NAME (sh64_media
,mcmpeqb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2886 #define FLD(f) abuf->fields.sfmt_add.f
2887 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2888 int UNUSED written
= 0;
2889 IADDR UNUSED pc
= abuf
->addr
;
2890 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2901 tmp_result0
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))) ? (INVQI (0)) : (0));
2902 tmp_result1
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))) ? (INVQI (0)) : (0));
2903 tmp_result2
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))) ? (INVQI (0)) : (0));
2904 tmp_result3
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))) ? (INVQI (0)) : (0));
2905 tmp_result4
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))) ? (INVQI (0)) : (0));
2906 tmp_result5
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))) ? (INVQI (0)) : (0));
2907 tmp_result6
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))) ? (INVQI (0)) : (0));
2908 tmp_result7
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))) ? (INVQI (0)) : (0));
2910 DI opval
= ORDI (SLLDI (ZEXTQIDI (tmp_result7
), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6
), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5
), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4
), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3
), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2
), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1
), 8), ZEXTQIDI (tmp_result0
))))))));
2911 SET_H_GR (FLD (f_dest
), opval
);
2912 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2920 /* mcmpeql: mcmpeq.l $rm, $rn, $rd */
2923 SEM_FN_NAME (sh64_media
,mcmpeql
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2925 #define FLD(f) abuf->fields.sfmt_add.f
2926 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2927 int UNUSED written
= 0;
2928 IADDR UNUSED pc
= abuf
->addr
;
2929 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2934 tmp_result0
= ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))) ? (INVSI (0)) : (0));
2935 tmp_result1
= ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))) ? (INVSI (0)) : (0));
2937 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2938 SET_H_GR (FLD (f_dest
), opval
);
2939 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2947 /* mcmpeqw: mcmpeq.w $rm, $rn, $rd */
2950 SEM_FN_NAME (sh64_media
,mcmpeqw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2952 #define FLD(f) abuf->fields.sfmt_add.f
2953 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2954 int UNUSED written
= 0;
2955 IADDR UNUSED pc
= abuf
->addr
;
2956 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2963 tmp_result0
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))) ? (INVHI (0)) : (0));
2964 tmp_result1
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))) ? (INVHI (0)) : (0));
2965 tmp_result2
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))) ? (INVHI (0)) : (0));
2966 tmp_result3
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))) ? (INVHI (0)) : (0));
2968 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2969 SET_H_GR (FLD (f_dest
), opval
);
2970 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2978 /* mcmpgtl: mcmpgt.l $rm, $rn, $rd */
2981 SEM_FN_NAME (sh64_media
,mcmpgtl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2983 #define FLD(f) abuf->fields.sfmt_add.f
2984 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2985 int UNUSED written
= 0;
2986 IADDR UNUSED pc
= abuf
->addr
;
2987 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2992 tmp_result0
= ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))) ? (INVSI (0)) : (0));
2993 tmp_result1
= ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))) ? (INVSI (0)) : (0));
2995 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2996 SET_H_GR (FLD (f_dest
), opval
);
2997 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3005 /* mcmpgtub: mcmpgt.ub $rm, $rn, $rd */
3008 SEM_FN_NAME (sh64_media
,mcmpgtub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3010 #define FLD(f) abuf->fields.sfmt_add.f
3011 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3012 int UNUSED written
= 0;
3013 IADDR UNUSED pc
= abuf
->addr
;
3014 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3025 tmp_result0
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))) ? (INVQI (0)) : (0));
3026 tmp_result1
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))) ? (INVQI (0)) : (0));
3027 tmp_result2
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))) ? (INVQI (0)) : (0));
3028 tmp_result3
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))) ? (INVQI (0)) : (0));
3029 tmp_result4
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))) ? (INVQI (0)) : (0));
3030 tmp_result5
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))) ? (INVQI (0)) : (0));
3031 tmp_result6
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))) ? (INVQI (0)) : (0));
3032 tmp_result7
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))) ? (INVQI (0)) : (0));
3034 DI opval
= ORDI (SLLDI (ZEXTQIDI (tmp_result7
), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6
), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5
), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4
), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3
), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2
), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1
), 8), ZEXTQIDI (tmp_result0
))))))));
3035 SET_H_GR (FLD (f_dest
), opval
);
3036 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3044 /* mcmpgtw: mcmpgt.w $rm, $rn, $rd */
3047 SEM_FN_NAME (sh64_media
,mcmpgtw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3049 #define FLD(f) abuf->fields.sfmt_add.f
3050 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3051 int UNUSED written
= 0;
3052 IADDR UNUSED pc
= abuf
->addr
;
3053 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3060 tmp_result0
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))) ? (INVHI (0)) : (0));
3061 tmp_result1
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))) ? (INVHI (0)) : (0));
3062 tmp_result2
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))) ? (INVHI (0)) : (0));
3063 tmp_result3
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))) ? (INVHI (0)) : (0));
3065 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3066 SET_H_GR (FLD (f_dest
), opval
);
3067 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3075 /* mcmv: mcmv $rm, $rn, $rd */
3078 SEM_FN_NAME (sh64_media
,mcmv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3080 #define FLD(f) abuf->fields.sfmt_add.f
3081 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3082 int UNUSED written
= 0;
3083 IADDR UNUSED pc
= abuf
->addr
;
3084 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3087 DI opval
= ORDI (ANDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), ANDDI (GET_H_GR (FLD (f_dest
)), INVDI (GET_H_GR (FLD (f_right
)))));
3088 SET_H_GR (FLD (f_dest
), opval
);
3089 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3096 /* mcnvslw: mcnvs.lw $rm, $rn, $rd */
3099 SEM_FN_NAME (sh64_media
,mcnvslw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3101 #define FLD(f) abuf->fields.sfmt_add.f
3102 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3103 int UNUSED written
= 0;
3104 IADDR UNUSED pc
= abuf
->addr
;
3105 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3112 tmp_result0
= ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3113 tmp_result1
= ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3114 tmp_result2
= ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3115 tmp_result3
= ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3117 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3118 SET_H_GR (FLD (f_dest
), opval
);
3119 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3127 /* mcnvswb: mcnvs.wb $rm, $rn, $rd */
3130 SEM_FN_NAME (sh64_media
,mcnvswb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3132 #define FLD(f) abuf->fields.sfmt_add.f
3133 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3134 int UNUSED written
= 0;
3135 IADDR UNUSED pc
= abuf
->addr
;
3136 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3147 tmp_result0
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3148 tmp_result1
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3149 tmp_result2
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3150 tmp_result3
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3151 tmp_result4
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3152 tmp_result5
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3153 tmp_result6
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3154 tmp_result7
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3156 DI opval
= ORDI (SLLDI (ZEXTQIDI (tmp_result7
), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6
), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5
), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4
), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3
), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2
), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1
), 8), ZEXTQIDI (tmp_result0
))))))));
3157 SET_H_GR (FLD (f_dest
), opval
);
3158 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3166 /* mcnvswub: mcnvs.wub $rm, $rn, $rd */
3169 SEM_FN_NAME (sh64_media
,mcnvswub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3171 #define FLD(f) abuf->fields.sfmt_add.f
3172 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3173 int UNUSED written
= 0;
3174 IADDR UNUSED pc
= abuf
->addr
;
3175 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3186 tmp_result0
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
3187 tmp_result1
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
3188 tmp_result2
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
3189 tmp_result3
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
3190 tmp_result4
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
3191 tmp_result5
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
3192 tmp_result6
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
3193 tmp_result7
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
3195 DI opval
= ORDI (SLLDI (ZEXTQIDI (tmp_result7
), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6
), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5
), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4
), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3
), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2
), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1
), 8), ZEXTQIDI (tmp_result0
))))))));
3196 SET_H_GR (FLD (f_dest
), opval
);
3197 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3205 /* mextr1: mextr1 $rm, $rn, $rd */
3208 SEM_FN_NAME (sh64_media
,mextr1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3210 #define FLD(f) abuf->fields.sfmt_add.f
3211 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3212 int UNUSED written
= 0;
3213 IADDR UNUSED pc
= abuf
->addr
;
3214 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3220 tmp_count
= MULQI (8, 1);
3221 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3222 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3223 tmp_count
= MULQI (8, SUBQI (8, 1));
3224 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3226 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3227 SET_H_GR (FLD (f_dest
), opval
);
3228 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3236 /* mextr2: mextr2 $rm, $rn, $rd */
3239 SEM_FN_NAME (sh64_media
,mextr2
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3241 #define FLD(f) abuf->fields.sfmt_add.f
3242 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3243 int UNUSED written
= 0;
3244 IADDR UNUSED pc
= abuf
->addr
;
3245 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3251 tmp_count
= MULQI (8, 2);
3252 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3253 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3254 tmp_count
= MULQI (8, SUBQI (8, 2));
3255 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3257 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3258 SET_H_GR (FLD (f_dest
), opval
);
3259 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3267 /* mextr3: mextr3 $rm, $rn, $rd */
3270 SEM_FN_NAME (sh64_media
,mextr3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3272 #define FLD(f) abuf->fields.sfmt_add.f
3273 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3274 int UNUSED written
= 0;
3275 IADDR UNUSED pc
= abuf
->addr
;
3276 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3282 tmp_count
= MULQI (8, 3);
3283 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3284 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3285 tmp_count
= MULQI (8, SUBQI (8, 3));
3286 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3288 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3289 SET_H_GR (FLD (f_dest
), opval
);
3290 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3298 /* mextr4: mextr4 $rm, $rn, $rd */
3301 SEM_FN_NAME (sh64_media
,mextr4
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3303 #define FLD(f) abuf->fields.sfmt_add.f
3304 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3305 int UNUSED written
= 0;
3306 IADDR UNUSED pc
= abuf
->addr
;
3307 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3313 tmp_count
= MULQI (8, 4);
3314 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3315 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3316 tmp_count
= MULQI (8, SUBQI (8, 4));
3317 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3319 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3320 SET_H_GR (FLD (f_dest
), opval
);
3321 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3329 /* mextr5: mextr5 $rm, $rn, $rd */
3332 SEM_FN_NAME (sh64_media
,mextr5
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3334 #define FLD(f) abuf->fields.sfmt_add.f
3335 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3336 int UNUSED written
= 0;
3337 IADDR UNUSED pc
= abuf
->addr
;
3338 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3344 tmp_count
= MULQI (8, 5);
3345 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3346 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3347 tmp_count
= MULQI (8, SUBQI (8, 5));
3348 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3350 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3351 SET_H_GR (FLD (f_dest
), opval
);
3352 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3360 /* mextr6: mextr6 $rm, $rn, $rd */
3363 SEM_FN_NAME (sh64_media
,mextr6
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3365 #define FLD(f) abuf->fields.sfmt_add.f
3366 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3367 int UNUSED written
= 0;
3368 IADDR UNUSED pc
= abuf
->addr
;
3369 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3375 tmp_count
= MULQI (8, 6);
3376 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3377 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3378 tmp_count
= MULQI (8, SUBQI (8, 6));
3379 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3381 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3382 SET_H_GR (FLD (f_dest
), opval
);
3383 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3391 /* mextr7: mextr7 $rm, $rn, $rd */
3394 SEM_FN_NAME (sh64_media
,mextr7
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3396 #define FLD(f) abuf->fields.sfmt_add.f
3397 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3398 int UNUSED written
= 0;
3399 IADDR UNUSED pc
= abuf
->addr
;
3400 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3406 tmp_count
= MULQI (8, 7);
3407 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3408 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3409 tmp_count
= MULQI (8, SUBQI (8, 7));
3410 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3412 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3413 SET_H_GR (FLD (f_dest
), opval
);
3414 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3422 /* mmacfxwl: mmacfx.wl $rm, $rn, $rd */
3425 SEM_FN_NAME (sh64_media
,mmacfxwl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3427 #define FLD(f) abuf->fields.sfmt_add.f
3428 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3429 int UNUSED written
= 0;
3430 IADDR UNUSED pc
= abuf
->addr
;
3431 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3437 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 1);
3438 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 0);
3439 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3440 tmp_temp
= ((LTDI (SLLDI (tmp_temp
, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp
, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp
, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3441 tmp_result0
= ((LTDI (ADDDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3442 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3443 tmp_temp
= ((LTDI (SLLDI (tmp_temp
, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp
, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp
, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3444 tmp_result1
= ((LTDI (ADDDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3446 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3447 SET_H_GR (FLD (f_dest
), opval
);
3448 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3456 /* mmacnfx.wl: mmacnfx.wl $rm, $rn, $rd */
3459 SEM_FN_NAME (sh64_media
,mmacnfx_wl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3461 #define FLD(f) abuf->fields.sfmt_add.f
3462 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3463 int UNUSED written
= 0;
3464 IADDR UNUSED pc
= abuf
->addr
;
3465 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3471 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 1);
3472 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 0);
3473 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3474 tmp_temp
= ((LTDI (SLLDI (tmp_temp
, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp
, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp
, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3475 tmp_result0
= ((LTDI (SUBDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3476 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3477 tmp_temp
= ((LTDI (SLLDI (tmp_temp
, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp
, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp
, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3478 tmp_result1
= ((LTDI (SUBDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3480 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3481 SET_H_GR (FLD (f_dest
), opval
);
3482 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3490 /* mmull: mmul.l $rm, $rn, $rd */
3493 SEM_FN_NAME (sh64_media
,mmull
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3495 #define FLD(f) abuf->fields.sfmt_add.f
3496 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3497 int UNUSED written
= 0;
3498 IADDR UNUSED pc
= abuf
->addr
;
3499 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3504 tmp_result0
= MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
3505 tmp_result1
= MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0));
3507 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3508 SET_H_GR (FLD (f_dest
), opval
);
3509 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3517 /* mmulw: mmul.w $rm, $rn, $rd */
3520 SEM_FN_NAME (sh64_media
,mmulw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3522 #define FLD(f) abuf->fields.sfmt_add.f
3523 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3524 int UNUSED written
= 0;
3525 IADDR UNUSED pc
= abuf
->addr
;
3526 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3533 tmp_result0
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3));
3534 tmp_result1
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2));
3535 tmp_result2
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1));
3536 tmp_result3
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0));
3538 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3539 SET_H_GR (FLD (f_dest
), opval
);
3540 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3548 /* mmulfxl: mmulfx.l $rm, $rn, $rd */
3551 SEM_FN_NAME (sh64_media
,mmulfxl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3553 #define FLD(f) abuf->fields.sfmt_add.f
3554 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3555 int UNUSED written
= 0;
3556 IADDR UNUSED pc
= abuf
->addr
;
3557 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3563 tmp_temp
= MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
3564 tmp_result0
= ((LTDI (SRADI (tmp_temp
, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp
, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp
, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3565 tmp_temp
= MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0)));
3566 tmp_result1
= ((LTDI (SRADI (tmp_temp
, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp
, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp
, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3568 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3569 SET_H_GR (FLD (f_dest
), opval
);
3570 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3578 /* mmulfxw: mmulfx.w $rm, $rn, $rd */
3581 SEM_FN_NAME (sh64_media
,mmulfxw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3583 #define FLD(f) abuf->fields.sfmt_add.f
3584 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3585 int UNUSED written
= 0;
3586 IADDR UNUSED pc
= abuf
->addr
;
3587 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3595 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3596 tmp_result0
= ((LTSI (SRASI (tmp_temp
, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp
, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp
, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3597 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3598 tmp_result1
= ((LTSI (SRASI (tmp_temp
, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp
, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp
, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3599 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)));
3600 tmp_result2
= ((LTSI (SRASI (tmp_temp
, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp
, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp
, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3601 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3602 tmp_result3
= ((LTSI (SRASI (tmp_temp
, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp
, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp
, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3604 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3605 SET_H_GR (FLD (f_dest
), opval
);
3606 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3614 /* mmulfxrpw: mmulfxrp.w $rm, $rn, $rd */
3617 SEM_FN_NAME (sh64_media
,mmulfxrpw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3619 #define FLD(f) abuf->fields.sfmt_add.f
3620 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3621 int UNUSED written
= 0;
3622 IADDR UNUSED pc
= abuf
->addr
;
3623 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3632 tmp_c
= SLLSI (1, 14);
3633 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3634 tmp_result0
= ((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp
, tmp_c
), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3635 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3636 tmp_result1
= ((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp
, tmp_c
), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3637 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)));
3638 tmp_result2
= ((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp
, tmp_c
), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3639 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3640 tmp_result3
= ((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp
, tmp_c
), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3642 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3643 SET_H_GR (FLD (f_dest
), opval
);
3644 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3652 /* mmulhiwl: mmulhi.wl $rm, $rn, $rd */
3655 SEM_FN_NAME (sh64_media
,mmulhiwl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3657 #define FLD(f) abuf->fields.sfmt_add.f
3658 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3659 int UNUSED written
= 0;
3660 IADDR UNUSED pc
= abuf
->addr
;
3661 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3666 tmp_result0
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)));
3667 tmp_result1
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3669 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3670 SET_H_GR (FLD (f_dest
), opval
);
3671 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3679 /* mmullowl: mmullo.wl $rm, $rn, $rd */
3682 SEM_FN_NAME (sh64_media
,mmullowl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3684 #define FLD(f) abuf->fields.sfmt_add.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
, 4);
3693 tmp_result0
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3694 tmp_result1
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3696 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3697 SET_H_GR (FLD (f_dest
), opval
);
3698 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3706 /* mmulsumwq: mmulsum.wq $rm, $rn, $rd */
3709 SEM_FN_NAME (sh64_media
,mmulsumwq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3711 #define FLD(f) abuf->fields.sfmt_add.f
3712 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3713 int UNUSED written
= 0;
3714 IADDR UNUSED pc
= abuf
->addr
;
3715 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3719 tmp_acc
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3720 tmp_acc
= ADDDI (tmp_acc
, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))));
3721 tmp_acc
= ADDDI (tmp_acc
, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))));
3722 tmp_acc
= ADDDI (tmp_acc
, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))));
3724 DI opval
= ADDDI (GET_H_GR (FLD (f_dest
)), tmp_acc
);
3725 SET_H_GR (FLD (f_dest
), opval
);
3726 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3734 /* movi: movi $imm16, $rd */
3737 SEM_FN_NAME (sh64_media
,movi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3739 #define FLD(f) abuf->fields.sfmt_movi.f
3740 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3741 int UNUSED written
= 0;
3742 IADDR UNUSED pc
= abuf
->addr
;
3743 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3746 DI opval
= EXTSIDI (FLD (f_imm16
));
3747 SET_H_GR (FLD (f_dest
), opval
);
3748 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3755 /* mpermw: mperm.w $rm, $rn, $rd */
3758 SEM_FN_NAME (sh64_media
,mpermw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3760 #define FLD(f) abuf->fields.sfmt_add.f
3761 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3762 int UNUSED written
= 0;
3763 IADDR UNUSED pc
= abuf
->addr
;
3764 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3772 tmp_control
= ANDQI (GET_H_GR (FLD (f_right
)), 255);
3773 tmp_result0
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (tmp_control
, 3)));
3774 tmp_result1
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (SRLQI (tmp_control
, 2), 3)));
3775 tmp_result2
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (SRLQI (tmp_control
, 4), 3)));
3776 tmp_result3
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (SRLQI (tmp_control
, 6), 3)));
3778 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3779 SET_H_GR (FLD (f_dest
), opval
);
3780 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3788 /* msadubq: msad.ubq $rm, $rn, $rd */
3791 SEM_FN_NAME (sh64_media
,msadubq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3793 #define FLD(f) abuf->fields.sfmt_add.f
3794 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3795 int UNUSED written
= 0;
3796 IADDR UNUSED pc
= abuf
->addr
;
3797 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3801 tmp_acc
= ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0)));
3802 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))));
3803 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))));
3804 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))));
3805 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))));
3806 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))));
3807 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))));
3808 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))));
3810 DI opval
= ADDDI (GET_H_GR (FLD (f_dest
)), tmp_acc
);
3811 SET_H_GR (FLD (f_dest
), opval
);
3812 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3820 /* mshaldsl: mshalds.l $rm, $rn, $rd */
3823 SEM_FN_NAME (sh64_media
,mshaldsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3825 #define FLD(f) abuf->fields.sfmt_add.f
3826 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3827 int UNUSED written
= 0;
3828 IADDR UNUSED pc
= abuf
->addr
;
3829 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3834 tmp_result0
= ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3835 tmp_result1
= ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3837 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3838 SET_H_GR (FLD (f_dest
), opval
);
3839 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3847 /* mshaldsw: mshalds.w $rm, $rn, $rd */
3850 SEM_FN_NAME (sh64_media
,mshaldsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3852 #define FLD(f) abuf->fields.sfmt_add.f
3853 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3854 int UNUSED written
= 0;
3855 IADDR UNUSED pc
= abuf
->addr
;
3856 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3863 tmp_result0
= ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3864 tmp_result1
= ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3865 tmp_result2
= ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3866 tmp_result3
= ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3868 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3869 SET_H_GR (FLD (f_dest
), opval
);
3870 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3878 /* mshardl: mshard.l $rm, $rn, $rd */
3881 SEM_FN_NAME (sh64_media
,mshardl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3883 #define FLD(f) abuf->fields.sfmt_add.f
3884 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3885 int UNUSED written
= 0;
3886 IADDR UNUSED pc
= abuf
->addr
;
3887 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3892 tmp_result0
= SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31));
3893 tmp_result1
= SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31));
3895 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3896 SET_H_GR (FLD (f_dest
), opval
);
3897 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3905 /* mshardw: mshard.w $rm, $rn, $rd */
3908 SEM_FN_NAME (sh64_media
,mshardw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3910 #define FLD(f) abuf->fields.sfmt_add.f
3911 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3912 int UNUSED written
= 0;
3913 IADDR UNUSED pc
= abuf
->addr
;
3914 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3921 tmp_result0
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3922 tmp_result1
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3923 tmp_result2
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3924 tmp_result3
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3926 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3927 SET_H_GR (FLD (f_dest
), opval
);
3928 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3936 /* mshardsq: mshards.q $rm, $rn, $rd */
3939 SEM_FN_NAME (sh64_media
,mshardsq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3941 #define FLD(f) abuf->fields.sfmt_add.f
3942 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3943 int UNUSED written
= 0;
3944 IADDR UNUSED pc
= abuf
->addr
;
3945 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3948 DI opval
= ((LTDI (SRADI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGDI (SLLDI (1, SUBSI (16, 1)))) : (((LTDI (SRADI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63)), SLLDI (1, SUBSI (16, 1)))) ? (SRADI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63))) : (SUBDI (SLLDI (1, SUBSI (16, 1)), 1)))));
3949 SET_H_GR (FLD (f_dest
), opval
);
3950 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3957 /* mshfhib: mshfhi.b $rm, $rn, $rd */
3960 SEM_FN_NAME (sh64_media
,mshfhib
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3962 #define FLD(f) abuf->fields.sfmt_add.f
3963 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3964 int UNUSED written
= 0;
3965 IADDR UNUSED pc
= abuf
->addr
;
3966 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3977 tmp_result0
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3);
3978 tmp_result1
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3);
3979 tmp_result2
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2);
3980 tmp_result3
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2);
3981 tmp_result4
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1);
3982 tmp_result5
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1);
3983 tmp_result6
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0);
3984 tmp_result7
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0);
3986 DI opval
= ORDI (SLLDI (ZEXTQIDI (tmp_result7
), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6
), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5
), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4
), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3
), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2
), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1
), 8), ZEXTQIDI (tmp_result0
))))))));
3987 SET_H_GR (FLD (f_dest
), opval
);
3988 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3996 /* mshfhil: mshfhi.l $rm, $rn, $rd */
3999 SEM_FN_NAME (sh64_media
,mshfhil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4001 #define FLD(f) abuf->fields.sfmt_add.f
4002 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4003 int UNUSED written
= 0;
4004 IADDR UNUSED pc
= abuf
->addr
;
4005 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4010 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0);
4011 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0);
4013 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4014 SET_H_GR (FLD (f_dest
), opval
);
4015 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4023 /* mshfhiw: mshfhi.w $rm, $rn, $rd */
4026 SEM_FN_NAME (sh64_media
,mshfhiw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4028 #define FLD(f) abuf->fields.sfmt_add.f
4029 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4030 int UNUSED written
= 0;
4031 IADDR UNUSED pc
= abuf
->addr
;
4032 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4039 tmp_result0
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1);
4040 tmp_result1
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1);
4041 tmp_result2
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0);
4042 tmp_result3
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0);
4044 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4045 SET_H_GR (FLD (f_dest
), opval
);
4046 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4054 /* mshflob: mshflo.b $rm, $rn, $rd */
4057 SEM_FN_NAME (sh64_media
,mshflob
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4059 #define FLD(f) abuf->fields.sfmt_add.f
4060 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4061 int UNUSED written
= 0;
4062 IADDR UNUSED pc
= abuf
->addr
;
4063 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4074 tmp_result0
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7);
4075 tmp_result1
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7);
4076 tmp_result2
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6);
4077 tmp_result3
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6);
4078 tmp_result4
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5);
4079 tmp_result5
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5);
4080 tmp_result6
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4);
4081 tmp_result7
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4);
4083 DI opval
= ORDI (SLLDI (ZEXTQIDI (tmp_result7
), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6
), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5
), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4
), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3
), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2
), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1
), 8), ZEXTQIDI (tmp_result0
))))))));
4084 SET_H_GR (FLD (f_dest
), opval
);
4085 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4093 /* mshflol: mshflo.l $rm, $rn, $rd */
4096 SEM_FN_NAME (sh64_media
,mshflol
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4098 #define FLD(f) abuf->fields.sfmt_add.f
4099 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4100 int UNUSED written
= 0;
4101 IADDR UNUSED pc
= abuf
->addr
;
4102 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4107 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1);
4108 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1);
4110 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4111 SET_H_GR (FLD (f_dest
), opval
);
4112 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4120 /* mshflow: mshflo.w $rm, $rn, $rd */
4123 SEM_FN_NAME (sh64_media
,mshflow
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4125 #define FLD(f) abuf->fields.sfmt_add.f
4126 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4127 int UNUSED written
= 0;
4128 IADDR UNUSED pc
= abuf
->addr
;
4129 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4136 tmp_result0
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3);
4137 tmp_result1
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3);
4138 tmp_result2
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2);
4139 tmp_result3
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2);
4141 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4142 SET_H_GR (FLD (f_dest
), opval
);
4143 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4151 /* mshlldl: mshlld.l $rm, $rn, $rd */
4154 SEM_FN_NAME (sh64_media
,mshlldl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4156 #define FLD(f) abuf->fields.sfmt_add.f
4157 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4158 int UNUSED written
= 0;
4159 IADDR UNUSED pc
= abuf
->addr
;
4160 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4165 tmp_result0
= SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4166 tmp_result1
= SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4168 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4169 SET_H_GR (FLD (f_dest
), opval
);
4170 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4178 /* mshlldw: mshlld.w $rm, $rn, $rd */
4181 SEM_FN_NAME (sh64_media
,mshlldw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4183 #define FLD(f) abuf->fields.sfmt_add.f
4184 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4185 int UNUSED written
= 0;
4186 IADDR UNUSED pc
= abuf
->addr
;
4187 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4194 tmp_result0
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4195 tmp_result1
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4196 tmp_result2
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4197 tmp_result3
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4199 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4200 SET_H_GR (FLD (f_dest
), opval
);
4201 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4209 /* mshlrdl: mshlrd.l $rm, $rn, $rd */
4212 SEM_FN_NAME (sh64_media
,mshlrdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4214 #define FLD(f) abuf->fields.sfmt_add.f
4215 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4216 int UNUSED written
= 0;
4217 IADDR UNUSED pc
= abuf
->addr
;
4218 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4223 tmp_result0
= SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4224 tmp_result1
= SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4226 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4227 SET_H_GR (FLD (f_dest
), opval
);
4228 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4236 /* mshlrdw: mshlrd.w $rm, $rn, $rd */
4239 SEM_FN_NAME (sh64_media
,mshlrdw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4241 #define FLD(f) abuf->fields.sfmt_add.f
4242 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4243 int UNUSED written
= 0;
4244 IADDR UNUSED pc
= abuf
->addr
;
4245 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4252 tmp_result0
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4253 tmp_result1
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4254 tmp_result2
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4255 tmp_result3
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4257 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4258 SET_H_GR (FLD (f_dest
), opval
);
4259 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4267 /* msubl: msub.l $rm, $rn, $rd */
4270 SEM_FN_NAME (sh64_media
,msubl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4272 #define FLD(f) abuf->fields.sfmt_add.f
4273 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4274 int UNUSED written
= 0;
4275 IADDR UNUSED pc
= abuf
->addr
;
4276 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4281 tmp_result0
= SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
4282 tmp_result1
= SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0));
4284 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4285 SET_H_GR (FLD (f_dest
), opval
);
4286 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4294 /* msubw: msub.w $rm, $rn, $rd */
4297 SEM_FN_NAME (sh64_media
,msubw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4299 #define FLD(f) abuf->fields.sfmt_add.f
4300 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4301 int UNUSED written
= 0;
4302 IADDR UNUSED pc
= abuf
->addr
;
4303 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4310 tmp_result0
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3));
4311 tmp_result1
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2));
4312 tmp_result2
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1));
4313 tmp_result3
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0));
4315 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4316 SET_H_GR (FLD (f_dest
), opval
);
4317 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4325 /* msubsl: msubs.l $rm, $rn, $rd */
4328 SEM_FN_NAME (sh64_media
,msubsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4330 #define FLD(f) abuf->fields.sfmt_add.f
4331 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4332 int UNUSED written
= 0;
4333 IADDR UNUSED pc
= abuf
->addr
;
4334 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4339 tmp_result0
= ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4340 tmp_result1
= ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4342 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4343 SET_H_GR (FLD (f_dest
), opval
);
4344 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4352 /* msubsub: msubs.ub $rm, $rn, $rd */
4355 SEM_FN_NAME (sh64_media
,msubsub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4357 #define FLD(f) abuf->fields.sfmt_add.f
4358 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4359 int UNUSED written
= 0;
4360 IADDR UNUSED pc
= abuf
->addr
;
4361 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4372 tmp_result0
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7)))) : (SUBQI (SLLQI (1, 8), 1)))));
4373 tmp_result1
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6)))) : (SUBQI (SLLQI (1, 8), 1)))));
4374 tmp_result2
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5)))) : (SUBQI (SLLQI (1, 8), 1)))));
4375 tmp_result3
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4)))) : (SUBQI (SLLQI (1, 8), 1)))));
4376 tmp_result4
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3)))) : (SUBQI (SLLQI (1, 8), 1)))));
4377 tmp_result5
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2)))) : (SUBQI (SLLQI (1, 8), 1)))));
4378 tmp_result6
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBQI (SLLQI (1, 8), 1)))));
4379 tmp_result7
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBQI (SLLQI (1, 8), 1)))));
4381 DI opval
= ORDI (SLLDI (ZEXTQIDI (tmp_result7
), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6
), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5
), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4
), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3
), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2
), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1
), 8), ZEXTQIDI (tmp_result0
))))))));
4382 SET_H_GR (FLD (f_dest
), opval
);
4383 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4391 /* msubsw: msubs.w $rm, $rn, $rd */
4394 SEM_FN_NAME (sh64_media
,msubsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4396 #define FLD(f) abuf->fields.sfmt_add.f
4397 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4398 int UNUSED written
= 0;
4399 IADDR UNUSED pc
= abuf
->addr
;
4400 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4411 tmp_result0
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4412 tmp_result1
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4413 tmp_result2
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4414 tmp_result3
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4415 tmp_result4
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4416 tmp_result5
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4417 tmp_result6
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4418 tmp_result7
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4420 DI opval
= ORDI (SLLDI (ZEXTQIDI (tmp_result7
), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6
), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5
), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4
), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3
), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2
), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1
), 8), ZEXTQIDI (tmp_result0
))))))));
4421 SET_H_GR (FLD (f_dest
), opval
);
4422 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4430 /* mulsl: muls.l $rm, $rn, $rd */
4433 SEM_FN_NAME (sh64_media
,mulsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4435 #define FLD(f) abuf->fields.sfmt_add.f
4436 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4437 int UNUSED written
= 0;
4438 IADDR UNUSED pc
= abuf
->addr
;
4439 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4442 DI opval
= MULDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
4443 SET_H_GR (FLD (f_dest
), opval
);
4444 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4451 /* mulul: mulu.l $rm, $rn, $rd */
4454 SEM_FN_NAME (sh64_media
,mulul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4456 #define FLD(f) abuf->fields.sfmt_add.f
4457 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4458 int UNUSED written
= 0;
4459 IADDR UNUSED pc
= abuf
->addr
;
4460 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4463 DI opval
= MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
4464 SET_H_GR (FLD (f_dest
), opval
);
4465 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4475 SEM_FN_NAME (sh64_media
,nop
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4477 #define FLD(f) abuf->fields.fmt_empty.f
4478 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4479 int UNUSED written
= 0;
4480 IADDR UNUSED pc
= abuf
->addr
;
4481 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4489 /* nsb: nsb $rm, $rd */
4492 SEM_FN_NAME (sh64_media
,nsb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4494 #define FLD(f) abuf->fields.sfmt_xori.f
4495 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4496 int UNUSED written
= 0;
4497 IADDR UNUSED pc
= abuf
->addr
;
4498 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4501 DI opval
= sh64_nsb (current_cpu
, GET_H_GR (FLD (f_left
)));
4502 SET_H_GR (FLD (f_dest
), opval
);
4503 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4510 /* ocbi: ocbi $rm, $disp6x32 */
4513 SEM_FN_NAME (sh64_media
,ocbi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4515 #define FLD(f) abuf->fields.sfmt_xori.f
4516 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4517 int UNUSED written
= 0;
4518 IADDR UNUSED pc
= abuf
->addr
;
4519 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4523 DI opval
= GET_H_GR (FLD (f_left
));
4524 SET_H_GR (FLD (f_left
), opval
);
4525 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4534 /* ocbp: ocbp $rm, $disp6x32 */
4537 SEM_FN_NAME (sh64_media
,ocbp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4539 #define FLD(f) abuf->fields.sfmt_xori.f
4540 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4541 int UNUSED written
= 0;
4542 IADDR UNUSED pc
= abuf
->addr
;
4543 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4547 DI opval
= GET_H_GR (FLD (f_left
));
4548 SET_H_GR (FLD (f_left
), opval
);
4549 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4558 /* ocbwb: ocbwb $rm, $disp6x32 */
4561 SEM_FN_NAME (sh64_media
,ocbwb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4563 #define FLD(f) abuf->fields.sfmt_xori.f
4564 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4565 int UNUSED written
= 0;
4566 IADDR UNUSED pc
= abuf
->addr
;
4567 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4571 DI opval
= GET_H_GR (FLD (f_left
));
4572 SET_H_GR (FLD (f_left
), opval
);
4573 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4582 /* or: or $rm, $rn, $rd */
4585 SEM_FN_NAME (sh64_media
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4587 #define FLD(f) abuf->fields.sfmt_add.f
4588 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4589 int UNUSED written
= 0;
4590 IADDR UNUSED pc
= abuf
->addr
;
4591 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4594 DI opval
= ORDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
4595 SET_H_GR (FLD (f_dest
), opval
);
4596 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4603 /* ori: ori $rm, $imm10, $rd */
4606 SEM_FN_NAME (sh64_media
,ori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4608 #define FLD(f) abuf->fields.sfmt_ori.f
4609 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4610 int UNUSED written
= 0;
4611 IADDR UNUSED pc
= abuf
->addr
;
4612 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4615 DI opval
= ORDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm10
)));
4616 SET_H_GR (FLD (f_dest
), opval
);
4617 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4624 /* prefi: prefi $rm, $disp6x32 */
4627 SEM_FN_NAME (sh64_media
,prefi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4629 #define FLD(f) abuf->fields.sfmt_xori.f
4630 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4631 int UNUSED written
= 0;
4632 IADDR UNUSED pc
= abuf
->addr
;
4633 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4637 DI opval
= GET_H_GR (FLD (f_left
));
4638 SET_H_GR (FLD (f_left
), opval
);
4639 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4648 /* pta: pta$likely $disp16, $tra */
4651 SEM_FN_NAME (sh64_media
,pta
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4653 #define FLD(f) abuf->fields.sfmt_pta.f
4654 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4655 int UNUSED written
= 0;
4656 IADDR UNUSED pc
= abuf
->addr
;
4657 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4662 DI opval
= ADDSI (FLD (f_disp16
), 1);
4663 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4664 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4672 /* ptabs: ptabs$likely $rn, $tra */
4675 SEM_FN_NAME (sh64_media
,ptabs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4677 #define FLD(f) abuf->fields.sfmt_beq.f
4678 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4679 int UNUSED written
= 0;
4680 IADDR UNUSED pc
= abuf
->addr
;
4681 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4686 DI opval
= GET_H_GR (FLD (f_right
));
4687 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4688 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4696 /* ptb: ptb$likely $disp16, $tra */
4699 SEM_FN_NAME (sh64_media
,ptb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4701 #define FLD(f) abuf->fields.sfmt_pta.f
4702 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4703 int UNUSED written
= 0;
4704 IADDR UNUSED pc
= abuf
->addr
;
4705 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4710 DI opval
= FLD (f_disp16
);
4711 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4712 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4720 /* ptrel: ptrel$likely $rn, $tra */
4723 SEM_FN_NAME (sh64_media
,ptrel
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4725 #define FLD(f) abuf->fields.sfmt_beq.f
4726 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4727 int UNUSED written
= 0;
4728 IADDR UNUSED pc
= abuf
->addr
;
4729 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4734 DI opval
= ADDDI (pc
, GET_H_GR (FLD (f_right
)));
4735 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4736 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4744 /* putcfg: putcfg $rm, $disp6, $rd */
4747 SEM_FN_NAME (sh64_media
,putcfg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4749 #define FLD(f) abuf->fields.sfmt_getcfg.f
4750 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4751 int UNUSED written
= 0;
4752 IADDR UNUSED pc
= abuf
->addr
;
4753 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4757 tmp_address
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
4760 SI opval
= GET_H_GR (FLD (f_dest
));
4761 SETMEMSI (current_cpu
, pc
, tmp_address
, opval
);
4762 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4770 /* putcon: putcon $rm, $crj */
4773 SEM_FN_NAME (sh64_media
,putcon
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4775 #define FLD(f) abuf->fields.sfmt_xori.f
4776 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4777 int UNUSED written
= 0;
4778 IADDR UNUSED pc
= abuf
->addr
;
4779 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4782 DI opval
= GET_H_GR (FLD (f_left
));
4783 SET_H_CR (FLD (f_dest
), opval
);
4784 TRACE_RESULT (current_cpu
, abuf
, "cr", 'D', opval
);
4794 SEM_FN_NAME (sh64_media
,rte
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4796 #define FLD(f) abuf->fields.fmt_empty.f
4797 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4798 int UNUSED written
= 0;
4799 IADDR UNUSED pc
= abuf
->addr
;
4800 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4808 /* shard: shard $rm, $rn, $rd */
4811 SEM_FN_NAME (sh64_media
,shard
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4813 #define FLD(f) abuf->fields.sfmt_add.f
4814 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4815 int UNUSED written
= 0;
4816 IADDR UNUSED pc
= abuf
->addr
;
4817 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4820 DI opval
= SRADI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63));
4821 SET_H_GR (FLD (f_dest
), opval
);
4822 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4829 /* shardl: shard.l $rm, $rn, $rd */
4832 SEM_FN_NAME (sh64_media
,shardl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4834 #define FLD(f) abuf->fields.sfmt_add.f
4835 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4836 int UNUSED written
= 0;
4837 IADDR UNUSED pc
= abuf
->addr
;
4838 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4841 DI opval
= EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 63)));
4842 SET_H_GR (FLD (f_dest
), opval
);
4843 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4850 /* shari: shari $rm, $uimm6, $rd */
4853 SEM_FN_NAME (sh64_media
,shari
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4855 #define FLD(f) abuf->fields.sfmt_shari.f
4856 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4857 int UNUSED written
= 0;
4858 IADDR UNUSED pc
= abuf
->addr
;
4859 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4862 DI opval
= SRADI (GET_H_GR (FLD (f_left
)), FLD (f_uimm6
));
4863 SET_H_GR (FLD (f_dest
), opval
);
4864 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4871 /* sharil: shari.l $rm, $uimm6, $rd */
4874 SEM_FN_NAME (sh64_media
,sharil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4876 #define FLD(f) abuf->fields.sfmt_shari.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
, 4);
4883 DI opval
= EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDSI (FLD (f_uimm6
), 63)));
4884 SET_H_GR (FLD (f_dest
), opval
);
4885 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4892 /* shlld: shlld $rm, $rn, $rd */
4895 SEM_FN_NAME (sh64_media
,shlld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4897 #define FLD(f) abuf->fields.sfmt_add.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
, 4);
4904 DI opval
= SLLDI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63));
4905 SET_H_GR (FLD (f_dest
), opval
);
4906 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4913 /* shlldl: shlld.l $rm, $rn, $rd */
4916 SEM_FN_NAME (sh64_media
,shlldl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4918 #define FLD(f) abuf->fields.sfmt_add.f
4919 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4920 int UNUSED written
= 0;
4921 IADDR UNUSED pc
= abuf
->addr
;
4922 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4925 DI opval
= EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 63)));
4926 SET_H_GR (FLD (f_dest
), opval
);
4927 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4934 /* shlli: shlli $rm, $uimm6, $rd */
4937 SEM_FN_NAME (sh64_media
,shlli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4939 #define FLD(f) abuf->fields.sfmt_shari.f
4940 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4941 int UNUSED written
= 0;
4942 IADDR UNUSED pc
= abuf
->addr
;
4943 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4946 DI opval
= SLLDI (GET_H_GR (FLD (f_left
)), FLD (f_uimm6
));
4947 SET_H_GR (FLD (f_dest
), opval
);
4948 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4955 /* shllil: shlli.l $rm, $uimm6, $rd */
4958 SEM_FN_NAME (sh64_media
,shllil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4960 #define FLD(f) abuf->fields.sfmt_shari.f
4961 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4962 int UNUSED written
= 0;
4963 IADDR UNUSED pc
= abuf
->addr
;
4964 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4967 DI opval
= EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDSI (FLD (f_uimm6
), 63)));
4968 SET_H_GR (FLD (f_dest
), opval
);
4969 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4976 /* shlrd: shlrd $rm, $rn, $rd */
4979 SEM_FN_NAME (sh64_media
,shlrd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4981 #define FLD(f) abuf->fields.sfmt_add.f
4982 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4983 int UNUSED written
= 0;
4984 IADDR UNUSED pc
= abuf
->addr
;
4985 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4988 DI opval
= SRLDI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63));
4989 SET_H_GR (FLD (f_dest
), opval
);
4990 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4997 /* shlrdl: shlrd.l $rm, $rn, $rd */
5000 SEM_FN_NAME (sh64_media
,shlrdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5002 #define FLD(f) abuf->fields.sfmt_add.f
5003 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5004 int UNUSED written
= 0;
5005 IADDR UNUSED pc
= abuf
->addr
;
5006 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5009 DI opval
= EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 63)));
5010 SET_H_GR (FLD (f_dest
), opval
);
5011 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5018 /* shlri: shlri $rm, $uimm6, $rd */
5021 SEM_FN_NAME (sh64_media
,shlri
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5023 #define FLD(f) abuf->fields.sfmt_shari.f
5024 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5025 int UNUSED written
= 0;
5026 IADDR UNUSED pc
= abuf
->addr
;
5027 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5030 DI opval
= SRLDI (GET_H_GR (FLD (f_left
)), FLD (f_uimm6
));
5031 SET_H_GR (FLD (f_dest
), opval
);
5032 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5039 /* shlril: shlri.l $rm, $uimm6, $rd */
5042 SEM_FN_NAME (sh64_media
,shlril
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5044 #define FLD(f) abuf->fields.sfmt_shari.f
5045 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5046 int UNUSED written
= 0;
5047 IADDR UNUSED pc
= abuf
->addr
;
5048 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5051 DI opval
= EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDSI (FLD (f_uimm6
), 63)));
5052 SET_H_GR (FLD (f_dest
), opval
);
5053 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5060 /* shori: shori $uimm16, $rd */
5063 SEM_FN_NAME (sh64_media
,shori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5065 #define FLD(f) abuf->fields.sfmt_shori.f
5066 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5067 int UNUSED written
= 0;
5068 IADDR UNUSED pc
= abuf
->addr
;
5069 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5072 DI opval
= ORDI (SLLDI (GET_H_GR (FLD (f_dest
)), 16), ZEXTSIDI (FLD (f_uimm16
)));
5073 SET_H_GR (FLD (f_dest
), opval
);
5074 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5084 SEM_FN_NAME (sh64_media
,sleep
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5086 #define FLD(f) abuf->fields.fmt_empty.f
5087 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5088 int UNUSED written
= 0;
5089 IADDR UNUSED pc
= abuf
->addr
;
5090 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5098 /* stb: st.b $rm, $disp10, $rd */
5101 SEM_FN_NAME (sh64_media
,stb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5103 #define FLD(f) abuf->fields.sfmt_addi.f
5104 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5105 int UNUSED written
= 0;
5106 IADDR UNUSED pc
= abuf
->addr
;
5107 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5110 UQI opval
= ANDQI (GET_H_GR (FLD (f_dest
)), 255);
5111 SETMEMUQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
))), opval
);
5112 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5119 /* stl: st.l $rm, $disp10x4, $rd */
5122 SEM_FN_NAME (sh64_media
,stl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5124 #define FLD(f) abuf->fields.sfmt_flds.f
5125 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5126 int UNUSED written
= 0;
5127 IADDR UNUSED pc
= abuf
->addr
;
5128 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5131 SI opval
= ANDSI (GET_H_GR (FLD (f_dest
)), 0xffffffff);
5132 SETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x4
))), opval
);
5133 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5140 /* stq: st.q $rm, $disp10x8, $rd */
5143 SEM_FN_NAME (sh64_media
,stq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5145 #define FLD(f) abuf->fields.sfmt_fldd.f
5146 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5147 int UNUSED written
= 0;
5148 IADDR UNUSED pc
= abuf
->addr
;
5149 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5152 DI opval
= GET_H_GR (FLD (f_dest
));
5153 SETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x8
))), opval
);
5154 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5161 /* stw: st.w $rm, $disp10x2, $rd */
5164 SEM_FN_NAME (sh64_media
,stw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5166 #define FLD(f) abuf->fields.sfmt_lduw.f
5167 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5168 int UNUSED written
= 0;
5169 IADDR UNUSED pc
= abuf
->addr
;
5170 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5173 HI opval
= ANDHI (GET_H_GR (FLD (f_dest
)), 65535);
5174 SETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x2
))), opval
);
5175 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5182 /* sthil: sthi.l $rm, $disp6, $rd */
5185 SEM_FN_NAME (sh64_media
,sthil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5187 #define FLD(f) abuf->fields.sfmt_getcfg.f
5188 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5189 int UNUSED written
= 0;
5190 IADDR UNUSED pc
= abuf
->addr
;
5191 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5197 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5198 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 3), 1);
5199 if (ANDQI (tmp_bytecount
, 4)) {
5201 SI opval
= GET_H_GR (FLD (f_dest
));
5202 SETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5203 written
|= (1 << 5);
5204 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5207 if (GET_H_ENDIAN ()) {
5209 tmp_val
= GET_H_GR (FLD (f_dest
));
5210 if (ANDQI (tmp_bytecount
, 1)) {
5213 UQI opval
= ANDQI (tmp_val
, 255);
5214 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5215 written
|= (1 << 6);
5216 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5218 tmp_val
= SRLDI (tmp_val
, 8);
5221 if (ANDQI (tmp_bytecount
, 2)) {
5224 HI opval
= ANDHI (tmp_val
, 65535);
5225 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5226 written
|= (1 << 4);
5227 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5229 tmp_val
= SRLDI (tmp_val
, 16);
5235 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (32, MULSI (8, tmp_bytecount
)));
5236 if (ANDQI (tmp_bytecount
, 2)) {
5239 HI opval
= ANDHI (tmp_val
, 65535);
5240 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5241 written
|= (1 << 4);
5242 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5244 tmp_val
= SRLDI (tmp_val
, 16);
5247 if (ANDQI (tmp_bytecount
, 1)) {
5250 UQI opval
= ANDQI (tmp_val
, 255);
5251 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5252 written
|= (1 << 6);
5253 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5255 tmp_val
= SRLDI (tmp_val
, 8);
5263 abuf
->written
= written
;
5268 /* sthiq: sthi.q $rm, $disp6, $rd */
5271 SEM_FN_NAME (sh64_media
,sthiq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5273 #define FLD(f) abuf->fields.sfmt_getcfg.f
5274 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5275 int UNUSED written
= 0;
5276 IADDR UNUSED pc
= abuf
->addr
;
5277 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5283 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5284 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 7), 1);
5285 if (ANDQI (tmp_bytecount
, 8)) {
5287 DI opval
= GET_H_GR (FLD (f_dest
));
5288 SETMEMDI (current_cpu
, pc
, ANDDI (tmp_addr
, -8), opval
);
5289 written
|= (1 << 4);
5290 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5293 if (GET_H_ENDIAN ()) {
5295 tmp_val
= GET_H_GR (FLD (f_dest
));
5296 if (ANDQI (tmp_bytecount
, 1)) {
5299 UQI opval
= ANDQI (tmp_val
, 255);
5300 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5301 written
|= (1 << 7);
5302 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5304 tmp_val
= SRLDI (tmp_val
, 8);
5307 if (ANDQI (tmp_bytecount
, 2)) {
5310 HI opval
= ANDHI (tmp_val
, 65535);
5311 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5312 written
|= (1 << 5);
5313 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5315 tmp_val
= SRLDI (tmp_val
, 16);
5318 if (ANDQI (tmp_bytecount
, 4)) {
5321 SI opval
= ANDSI (tmp_val
, 0xffffffff);
5322 SETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8), opval
);
5323 written
|= (1 << 6);
5324 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5326 tmp_val
= SRLDI (tmp_val
, 32);
5332 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (64, MULSI (8, tmp_bytecount
)));
5333 if (ANDQI (tmp_bytecount
, 4)) {
5336 SI opval
= ANDSI (tmp_val
, 0xffffffff);
5337 SETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8), opval
);
5338 written
|= (1 << 6);
5339 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5341 tmp_val
= SRLDI (tmp_val
, 32);
5344 if (ANDQI (tmp_bytecount
, 2)) {
5347 HI opval
= ANDHI (tmp_val
, 65535);
5348 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5349 written
|= (1 << 5);
5350 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5352 tmp_val
= SRLDI (tmp_val
, 16);
5355 if (ANDQI (tmp_bytecount
, 1)) {
5358 UQI opval
= ANDQI (tmp_val
, 255);
5359 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5360 written
|= (1 << 7);
5361 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5363 tmp_val
= SRLDI (tmp_val
, 8);
5371 abuf
->written
= written
;
5376 /* stlol: stlo.l $rm, $disp6, $rd */
5379 SEM_FN_NAME (sh64_media
,stlol
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5381 #define FLD(f) abuf->fields.sfmt_getcfg.f
5382 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5383 int UNUSED written
= 0;
5384 IADDR UNUSED pc
= abuf
->addr
;
5385 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5391 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5392 tmp_bytecount
= SUBSI (4, ANDDI (tmp_addr
, 3));
5393 if (ANDQI (tmp_bytecount
, 4)) {
5395 USI opval
= GET_H_GR (FLD (f_dest
));
5396 SETMEMUSI (current_cpu
, pc
, tmp_addr
, opval
);
5397 written
|= (1 << 6);
5398 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5401 if (GET_H_ENDIAN ()) {
5403 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (32, MULSI (8, tmp_bytecount
)));
5404 if (ANDQI (tmp_bytecount
, 2)) {
5407 UHI opval
= ANDHI (tmp_val
, 65535);
5408 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5409 written
|= (1 << 4);
5410 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5412 tmp_val
= SRLDI (tmp_val
, 16);
5415 if (ANDQI (tmp_bytecount
, 1)) {
5418 UQI opval
= ANDQI (tmp_val
, 255);
5419 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5420 written
|= (1 << 5);
5421 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5423 tmp_val
= SRLDI (tmp_val
, 8);
5429 tmp_val
= GET_H_GR (FLD (f_dest
));
5430 if (ANDQI (tmp_bytecount
, 1)) {
5433 UQI opval
= ANDQI (tmp_val
, 255);
5434 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5435 written
|= (1 << 5);
5436 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5438 tmp_val
= SRLDI (tmp_val
, 8);
5441 if (ANDQI (tmp_bytecount
, 2)) {
5444 UHI opval
= ANDHI (tmp_val
, 65535);
5445 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5446 written
|= (1 << 4);
5447 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5449 tmp_val
= SRLDI (tmp_val
, 16);
5457 abuf
->written
= written
;
5462 /* stloq: stlo.q $rm, $disp6, $rd */
5465 SEM_FN_NAME (sh64_media
,stloq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5467 #define FLD(f) abuf->fields.sfmt_getcfg.f
5468 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5469 int UNUSED written
= 0;
5470 IADDR UNUSED pc
= abuf
->addr
;
5471 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5477 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5478 tmp_bytecount
= SUBSI (8, ANDDI (tmp_addr
, 7));
5479 if (ANDQI (tmp_bytecount
, 8)) {
5481 UDI opval
= GET_H_GR (FLD (f_dest
));
5482 SETMEMUDI (current_cpu
, pc
, tmp_addr
, opval
);
5483 written
|= (1 << 4);
5484 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5487 if (GET_H_ENDIAN ()) {
5489 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (64, MULSI (8, tmp_bytecount
)));
5490 if (ANDQI (tmp_bytecount
, 4)) {
5493 USI opval
= ANDSI (tmp_val
, 0xffffffff);
5494 SETMEMUSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4), opval
);
5495 written
|= (1 << 7);
5496 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5498 tmp_val
= SRLDI (tmp_val
, 32);
5501 if (ANDQI (tmp_bytecount
, 2)) {
5504 UHI opval
= ANDHI (tmp_val
, 65535);
5505 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5506 written
|= (1 << 5);
5507 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5509 tmp_val
= SRLDI (tmp_val
, 16);
5512 if (ANDQI (tmp_bytecount
, 1)) {
5515 UQI opval
= ANDQI (tmp_val
, 255);
5516 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5517 written
|= (1 << 6);
5518 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5520 tmp_val
= SRLDI (tmp_val
, 8);
5526 tmp_val
= GET_H_GR (FLD (f_dest
));
5527 if (ANDQI (tmp_bytecount
, 1)) {
5530 UQI opval
= ANDQI (tmp_val
, 255);
5531 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5532 written
|= (1 << 6);
5533 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5535 tmp_val
= SRLDI (tmp_val
, 8);
5538 if (ANDQI (tmp_bytecount
, 2)) {
5541 UHI opval
= ANDHI (tmp_val
, 65535);
5542 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5543 written
|= (1 << 5);
5544 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5546 tmp_val
= SRLDI (tmp_val
, 16);
5549 if (ANDQI (tmp_bytecount
, 4)) {
5552 USI opval
= ANDSI (tmp_val
, 0xffffffff);
5553 SETMEMUSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4), opval
);
5554 written
|= (1 << 7);
5555 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5557 tmp_val
= SRLDI (tmp_val
, 32);
5565 abuf
->written
= written
;
5570 /* stxb: stx.b $rm, $rn, $rd */
5573 SEM_FN_NAME (sh64_media
,stxb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5575 #define FLD(f) abuf->fields.sfmt_add.f
5576 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5577 int UNUSED written
= 0;
5578 IADDR UNUSED pc
= abuf
->addr
;
5579 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5582 UQI opval
= SUBWORDDIQI (GET_H_GR (FLD (f_dest
)), 7);
5583 SETMEMUQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5584 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5591 /* stxl: stx.l $rm, $rn, $rd */
5594 SEM_FN_NAME (sh64_media
,stxl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5596 #define FLD(f) abuf->fields.sfmt_add.f
5597 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5598 int UNUSED written
= 0;
5599 IADDR UNUSED pc
= abuf
->addr
;
5600 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5603 SI opval
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 1);
5604 SETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5605 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5612 /* stxq: stx.q $rm, $rn, $rd */
5615 SEM_FN_NAME (sh64_media
,stxq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5617 #define FLD(f) abuf->fields.sfmt_add.f
5618 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5619 int UNUSED written
= 0;
5620 IADDR UNUSED pc
= abuf
->addr
;
5621 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5624 DI opval
= GET_H_GR (FLD (f_dest
));
5625 SETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5626 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5633 /* stxw: stx.w $rm, $rn, $rd */
5636 SEM_FN_NAME (sh64_media
,stxw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5638 #define FLD(f) abuf->fields.sfmt_add.f
5639 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5640 int UNUSED written
= 0;
5641 IADDR UNUSED pc
= abuf
->addr
;
5642 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5645 HI opval
= SUBWORDDIHI (GET_H_GR (FLD (f_dest
)), 3);
5646 SETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5647 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5654 /* sub: sub $rm, $rn, $rd */
5657 SEM_FN_NAME (sh64_media
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5659 #define FLD(f) abuf->fields.sfmt_add.f
5660 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5661 int UNUSED written
= 0;
5662 IADDR UNUSED pc
= abuf
->addr
;
5663 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5666 DI opval
= SUBDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
5667 SET_H_GR (FLD (f_dest
), opval
);
5668 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5675 /* subl: sub.l $rm, $rn, $rd */
5678 SEM_FN_NAME (sh64_media
,subl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5680 #define FLD(f) abuf->fields.sfmt_add.f
5681 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5682 int UNUSED written
= 0;
5683 IADDR UNUSED pc
= abuf
->addr
;
5684 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5687 DI opval
= EXTSIDI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
5688 SET_H_GR (FLD (f_dest
), opval
);
5689 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5696 /* swapq: swap.q $rm, $rn, $rd */
5699 SEM_FN_NAME (sh64_media
,swapq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5701 #define FLD(f) abuf->fields.sfmt_add.f
5702 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5703 int UNUSED written
= 0;
5704 IADDR UNUSED pc
= abuf
->addr
;
5705 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5710 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
5711 tmp_temp
= GETMEMDI (current_cpu
, pc
, tmp_addr
);
5713 DI opval
= GET_H_GR (FLD (f_dest
));
5714 SETMEMDI (current_cpu
, pc
, tmp_addr
, opval
);
5715 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5718 DI opval
= tmp_temp
;
5719 SET_H_GR (FLD (f_dest
), opval
);
5720 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5731 SEM_FN_NAME (sh64_media
,synci
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5733 #define FLD(f) abuf->fields.fmt_empty.f
5734 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5735 int UNUSED written
= 0;
5736 IADDR UNUSED pc
= abuf
->addr
;
5737 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5748 SEM_FN_NAME (sh64_media
,synco
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5750 #define FLD(f) abuf->fields.fmt_empty.f
5751 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5752 int UNUSED written
= 0;
5753 IADDR UNUSED pc
= abuf
->addr
;
5754 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5762 /* trapa: trapa $rm */
5765 SEM_FN_NAME (sh64_media
,trapa
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5767 #define FLD(f) abuf->fields.sfmt_xori.f
5768 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5769 int UNUSED written
= 0;
5770 IADDR UNUSED pc
= abuf
->addr
;
5771 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5773 sh64_trapa (current_cpu
, GET_H_GR (FLD (f_left
)), pc
);
5779 /* xor: xor $rm, $rn, $rd */
5782 SEM_FN_NAME (sh64_media
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5784 #define FLD(f) abuf->fields.sfmt_add.f
5785 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5786 int UNUSED written
= 0;
5787 IADDR UNUSED pc
= abuf
->addr
;
5788 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5791 DI opval
= XORDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
5792 SET_H_GR (FLD (f_dest
), opval
);
5793 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5800 /* xori: xori $rm, $imm6, $rd */
5803 SEM_FN_NAME (sh64_media
,xori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5805 #define FLD(f) abuf->fields.sfmt_xori.f
5806 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5807 int UNUSED written
= 0;
5808 IADDR UNUSED pc
= abuf
->addr
;
5809 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5812 DI opval
= XORDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm6
)));
5813 SET_H_GR (FLD (f_dest
), opval
);
5814 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5821 /* Table of all semantic fns. */
5823 static const struct sem_fn_desc sem_fns
[] = {
5824 { SH64_MEDIA_INSN_X_INVALID
, SEM_FN_NAME (sh64_media
,x_invalid
) },
5825 { SH64_MEDIA_INSN_X_AFTER
, SEM_FN_NAME (sh64_media
,x_after
) },
5826 { SH64_MEDIA_INSN_X_BEFORE
, SEM_FN_NAME (sh64_media
,x_before
) },
5827 { SH64_MEDIA_INSN_X_CTI_CHAIN
, SEM_FN_NAME (sh64_media
,x_cti_chain
) },
5828 { SH64_MEDIA_INSN_X_CHAIN
, SEM_FN_NAME (sh64_media
,x_chain
) },
5829 { SH64_MEDIA_INSN_X_BEGIN
, SEM_FN_NAME (sh64_media
,x_begin
) },
5830 { SH64_MEDIA_INSN_ADD
, SEM_FN_NAME (sh64_media
,add
) },
5831 { SH64_MEDIA_INSN_ADDL
, SEM_FN_NAME (sh64_media
,addl
) },
5832 { SH64_MEDIA_INSN_ADDI
, SEM_FN_NAME (sh64_media
,addi
) },
5833 { SH64_MEDIA_INSN_ADDIL
, SEM_FN_NAME (sh64_media
,addil
) },
5834 { SH64_MEDIA_INSN_ADDZL
, SEM_FN_NAME (sh64_media
,addzl
) },
5835 { SH64_MEDIA_INSN_ALLOCO
, SEM_FN_NAME (sh64_media
,alloco
) },
5836 { SH64_MEDIA_INSN_AND
, SEM_FN_NAME (sh64_media
,and) },
5837 { SH64_MEDIA_INSN_ANDC
, SEM_FN_NAME (sh64_media
,andc
) },
5838 { SH64_MEDIA_INSN_ANDI
, SEM_FN_NAME (sh64_media
,andi
) },
5839 { SH64_MEDIA_INSN_BEQ
, SEM_FN_NAME (sh64_media
,beq
) },
5840 { SH64_MEDIA_INSN_BEQI
, SEM_FN_NAME (sh64_media
,beqi
) },
5841 { SH64_MEDIA_INSN_BGE
, SEM_FN_NAME (sh64_media
,bge
) },
5842 { SH64_MEDIA_INSN_BGEU
, SEM_FN_NAME (sh64_media
,bgeu
) },
5843 { SH64_MEDIA_INSN_BGT
, SEM_FN_NAME (sh64_media
,bgt
) },
5844 { SH64_MEDIA_INSN_BGTU
, SEM_FN_NAME (sh64_media
,bgtu
) },
5845 { SH64_MEDIA_INSN_BLINK
, SEM_FN_NAME (sh64_media
,blink
) },
5846 { SH64_MEDIA_INSN_BNE
, SEM_FN_NAME (sh64_media
,bne
) },
5847 { SH64_MEDIA_INSN_BNEI
, SEM_FN_NAME (sh64_media
,bnei
) },
5848 { SH64_MEDIA_INSN_BRK
, SEM_FN_NAME (sh64_media
,brk
) },
5849 { SH64_MEDIA_INSN_BYTEREV
, SEM_FN_NAME (sh64_media
,byterev
) },
5850 { SH64_MEDIA_INSN_CMPEQ
, SEM_FN_NAME (sh64_media
,cmpeq
) },
5851 { SH64_MEDIA_INSN_CMPGT
, SEM_FN_NAME (sh64_media
,cmpgt
) },
5852 { SH64_MEDIA_INSN_CMPGTU
, SEM_FN_NAME (sh64_media
,cmpgtu
) },
5853 { SH64_MEDIA_INSN_CMVEQ
, SEM_FN_NAME (sh64_media
,cmveq
) },
5854 { SH64_MEDIA_INSN_CMVNE
, SEM_FN_NAME (sh64_media
,cmvne
) },
5855 { SH64_MEDIA_INSN_FABSD
, SEM_FN_NAME (sh64_media
,fabsd
) },
5856 { SH64_MEDIA_INSN_FABSS
, SEM_FN_NAME (sh64_media
,fabss
) },
5857 { SH64_MEDIA_INSN_FADDD
, SEM_FN_NAME (sh64_media
,faddd
) },
5858 { SH64_MEDIA_INSN_FADDS
, SEM_FN_NAME (sh64_media
,fadds
) },
5859 { SH64_MEDIA_INSN_FCMPEQD
, SEM_FN_NAME (sh64_media
,fcmpeqd
) },
5860 { SH64_MEDIA_INSN_FCMPEQS
, SEM_FN_NAME (sh64_media
,fcmpeqs
) },
5861 { SH64_MEDIA_INSN_FCMPGED
, SEM_FN_NAME (sh64_media
,fcmpged
) },
5862 { SH64_MEDIA_INSN_FCMPGES
, SEM_FN_NAME (sh64_media
,fcmpges
) },
5863 { SH64_MEDIA_INSN_FCMPGTD
, SEM_FN_NAME (sh64_media
,fcmpgtd
) },
5864 { SH64_MEDIA_INSN_FCMPGTS
, SEM_FN_NAME (sh64_media
,fcmpgts
) },
5865 { SH64_MEDIA_INSN_FCMPUND
, SEM_FN_NAME (sh64_media
,fcmpund
) },
5866 { SH64_MEDIA_INSN_FCMPUNS
, SEM_FN_NAME (sh64_media
,fcmpuns
) },
5867 { SH64_MEDIA_INSN_FCNVDS
, SEM_FN_NAME (sh64_media
,fcnvds
) },
5868 { SH64_MEDIA_INSN_FCNVSD
, SEM_FN_NAME (sh64_media
,fcnvsd
) },
5869 { SH64_MEDIA_INSN_FDIVD
, SEM_FN_NAME (sh64_media
,fdivd
) },
5870 { SH64_MEDIA_INSN_FDIVS
, SEM_FN_NAME (sh64_media
,fdivs
) },
5871 { SH64_MEDIA_INSN_FGETSCR
, SEM_FN_NAME (sh64_media
,fgetscr
) },
5872 { SH64_MEDIA_INSN_FIPRS
, SEM_FN_NAME (sh64_media
,fiprs
) },
5873 { SH64_MEDIA_INSN_FLDD
, SEM_FN_NAME (sh64_media
,fldd
) },
5874 { SH64_MEDIA_INSN_FLDP
, SEM_FN_NAME (sh64_media
,fldp
) },
5875 { SH64_MEDIA_INSN_FLDS
, SEM_FN_NAME (sh64_media
,flds
) },
5876 { SH64_MEDIA_INSN_FLDXD
, SEM_FN_NAME (sh64_media
,fldxd
) },
5877 { SH64_MEDIA_INSN_FLDXP
, SEM_FN_NAME (sh64_media
,fldxp
) },
5878 { SH64_MEDIA_INSN_FLDXS
, SEM_FN_NAME (sh64_media
,fldxs
) },
5879 { SH64_MEDIA_INSN_FLOATLD
, SEM_FN_NAME (sh64_media
,floatld
) },
5880 { SH64_MEDIA_INSN_FLOATLS
, SEM_FN_NAME (sh64_media
,floatls
) },
5881 { SH64_MEDIA_INSN_FLOATQD
, SEM_FN_NAME (sh64_media
,floatqd
) },
5882 { SH64_MEDIA_INSN_FLOATQS
, SEM_FN_NAME (sh64_media
,floatqs
) },
5883 { SH64_MEDIA_INSN_FMACS
, SEM_FN_NAME (sh64_media
,fmacs
) },
5884 { SH64_MEDIA_INSN_FMOVD
, SEM_FN_NAME (sh64_media
,fmovd
) },
5885 { SH64_MEDIA_INSN_FMOVDQ
, SEM_FN_NAME (sh64_media
,fmovdq
) },
5886 { SH64_MEDIA_INSN_FMOVLS
, SEM_FN_NAME (sh64_media
,fmovls
) },
5887 { SH64_MEDIA_INSN_FMOVQD
, SEM_FN_NAME (sh64_media
,fmovqd
) },
5888 { SH64_MEDIA_INSN_FMOVS
, SEM_FN_NAME (sh64_media
,fmovs
) },
5889 { SH64_MEDIA_INSN_FMOVSL
, SEM_FN_NAME (sh64_media
,fmovsl
) },
5890 { SH64_MEDIA_INSN_FMULD
, SEM_FN_NAME (sh64_media
,fmuld
) },
5891 { SH64_MEDIA_INSN_FMULS
, SEM_FN_NAME (sh64_media
,fmuls
) },
5892 { SH64_MEDIA_INSN_FNEGD
, SEM_FN_NAME (sh64_media
,fnegd
) },
5893 { SH64_MEDIA_INSN_FNEGS
, SEM_FN_NAME (sh64_media
,fnegs
) },
5894 { SH64_MEDIA_INSN_FPUTSCR
, SEM_FN_NAME (sh64_media
,fputscr
) },
5895 { SH64_MEDIA_INSN_FSQRTD
, SEM_FN_NAME (sh64_media
,fsqrtd
) },
5896 { SH64_MEDIA_INSN_FSQRTS
, SEM_FN_NAME (sh64_media
,fsqrts
) },
5897 { SH64_MEDIA_INSN_FSTD
, SEM_FN_NAME (sh64_media
,fstd
) },
5898 { SH64_MEDIA_INSN_FSTP
, SEM_FN_NAME (sh64_media
,fstp
) },
5899 { SH64_MEDIA_INSN_FSTS
, SEM_FN_NAME (sh64_media
,fsts
) },
5900 { SH64_MEDIA_INSN_FSTXD
, SEM_FN_NAME (sh64_media
,fstxd
) },
5901 { SH64_MEDIA_INSN_FSTXP
, SEM_FN_NAME (sh64_media
,fstxp
) },
5902 { SH64_MEDIA_INSN_FSTXS
, SEM_FN_NAME (sh64_media
,fstxs
) },
5903 { SH64_MEDIA_INSN_FSUBD
, SEM_FN_NAME (sh64_media
,fsubd
) },
5904 { SH64_MEDIA_INSN_FSUBS
, SEM_FN_NAME (sh64_media
,fsubs
) },
5905 { SH64_MEDIA_INSN_FTRCDL
, SEM_FN_NAME (sh64_media
,ftrcdl
) },
5906 { SH64_MEDIA_INSN_FTRCSL
, SEM_FN_NAME (sh64_media
,ftrcsl
) },
5907 { SH64_MEDIA_INSN_FTRCDQ
, SEM_FN_NAME (sh64_media
,ftrcdq
) },
5908 { SH64_MEDIA_INSN_FTRCSQ
, SEM_FN_NAME (sh64_media
,ftrcsq
) },
5909 { SH64_MEDIA_INSN_FTRVS
, SEM_FN_NAME (sh64_media
,ftrvs
) },
5910 { SH64_MEDIA_INSN_GETCFG
, SEM_FN_NAME (sh64_media
,getcfg
) },
5911 { SH64_MEDIA_INSN_GETCON
, SEM_FN_NAME (sh64_media
,getcon
) },
5912 { SH64_MEDIA_INSN_GETTR
, SEM_FN_NAME (sh64_media
,gettr
) },
5913 { SH64_MEDIA_INSN_ICBI
, SEM_FN_NAME (sh64_media
,icbi
) },
5914 { SH64_MEDIA_INSN_LDB
, SEM_FN_NAME (sh64_media
,ldb
) },
5915 { SH64_MEDIA_INSN_LDL
, SEM_FN_NAME (sh64_media
,ldl
) },
5916 { SH64_MEDIA_INSN_LDQ
, SEM_FN_NAME (sh64_media
,ldq
) },
5917 { SH64_MEDIA_INSN_LDUB
, SEM_FN_NAME (sh64_media
,ldub
) },
5918 { SH64_MEDIA_INSN_LDUW
, SEM_FN_NAME (sh64_media
,lduw
) },
5919 { SH64_MEDIA_INSN_LDW
, SEM_FN_NAME (sh64_media
,ldw
) },
5920 { SH64_MEDIA_INSN_LDHIL
, SEM_FN_NAME (sh64_media
,ldhil
) },
5921 { SH64_MEDIA_INSN_LDHIQ
, SEM_FN_NAME (sh64_media
,ldhiq
) },
5922 { SH64_MEDIA_INSN_LDLOL
, SEM_FN_NAME (sh64_media
,ldlol
) },
5923 { SH64_MEDIA_INSN_LDLOQ
, SEM_FN_NAME (sh64_media
,ldloq
) },
5924 { SH64_MEDIA_INSN_LDXB
, SEM_FN_NAME (sh64_media
,ldxb
) },
5925 { SH64_MEDIA_INSN_LDXL
, SEM_FN_NAME (sh64_media
,ldxl
) },
5926 { SH64_MEDIA_INSN_LDXQ
, SEM_FN_NAME (sh64_media
,ldxq
) },
5927 { SH64_MEDIA_INSN_LDXUB
, SEM_FN_NAME (sh64_media
,ldxub
) },
5928 { SH64_MEDIA_INSN_LDXUW
, SEM_FN_NAME (sh64_media
,ldxuw
) },
5929 { SH64_MEDIA_INSN_LDXW
, SEM_FN_NAME (sh64_media
,ldxw
) },
5930 { SH64_MEDIA_INSN_MABSL
, SEM_FN_NAME (sh64_media
,mabsl
) },
5931 { SH64_MEDIA_INSN_MABSW
, SEM_FN_NAME (sh64_media
,mabsw
) },
5932 { SH64_MEDIA_INSN_MADDL
, SEM_FN_NAME (sh64_media
,maddl
) },
5933 { SH64_MEDIA_INSN_MADDW
, SEM_FN_NAME (sh64_media
,maddw
) },
5934 { SH64_MEDIA_INSN_MADDSL
, SEM_FN_NAME (sh64_media
,maddsl
) },
5935 { SH64_MEDIA_INSN_MADDSUB
, SEM_FN_NAME (sh64_media
,maddsub
) },
5936 { SH64_MEDIA_INSN_MADDSW
, SEM_FN_NAME (sh64_media
,maddsw
) },
5937 { SH64_MEDIA_INSN_MCMPEQB
, SEM_FN_NAME (sh64_media
,mcmpeqb
) },
5938 { SH64_MEDIA_INSN_MCMPEQL
, SEM_FN_NAME (sh64_media
,mcmpeql
) },
5939 { SH64_MEDIA_INSN_MCMPEQW
, SEM_FN_NAME (sh64_media
,mcmpeqw
) },
5940 { SH64_MEDIA_INSN_MCMPGTL
, SEM_FN_NAME (sh64_media
,mcmpgtl
) },
5941 { SH64_MEDIA_INSN_MCMPGTUB
, SEM_FN_NAME (sh64_media
,mcmpgtub
) },
5942 { SH64_MEDIA_INSN_MCMPGTW
, SEM_FN_NAME (sh64_media
,mcmpgtw
) },
5943 { SH64_MEDIA_INSN_MCMV
, SEM_FN_NAME (sh64_media
,mcmv
) },
5944 { SH64_MEDIA_INSN_MCNVSLW
, SEM_FN_NAME (sh64_media
,mcnvslw
) },
5945 { SH64_MEDIA_INSN_MCNVSWB
, SEM_FN_NAME (sh64_media
,mcnvswb
) },
5946 { SH64_MEDIA_INSN_MCNVSWUB
, SEM_FN_NAME (sh64_media
,mcnvswub
) },
5947 { SH64_MEDIA_INSN_MEXTR1
, SEM_FN_NAME (sh64_media
,mextr1
) },
5948 { SH64_MEDIA_INSN_MEXTR2
, SEM_FN_NAME (sh64_media
,mextr2
) },
5949 { SH64_MEDIA_INSN_MEXTR3
, SEM_FN_NAME (sh64_media
,mextr3
) },
5950 { SH64_MEDIA_INSN_MEXTR4
, SEM_FN_NAME (sh64_media
,mextr4
) },
5951 { SH64_MEDIA_INSN_MEXTR5
, SEM_FN_NAME (sh64_media
,mextr5
) },
5952 { SH64_MEDIA_INSN_MEXTR6
, SEM_FN_NAME (sh64_media
,mextr6
) },
5953 { SH64_MEDIA_INSN_MEXTR7
, SEM_FN_NAME (sh64_media
,mextr7
) },
5954 { SH64_MEDIA_INSN_MMACFXWL
, SEM_FN_NAME (sh64_media
,mmacfxwl
) },
5955 { SH64_MEDIA_INSN_MMACNFX_WL
, SEM_FN_NAME (sh64_media
,mmacnfx_wl
) },
5956 { SH64_MEDIA_INSN_MMULL
, SEM_FN_NAME (sh64_media
,mmull
) },
5957 { SH64_MEDIA_INSN_MMULW
, SEM_FN_NAME (sh64_media
,mmulw
) },
5958 { SH64_MEDIA_INSN_MMULFXL
, SEM_FN_NAME (sh64_media
,mmulfxl
) },
5959 { SH64_MEDIA_INSN_MMULFXW
, SEM_FN_NAME (sh64_media
,mmulfxw
) },
5960 { SH64_MEDIA_INSN_MMULFXRPW
, SEM_FN_NAME (sh64_media
,mmulfxrpw
) },
5961 { SH64_MEDIA_INSN_MMULHIWL
, SEM_FN_NAME (sh64_media
,mmulhiwl
) },
5962 { SH64_MEDIA_INSN_MMULLOWL
, SEM_FN_NAME (sh64_media
,mmullowl
) },
5963 { SH64_MEDIA_INSN_MMULSUMWQ
, SEM_FN_NAME (sh64_media
,mmulsumwq
) },
5964 { SH64_MEDIA_INSN_MOVI
, SEM_FN_NAME (sh64_media
,movi
) },
5965 { SH64_MEDIA_INSN_MPERMW
, SEM_FN_NAME (sh64_media
,mpermw
) },
5966 { SH64_MEDIA_INSN_MSADUBQ
, SEM_FN_NAME (sh64_media
,msadubq
) },
5967 { SH64_MEDIA_INSN_MSHALDSL
, SEM_FN_NAME (sh64_media
,mshaldsl
) },
5968 { SH64_MEDIA_INSN_MSHALDSW
, SEM_FN_NAME (sh64_media
,mshaldsw
) },
5969 { SH64_MEDIA_INSN_MSHARDL
, SEM_FN_NAME (sh64_media
,mshardl
) },
5970 { SH64_MEDIA_INSN_MSHARDW
, SEM_FN_NAME (sh64_media
,mshardw
) },
5971 { SH64_MEDIA_INSN_MSHARDSQ
, SEM_FN_NAME (sh64_media
,mshardsq
) },
5972 { SH64_MEDIA_INSN_MSHFHIB
, SEM_FN_NAME (sh64_media
,mshfhib
) },
5973 { SH64_MEDIA_INSN_MSHFHIL
, SEM_FN_NAME (sh64_media
,mshfhil
) },
5974 { SH64_MEDIA_INSN_MSHFHIW
, SEM_FN_NAME (sh64_media
,mshfhiw
) },
5975 { SH64_MEDIA_INSN_MSHFLOB
, SEM_FN_NAME (sh64_media
,mshflob
) },
5976 { SH64_MEDIA_INSN_MSHFLOL
, SEM_FN_NAME (sh64_media
,mshflol
) },
5977 { SH64_MEDIA_INSN_MSHFLOW
, SEM_FN_NAME (sh64_media
,mshflow
) },
5978 { SH64_MEDIA_INSN_MSHLLDL
, SEM_FN_NAME (sh64_media
,mshlldl
) },
5979 { SH64_MEDIA_INSN_MSHLLDW
, SEM_FN_NAME (sh64_media
,mshlldw
) },
5980 { SH64_MEDIA_INSN_MSHLRDL
, SEM_FN_NAME (sh64_media
,mshlrdl
) },
5981 { SH64_MEDIA_INSN_MSHLRDW
, SEM_FN_NAME (sh64_media
,mshlrdw
) },
5982 { SH64_MEDIA_INSN_MSUBL
, SEM_FN_NAME (sh64_media
,msubl
) },
5983 { SH64_MEDIA_INSN_MSUBW
, SEM_FN_NAME (sh64_media
,msubw
) },
5984 { SH64_MEDIA_INSN_MSUBSL
, SEM_FN_NAME (sh64_media
,msubsl
) },
5985 { SH64_MEDIA_INSN_MSUBSUB
, SEM_FN_NAME (sh64_media
,msubsub
) },
5986 { SH64_MEDIA_INSN_MSUBSW
, SEM_FN_NAME (sh64_media
,msubsw
) },
5987 { SH64_MEDIA_INSN_MULSL
, SEM_FN_NAME (sh64_media
,mulsl
) },
5988 { SH64_MEDIA_INSN_MULUL
, SEM_FN_NAME (sh64_media
,mulul
) },
5989 { SH64_MEDIA_INSN_NOP
, SEM_FN_NAME (sh64_media
,nop
) },
5990 { SH64_MEDIA_INSN_NSB
, SEM_FN_NAME (sh64_media
,nsb
) },
5991 { SH64_MEDIA_INSN_OCBI
, SEM_FN_NAME (sh64_media
,ocbi
) },
5992 { SH64_MEDIA_INSN_OCBP
, SEM_FN_NAME (sh64_media
,ocbp
) },
5993 { SH64_MEDIA_INSN_OCBWB
, SEM_FN_NAME (sh64_media
,ocbwb
) },
5994 { SH64_MEDIA_INSN_OR
, SEM_FN_NAME (sh64_media
,or) },
5995 { SH64_MEDIA_INSN_ORI
, SEM_FN_NAME (sh64_media
,ori
) },
5996 { SH64_MEDIA_INSN_PREFI
, SEM_FN_NAME (sh64_media
,prefi
) },
5997 { SH64_MEDIA_INSN_PTA
, SEM_FN_NAME (sh64_media
,pta
) },
5998 { SH64_MEDIA_INSN_PTABS
, SEM_FN_NAME (sh64_media
,ptabs
) },
5999 { SH64_MEDIA_INSN_PTB
, SEM_FN_NAME (sh64_media
,ptb
) },
6000 { SH64_MEDIA_INSN_PTREL
, SEM_FN_NAME (sh64_media
,ptrel
) },
6001 { SH64_MEDIA_INSN_PUTCFG
, SEM_FN_NAME (sh64_media
,putcfg
) },
6002 { SH64_MEDIA_INSN_PUTCON
, SEM_FN_NAME (sh64_media
,putcon
) },
6003 { SH64_MEDIA_INSN_RTE
, SEM_FN_NAME (sh64_media
,rte
) },
6004 { SH64_MEDIA_INSN_SHARD
, SEM_FN_NAME (sh64_media
,shard
) },
6005 { SH64_MEDIA_INSN_SHARDL
, SEM_FN_NAME (sh64_media
,shardl
) },
6006 { SH64_MEDIA_INSN_SHARI
, SEM_FN_NAME (sh64_media
,shari
) },
6007 { SH64_MEDIA_INSN_SHARIL
, SEM_FN_NAME (sh64_media
,sharil
) },
6008 { SH64_MEDIA_INSN_SHLLD
, SEM_FN_NAME (sh64_media
,shlld
) },
6009 { SH64_MEDIA_INSN_SHLLDL
, SEM_FN_NAME (sh64_media
,shlldl
) },
6010 { SH64_MEDIA_INSN_SHLLI
, SEM_FN_NAME (sh64_media
,shlli
) },
6011 { SH64_MEDIA_INSN_SHLLIL
, SEM_FN_NAME (sh64_media
,shllil
) },
6012 { SH64_MEDIA_INSN_SHLRD
, SEM_FN_NAME (sh64_media
,shlrd
) },
6013 { SH64_MEDIA_INSN_SHLRDL
, SEM_FN_NAME (sh64_media
,shlrdl
) },
6014 { SH64_MEDIA_INSN_SHLRI
, SEM_FN_NAME (sh64_media
,shlri
) },
6015 { SH64_MEDIA_INSN_SHLRIL
, SEM_FN_NAME (sh64_media
,shlril
) },
6016 { SH64_MEDIA_INSN_SHORI
, SEM_FN_NAME (sh64_media
,shori
) },
6017 { SH64_MEDIA_INSN_SLEEP
, SEM_FN_NAME (sh64_media
,sleep
) },
6018 { SH64_MEDIA_INSN_STB
, SEM_FN_NAME (sh64_media
,stb
) },
6019 { SH64_MEDIA_INSN_STL
, SEM_FN_NAME (sh64_media
,stl
) },
6020 { SH64_MEDIA_INSN_STQ
, SEM_FN_NAME (sh64_media
,stq
) },
6021 { SH64_MEDIA_INSN_STW
, SEM_FN_NAME (sh64_media
,stw
) },
6022 { SH64_MEDIA_INSN_STHIL
, SEM_FN_NAME (sh64_media
,sthil
) },
6023 { SH64_MEDIA_INSN_STHIQ
, SEM_FN_NAME (sh64_media
,sthiq
) },
6024 { SH64_MEDIA_INSN_STLOL
, SEM_FN_NAME (sh64_media
,stlol
) },
6025 { SH64_MEDIA_INSN_STLOQ
, SEM_FN_NAME (sh64_media
,stloq
) },
6026 { SH64_MEDIA_INSN_STXB
, SEM_FN_NAME (sh64_media
,stxb
) },
6027 { SH64_MEDIA_INSN_STXL
, SEM_FN_NAME (sh64_media
,stxl
) },
6028 { SH64_MEDIA_INSN_STXQ
, SEM_FN_NAME (sh64_media
,stxq
) },
6029 { SH64_MEDIA_INSN_STXW
, SEM_FN_NAME (sh64_media
,stxw
) },
6030 { SH64_MEDIA_INSN_SUB
, SEM_FN_NAME (sh64_media
,sub
) },
6031 { SH64_MEDIA_INSN_SUBL
, SEM_FN_NAME (sh64_media
,subl
) },
6032 { SH64_MEDIA_INSN_SWAPQ
, SEM_FN_NAME (sh64_media
,swapq
) },
6033 { SH64_MEDIA_INSN_SYNCI
, SEM_FN_NAME (sh64_media
,synci
) },
6034 { SH64_MEDIA_INSN_SYNCO
, SEM_FN_NAME (sh64_media
,synco
) },
6035 { SH64_MEDIA_INSN_TRAPA
, SEM_FN_NAME (sh64_media
,trapa
) },
6036 { SH64_MEDIA_INSN_XOR
, SEM_FN_NAME (sh64_media
,xor) },
6037 { SH64_MEDIA_INSN_XORI
, SEM_FN_NAME (sh64_media
,xori
) },
6041 /* Add the semantic fns to IDESC_TABLE. */
6044 SEM_FN_NAME (sh64_media
,init_idesc_table
) (SIM_CPU
*current_cpu
)
6046 IDESC
*idesc_table
= CPU_IDESC (current_cpu
);
6047 const struct sem_fn_desc
*sf
;
6048 int mach_num
= MACH_NUM (CPU_MACH (current_cpu
));
6050 for (sf
= &sem_fns
[0]; sf
->fn
!= 0; ++sf
)
6052 const CGEN_INSN
*insn
= idesc_table
[sf
->index
].idata
;
6053 int valid_p
= (CGEN_INSN_VIRTUAL_P (insn
)
6054 || CGEN_INSN_MACH_HAS_P (insn
, mach_num
));
6057 idesc_table
[sf
->index
].sem_fast
= sf
->fn
;
6059 idesc_table
[sf
->index
].sem_fast
= SEM_FN_NAME (sh64_media
,x_invalid
);
6062 idesc_table
[sf
->index
].sem_full
= sf
->fn
;
6064 idesc_table
[sf
->index
].sem_full
= SEM_FN_NAME (sh64_media
,x_invalid
);