1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
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.fmt_empty.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);
326 /* and: and $rm, $rn, $rd */
329 SEM_FN_NAME (sh64_media
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
331 #define FLD(f) abuf->fields.sfmt_add.f
332 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
333 int UNUSED written
= 0;
334 IADDR UNUSED pc
= abuf
->addr
;
335 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
338 DI opval
= ANDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
339 SET_H_GR (FLD (f_dest
), opval
);
340 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
347 /* andc: andc $rm, $rn, $rd */
350 SEM_FN_NAME (sh64_media
,andc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
352 #define FLD(f) abuf->fields.sfmt_add.f
353 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
354 int UNUSED written
= 0;
355 IADDR UNUSED pc
= abuf
->addr
;
356 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
359 DI opval
= ANDDI (GET_H_GR (FLD (f_left
)), INVDI (GET_H_GR (FLD (f_right
))));
360 SET_H_GR (FLD (f_dest
), opval
);
361 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
368 /* andi: andi $rm, $disp10, $rd */
371 SEM_FN_NAME (sh64_media
,andi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
373 #define FLD(f) abuf->fields.sfmt_addi.f
374 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
375 int UNUSED written
= 0;
376 IADDR UNUSED pc
= abuf
->addr
;
377 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
380 DI opval
= ANDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)));
381 SET_H_GR (FLD (f_dest
), opval
);
382 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
389 /* beq: beq$likely $rm, $rn, $tra */
392 SEM_FN_NAME (sh64_media
,beq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
394 #define FLD(f) abuf->fields.sfmt_beq.f
395 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
396 int UNUSED written
= 0;
397 IADDR UNUSED pc
= abuf
->addr
;
399 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
401 if (EQDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
403 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
404 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
406 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
410 abuf
->written
= written
;
411 SEM_BRANCH_FINI (vpc
);
416 /* beqi: beqi$likely $rm, $imm6, $tra */
419 SEM_FN_NAME (sh64_media
,beqi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
421 #define FLD(f) abuf->fields.sfmt_beqi.f
422 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
423 int UNUSED written
= 0;
424 IADDR UNUSED pc
= abuf
->addr
;
426 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
428 if (EQDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm6
)))) {
430 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
431 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
433 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
437 abuf
->written
= written
;
438 SEM_BRANCH_FINI (vpc
);
443 /* bge: bge$likely $rm, $rn, $tra */
446 SEM_FN_NAME (sh64_media
,bge
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
448 #define FLD(f) abuf->fields.sfmt_beq.f
449 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
450 int UNUSED written
= 0;
451 IADDR UNUSED pc
= abuf
->addr
;
453 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
455 if (GEDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
457 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
458 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
460 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
464 abuf
->written
= written
;
465 SEM_BRANCH_FINI (vpc
);
470 /* bgeu: bgeu$likely $rm, $rn, $tra */
473 SEM_FN_NAME (sh64_media
,bgeu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
475 #define FLD(f) abuf->fields.sfmt_beq.f
476 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
477 int UNUSED written
= 0;
478 IADDR UNUSED pc
= abuf
->addr
;
480 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
482 if (GEUDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
484 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
485 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
487 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
491 abuf
->written
= written
;
492 SEM_BRANCH_FINI (vpc
);
497 /* bgt: bgt$likely $rm, $rn, $tra */
500 SEM_FN_NAME (sh64_media
,bgt
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
502 #define FLD(f) abuf->fields.sfmt_beq.f
503 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
504 int UNUSED written
= 0;
505 IADDR UNUSED pc
= abuf
->addr
;
507 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
509 if (GTDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
511 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
512 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
514 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
518 abuf
->written
= written
;
519 SEM_BRANCH_FINI (vpc
);
524 /* bgtu: bgtu$likely $rm, $rn, $tra */
527 SEM_FN_NAME (sh64_media
,bgtu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
529 #define FLD(f) abuf->fields.sfmt_beq.f
530 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
531 int UNUSED written
= 0;
532 IADDR UNUSED pc
= abuf
->addr
;
534 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
536 if (GTUDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
538 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
539 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
541 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
545 abuf
->written
= written
;
546 SEM_BRANCH_FINI (vpc
);
551 /* blink: blink $trb, $rd */
554 SEM_FN_NAME (sh64_media
,blink
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
556 #define FLD(f) abuf->fields.sfmt_blink.f
557 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
558 int UNUSED written
= 0;
559 IADDR UNUSED pc
= abuf
->addr
;
561 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
565 DI opval
= ORDI (ADDDI (pc
, 4), 1);
566 SET_H_GR (FLD (f_dest
), opval
);
567 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
570 UDI opval
= CPU (h_tr
[FLD (f_trb
)]);
571 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
572 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
576 SEM_BRANCH_FINI (vpc
);
581 /* bne: bne$likely $rm, $rn, $tra */
584 SEM_FN_NAME (sh64_media
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
586 #define FLD(f) abuf->fields.sfmt_beq.f
587 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
588 int UNUSED written
= 0;
589 IADDR UNUSED pc
= abuf
->addr
;
591 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
593 if (NEDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
595 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
596 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
598 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
602 abuf
->written
= written
;
603 SEM_BRANCH_FINI (vpc
);
608 /* bnei: bnei$likely $rm, $imm6, $tra */
611 SEM_FN_NAME (sh64_media
,bnei
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
613 #define FLD(f) abuf->fields.sfmt_beqi.f
614 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
615 int UNUSED written
= 0;
616 IADDR UNUSED pc
= abuf
->addr
;
618 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
620 if (NEDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm6
)))) {
622 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
623 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
625 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
629 abuf
->written
= written
;
630 SEM_BRANCH_FINI (vpc
);
638 SEM_FN_NAME (sh64_media
,brk
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
640 #define FLD(f) abuf->fields.fmt_empty.f
641 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
642 int UNUSED written
= 0;
643 IADDR UNUSED pc
= abuf
->addr
;
644 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
646 sh64_break (current_cpu
, pc
);
652 /* byterev: byterev $rm, $rd */
655 SEM_FN_NAME (sh64_media
,byterev
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
657 #define FLD(f) abuf->fields.sfmt_xori.f
658 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
659 int UNUSED written
= 0;
660 IADDR UNUSED pc
= abuf
->addr
;
661 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
666 tmp_source
= GET_H_GR (FLD (f_left
));
669 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
670 tmp_source
= SRLDI (tmp_source
, 8);
673 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
674 tmp_source
= SRLDI (tmp_source
, 8);
677 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
678 tmp_source
= SRLDI (tmp_source
, 8);
681 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
682 tmp_source
= SRLDI (tmp_source
, 8);
685 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
686 tmp_source
= SRLDI (tmp_source
, 8);
689 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
690 tmp_source
= SRLDI (tmp_source
, 8);
693 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
694 tmp_source
= SRLDI (tmp_source
, 8);
697 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
698 tmp_source
= SRLDI (tmp_source
, 8);
701 DI opval
= tmp_result
;
702 SET_H_GR (FLD (f_dest
), opval
);
703 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
711 /* cmpeq: cmpeq $rm, $rn, $rd */
714 SEM_FN_NAME (sh64_media
,cmpeq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
716 #define FLD(f) abuf->fields.sfmt_add.f
717 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
718 int UNUSED written
= 0;
719 IADDR UNUSED pc
= abuf
->addr
;
720 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
723 DI opval
= ((EQDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) ? (1) : (0));
724 SET_H_GR (FLD (f_dest
), opval
);
725 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
732 /* cmpgt: cmpgt $rm, $rn, $rd */
735 SEM_FN_NAME (sh64_media
,cmpgt
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
737 #define FLD(f) abuf->fields.sfmt_add.f
738 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
739 int UNUSED written
= 0;
740 IADDR UNUSED pc
= abuf
->addr
;
741 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
744 DI opval
= ((GTDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) ? (1) : (0));
745 SET_H_GR (FLD (f_dest
), opval
);
746 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
753 /* cmpgtu: cmpgtu $rm,$rn, $rd */
756 SEM_FN_NAME (sh64_media
,cmpgtu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
758 #define FLD(f) abuf->fields.sfmt_add.f
759 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
760 int UNUSED written
= 0;
761 IADDR UNUSED pc
= abuf
->addr
;
762 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
765 DI opval
= ((GTUDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) ? (1) : (0));
766 SET_H_GR (FLD (f_dest
), opval
);
767 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
774 /* cmveq: cmveq $rm, $rn, $rd */
777 SEM_FN_NAME (sh64_media
,cmveq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
779 #define FLD(f) abuf->fields.sfmt_add.f
780 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
781 int UNUSED written
= 0;
782 IADDR UNUSED pc
= abuf
->addr
;
783 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
785 if (EQDI (GET_H_GR (FLD (f_left
)), 0)) {
787 DI opval
= GET_H_GR (FLD (f_right
));
788 SET_H_GR (FLD (f_dest
), opval
);
790 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
794 abuf
->written
= written
;
799 /* cmvne: cmvne $rm, $rn, $rd */
802 SEM_FN_NAME (sh64_media
,cmvne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
804 #define FLD(f) abuf->fields.sfmt_add.f
805 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
806 int UNUSED written
= 0;
807 IADDR UNUSED pc
= abuf
->addr
;
808 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
810 if (NEDI (GET_H_GR (FLD (f_left
)), 0)) {
812 DI opval
= GET_H_GR (FLD (f_right
));
813 SET_H_GR (FLD (f_dest
), opval
);
815 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
819 abuf
->written
= written
;
824 /* fabsd: fabs.d $drgh, $drf */
827 SEM_FN_NAME (sh64_media
,fabsd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
829 #define FLD(f) abuf->fields.sfmt_fabsd.f
830 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
831 int UNUSED written
= 0;
832 IADDR UNUSED pc
= abuf
->addr
;
833 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
836 DF opval
= sh64_fabsd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
837 SET_H_DR (FLD (f_dest
), opval
);
838 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
845 /* fabss: fabs.s $frgh, $frf */
848 SEM_FN_NAME (sh64_media
,fabss
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
850 #define FLD(f) abuf->fields.sfmt_fabsd.f
851 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
852 int UNUSED written
= 0;
853 IADDR UNUSED pc
= abuf
->addr
;
854 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
857 SF opval
= sh64_fabss (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
858 CPU (h_fr
[FLD (f_dest
)]) = opval
;
859 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
866 /* faddd: fadd.d $drg, $drh, $drf */
869 SEM_FN_NAME (sh64_media
,faddd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
871 #define FLD(f) abuf->fields.sfmt_add.f
872 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
873 int UNUSED written
= 0;
874 IADDR UNUSED pc
= abuf
->addr
;
875 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
878 DF opval
= sh64_faddd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
879 SET_H_DR (FLD (f_dest
), opval
);
880 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
887 /* fadds: fadd.s $frg, $frh, $frf */
890 SEM_FN_NAME (sh64_media
,fadds
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
892 #define FLD(f) abuf->fields.sfmt_add.f
893 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
894 int UNUSED written
= 0;
895 IADDR UNUSED pc
= abuf
->addr
;
896 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
899 SF opval
= sh64_fadds (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
900 CPU (h_fr
[FLD (f_dest
)]) = opval
;
901 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
908 /* fcmpeqd: fcmpeq.d $drg, $drh, $rd */
911 SEM_FN_NAME (sh64_media
,fcmpeqd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
913 #define FLD(f) abuf->fields.sfmt_add.f
914 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
915 int UNUSED written
= 0;
916 IADDR UNUSED pc
= abuf
->addr
;
917 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
920 DI opval
= ZEXTBIDI (sh64_fcmpeqd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
921 SET_H_GR (FLD (f_dest
), opval
);
922 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
929 /* fcmpeqs: fcmpeq.s $frg, $frh, $rd */
932 SEM_FN_NAME (sh64_media
,fcmpeqs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
934 #define FLD(f) abuf->fields.sfmt_add.f
935 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
936 int UNUSED written
= 0;
937 IADDR UNUSED pc
= abuf
->addr
;
938 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
941 DI opval
= ZEXTBIDI (sh64_fcmpeqs (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
942 SET_H_GR (FLD (f_dest
), opval
);
943 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
950 /* fcmpged: fcmpge.d $drg, $drh, $rd */
953 SEM_FN_NAME (sh64_media
,fcmpged
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
955 #define FLD(f) abuf->fields.sfmt_add.f
956 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
957 int UNUSED written
= 0;
958 IADDR UNUSED pc
= abuf
->addr
;
959 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
962 DI opval
= ZEXTBIDI (sh64_fcmpged (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
963 SET_H_GR (FLD (f_dest
), opval
);
964 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
971 /* fcmpges: fcmpge.s $frg, $frh, $rd */
974 SEM_FN_NAME (sh64_media
,fcmpges
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
976 #define FLD(f) abuf->fields.sfmt_add.f
977 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
978 int UNUSED written
= 0;
979 IADDR UNUSED pc
= abuf
->addr
;
980 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
983 DI opval
= ZEXTBIDI (sh64_fcmpges (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
984 SET_H_GR (FLD (f_dest
), opval
);
985 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
992 /* fcmpgtd: fcmpgt.d $drg, $drh, $rd */
995 SEM_FN_NAME (sh64_media
,fcmpgtd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
997 #define FLD(f) abuf->fields.sfmt_add.f
998 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
999 int UNUSED written
= 0;
1000 IADDR UNUSED pc
= abuf
->addr
;
1001 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1004 DI opval
= ZEXTBIDI (sh64_fcmpgtd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
1005 SET_H_GR (FLD (f_dest
), opval
);
1006 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1013 /* fcmpgts: fcmpgt.s $frg, $frh, $rd */
1016 SEM_FN_NAME (sh64_media
,fcmpgts
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1018 #define FLD(f) abuf->fields.sfmt_add.f
1019 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1020 int UNUSED written
= 0;
1021 IADDR UNUSED pc
= abuf
->addr
;
1022 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1025 DI opval
= ZEXTBIDI (sh64_fcmpgts (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
1026 SET_H_GR (FLD (f_dest
), opval
);
1027 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1034 /* fcmpund: fcmpun.d $drg, $drh, $rd */
1037 SEM_FN_NAME (sh64_media
,fcmpund
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1039 #define FLD(f) abuf->fields.sfmt_add.f
1040 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1041 int UNUSED written
= 0;
1042 IADDR UNUSED pc
= abuf
->addr
;
1043 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1046 DI opval
= ZEXTBIDI (sh64_fcmpund (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
1047 SET_H_GR (FLD (f_dest
), opval
);
1048 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1055 /* fcmpuns: fcmpun.s $frg, $frh, $rd */
1058 SEM_FN_NAME (sh64_media
,fcmpuns
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1060 #define FLD(f) abuf->fields.sfmt_add.f
1061 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1062 int UNUSED written
= 0;
1063 IADDR UNUSED pc
= abuf
->addr
;
1064 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1067 DI opval
= ZEXTBIDI (sh64_fcmpuns (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
1068 SET_H_GR (FLD (f_dest
), opval
);
1069 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1076 /* fcnvds: fcnv.ds $drgh, $frf */
1079 SEM_FN_NAME (sh64_media
,fcnvds
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1081 #define FLD(f) abuf->fields.sfmt_fabsd.f
1082 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1083 int UNUSED written
= 0;
1084 IADDR UNUSED pc
= abuf
->addr
;
1085 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1088 SF opval
= sh64_fcnvds (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1089 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1090 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1097 /* fcnvsd: fcnv.sd $frgh, $drf */
1100 SEM_FN_NAME (sh64_media
,fcnvsd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1102 #define FLD(f) abuf->fields.sfmt_fabsd.f
1103 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1104 int UNUSED written
= 0;
1105 IADDR UNUSED pc
= abuf
->addr
;
1106 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1109 DF opval
= sh64_fcnvsd (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1110 SET_H_DR (FLD (f_dest
), opval
);
1111 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1118 /* fdivd: fdiv.d $drg, $drh, $drf */
1121 SEM_FN_NAME (sh64_media
,fdivd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1123 #define FLD(f) abuf->fields.sfmt_add.f
1124 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1125 int UNUSED written
= 0;
1126 IADDR UNUSED pc
= abuf
->addr
;
1127 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1130 DF opval
= sh64_fdivd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
1131 SET_H_DR (FLD (f_dest
), opval
);
1132 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1139 /* fdivs: fdiv.s $frg, $frh, $frf */
1142 SEM_FN_NAME (sh64_media
,fdivs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1144 #define FLD(f) abuf->fields.sfmt_add.f
1145 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1146 int UNUSED written
= 0;
1147 IADDR UNUSED pc
= abuf
->addr
;
1148 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1151 SF opval
= sh64_fdivs (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
1152 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1153 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1160 /* fgetscr: fgetscr $frf */
1163 SEM_FN_NAME (sh64_media
,fgetscr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1165 #define FLD(f) abuf->fields.fmt_empty.f
1166 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1167 int UNUSED written
= 0;
1168 IADDR UNUSED pc
= abuf
->addr
;
1169 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1177 /* fiprs: fipr.s $fvg, $fvh, $frf */
1180 SEM_FN_NAME (sh64_media
,fiprs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1182 #define FLD(f) abuf->fields.sfmt_add.f
1183 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1184 int UNUSED written
= 0;
1185 IADDR UNUSED pc
= abuf
->addr
;
1186 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1192 tmp_g
= FLD (f_left
);
1193 tmp_h
= FLD (f_right
);
1194 tmp_temp
= sh64_fmuls (current_cpu
, CPU (h_fr
[tmp_g
]), CPU (h_fr
[tmp_h
]));
1195 tmp_temp
= sh64_fadds (current_cpu
, tmp_temp
, sh64_fmuls (current_cpu
, CPU (h_fr
[ADDQI (tmp_g
, 1)]), CPU (h_fr
[ADDQI (tmp_h
, 1)])));
1196 tmp_temp
= sh64_fadds (current_cpu
, tmp_temp
, sh64_fmuls (current_cpu
, CPU (h_fr
[ADDQI (tmp_g
, 2)]), CPU (h_fr
[ADDQI (tmp_h
, 2)])));
1197 tmp_temp
= sh64_fadds (current_cpu
, tmp_temp
, sh64_fmuls (current_cpu
, CPU (h_fr
[ADDQI (tmp_g
, 3)]), CPU (h_fr
[ADDQI (tmp_h
, 3)])));
1199 SF opval
= tmp_temp
;
1200 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1201 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1209 /* fldd: fld.d $rm, $disp10x8, $drf */
1212 SEM_FN_NAME (sh64_media
,fldd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1214 #define FLD(f) abuf->fields.sfmt_fldd.f
1215 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1216 int UNUSED written
= 0;
1217 IADDR UNUSED pc
= abuf
->addr
;
1218 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1221 DF opval
= GETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
)));
1222 SET_H_DR (FLD (f_dest
), opval
);
1223 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1230 /* fldp: fld.p $rm, $disp10x8, $fpf */
1233 SEM_FN_NAME (sh64_media
,fldp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1235 #define FLD(f) abuf->fields.sfmt_fldd.f
1236 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1237 int UNUSED written
= 0;
1238 IADDR UNUSED pc
= abuf
->addr
;
1239 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1243 tmp_f
= FLD (f_dest
);
1245 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
)));
1246 CPU (h_fr
[tmp_f
]) = opval
;
1247 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1250 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), ADDSI (FLD (f_disp10x8
), 4)));
1251 CPU (h_fr
[ADDQI (tmp_f
, 1)]) = opval
;
1252 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1260 /* flds: fld.s $rm, $disp10x4, $frf */
1263 SEM_FN_NAME (sh64_media
,flds
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1265 #define FLD(f) abuf->fields.sfmt_flds.f
1266 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1267 int UNUSED written
= 0;
1268 IADDR UNUSED pc
= abuf
->addr
;
1269 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1272 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x4
)));
1273 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1274 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1281 /* fldxd: fldx.d $rm, $rn, $drf */
1284 SEM_FN_NAME (sh64_media
,fldxd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1286 #define FLD(f) abuf->fields.sfmt_add.f
1287 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1288 int UNUSED written
= 0;
1289 IADDR UNUSED pc
= abuf
->addr
;
1290 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1293 DF opval
= GETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
1294 SET_H_DR (FLD (f_dest
), opval
);
1295 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1302 /* fldxp: fldx.p $rm, $rn, $fpf */
1305 SEM_FN_NAME (sh64_media
,fldxp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1307 #define FLD(f) abuf->fields.sfmt_add.f
1308 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1309 int UNUSED written
= 0;
1310 IADDR UNUSED pc
= abuf
->addr
;
1311 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1315 tmp_f
= FLD (f_dest
);
1317 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
1318 CPU (h_fr
[tmp_f
]) = opval
;
1319 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1322 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), ADDDI (GET_H_GR (FLD (f_right
)), 4)));
1323 CPU (h_fr
[ADDQI (tmp_f
, 1)]) = opval
;
1324 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1332 /* fldxs: fldx.s $rm, $rn, $frf */
1335 SEM_FN_NAME (sh64_media
,fldxs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1337 #define FLD(f) abuf->fields.sfmt_add.f
1338 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1339 int UNUSED written
= 0;
1340 IADDR UNUSED pc
= abuf
->addr
;
1341 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1344 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
1345 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1346 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1353 /* floatld: float.ld $frgh, $drf */
1356 SEM_FN_NAME (sh64_media
,floatld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1358 #define FLD(f) abuf->fields.sfmt_fabsd.f
1359 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1360 int UNUSED written
= 0;
1361 IADDR UNUSED pc
= abuf
->addr
;
1362 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1365 DF opval
= sh64_floatld (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1366 SET_H_DR (FLD (f_dest
), opval
);
1367 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1374 /* floatls: float.ls $frgh, $frf */
1377 SEM_FN_NAME (sh64_media
,floatls
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1379 #define FLD(f) abuf->fields.sfmt_fabsd.f
1380 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1381 int UNUSED written
= 0;
1382 IADDR UNUSED pc
= abuf
->addr
;
1383 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1386 SF opval
= sh64_floatls (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1387 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1388 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1395 /* floatqd: float.qd $drgh, $drf */
1398 SEM_FN_NAME (sh64_media
,floatqd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1400 #define FLD(f) abuf->fields.sfmt_fabsd.f
1401 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1402 int UNUSED written
= 0;
1403 IADDR UNUSED pc
= abuf
->addr
;
1404 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1407 DF opval
= sh64_floatqd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1408 SET_H_DR (FLD (f_dest
), opval
);
1409 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1416 /* floatqs: float.qs $drgh, $frf */
1419 SEM_FN_NAME (sh64_media
,floatqs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1421 #define FLD(f) abuf->fields.sfmt_fabsd.f
1422 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1423 int UNUSED written
= 0;
1424 IADDR UNUSED pc
= abuf
->addr
;
1425 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1428 SF opval
= sh64_floatqs (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1429 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1430 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1437 /* fmacs: fmac.s $frg, $frh, $frf */
1440 SEM_FN_NAME (sh64_media
,fmacs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1442 #define FLD(f) abuf->fields.sfmt_add.f
1443 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1444 int UNUSED written
= 0;
1445 IADDR UNUSED pc
= abuf
->addr
;
1446 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1449 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
)])));
1450 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1451 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1458 /* fmovd: fmov.d $drgh, $drf */
1461 SEM_FN_NAME (sh64_media
,fmovd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1463 #define FLD(f) abuf->fields.sfmt_fabsd.f
1464 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1465 int UNUSED written
= 0;
1466 IADDR UNUSED pc
= abuf
->addr
;
1467 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1470 DF opval
= GET_H_DR (FLD (f_left_right
));
1471 SET_H_DR (FLD (f_dest
), opval
);
1472 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1479 /* fmovdq: fmov.dq $drgh, $rd */
1482 SEM_FN_NAME (sh64_media
,fmovdq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1484 #define FLD(f) abuf->fields.sfmt_fabsd.f
1485 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1486 int UNUSED written
= 0;
1487 IADDR UNUSED pc
= abuf
->addr
;
1488 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1491 DI opval
= SUBWORDDFDI (GET_H_DR (FLD (f_left_right
)));
1492 SET_H_GR (FLD (f_dest
), opval
);
1493 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1500 /* fmovls: fmov.ls $rm, $frf */
1503 SEM_FN_NAME (sh64_media
,fmovls
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1505 #define FLD(f) abuf->fields.sfmt_xori.f
1506 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1507 int UNUSED written
= 0;
1508 IADDR UNUSED pc
= abuf
->addr
;
1509 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1512 SF opval
= SUBWORDSISF (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1));
1513 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1514 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1521 /* fmovqd: fmov.qd $rm, $drf */
1524 SEM_FN_NAME (sh64_media
,fmovqd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1526 #define FLD(f) abuf->fields.sfmt_xori.f
1527 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1528 int UNUSED written
= 0;
1529 IADDR UNUSED pc
= abuf
->addr
;
1530 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1533 DF opval
= SUBWORDDIDF (GET_H_GR (FLD (f_left
)));
1534 SET_H_DR (FLD (f_dest
), opval
);
1535 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1542 /* fmovs: fmov.s $frgh, $frf */
1545 SEM_FN_NAME (sh64_media
,fmovs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1547 #define FLD(f) abuf->fields.sfmt_fabsd.f
1548 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1549 int UNUSED written
= 0;
1550 IADDR UNUSED pc
= abuf
->addr
;
1551 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1554 SF opval
= CPU (h_fr
[FLD (f_left_right
)]);
1555 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1556 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1563 /* fmovsl: fmov.sl $frgh, $rd */
1566 SEM_FN_NAME (sh64_media
,fmovsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1568 #define FLD(f) abuf->fields.sfmt_fabsd.f
1569 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1570 int UNUSED written
= 0;
1571 IADDR UNUSED pc
= abuf
->addr
;
1572 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1575 DI opval
= EXTSIDI (SUBWORDSFSI (CPU (h_fr
[FLD (f_left_right
)])));
1576 SET_H_GR (FLD (f_dest
), opval
);
1577 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1584 /* fmuld: fmul.d $drg, $drh, $drf */
1587 SEM_FN_NAME (sh64_media
,fmuld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1589 #define FLD(f) abuf->fields.sfmt_add.f
1590 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1591 int UNUSED written
= 0;
1592 IADDR UNUSED pc
= abuf
->addr
;
1593 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1596 DF opval
= sh64_fmuld (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
1597 SET_H_DR (FLD (f_dest
), opval
);
1598 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1605 /* fmuls: fmul.s $frg, $frh, $frf */
1608 SEM_FN_NAME (sh64_media
,fmuls
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1610 #define FLD(f) abuf->fields.sfmt_add.f
1611 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1612 int UNUSED written
= 0;
1613 IADDR UNUSED pc
= abuf
->addr
;
1614 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1617 SF opval
= sh64_fmuls (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
1618 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1619 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1626 /* fnegd: fneg.d $drgh, $drf */
1629 SEM_FN_NAME (sh64_media
,fnegd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1631 #define FLD(f) abuf->fields.sfmt_fabsd.f
1632 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1633 int UNUSED written
= 0;
1634 IADDR UNUSED pc
= abuf
->addr
;
1635 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1638 DF opval
= sh64_fnegd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1639 SET_H_DR (FLD (f_dest
), opval
);
1640 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1647 /* fnegs: fneg.s $frgh, $frf */
1650 SEM_FN_NAME (sh64_media
,fnegs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1652 #define FLD(f) abuf->fields.sfmt_fabsd.f
1653 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1654 int UNUSED written
= 0;
1655 IADDR UNUSED pc
= abuf
->addr
;
1656 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1659 SF opval
= sh64_fnegs (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1660 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1661 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1668 /* fputscr: fputscr $frgh */
1671 SEM_FN_NAME (sh64_media
,fputscr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1673 #define FLD(f) abuf->fields.fmt_empty.f
1674 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1675 int UNUSED written
= 0;
1676 IADDR UNUSED pc
= abuf
->addr
;
1677 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1685 /* fsqrtd: fsqrt.d $drgh, $drf */
1688 SEM_FN_NAME (sh64_media
,fsqrtd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1690 #define FLD(f) abuf->fields.sfmt_fabsd.f
1691 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1692 int UNUSED written
= 0;
1693 IADDR UNUSED pc
= abuf
->addr
;
1694 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1697 DF opval
= sh64_fsqrtd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1698 SET_H_DR (FLD (f_dest
), opval
);
1699 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1706 /* fsqrts: fsqrt.s $frgh, $frf */
1709 SEM_FN_NAME (sh64_media
,fsqrts
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1711 #define FLD(f) abuf->fields.sfmt_fabsd.f
1712 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1713 int UNUSED written
= 0;
1714 IADDR UNUSED pc
= abuf
->addr
;
1715 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1718 SF opval
= sh64_fsqrts (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1719 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1720 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1727 /* fstd: fst.d $rm, $disp10x8, $drf */
1730 SEM_FN_NAME (sh64_media
,fstd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1732 #define FLD(f) abuf->fields.sfmt_fldd.f
1733 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1734 int UNUSED written
= 0;
1735 IADDR UNUSED pc
= abuf
->addr
;
1736 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1739 DF opval
= GET_H_DR (FLD (f_dest
));
1740 SETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
)), opval
);
1741 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1748 /* fstp: fst.p $rm, $disp10x8, $fpf */
1751 SEM_FN_NAME (sh64_media
,fstp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1753 #define FLD(f) abuf->fields.sfmt_fldd.f
1754 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1755 int UNUSED written
= 0;
1756 IADDR UNUSED pc
= abuf
->addr
;
1757 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1761 tmp_f
= FLD (f_dest
);
1763 SF opval
= CPU (h_fr
[tmp_f
]);
1764 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
)), opval
);
1765 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1768 SF opval
= CPU (h_fr
[ADDQI (tmp_f
, 1)]);
1769 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), ADDSI (FLD (f_disp10x8
), 4)), opval
);
1770 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1778 /* fsts: fst.s $rm, $disp10x4, $frf */
1781 SEM_FN_NAME (sh64_media
,fsts
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1783 #define FLD(f) abuf->fields.sfmt_flds.f
1784 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1785 int UNUSED written
= 0;
1786 IADDR UNUSED pc
= abuf
->addr
;
1787 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1790 SF opval
= CPU (h_fr
[FLD (f_dest
)]);
1791 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x4
)), opval
);
1792 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1799 /* fstxd: fstx.d $rm, $rn, $drf */
1802 SEM_FN_NAME (sh64_media
,fstxd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1804 #define FLD(f) abuf->fields.sfmt_add.f
1805 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1806 int UNUSED written
= 0;
1807 IADDR UNUSED pc
= abuf
->addr
;
1808 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1811 DF opval
= GET_H_DR (FLD (f_dest
));
1812 SETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
1813 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1820 /* fstxp: fstx.p $rm, $rn, $fpf */
1823 SEM_FN_NAME (sh64_media
,fstxp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1825 #define FLD(f) abuf->fields.sfmt_add.f
1826 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1827 int UNUSED written
= 0;
1828 IADDR UNUSED pc
= abuf
->addr
;
1829 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1833 tmp_f
= FLD (f_dest
);
1835 SF opval
= CPU (h_fr
[tmp_f
]);
1836 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
1837 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1840 SF opval
= CPU (h_fr
[ADDQI (tmp_f
, 1)]);
1841 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), ADDDI (GET_H_GR (FLD (f_right
)), 4)), opval
);
1842 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1850 /* fstxs: fstx.s $rm, $rn, $frf */
1853 SEM_FN_NAME (sh64_media
,fstxs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1855 #define FLD(f) abuf->fields.sfmt_add.f
1856 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1857 int UNUSED written
= 0;
1858 IADDR UNUSED pc
= abuf
->addr
;
1859 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1862 SF opval
= CPU (h_fr
[FLD (f_dest
)]);
1863 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
1864 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1871 /* fsubd: fsub.d $drg, $drh, $drf */
1874 SEM_FN_NAME (sh64_media
,fsubd
) (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 DF opval
= sh64_fsubd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
1884 SET_H_DR (FLD (f_dest
), opval
);
1885 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1892 /* fsubs: fsub.s $frg, $frh, $frf */
1895 SEM_FN_NAME (sh64_media
,fsubs
) (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 SF opval
= sh64_fsubs (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
1905 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1906 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1913 /* ftrcdl: ftrc.dl $drgh, $frf */
1916 SEM_FN_NAME (sh64_media
,ftrcdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1918 #define FLD(f) abuf->fields.sfmt_fabsd.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_ftrcdl (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1926 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1927 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1934 /* ftrcsl: ftrc.sl $frgh, $frf */
1937 SEM_FN_NAME (sh64_media
,ftrcsl
) (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_ftrcsl (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1947 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1948 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1955 /* ftrcdq: ftrc.dq $drgh, $drf */
1958 SEM_FN_NAME (sh64_media
,ftrcdq
) (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 DF opval
= sh64_ftrcdq (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1968 SET_H_DR (FLD (f_dest
), opval
);
1969 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1976 /* ftrcsq: ftrc.sq $frgh, $drf */
1979 SEM_FN_NAME (sh64_media
,ftrcsq
) (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_ftrcsq (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1989 SET_H_DR (FLD (f_dest
), opval
);
1990 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1997 /* ftrvs: ftrv.s $mtrxg, $fvh, $fvf */
2000 SEM_FN_NAME (sh64_media
,ftrvs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2002 #define FLD(f) abuf->fields.sfmt_add.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);
2008 sh64_ftrvs (current_cpu
, FLD (f_left
), FLD (f_right
), FLD (f_dest
));
2014 /* getcfg: getcfg $rm, $disp6, $rd */
2017 SEM_FN_NAME (sh64_media
,getcfg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2019 #define FLD(f) abuf->fields.fmt_empty.f
2020 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2021 int UNUSED written
= 0;
2022 IADDR UNUSED pc
= abuf
->addr
;
2023 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2031 /* getcon: getcon $crk, $rd */
2034 SEM_FN_NAME (sh64_media
,getcon
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2036 #define FLD(f) abuf->fields.sfmt_xori.f
2037 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2038 int UNUSED written
= 0;
2039 IADDR UNUSED pc
= abuf
->addr
;
2040 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2043 DI opval
= GET_H_CR (FLD (f_left
));
2044 SET_H_GR (FLD (f_dest
), opval
);
2045 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2052 /* gettr: gettr $trb, $rd */
2055 SEM_FN_NAME (sh64_media
,gettr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2057 #define FLD(f) abuf->fields.sfmt_blink.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);
2064 DI opval
= CPU (h_tr
[FLD (f_trb
)]);
2065 SET_H_GR (FLD (f_dest
), opval
);
2066 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2073 /* icbi: icbi $rm, $disp6x32 */
2076 SEM_FN_NAME (sh64_media
,icbi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2078 #define FLD(f) abuf->fields.fmt_empty.f
2079 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2080 int UNUSED written
= 0;
2081 IADDR UNUSED pc
= abuf
->addr
;
2082 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2090 /* ldb: ld.b $rm, $disp10, $rd */
2093 SEM_FN_NAME (sh64_media
,ldb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2095 #define FLD(f) abuf->fields.sfmt_addi.f
2096 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2097 int UNUSED written
= 0;
2098 IADDR UNUSED pc
= abuf
->addr
;
2099 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2102 DI opval
= EXTQIDI (GETMEMQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)))));
2103 SET_H_GR (FLD (f_dest
), opval
);
2104 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2111 /* ldl: ld.l $rm, $disp10x4, $rd */
2114 SEM_FN_NAME (sh64_media
,ldl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2116 #define FLD(f) abuf->fields.sfmt_flds.f
2117 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2118 int UNUSED written
= 0;
2119 IADDR UNUSED pc
= abuf
->addr
;
2120 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2123 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x4
)))));
2124 SET_H_GR (FLD (f_dest
), opval
);
2125 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2132 /* ldq: ld.q $rm, $disp10x8, $rd */
2135 SEM_FN_NAME (sh64_media
,ldq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2137 #define FLD(f) abuf->fields.sfmt_fldd.f
2138 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2139 int UNUSED written
= 0;
2140 IADDR UNUSED pc
= abuf
->addr
;
2141 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2144 DI opval
= GETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x8
))));
2145 SET_H_GR (FLD (f_dest
), opval
);
2146 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2153 /* ldub: ld.ub $rm, $disp10, $rd */
2156 SEM_FN_NAME (sh64_media
,ldub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2158 #define FLD(f) abuf->fields.sfmt_addi.f
2159 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2160 int UNUSED written
= 0;
2161 IADDR UNUSED pc
= abuf
->addr
;
2162 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2165 DI opval
= ZEXTQIDI (GETMEMQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)))));
2166 SET_H_GR (FLD (f_dest
), opval
);
2167 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2174 /* lduw: ld.uw $rm, $disp10x2, $rd */
2177 SEM_FN_NAME (sh64_media
,lduw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2179 #define FLD(f) abuf->fields.sfmt_lduw.f
2180 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2181 int UNUSED written
= 0;
2182 IADDR UNUSED pc
= abuf
->addr
;
2183 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2186 DI opval
= ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x2
)))));
2187 SET_H_GR (FLD (f_dest
), opval
);
2188 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2195 /* ldw: ld.w $rm, $disp10x2, $rd */
2198 SEM_FN_NAME (sh64_media
,ldw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2200 #define FLD(f) abuf->fields.sfmt_lduw.f
2201 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2202 int UNUSED written
= 0;
2203 IADDR UNUSED pc
= abuf
->addr
;
2204 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2207 DI opval
= EXTHIDI (GETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x2
)))));
2208 SET_H_GR (FLD (f_dest
), opval
);
2209 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2216 /* ldhil: ldhi.l $rm, $disp6, $rd */
2219 SEM_FN_NAME (sh64_media
,ldhil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2221 #define FLD(f) abuf->fields.sfmt_ldhil.f
2222 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2223 int UNUSED written
= 0;
2224 IADDR UNUSED pc
= abuf
->addr
;
2225 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2231 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2232 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 3), 1);
2234 if (ANDQI (tmp_bytecount
, 4)) {
2236 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -4)));
2237 SET_H_GR (FLD (f_dest
), opval
);
2238 written
|= (1 << 6);
2239 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2242 if (GET_H_ENDIAN ()) {
2244 if (ANDQI (tmp_bytecount
, 2)) {
2245 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2247 if (ANDQI (tmp_bytecount
, 1)) {
2248 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2251 DI opval
= EXTSIDI (tmp_val
);
2252 SET_H_GR (FLD (f_dest
), opval
);
2253 written
|= (1 << 6);
2254 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2259 if (ANDQI (tmp_bytecount
, 1)) {
2260 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2262 if (ANDQI (tmp_bytecount
, 2)) {
2263 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2266 DI opval
= EXTSIDI (SLLSI (tmp_val
, SUBSI (32, MULSI (8, tmp_bytecount
))));
2267 SET_H_GR (FLD (f_dest
), opval
);
2268 written
|= (1 << 6);
2269 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2276 abuf
->written
= written
;
2281 /* ldhiq: ldhi.q $rm, $disp6, $rd */
2284 SEM_FN_NAME (sh64_media
,ldhiq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2286 #define FLD(f) abuf->fields.sfmt_ldhil.f
2287 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2288 int UNUSED written
= 0;
2289 IADDR UNUSED pc
= abuf
->addr
;
2290 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2296 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2297 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 7), 1);
2299 if (ANDQI (tmp_bytecount
, 8)) {
2301 DI opval
= GETMEMDI (current_cpu
, pc
, ANDDI (tmp_addr
, -8));
2302 SET_H_GR (FLD (f_dest
), opval
);
2303 written
|= (1 << 7);
2304 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2307 if (GET_H_ENDIAN ()) {
2309 if (ANDQI (tmp_bytecount
, 4)) {
2310 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8))));
2312 if (ANDQI (tmp_bytecount
, 2)) {
2313 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2315 if (ANDQI (tmp_bytecount
, 1)) {
2316 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2320 SET_H_GR (FLD (f_dest
), opval
);
2321 written
|= (1 << 7);
2322 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2327 if (ANDQI (tmp_bytecount
, 1)) {
2328 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2330 if (ANDQI (tmp_bytecount
, 2)) {
2331 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2333 if (ANDQI (tmp_bytecount
, 4)) {
2334 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8))));
2337 DI opval
= SLLDI (tmp_val
, SUBSI (64, MULSI (8, tmp_bytecount
)));
2338 SET_H_GR (FLD (f_dest
), opval
);
2339 written
|= (1 << 7);
2340 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2347 abuf
->written
= written
;
2352 /* ldlol: ldlo.l $rm, $disp6, $rd */
2355 SEM_FN_NAME (sh64_media
,ldlol
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2357 #define FLD(f) abuf->fields.sfmt_ldhil.f
2358 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2359 int UNUSED written
= 0;
2360 IADDR UNUSED pc
= abuf
->addr
;
2361 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2367 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2368 tmp_bytecount
= SUBSI (4, ANDDI (tmp_addr
, 3));
2370 if (ANDQI (tmp_bytecount
, 4)) {
2372 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, tmp_addr
));
2373 SET_H_GR (FLD (f_dest
), opval
);
2374 written
|= (1 << 6);
2375 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2378 if (GET_H_ENDIAN ()) {
2380 if (ANDQI (tmp_bytecount
, 1)) {
2381 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2383 if (ANDQI (tmp_bytecount
, 2)) {
2384 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2387 DI opval
= EXTSIDI (SLLSI (tmp_val
, SUBSI (32, MULSI (8, tmp_bytecount
))));
2388 SET_H_GR (FLD (f_dest
), opval
);
2389 written
|= (1 << 6);
2390 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2395 if (ANDQI (tmp_bytecount
, 2)) {
2396 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2398 if (ANDQI (tmp_bytecount
, 1)) {
2399 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2402 DI opval
= EXTSIDI (tmp_val
);
2403 SET_H_GR (FLD (f_dest
), opval
);
2404 written
|= (1 << 6);
2405 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2412 abuf
->written
= written
;
2417 /* ldloq: ldlo.q $rm, $disp6, $rd */
2420 SEM_FN_NAME (sh64_media
,ldloq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2422 #define FLD(f) abuf->fields.sfmt_ldhil.f
2423 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2424 int UNUSED written
= 0;
2425 IADDR UNUSED pc
= abuf
->addr
;
2426 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2432 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2433 tmp_bytecount
= SUBSI (8, ANDDI (tmp_addr
, 7));
2435 if (ANDQI (tmp_bytecount
, 8)) {
2437 DI opval
= GETMEMDI (current_cpu
, pc
, tmp_addr
);
2438 SET_H_GR (FLD (f_dest
), opval
);
2439 written
|= (1 << 7);
2440 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2443 if (GET_H_ENDIAN ()) {
2445 if (ANDQI (tmp_bytecount
, 1)) {
2446 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2448 if (ANDQI (tmp_bytecount
, 2)) {
2449 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2451 if (ANDQI (tmp_bytecount
, 4)) {
2452 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4))));
2455 DI opval
= SLLDI (tmp_val
, SUBSI (64, MULSI (8, tmp_bytecount
)));
2456 SET_H_GR (FLD (f_dest
), opval
);
2457 written
|= (1 << 7);
2458 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2463 if (ANDQI (tmp_bytecount
, 4)) {
2464 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4))));
2466 if (ANDQI (tmp_bytecount
, 2)) {
2467 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2469 if (ANDQI (tmp_bytecount
, 1)) {
2470 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2474 SET_H_GR (FLD (f_dest
), opval
);
2475 written
|= (1 << 7);
2476 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2483 abuf
->written
= written
;
2488 /* ldxb: ldx.b $rm, $rn, $rd */
2491 SEM_FN_NAME (sh64_media
,ldxb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2493 #define FLD(f) abuf->fields.sfmt_add.f
2494 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2495 int UNUSED written
= 0;
2496 IADDR UNUSED pc
= abuf
->addr
;
2497 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2500 DI opval
= EXTQIDI (GETMEMQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2501 SET_H_GR (FLD (f_dest
), opval
);
2502 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2509 /* ldxl: ldx.l $rm, $rn, $rd */
2512 SEM_FN_NAME (sh64_media
,ldxl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2514 #define FLD(f) abuf->fields.sfmt_add.f
2515 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2516 int UNUSED written
= 0;
2517 IADDR UNUSED pc
= abuf
->addr
;
2518 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2521 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2522 SET_H_GR (FLD (f_dest
), opval
);
2523 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2530 /* ldxq: ldx.q $rm, $rn, $rd */
2533 SEM_FN_NAME (sh64_media
,ldxq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2535 #define FLD(f) abuf->fields.sfmt_add.f
2536 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2537 int UNUSED written
= 0;
2538 IADDR UNUSED pc
= abuf
->addr
;
2539 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2542 DI opval
= GETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
2543 SET_H_GR (FLD (f_dest
), opval
);
2544 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2551 /* ldxub: ldx.ub $rm, $rn, $rd */
2554 SEM_FN_NAME (sh64_media
,ldxub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2556 #define FLD(f) abuf->fields.sfmt_add.f
2557 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2558 int UNUSED written
= 0;
2559 IADDR UNUSED pc
= abuf
->addr
;
2560 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2563 DI opval
= ZEXTQIDI (GETMEMUQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2564 SET_H_GR (FLD (f_dest
), opval
);
2565 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2572 /* ldxuw: ldx.uw $rm, $rn, $rd */
2575 SEM_FN_NAME (sh64_media
,ldxuw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2577 #define FLD(f) abuf->fields.sfmt_add.f
2578 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2579 int UNUSED written
= 0;
2580 IADDR UNUSED pc
= abuf
->addr
;
2581 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2584 DI opval
= ZEXTHIDI (GETMEMUHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2585 SET_H_GR (FLD (f_dest
), opval
);
2586 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2593 /* ldxw: ldx.w $rm, $rn, $rd */
2596 SEM_FN_NAME (sh64_media
,ldxw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2598 #define FLD(f) abuf->fields.sfmt_add.f
2599 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2600 int UNUSED written
= 0;
2601 IADDR UNUSED pc
= abuf
->addr
;
2602 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2605 DI opval
= EXTHIDI (GETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2606 SET_H_GR (FLD (f_dest
), opval
);
2607 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2614 /* mabsl: mabs.l $rm, $rd */
2617 SEM_FN_NAME (sh64_media
,mabsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2619 #define FLD(f) abuf->fields.sfmt_xori.f
2620 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2621 int UNUSED written
= 0;
2622 IADDR UNUSED pc
= abuf
->addr
;
2623 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2628 tmp_result0
= ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1));
2629 tmp_result1
= ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0));
2631 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2632 SET_H_GR (FLD (f_dest
), opval
);
2633 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2641 /* mabsw: mabs.w $rm, $rd */
2644 SEM_FN_NAME (sh64_media
,mabsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2646 #define FLD(f) abuf->fields.sfmt_xori.f
2647 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2648 int UNUSED written
= 0;
2649 IADDR UNUSED pc
= abuf
->addr
;
2650 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2657 tmp_result0
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3));
2658 tmp_result1
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2));
2659 tmp_result2
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1));
2660 tmp_result3
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0));
2662 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2663 SET_H_GR (FLD (f_dest
), opval
);
2664 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2672 /* maddl: madd.l $rm, $rn, $rd */
2675 SEM_FN_NAME (sh64_media
,maddl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2677 #define FLD(f) abuf->fields.sfmt_add.f
2678 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2679 int UNUSED written
= 0;
2680 IADDR UNUSED pc
= abuf
->addr
;
2681 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2686 tmp_result0
= ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
2687 tmp_result1
= ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0));
2689 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2690 SET_H_GR (FLD (f_dest
), opval
);
2691 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2699 /* maddw: madd.w $rm, $rn, $rd */
2702 SEM_FN_NAME (sh64_media
,maddw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2704 #define FLD(f) abuf->fields.sfmt_add.f
2705 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2706 int UNUSED written
= 0;
2707 IADDR UNUSED pc
= abuf
->addr
;
2708 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2715 tmp_result0
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3));
2716 tmp_result1
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2));
2717 tmp_result2
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1));
2718 tmp_result3
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0));
2720 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2721 SET_H_GR (FLD (f_dest
), opval
);
2722 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2730 /* maddsl: madds.l $rm, $rn, $rd */
2733 SEM_FN_NAME (sh64_media
,maddsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2735 #define FLD(f) abuf->fields.sfmt_add.f
2736 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2737 int UNUSED written
= 0;
2738 IADDR UNUSED pc
= abuf
->addr
;
2739 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2744 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)))));
2745 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)))));
2747 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2748 SET_H_GR (FLD (f_dest
), opval
);
2749 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2757 /* maddsub: madds.ub $rm, $rn, $rd */
2760 SEM_FN_NAME (sh64_media
,maddsub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2762 #define FLD(f) abuf->fields.sfmt_add.f
2763 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2764 int UNUSED written
= 0;
2765 IADDR UNUSED pc
= abuf
->addr
;
2766 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2777 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)))));
2778 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)))));
2779 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)))));
2780 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)))));
2781 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)))));
2782 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)))));
2783 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)))));
2784 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)))));
2786 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
))))))));
2787 SET_H_GR (FLD (f_dest
), opval
);
2788 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2796 /* maddsw: madds.w $rm, $rn, $rd */
2799 SEM_FN_NAME (sh64_media
,maddsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2801 #define FLD(f) abuf->fields.sfmt_add.f
2802 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2803 int UNUSED written
= 0;
2804 IADDR UNUSED pc
= abuf
->addr
;
2805 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2812 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)))));
2813 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)))));
2814 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)))));
2815 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)))));
2817 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2818 SET_H_GR (FLD (f_dest
), opval
);
2819 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2827 /* mcmpeqb: mcmpeq.b $rm, $rn, $rd */
2830 SEM_FN_NAME (sh64_media
,mcmpeqb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2832 #define FLD(f) abuf->fields.sfmt_add.f
2833 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2834 int UNUSED written
= 0;
2835 IADDR UNUSED pc
= abuf
->addr
;
2836 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2847 tmp_result0
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))) ? (INVQI (0)) : (0));
2848 tmp_result1
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))) ? (INVQI (0)) : (0));
2849 tmp_result2
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))) ? (INVQI (0)) : (0));
2850 tmp_result3
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))) ? (INVQI (0)) : (0));
2851 tmp_result4
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))) ? (INVQI (0)) : (0));
2852 tmp_result5
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))) ? (INVQI (0)) : (0));
2853 tmp_result6
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))) ? (INVQI (0)) : (0));
2854 tmp_result7
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))) ? (INVQI (0)) : (0));
2856 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
))))))));
2857 SET_H_GR (FLD (f_dest
), opval
);
2858 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2866 /* mcmpeql: mcmpeq.l $rm, $rn, $rd */
2869 SEM_FN_NAME (sh64_media
,mcmpeql
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2871 #define FLD(f) abuf->fields.sfmt_add.f
2872 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2873 int UNUSED written
= 0;
2874 IADDR UNUSED pc
= abuf
->addr
;
2875 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2880 tmp_result0
= ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))) ? (INVSI (0)) : (0));
2881 tmp_result1
= ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))) ? (INVSI (0)) : (0));
2883 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2884 SET_H_GR (FLD (f_dest
), opval
);
2885 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2893 /* mcmpeqw: mcmpeq.w $rm, $rn, $rd */
2896 SEM_FN_NAME (sh64_media
,mcmpeqw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2898 #define FLD(f) abuf->fields.sfmt_add.f
2899 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2900 int UNUSED written
= 0;
2901 IADDR UNUSED pc
= abuf
->addr
;
2902 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2909 tmp_result0
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))) ? (INVHI (0)) : (0));
2910 tmp_result1
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))) ? (INVHI (0)) : (0));
2911 tmp_result2
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))) ? (INVHI (0)) : (0));
2912 tmp_result3
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))) ? (INVHI (0)) : (0));
2914 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2915 SET_H_GR (FLD (f_dest
), opval
);
2916 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2924 /* mcmpgtl: mcmpgt.l $rm, $rn, $rd */
2927 SEM_FN_NAME (sh64_media
,mcmpgtl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2929 #define FLD(f) abuf->fields.sfmt_add.f
2930 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2931 int UNUSED written
= 0;
2932 IADDR UNUSED pc
= abuf
->addr
;
2933 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2938 tmp_result0
= ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))) ? (INVSI (0)) : (0));
2939 tmp_result1
= ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))) ? (INVSI (0)) : (0));
2941 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2942 SET_H_GR (FLD (f_dest
), opval
);
2943 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2951 /* mcmpgtub: mcmpgt.ub $rm, $rn, $rd */
2954 SEM_FN_NAME (sh64_media
,mcmpgtub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2956 #define FLD(f) abuf->fields.sfmt_add.f
2957 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2958 int UNUSED written
= 0;
2959 IADDR UNUSED pc
= abuf
->addr
;
2960 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2971 tmp_result0
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))) ? (INVQI (0)) : (0));
2972 tmp_result1
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))) ? (INVQI (0)) : (0));
2973 tmp_result2
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))) ? (INVQI (0)) : (0));
2974 tmp_result3
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))) ? (INVQI (0)) : (0));
2975 tmp_result4
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))) ? (INVQI (0)) : (0));
2976 tmp_result5
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))) ? (INVQI (0)) : (0));
2977 tmp_result6
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))) ? (INVQI (0)) : (0));
2978 tmp_result7
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))) ? (INVQI (0)) : (0));
2980 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
))))))));
2981 SET_H_GR (FLD (f_dest
), opval
);
2982 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2990 /* mcmpgtw: mcmpgt.w $rm, $rn, $rd */
2993 SEM_FN_NAME (sh64_media
,mcmpgtw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2995 #define FLD(f) abuf->fields.sfmt_add.f
2996 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2997 int UNUSED written
= 0;
2998 IADDR UNUSED pc
= abuf
->addr
;
2999 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3006 tmp_result0
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))) ? (INVHI (0)) : (0));
3007 tmp_result1
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))) ? (INVHI (0)) : (0));
3008 tmp_result2
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))) ? (INVHI (0)) : (0));
3009 tmp_result3
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))) ? (INVHI (0)) : (0));
3011 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3012 SET_H_GR (FLD (f_dest
), opval
);
3013 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3021 /* mcmv: mcmv $rm, $rn, $rd */
3024 SEM_FN_NAME (sh64_media
,mcmv
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3026 #define FLD(f) abuf->fields.sfmt_add.f
3027 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3028 int UNUSED written
= 0;
3029 IADDR UNUSED pc
= abuf
->addr
;
3030 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3033 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
)))));
3034 SET_H_GR (FLD (f_dest
), opval
);
3035 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3042 /* mcnvslw: mcnvs.lw $rm, $rn, $rd */
3045 SEM_FN_NAME (sh64_media
,mcnvslw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3047 #define FLD(f) abuf->fields.sfmt_add.f
3048 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3049 int UNUSED written
= 0;
3050 IADDR UNUSED pc
= abuf
->addr
;
3051 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3058 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)))));
3059 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)))));
3060 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)))));
3061 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)))));
3063 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3064 SET_H_GR (FLD (f_dest
), opval
);
3065 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3073 /* mcnvswb: mcnvs.wb $rm, $rn, $rd */
3076 SEM_FN_NAME (sh64_media
,mcnvswb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3078 #define FLD(f) abuf->fields.sfmt_add.f
3079 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3080 int UNUSED written
= 0;
3081 IADDR UNUSED pc
= abuf
->addr
;
3082 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3093 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)))));
3094 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)))));
3095 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)))));
3096 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)))));
3097 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)))));
3098 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)))));
3099 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)))));
3100 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)))));
3102 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
))))))));
3103 SET_H_GR (FLD (f_dest
), opval
);
3104 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3112 /* mcnvswub: mcnvs.wub $rm, $rn, $rd */
3115 SEM_FN_NAME (sh64_media
,mcnvswub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3117 #define FLD(f) abuf->fields.sfmt_add.f
3118 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3119 int UNUSED written
= 0;
3120 IADDR UNUSED pc
= abuf
->addr
;
3121 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3132 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)))));
3133 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)))));
3134 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)))));
3135 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)))));
3136 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)))));
3137 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)))));
3138 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)))));
3139 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)))));
3141 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
))))))));
3142 SET_H_GR (FLD (f_dest
), opval
);
3143 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3151 /* mextr1: mextr1 $rm, $rn, $rd */
3154 SEM_FN_NAME (sh64_media
,mextr1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3156 #define FLD(f) abuf->fields.sfmt_add.f
3157 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3158 int UNUSED written
= 0;
3159 IADDR UNUSED pc
= abuf
->addr
;
3160 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3166 tmp_count
= MULQI (8, 1);
3167 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3168 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3169 tmp_count
= MULQI (8, SUBQI (8, 1));
3170 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3172 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3173 SET_H_GR (FLD (f_dest
), opval
);
3174 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3182 /* mextr2: mextr2 $rm, $rn, $rd */
3185 SEM_FN_NAME (sh64_media
,mextr2
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3187 #define FLD(f) abuf->fields.sfmt_add.f
3188 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3189 int UNUSED written
= 0;
3190 IADDR UNUSED pc
= abuf
->addr
;
3191 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3197 tmp_count
= MULQI (8, 2);
3198 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3199 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3200 tmp_count
= MULQI (8, SUBQI (8, 2));
3201 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3203 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3204 SET_H_GR (FLD (f_dest
), opval
);
3205 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3213 /* mextr3: mextr3 $rm, $rn, $rd */
3216 SEM_FN_NAME (sh64_media
,mextr3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3218 #define FLD(f) abuf->fields.sfmt_add.f
3219 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3220 int UNUSED written
= 0;
3221 IADDR UNUSED pc
= abuf
->addr
;
3222 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3228 tmp_count
= MULQI (8, 3);
3229 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3230 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3231 tmp_count
= MULQI (8, SUBQI (8, 3));
3232 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3234 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3235 SET_H_GR (FLD (f_dest
), opval
);
3236 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3244 /* mextr4: mextr4 $rm, $rn, $rd */
3247 SEM_FN_NAME (sh64_media
,mextr4
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3249 #define FLD(f) abuf->fields.sfmt_add.f
3250 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3251 int UNUSED written
= 0;
3252 IADDR UNUSED pc
= abuf
->addr
;
3253 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3259 tmp_count
= MULQI (8, 4);
3260 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3261 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3262 tmp_count
= MULQI (8, SUBQI (8, 4));
3263 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3265 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3266 SET_H_GR (FLD (f_dest
), opval
);
3267 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3275 /* mextr5: mextr5 $rm, $rn, $rd */
3278 SEM_FN_NAME (sh64_media
,mextr5
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3280 #define FLD(f) abuf->fields.sfmt_add.f
3281 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3282 int UNUSED written
= 0;
3283 IADDR UNUSED pc
= abuf
->addr
;
3284 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3290 tmp_count
= MULQI (8, 5);
3291 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3292 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3293 tmp_count
= MULQI (8, SUBQI (8, 5));
3294 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3296 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3297 SET_H_GR (FLD (f_dest
), opval
);
3298 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3306 /* mextr6: mextr6 $rm, $rn, $rd */
3309 SEM_FN_NAME (sh64_media
,mextr6
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3311 #define FLD(f) abuf->fields.sfmt_add.f
3312 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3313 int UNUSED written
= 0;
3314 IADDR UNUSED pc
= abuf
->addr
;
3315 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3321 tmp_count
= MULQI (8, 6);
3322 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3323 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3324 tmp_count
= MULQI (8, SUBQI (8, 6));
3325 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3327 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3328 SET_H_GR (FLD (f_dest
), opval
);
3329 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3337 /* mextr7: mextr7 $rm, $rn, $rd */
3340 SEM_FN_NAME (sh64_media
,mextr7
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3342 #define FLD(f) abuf->fields.sfmt_add.f
3343 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3344 int UNUSED written
= 0;
3345 IADDR UNUSED pc
= abuf
->addr
;
3346 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3352 tmp_count
= MULQI (8, 7);
3353 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3354 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3355 tmp_count
= MULQI (8, SUBQI (8, 7));
3356 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3358 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3359 SET_H_GR (FLD (f_dest
), opval
);
3360 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3368 /* mmacfxwl: mmacfx.wl $rm, $rn, $rd */
3371 SEM_FN_NAME (sh64_media
,mmacfxwl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3373 #define FLD(f) abuf->fields.sfmt_add.f
3374 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3375 int UNUSED written
= 0;
3376 IADDR UNUSED pc
= abuf
->addr
;
3377 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3383 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 1);
3384 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 0);
3385 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3386 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)))));
3387 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)))));
3388 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3389 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)))));
3390 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)))));
3392 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3393 SET_H_GR (FLD (f_dest
), opval
);
3394 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3402 /* mmacnfx.wl: mmacnfx.wl $rm, $rn, $rd */
3405 SEM_FN_NAME (sh64_media
,mmacnfx_wl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3407 #define FLD(f) abuf->fields.sfmt_add.f
3408 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3409 int UNUSED written
= 0;
3410 IADDR UNUSED pc
= abuf
->addr
;
3411 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3417 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 1);
3418 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 0);
3419 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3420 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)))));
3421 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)))));
3422 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3423 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)))));
3424 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)))));
3426 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3427 SET_H_GR (FLD (f_dest
), opval
);
3428 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3436 /* mmull: mmul.l $rm, $rn, $rd */
3439 SEM_FN_NAME (sh64_media
,mmull
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3441 #define FLD(f) abuf->fields.sfmt_add.f
3442 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3443 int UNUSED written
= 0;
3444 IADDR UNUSED pc
= abuf
->addr
;
3445 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3450 tmp_result0
= MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
3451 tmp_result1
= MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0));
3453 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3454 SET_H_GR (FLD (f_dest
), opval
);
3455 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3463 /* mmulw: mmul.w $rm, $rn, $rd */
3466 SEM_FN_NAME (sh64_media
,mmulw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3468 #define FLD(f) abuf->fields.sfmt_add.f
3469 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3470 int UNUSED written
= 0;
3471 IADDR UNUSED pc
= abuf
->addr
;
3472 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3479 tmp_result0
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3));
3480 tmp_result1
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2));
3481 tmp_result2
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1));
3482 tmp_result3
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0));
3484 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3485 SET_H_GR (FLD (f_dest
), opval
);
3486 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3494 /* mmulfxl: mmulfx.l $rm, $rn, $rd */
3497 SEM_FN_NAME (sh64_media
,mmulfxl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3499 #define FLD(f) abuf->fields.sfmt_add.f
3500 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3501 int UNUSED written
= 0;
3502 IADDR UNUSED pc
= abuf
->addr
;
3503 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3509 tmp_temp
= MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
3510 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)))));
3511 tmp_temp
= MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0)));
3512 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)))));
3514 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3515 SET_H_GR (FLD (f_dest
), opval
);
3516 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3524 /* mmulfxw: mmulfx.w $rm, $rn, $rd */
3527 SEM_FN_NAME (sh64_media
,mmulfxw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3529 #define FLD(f) abuf->fields.sfmt_add.f
3530 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3531 int UNUSED written
= 0;
3532 IADDR UNUSED pc
= abuf
->addr
;
3533 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3541 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3542 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)))));
3543 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3544 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)))));
3545 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)));
3546 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)))));
3547 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3548 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)))));
3550 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3551 SET_H_GR (FLD (f_dest
), opval
);
3552 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3560 /* mmulfxrpw: mmulfxrp.w $rm, $rn, $rd */
3563 SEM_FN_NAME (sh64_media
,mmulfxrpw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3565 #define FLD(f) abuf->fields.sfmt_add.f
3566 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3567 int UNUSED written
= 0;
3568 IADDR UNUSED pc
= abuf
->addr
;
3569 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3578 tmp_c
= SLLSI (1, 14);
3579 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3580 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)))));
3581 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3582 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)))));
3583 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)));
3584 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)))));
3585 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3586 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)))));
3588 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3589 SET_H_GR (FLD (f_dest
), opval
);
3590 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3598 /* mmulhiwl: mmulhi.wl $rm, $rn, $rd */
3601 SEM_FN_NAME (sh64_media
,mmulhiwl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3603 #define FLD(f) abuf->fields.sfmt_add.f
3604 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3605 int UNUSED written
= 0;
3606 IADDR UNUSED pc
= abuf
->addr
;
3607 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3612 tmp_result0
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)));
3613 tmp_result1
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3615 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3616 SET_H_GR (FLD (f_dest
), opval
);
3617 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3625 /* mmullowl: mmullo.wl $rm, $rn, $rd */
3628 SEM_FN_NAME (sh64_media
,mmullowl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3630 #define FLD(f) abuf->fields.sfmt_add.f
3631 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3632 int UNUSED written
= 0;
3633 IADDR UNUSED pc
= abuf
->addr
;
3634 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3639 tmp_result0
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3640 tmp_result1
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3642 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3643 SET_H_GR (FLD (f_dest
), opval
);
3644 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3652 /* mmulsumwq: mmulsum.wq $rm, $rn, $rd */
3655 SEM_FN_NAME (sh64_media
,mmulsumwq
) (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);
3665 tmp_acc
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3666 tmp_acc
= ADDDI (tmp_acc
, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))));
3667 tmp_acc
= ADDDI (tmp_acc
, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))));
3668 tmp_acc
= ADDDI (tmp_acc
, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))));
3670 DI opval
= ADDDI (GET_H_GR (FLD (f_dest
)), tmp_acc
);
3671 SET_H_GR (FLD (f_dest
), opval
);
3672 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3680 /* movi: movi $imm16, $rd */
3683 SEM_FN_NAME (sh64_media
,movi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3685 #define FLD(f) abuf->fields.sfmt_movi.f
3686 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3687 int UNUSED written
= 0;
3688 IADDR UNUSED pc
= abuf
->addr
;
3689 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3692 DI opval
= EXTSIDI (FLD (f_imm16
));
3693 SET_H_GR (FLD (f_dest
), opval
);
3694 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3701 /* mpermw: mperm.w $rm, $rn, $rd */
3704 SEM_FN_NAME (sh64_media
,mpermw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3706 #define FLD(f) abuf->fields.sfmt_add.f
3707 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3708 int UNUSED written
= 0;
3709 IADDR UNUSED pc
= abuf
->addr
;
3710 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3718 tmp_control
= ANDQI (GET_H_GR (FLD (f_right
)), 255);
3719 tmp_result0
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (tmp_control
, 3)));
3720 tmp_result1
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (SRLQI (tmp_control
, 2), 3)));
3721 tmp_result2
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (SRLQI (tmp_control
, 4), 3)));
3722 tmp_result3
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (SRLQI (tmp_control
, 6), 3)));
3724 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3725 SET_H_GR (FLD (f_dest
), opval
);
3726 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3734 /* msadubq: msad.ubq $rm, $rn, $rd */
3737 SEM_FN_NAME (sh64_media
,msadubq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3739 #define FLD(f) abuf->fields.sfmt_add.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);
3747 tmp_acc
= ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0)));
3748 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))));
3749 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))));
3750 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))));
3751 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))));
3752 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))));
3753 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))));
3754 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))));
3756 DI opval
= ADDDI (GET_H_GR (FLD (f_dest
)), tmp_acc
);
3757 SET_H_GR (FLD (f_dest
), opval
);
3758 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3766 /* mshaldsl: mshalds.l $rm, $rn, $rd */
3769 SEM_FN_NAME (sh64_media
,mshaldsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3771 #define FLD(f) abuf->fields.sfmt_add.f
3772 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3773 int UNUSED written
= 0;
3774 IADDR UNUSED pc
= abuf
->addr
;
3775 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3780 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)))));
3781 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)))));
3783 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3784 SET_H_GR (FLD (f_dest
), opval
);
3785 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3793 /* mshaldsw: mshalds.w $rm, $rn, $rd */
3796 SEM_FN_NAME (sh64_media
,mshaldsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3798 #define FLD(f) abuf->fields.sfmt_add.f
3799 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3800 int UNUSED written
= 0;
3801 IADDR UNUSED pc
= abuf
->addr
;
3802 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3809 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)))));
3810 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)))));
3811 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)))));
3812 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)))));
3814 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3815 SET_H_GR (FLD (f_dest
), opval
);
3816 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3824 /* mshardl: mshard.l $rm, $rn, $rd */
3827 SEM_FN_NAME (sh64_media
,mshardl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3829 #define FLD(f) abuf->fields.sfmt_add.f
3830 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3831 int UNUSED written
= 0;
3832 IADDR UNUSED pc
= abuf
->addr
;
3833 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3838 tmp_result0
= SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31));
3839 tmp_result1
= SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31));
3841 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3842 SET_H_GR (FLD (f_dest
), opval
);
3843 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3851 /* mshardw: mshard.w $rm, $rn, $rd */
3854 SEM_FN_NAME (sh64_media
,mshardw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3856 #define FLD(f) abuf->fields.sfmt_add.f
3857 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3858 int UNUSED written
= 0;
3859 IADDR UNUSED pc
= abuf
->addr
;
3860 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3867 tmp_result0
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3868 tmp_result1
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3869 tmp_result2
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3870 tmp_result3
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3872 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3873 SET_H_GR (FLD (f_dest
), opval
);
3874 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3882 /* mshardsq: mshards.q $rm, $rn, $rd */
3885 SEM_FN_NAME (sh64_media
,mshardsq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3887 #define FLD(f) abuf->fields.sfmt_add.f
3888 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3889 int UNUSED written
= 0;
3890 IADDR UNUSED pc
= abuf
->addr
;
3891 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3894 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)))));
3895 SET_H_GR (FLD (f_dest
), opval
);
3896 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3903 /* mshfhib: mshfhi.b $rm, $rn, $rd */
3906 SEM_FN_NAME (sh64_media
,mshfhib
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3908 #define FLD(f) abuf->fields.sfmt_add.f
3909 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3910 int UNUSED written
= 0;
3911 IADDR UNUSED pc
= abuf
->addr
;
3912 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3923 tmp_result0
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3);
3924 tmp_result1
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3);
3925 tmp_result2
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2);
3926 tmp_result3
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2);
3927 tmp_result4
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1);
3928 tmp_result5
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1);
3929 tmp_result6
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0);
3930 tmp_result7
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0);
3932 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
))))))));
3933 SET_H_GR (FLD (f_dest
), opval
);
3934 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3942 /* mshfhil: mshfhi.l $rm, $rn, $rd */
3945 SEM_FN_NAME (sh64_media
,mshfhil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3947 #define FLD(f) abuf->fields.sfmt_add.f
3948 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3949 int UNUSED written
= 0;
3950 IADDR UNUSED pc
= abuf
->addr
;
3951 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3956 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0);
3957 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0);
3959 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3960 SET_H_GR (FLD (f_dest
), opval
);
3961 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3969 /* mshfhiw: mshfhi.w $rm, $rn, $rd */
3972 SEM_FN_NAME (sh64_media
,mshfhiw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3974 #define FLD(f) abuf->fields.sfmt_add.f
3975 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3976 int UNUSED written
= 0;
3977 IADDR UNUSED pc
= abuf
->addr
;
3978 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3985 tmp_result0
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1);
3986 tmp_result1
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1);
3987 tmp_result2
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0);
3988 tmp_result3
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0);
3990 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3991 SET_H_GR (FLD (f_dest
), opval
);
3992 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4000 /* mshflob: mshflo.b $rm, $rn, $rd */
4003 SEM_FN_NAME (sh64_media
,mshflob
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4005 #define FLD(f) abuf->fields.sfmt_add.f
4006 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4007 int UNUSED written
= 0;
4008 IADDR UNUSED pc
= abuf
->addr
;
4009 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4020 tmp_result0
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7);
4021 tmp_result1
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7);
4022 tmp_result2
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6);
4023 tmp_result3
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6);
4024 tmp_result4
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5);
4025 tmp_result5
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5);
4026 tmp_result6
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4);
4027 tmp_result7
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4);
4029 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
))))))));
4030 SET_H_GR (FLD (f_dest
), opval
);
4031 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4039 /* mshflol: mshflo.l $rm, $rn, $rd */
4042 SEM_FN_NAME (sh64_media
,mshflol
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4044 #define FLD(f) abuf->fields.sfmt_add.f
4045 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4046 int UNUSED written
= 0;
4047 IADDR UNUSED pc
= abuf
->addr
;
4048 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4053 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1);
4054 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1);
4056 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4057 SET_H_GR (FLD (f_dest
), opval
);
4058 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4066 /* mshflow: mshflo.w $rm, $rn, $rd */
4069 SEM_FN_NAME (sh64_media
,mshflow
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4071 #define FLD(f) abuf->fields.sfmt_add.f
4072 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4073 int UNUSED written
= 0;
4074 IADDR UNUSED pc
= abuf
->addr
;
4075 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4082 tmp_result0
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3);
4083 tmp_result1
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3);
4084 tmp_result2
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2);
4085 tmp_result3
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2);
4087 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4088 SET_H_GR (FLD (f_dest
), opval
);
4089 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4097 /* mshlldl: mshlld.l $rm, $rn, $rd */
4100 SEM_FN_NAME (sh64_media
,mshlldl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4102 #define FLD(f) abuf->fields.sfmt_add.f
4103 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4104 int UNUSED written
= 0;
4105 IADDR UNUSED pc
= abuf
->addr
;
4106 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4111 tmp_result0
= SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4112 tmp_result1
= SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4114 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4115 SET_H_GR (FLD (f_dest
), opval
);
4116 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4124 /* mshlldw: mshlld.w $rm, $rn, $rd */
4127 SEM_FN_NAME (sh64_media
,mshlldw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4129 #define FLD(f) abuf->fields.sfmt_add.f
4130 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4131 int UNUSED written
= 0;
4132 IADDR UNUSED pc
= abuf
->addr
;
4133 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4140 tmp_result0
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4141 tmp_result1
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4142 tmp_result2
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4143 tmp_result3
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4145 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4146 SET_H_GR (FLD (f_dest
), opval
);
4147 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4155 /* mshlrdl: mshlrd.l $rm, $rn, $rd */
4158 SEM_FN_NAME (sh64_media
,mshlrdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4160 #define FLD(f) abuf->fields.sfmt_add.f
4161 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4162 int UNUSED written
= 0;
4163 IADDR UNUSED pc
= abuf
->addr
;
4164 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4169 tmp_result0
= SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4170 tmp_result1
= SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4172 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4173 SET_H_GR (FLD (f_dest
), opval
);
4174 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4182 /* mshlrdw: mshlrd.w $rm, $rn, $rd */
4185 SEM_FN_NAME (sh64_media
,mshlrdw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4187 #define FLD(f) abuf->fields.sfmt_add.f
4188 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4189 int UNUSED written
= 0;
4190 IADDR UNUSED pc
= abuf
->addr
;
4191 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4198 tmp_result0
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4199 tmp_result1
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4200 tmp_result2
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4201 tmp_result3
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4203 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4204 SET_H_GR (FLD (f_dest
), opval
);
4205 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4213 /* msubl: msub.l $rm, $rn, $rd */
4216 SEM_FN_NAME (sh64_media
,msubl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4218 #define FLD(f) abuf->fields.sfmt_add.f
4219 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4220 int UNUSED written
= 0;
4221 IADDR UNUSED pc
= abuf
->addr
;
4222 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4227 tmp_result0
= SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
4228 tmp_result1
= SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0));
4230 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4231 SET_H_GR (FLD (f_dest
), opval
);
4232 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4240 /* msubw: msub.w $rm, $rn, $rd */
4243 SEM_FN_NAME (sh64_media
,msubw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4245 #define FLD(f) abuf->fields.sfmt_add.f
4246 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4247 int UNUSED written
= 0;
4248 IADDR UNUSED pc
= abuf
->addr
;
4249 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4256 tmp_result0
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3));
4257 tmp_result1
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2));
4258 tmp_result2
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1));
4259 tmp_result3
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0));
4261 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4262 SET_H_GR (FLD (f_dest
), opval
);
4263 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4271 /* msubsl: msubs.l $rm, $rn, $rd */
4274 SEM_FN_NAME (sh64_media
,msubsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4276 #define FLD(f) abuf->fields.sfmt_add.f
4277 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4278 int UNUSED written
= 0;
4279 IADDR UNUSED pc
= abuf
->addr
;
4280 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4285 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)))));
4286 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)))));
4288 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4289 SET_H_GR (FLD (f_dest
), opval
);
4290 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4298 /* msubsub: msubs.ub $rm, $rn, $rd */
4301 SEM_FN_NAME (sh64_media
,msubsub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4303 #define FLD(f) abuf->fields.sfmt_add.f
4304 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4305 int UNUSED written
= 0;
4306 IADDR UNUSED pc
= abuf
->addr
;
4307 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4318 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)))));
4319 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)))));
4320 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)))));
4321 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)))));
4322 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)))));
4323 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)))));
4324 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)))));
4325 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)))));
4327 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
))))))));
4328 SET_H_GR (FLD (f_dest
), opval
);
4329 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4337 /* msubsw: msubs.w $rm, $rn, $rd */
4340 SEM_FN_NAME (sh64_media
,msubsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4342 #define FLD(f) abuf->fields.sfmt_add.f
4343 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4344 int UNUSED written
= 0;
4345 IADDR UNUSED pc
= abuf
->addr
;
4346 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4357 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)))));
4358 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)))));
4359 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)))));
4360 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)))));
4361 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)))));
4362 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)))));
4363 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)))));
4364 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)))));
4366 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
))))))));
4367 SET_H_GR (FLD (f_dest
), opval
);
4368 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4376 /* mulsl: muls.l $rm, $rn, $rd */
4379 SEM_FN_NAME (sh64_media
,mulsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4381 #define FLD(f) abuf->fields.sfmt_add.f
4382 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4383 int UNUSED written
= 0;
4384 IADDR UNUSED pc
= abuf
->addr
;
4385 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4388 DI opval
= MULDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
4389 SET_H_GR (FLD (f_dest
), opval
);
4390 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4397 /* mulul: mulu.l $rm, $rn, $rd */
4400 SEM_FN_NAME (sh64_media
,mulul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4402 #define FLD(f) abuf->fields.sfmt_add.f
4403 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4404 int UNUSED written
= 0;
4405 IADDR UNUSED pc
= abuf
->addr
;
4406 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4409 DI opval
= MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
4410 SET_H_GR (FLD (f_dest
), opval
);
4411 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4421 SEM_FN_NAME (sh64_media
,nop
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4423 #define FLD(f) abuf->fields.fmt_empty.f
4424 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4425 int UNUSED written
= 0;
4426 IADDR UNUSED pc
= abuf
->addr
;
4427 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4435 /* nsb: nsb $rm, $rd */
4438 SEM_FN_NAME (sh64_media
,nsb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4440 #define FLD(f) abuf->fields.sfmt_xori.f
4441 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4442 int UNUSED written
= 0;
4443 IADDR UNUSED pc
= abuf
->addr
;
4444 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4447 DI opval
= sh64_nsb (current_cpu
, GET_H_GR (FLD (f_left
)));
4448 SET_H_GR (FLD (f_dest
), opval
);
4449 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4456 /* ocbi: ocbi $rm, $disp6x32 */
4459 SEM_FN_NAME (sh64_media
,ocbi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4461 #define FLD(f) abuf->fields.fmt_empty.f
4462 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4463 int UNUSED written
= 0;
4464 IADDR UNUSED pc
= abuf
->addr
;
4465 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4473 /* ocbp: ocbp $rm, $disp6x32 */
4476 SEM_FN_NAME (sh64_media
,ocbp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4478 #define FLD(f) abuf->fields.fmt_empty.f
4479 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4480 int UNUSED written
= 0;
4481 IADDR UNUSED pc
= abuf
->addr
;
4482 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4490 /* ocbwb: ocbwb $rm, $disp6x32 */
4493 SEM_FN_NAME (sh64_media
,ocbwb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4495 #define FLD(f) abuf->fields.fmt_empty.f
4496 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4497 int UNUSED written
= 0;
4498 IADDR UNUSED pc
= abuf
->addr
;
4499 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4507 /* or: or $rm, $rn, $rd */
4510 SEM_FN_NAME (sh64_media
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4512 #define FLD(f) abuf->fields.sfmt_add.f
4513 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4514 int UNUSED written
= 0;
4515 IADDR UNUSED pc
= abuf
->addr
;
4516 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4519 DI opval
= ORDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
4520 SET_H_GR (FLD (f_dest
), opval
);
4521 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4528 /* ori: ori $rm, $imm10, $rd */
4531 SEM_FN_NAME (sh64_media
,ori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4533 #define FLD(f) abuf->fields.sfmt_ori.f
4534 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4535 int UNUSED written
= 0;
4536 IADDR UNUSED pc
= abuf
->addr
;
4537 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4540 DI opval
= ORDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm10
)));
4541 SET_H_GR (FLD (f_dest
), opval
);
4542 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4549 /* prefi: prefi $rm, $disp6x32 */
4552 SEM_FN_NAME (sh64_media
,prefi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4554 #define FLD(f) abuf->fields.fmt_empty.f
4555 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4556 int UNUSED written
= 0;
4557 IADDR UNUSED pc
= abuf
->addr
;
4558 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4566 /* pta: pta$likely $disp16, $tra */
4569 SEM_FN_NAME (sh64_media
,pta
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4571 #define FLD(f) abuf->fields.sfmt_pta.f
4572 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4573 int UNUSED written
= 0;
4574 IADDR UNUSED pc
= abuf
->addr
;
4575 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4578 DI opval
= ADDSI (FLD (f_disp16
), 1);
4579 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4580 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4587 /* ptabs: ptabs$likely $rn, $tra */
4590 SEM_FN_NAME (sh64_media
,ptabs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4592 #define FLD(f) abuf->fields.sfmt_beq.f
4593 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4594 int UNUSED written
= 0;
4595 IADDR UNUSED pc
= abuf
->addr
;
4596 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4599 DI opval
= GET_H_GR (FLD (f_right
));
4600 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4601 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4608 /* ptb: ptb$likely $disp16, $tra */
4611 SEM_FN_NAME (sh64_media
,ptb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4613 #define FLD(f) abuf->fields.sfmt_pta.f
4614 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4615 int UNUSED written
= 0;
4616 IADDR UNUSED pc
= abuf
->addr
;
4617 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4620 DI opval
= FLD (f_disp16
);
4621 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4622 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4629 /* ptrel: ptrel$likely $rn, $tra */
4632 SEM_FN_NAME (sh64_media
,ptrel
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4634 #define FLD(f) abuf->fields.sfmt_beq.f
4635 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4636 int UNUSED written
= 0;
4637 IADDR UNUSED pc
= abuf
->addr
;
4638 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4641 DI opval
= ADDDI (pc
, GET_H_GR (FLD (f_right
)));
4642 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4643 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4650 /* putcfg: putcfg $rm, $disp6, $rd */
4653 SEM_FN_NAME (sh64_media
,putcfg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4655 #define FLD(f) abuf->fields.fmt_empty.f
4656 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4657 int UNUSED written
= 0;
4658 IADDR UNUSED pc
= abuf
->addr
;
4659 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4667 /* putcon: putcon $rm, $crj */
4670 SEM_FN_NAME (sh64_media
,putcon
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4672 #define FLD(f) abuf->fields.sfmt_xori.f
4673 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4674 int UNUSED written
= 0;
4675 IADDR UNUSED pc
= abuf
->addr
;
4676 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4679 DI opval
= GET_H_GR (FLD (f_left
));
4680 SET_H_CR (FLD (f_dest
), opval
);
4681 TRACE_RESULT (current_cpu
, abuf
, "cr", 'D', opval
);
4691 SEM_FN_NAME (sh64_media
,rte
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4693 #define FLD(f) abuf->fields.fmt_empty.f
4694 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4695 int UNUSED written
= 0;
4696 IADDR UNUSED pc
= abuf
->addr
;
4697 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4705 /* shard: shard $rm, $rn, $rd */
4708 SEM_FN_NAME (sh64_media
,shard
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4710 #define FLD(f) abuf->fields.sfmt_add.f
4711 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4712 int UNUSED written
= 0;
4713 IADDR UNUSED pc
= abuf
->addr
;
4714 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4717 DI opval
= SRADI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63));
4718 SET_H_GR (FLD (f_dest
), opval
);
4719 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4726 /* shardl: shard.l $rm, $rn, $rd */
4729 SEM_FN_NAME (sh64_media
,shardl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4731 #define FLD(f) abuf->fields.sfmt_add.f
4732 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4733 int UNUSED written
= 0;
4734 IADDR UNUSED pc
= abuf
->addr
;
4735 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4738 DI opval
= EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 63)));
4739 SET_H_GR (FLD (f_dest
), opval
);
4740 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4747 /* shari: shari $rm, $uimm6, $rd */
4750 SEM_FN_NAME (sh64_media
,shari
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4752 #define FLD(f) abuf->fields.sfmt_shari.f
4753 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4754 int UNUSED written
= 0;
4755 IADDR UNUSED pc
= abuf
->addr
;
4756 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4759 DI opval
= SRADI (GET_H_GR (FLD (f_left
)), FLD (f_uimm6
));
4760 SET_H_GR (FLD (f_dest
), opval
);
4761 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4768 /* sharil: shari.l $rm, $uimm6, $rd */
4771 SEM_FN_NAME (sh64_media
,sharil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4773 #define FLD(f) abuf->fields.sfmt_shari.f
4774 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4775 int UNUSED written
= 0;
4776 IADDR UNUSED pc
= abuf
->addr
;
4777 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4780 DI opval
= EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDSI (FLD (f_uimm6
), 63)));
4781 SET_H_GR (FLD (f_dest
), opval
);
4782 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4789 /* shlld: shlld $rm, $rn, $rd */
4792 SEM_FN_NAME (sh64_media
,shlld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4794 #define FLD(f) abuf->fields.sfmt_add.f
4795 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4796 int UNUSED written
= 0;
4797 IADDR UNUSED pc
= abuf
->addr
;
4798 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4801 DI opval
= SLLDI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63));
4802 SET_H_GR (FLD (f_dest
), opval
);
4803 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4810 /* shlldl: shlld.l $rm, $rn, $rd */
4813 SEM_FN_NAME (sh64_media
,shlldl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4815 #define FLD(f) abuf->fields.sfmt_add.f
4816 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4817 int UNUSED written
= 0;
4818 IADDR UNUSED pc
= abuf
->addr
;
4819 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4822 DI opval
= EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 63)));
4823 SET_H_GR (FLD (f_dest
), opval
);
4824 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4831 /* shlli: shlli $rm, $uimm6, $rd */
4834 SEM_FN_NAME (sh64_media
,shlli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4836 #define FLD(f) abuf->fields.sfmt_shari.f
4837 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4838 int UNUSED written
= 0;
4839 IADDR UNUSED pc
= abuf
->addr
;
4840 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4843 DI opval
= SLLDI (GET_H_GR (FLD (f_left
)), FLD (f_uimm6
));
4844 SET_H_GR (FLD (f_dest
), opval
);
4845 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4852 /* shllil: shlli.l $rm, $uimm6, $rd */
4855 SEM_FN_NAME (sh64_media
,shllil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4857 #define FLD(f) abuf->fields.sfmt_shari.f
4858 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4859 int UNUSED written
= 0;
4860 IADDR UNUSED pc
= abuf
->addr
;
4861 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4864 DI opval
= EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDSI (FLD (f_uimm6
), 63)));
4865 SET_H_GR (FLD (f_dest
), opval
);
4866 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4873 /* shlrd: shlrd $rm, $rn, $rd */
4876 SEM_FN_NAME (sh64_media
,shlrd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4878 #define FLD(f) abuf->fields.sfmt_add.f
4879 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4880 int UNUSED written
= 0;
4881 IADDR UNUSED pc
= abuf
->addr
;
4882 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4885 DI opval
= SRLDI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63));
4886 SET_H_GR (FLD (f_dest
), opval
);
4887 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4894 /* shlrdl: shlrd.l $rm, $rn, $rd */
4897 SEM_FN_NAME (sh64_media
,shlrdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4899 #define FLD(f) abuf->fields.sfmt_add.f
4900 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4901 int UNUSED written
= 0;
4902 IADDR UNUSED pc
= abuf
->addr
;
4903 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4906 DI opval
= EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 63)));
4907 SET_H_GR (FLD (f_dest
), opval
);
4908 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4915 /* shlri: shlri $rm, $uimm6, $rd */
4918 SEM_FN_NAME (sh64_media
,shlri
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4920 #define FLD(f) abuf->fields.sfmt_shari.f
4921 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4922 int UNUSED written
= 0;
4923 IADDR UNUSED pc
= abuf
->addr
;
4924 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4927 DI opval
= SRLDI (GET_H_GR (FLD (f_left
)), FLD (f_uimm6
));
4928 SET_H_GR (FLD (f_dest
), opval
);
4929 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4936 /* shlril: shlri.l $rm, $uimm6, $rd */
4939 SEM_FN_NAME (sh64_media
,shlril
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4941 #define FLD(f) abuf->fields.sfmt_shari.f
4942 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4943 int UNUSED written
= 0;
4944 IADDR UNUSED pc
= abuf
->addr
;
4945 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4948 DI opval
= EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDSI (FLD (f_uimm6
), 63)));
4949 SET_H_GR (FLD (f_dest
), opval
);
4950 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4957 /* shori: shori $uimm16, $rd */
4960 SEM_FN_NAME (sh64_media
,shori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4962 #define FLD(f) abuf->fields.sfmt_shori.f
4963 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4964 int UNUSED written
= 0;
4965 IADDR UNUSED pc
= abuf
->addr
;
4966 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4969 DI opval
= ORDI (SLLDI (GET_H_GR (FLD (f_dest
)), 16), ZEXTSIDI (FLD (f_uimm16
)));
4970 SET_H_GR (FLD (f_dest
), opval
);
4971 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4981 SEM_FN_NAME (sh64_media
,sleep
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4983 #define FLD(f) abuf->fields.fmt_empty.f
4984 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4985 int UNUSED written
= 0;
4986 IADDR UNUSED pc
= abuf
->addr
;
4987 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4995 /* stb: st.b $rm, $disp10, $rd */
4998 SEM_FN_NAME (sh64_media
,stb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5000 #define FLD(f) abuf->fields.sfmt_addi.f
5001 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5002 int UNUSED written
= 0;
5003 IADDR UNUSED pc
= abuf
->addr
;
5004 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5007 UQI opval
= ANDQI (GET_H_GR (FLD (f_dest
)), 255);
5008 SETMEMUQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
))), opval
);
5009 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5016 /* stl: st.l $rm, $disp10x4, $rd */
5019 SEM_FN_NAME (sh64_media
,stl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5021 #define FLD(f) abuf->fields.sfmt_flds.f
5022 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5023 int UNUSED written
= 0;
5024 IADDR UNUSED pc
= abuf
->addr
;
5025 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5028 SI opval
= ANDSI (GET_H_GR (FLD (f_dest
)), 0xffffffff);
5029 SETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x4
))), opval
);
5030 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5037 /* stq: st.q $rm, $disp10x8, $rd */
5040 SEM_FN_NAME (sh64_media
,stq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5042 #define FLD(f) abuf->fields.sfmt_fldd.f
5043 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5044 int UNUSED written
= 0;
5045 IADDR UNUSED pc
= abuf
->addr
;
5046 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5049 DI opval
= GET_H_GR (FLD (f_dest
));
5050 SETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x8
))), opval
);
5051 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5058 /* stw: st.w $rm, $disp10x2, $rd */
5061 SEM_FN_NAME (sh64_media
,stw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5063 #define FLD(f) abuf->fields.sfmt_lduw.f
5064 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5065 int UNUSED written
= 0;
5066 IADDR UNUSED pc
= abuf
->addr
;
5067 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5070 HI opval
= ANDHI (GET_H_GR (FLD (f_dest
)), 65535);
5071 SETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x2
))), opval
);
5072 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5079 /* sthil: sthi.l $rm, $disp6, $rd */
5082 SEM_FN_NAME (sh64_media
,sthil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5084 #define FLD(f) abuf->fields.sfmt_ldhil.f
5085 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5086 int UNUSED written
= 0;
5087 IADDR UNUSED pc
= abuf
->addr
;
5088 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5094 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5095 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 3), 1);
5096 if (ANDQI (tmp_bytecount
, 4)) {
5098 SI opval
= GET_H_GR (FLD (f_dest
));
5099 SETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5100 written
|= (1 << 5);
5101 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5104 if (GET_H_ENDIAN ()) {
5106 tmp_val
= GET_H_GR (FLD (f_dest
));
5107 if (ANDQI (tmp_bytecount
, 1)) {
5110 UQI opval
= ANDQI (tmp_val
, 255);
5111 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5112 written
|= (1 << 6);
5113 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5115 tmp_val
= SRLDI (tmp_val
, 8);
5118 if (ANDQI (tmp_bytecount
, 2)) {
5121 HI opval
= ANDHI (tmp_val
, 65535);
5122 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5123 written
|= (1 << 4);
5124 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5126 tmp_val
= SRLDI (tmp_val
, 16);
5132 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (32, MULSI (8, tmp_bytecount
)));
5133 if (ANDQI (tmp_bytecount
, 2)) {
5136 HI opval
= ANDHI (tmp_val
, 65535);
5137 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5138 written
|= (1 << 4);
5139 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5141 tmp_val
= SRLDI (tmp_val
, 16);
5144 if (ANDQI (tmp_bytecount
, 1)) {
5147 UQI opval
= ANDQI (tmp_val
, 255);
5148 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5149 written
|= (1 << 6);
5150 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5152 tmp_val
= SRLDI (tmp_val
, 8);
5160 abuf
->written
= written
;
5165 /* sthiq: sthi.q $rm, $disp6, $rd */
5168 SEM_FN_NAME (sh64_media
,sthiq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5170 #define FLD(f) abuf->fields.sfmt_ldhil.f
5171 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5172 int UNUSED written
= 0;
5173 IADDR UNUSED pc
= abuf
->addr
;
5174 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5180 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5181 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 7), 1);
5182 if (ANDQI (tmp_bytecount
, 8)) {
5184 DI opval
= GET_H_GR (FLD (f_dest
));
5185 SETMEMDI (current_cpu
, pc
, ANDDI (tmp_addr
, -8), opval
);
5186 written
|= (1 << 4);
5187 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5190 if (GET_H_ENDIAN ()) {
5192 tmp_val
= GET_H_GR (FLD (f_dest
));
5193 if (ANDQI (tmp_bytecount
, 1)) {
5196 UQI opval
= ANDQI (tmp_val
, 255);
5197 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5198 written
|= (1 << 7);
5199 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5201 tmp_val
= SRLDI (tmp_val
, 8);
5204 if (ANDQI (tmp_bytecount
, 2)) {
5207 HI opval
= ANDHI (tmp_val
, 65535);
5208 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5209 written
|= (1 << 5);
5210 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5212 tmp_val
= SRLDI (tmp_val
, 16);
5215 if (ANDQI (tmp_bytecount
, 4)) {
5218 SI opval
= ANDSI (tmp_val
, 0xffffffff);
5219 SETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8), opval
);
5220 written
|= (1 << 6);
5221 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5223 tmp_val
= SRLDI (tmp_val
, 32);
5229 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (64, MULSI (8, tmp_bytecount
)));
5230 if (ANDQI (tmp_bytecount
, 4)) {
5233 SI opval
= ANDSI (tmp_val
, 0xffffffff);
5234 SETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8), opval
);
5235 written
|= (1 << 6);
5236 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5238 tmp_val
= SRLDI (tmp_val
, 32);
5241 if (ANDQI (tmp_bytecount
, 2)) {
5244 HI opval
= ANDHI (tmp_val
, 65535);
5245 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5246 written
|= (1 << 5);
5247 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5249 tmp_val
= SRLDI (tmp_val
, 16);
5252 if (ANDQI (tmp_bytecount
, 1)) {
5255 UQI opval
= ANDQI (tmp_val
, 255);
5256 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5257 written
|= (1 << 7);
5258 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5260 tmp_val
= SRLDI (tmp_val
, 8);
5268 abuf
->written
= written
;
5273 /* stlol: stlo.l $rm, $disp6, $rd */
5276 SEM_FN_NAME (sh64_media
,stlol
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5278 #define FLD(f) abuf->fields.sfmt_ldhil.f
5279 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5280 int UNUSED written
= 0;
5281 IADDR UNUSED pc
= abuf
->addr
;
5282 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5288 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5289 tmp_bytecount
= SUBSI (4, ANDDI (tmp_addr
, 3));
5290 if (ANDQI (tmp_bytecount
, 4)) {
5292 USI opval
= GET_H_GR (FLD (f_dest
));
5293 SETMEMUSI (current_cpu
, pc
, tmp_addr
, opval
);
5294 written
|= (1 << 6);
5295 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5298 if (GET_H_ENDIAN ()) {
5300 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (32, MULSI (8, tmp_bytecount
)));
5301 if (ANDQI (tmp_bytecount
, 2)) {
5304 UHI opval
= ANDHI (tmp_val
, 65535);
5305 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5306 written
|= (1 << 4);
5307 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5309 tmp_val
= SRLDI (tmp_val
, 16);
5312 if (ANDQI (tmp_bytecount
, 1)) {
5315 UQI opval
= ANDQI (tmp_val
, 255);
5316 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5317 written
|= (1 << 5);
5318 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5320 tmp_val
= SRLDI (tmp_val
, 8);
5326 tmp_val
= GET_H_GR (FLD (f_dest
));
5327 if (ANDQI (tmp_bytecount
, 1)) {
5330 UQI opval
= ANDQI (tmp_val
, 255);
5331 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5332 written
|= (1 << 5);
5333 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5335 tmp_val
= SRLDI (tmp_val
, 8);
5338 if (ANDQI (tmp_bytecount
, 2)) {
5341 UHI opval
= ANDHI (tmp_val
, 65535);
5342 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5343 written
|= (1 << 4);
5344 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5346 tmp_val
= SRLDI (tmp_val
, 16);
5354 abuf
->written
= written
;
5359 /* stloq: stlo.q $rm, $disp6, $rd */
5362 SEM_FN_NAME (sh64_media
,stloq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5364 #define FLD(f) abuf->fields.sfmt_ldhil.f
5365 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5366 int UNUSED written
= 0;
5367 IADDR UNUSED pc
= abuf
->addr
;
5368 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5374 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5375 tmp_bytecount
= SUBSI (8, ANDDI (tmp_addr
, 7));
5376 if (ANDQI (tmp_bytecount
, 8)) {
5378 UDI opval
= GET_H_GR (FLD (f_dest
));
5379 SETMEMUDI (current_cpu
, pc
, tmp_addr
, opval
);
5380 written
|= (1 << 4);
5381 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5384 if (GET_H_ENDIAN ()) {
5386 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (64, MULSI (8, tmp_bytecount
)));
5387 if (ANDQI (tmp_bytecount
, 4)) {
5390 USI opval
= ANDSI (tmp_val
, 0xffffffff);
5391 SETMEMUSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4), opval
);
5392 written
|= (1 << 7);
5393 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5395 tmp_val
= SRLDI (tmp_val
, 32);
5398 if (ANDQI (tmp_bytecount
, 2)) {
5401 UHI opval
= ANDHI (tmp_val
, 65535);
5402 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5403 written
|= (1 << 5);
5404 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5406 tmp_val
= SRLDI (tmp_val
, 16);
5409 if (ANDQI (tmp_bytecount
, 1)) {
5412 UQI opval
= ANDQI (tmp_val
, 255);
5413 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5414 written
|= (1 << 6);
5415 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5417 tmp_val
= SRLDI (tmp_val
, 8);
5423 tmp_val
= GET_H_GR (FLD (f_dest
));
5424 if (ANDQI (tmp_bytecount
, 1)) {
5427 UQI opval
= ANDQI (tmp_val
, 255);
5428 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5429 written
|= (1 << 6);
5430 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5432 tmp_val
= SRLDI (tmp_val
, 8);
5435 if (ANDQI (tmp_bytecount
, 2)) {
5438 UHI opval
= ANDHI (tmp_val
, 65535);
5439 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5440 written
|= (1 << 5);
5441 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5443 tmp_val
= SRLDI (tmp_val
, 16);
5446 if (ANDQI (tmp_bytecount
, 4)) {
5449 USI opval
= ANDSI (tmp_val
, 0xffffffff);
5450 SETMEMUSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4), opval
);
5451 written
|= (1 << 7);
5452 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5454 tmp_val
= SRLDI (tmp_val
, 32);
5462 abuf
->written
= written
;
5467 /* stxb: stx.b $rm, $rn, $rd */
5470 SEM_FN_NAME (sh64_media
,stxb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5472 #define FLD(f) abuf->fields.sfmt_add.f
5473 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5474 int UNUSED written
= 0;
5475 IADDR UNUSED pc
= abuf
->addr
;
5476 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5479 UQI opval
= SUBWORDDIQI (GET_H_GR (FLD (f_dest
)), 7);
5480 SETMEMUQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5481 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5488 /* stxl: stx.l $rm, $rn, $rd */
5491 SEM_FN_NAME (sh64_media
,stxl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5493 #define FLD(f) abuf->fields.sfmt_add.f
5494 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5495 int UNUSED written
= 0;
5496 IADDR UNUSED pc
= abuf
->addr
;
5497 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5500 SI opval
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 1);
5501 SETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5502 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5509 /* stxq: stx.q $rm, $rn, $rd */
5512 SEM_FN_NAME (sh64_media
,stxq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5514 #define FLD(f) abuf->fields.sfmt_add.f
5515 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5516 int UNUSED written
= 0;
5517 IADDR UNUSED pc
= abuf
->addr
;
5518 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5521 DI opval
= GET_H_GR (FLD (f_dest
));
5522 SETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5523 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5530 /* stxw: stx.w $rm, $rn, $rd */
5533 SEM_FN_NAME (sh64_media
,stxw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5535 #define FLD(f) abuf->fields.sfmt_add.f
5536 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5537 int UNUSED written
= 0;
5538 IADDR UNUSED pc
= abuf
->addr
;
5539 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5542 HI opval
= SUBWORDDIHI (GET_H_GR (FLD (f_dest
)), 3);
5543 SETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5544 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5551 /* sub: sub $rm, $rn, $rd */
5554 SEM_FN_NAME (sh64_media
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5556 #define FLD(f) abuf->fields.sfmt_add.f
5557 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5558 int UNUSED written
= 0;
5559 IADDR UNUSED pc
= abuf
->addr
;
5560 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5563 DI opval
= SUBDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
5564 SET_H_GR (FLD (f_dest
), opval
);
5565 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5572 /* subl: sub.l $rm, $rn, $rd */
5575 SEM_FN_NAME (sh64_media
,subl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5577 #define FLD(f) abuf->fields.sfmt_add.f
5578 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5579 int UNUSED written
= 0;
5580 IADDR UNUSED pc
= abuf
->addr
;
5581 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5584 DI opval
= EXTSIDI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
5585 SET_H_GR (FLD (f_dest
), opval
);
5586 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5593 /* swapq: swap.q $rm, $rn, $rd */
5596 SEM_FN_NAME (sh64_media
,swapq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5598 #define FLD(f) abuf->fields.sfmt_add.f
5599 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5600 int UNUSED written
= 0;
5601 IADDR UNUSED pc
= abuf
->addr
;
5602 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5607 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
5608 tmp_temp
= GETMEMDI (current_cpu
, pc
, tmp_addr
);
5610 DI opval
= GET_H_GR (FLD (f_dest
));
5611 SETMEMDI (current_cpu
, pc
, tmp_addr
, opval
);
5612 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5615 DI opval
= tmp_temp
;
5616 SET_H_GR (FLD (f_dest
), opval
);
5617 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5628 SEM_FN_NAME (sh64_media
,synci
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5630 #define FLD(f) abuf->fields.fmt_empty.f
5631 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5632 int UNUSED written
= 0;
5633 IADDR UNUSED pc
= abuf
->addr
;
5634 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5645 SEM_FN_NAME (sh64_media
,synco
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5647 #define FLD(f) abuf->fields.fmt_empty.f
5648 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5649 int UNUSED written
= 0;
5650 IADDR UNUSED pc
= abuf
->addr
;
5651 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5659 /* trapa: trapa $rm */
5662 SEM_FN_NAME (sh64_media
,trapa
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5664 #define FLD(f) abuf->fields.sfmt_xori.f
5665 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5666 int UNUSED written
= 0;
5667 IADDR UNUSED pc
= abuf
->addr
;
5668 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5670 sh64_trapa (current_cpu
, GET_H_GR (FLD (f_left
)), pc
);
5676 /* xor: xor $rm, $rn, $rd */
5679 SEM_FN_NAME (sh64_media
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5681 #define FLD(f) abuf->fields.sfmt_add.f
5682 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5683 int UNUSED written
= 0;
5684 IADDR UNUSED pc
= abuf
->addr
;
5685 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5688 DI opval
= XORDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
5689 SET_H_GR (FLD (f_dest
), opval
);
5690 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5697 /* xori: xori $rm, $imm6, $rd */
5700 SEM_FN_NAME (sh64_media
,xori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5702 #define FLD(f) abuf->fields.sfmt_xori.f
5703 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5704 int UNUSED written
= 0;
5705 IADDR UNUSED pc
= abuf
->addr
;
5706 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5709 DI opval
= XORDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm6
)));
5710 SET_H_GR (FLD (f_dest
), opval
);
5711 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5718 /* Table of all semantic fns. */
5720 static const struct sem_fn_desc sem_fns
[] = {
5721 { SH64_MEDIA_INSN_X_INVALID
, SEM_FN_NAME (sh64_media
,x_invalid
) },
5722 { SH64_MEDIA_INSN_X_AFTER
, SEM_FN_NAME (sh64_media
,x_after
) },
5723 { SH64_MEDIA_INSN_X_BEFORE
, SEM_FN_NAME (sh64_media
,x_before
) },
5724 { SH64_MEDIA_INSN_X_CTI_CHAIN
, SEM_FN_NAME (sh64_media
,x_cti_chain
) },
5725 { SH64_MEDIA_INSN_X_CHAIN
, SEM_FN_NAME (sh64_media
,x_chain
) },
5726 { SH64_MEDIA_INSN_X_BEGIN
, SEM_FN_NAME (sh64_media
,x_begin
) },
5727 { SH64_MEDIA_INSN_ADD
, SEM_FN_NAME (sh64_media
,add
) },
5728 { SH64_MEDIA_INSN_ADDL
, SEM_FN_NAME (sh64_media
,addl
) },
5729 { SH64_MEDIA_INSN_ADDI
, SEM_FN_NAME (sh64_media
,addi
) },
5730 { SH64_MEDIA_INSN_ADDIL
, SEM_FN_NAME (sh64_media
,addil
) },
5731 { SH64_MEDIA_INSN_ADDZL
, SEM_FN_NAME (sh64_media
,addzl
) },
5732 { SH64_MEDIA_INSN_ALLOCO
, SEM_FN_NAME (sh64_media
,alloco
) },
5733 { SH64_MEDIA_INSN_AND
, SEM_FN_NAME (sh64_media
,and) },
5734 { SH64_MEDIA_INSN_ANDC
, SEM_FN_NAME (sh64_media
,andc
) },
5735 { SH64_MEDIA_INSN_ANDI
, SEM_FN_NAME (sh64_media
,andi
) },
5736 { SH64_MEDIA_INSN_BEQ
, SEM_FN_NAME (sh64_media
,beq
) },
5737 { SH64_MEDIA_INSN_BEQI
, SEM_FN_NAME (sh64_media
,beqi
) },
5738 { SH64_MEDIA_INSN_BGE
, SEM_FN_NAME (sh64_media
,bge
) },
5739 { SH64_MEDIA_INSN_BGEU
, SEM_FN_NAME (sh64_media
,bgeu
) },
5740 { SH64_MEDIA_INSN_BGT
, SEM_FN_NAME (sh64_media
,bgt
) },
5741 { SH64_MEDIA_INSN_BGTU
, SEM_FN_NAME (sh64_media
,bgtu
) },
5742 { SH64_MEDIA_INSN_BLINK
, SEM_FN_NAME (sh64_media
,blink
) },
5743 { SH64_MEDIA_INSN_BNE
, SEM_FN_NAME (sh64_media
,bne
) },
5744 { SH64_MEDIA_INSN_BNEI
, SEM_FN_NAME (sh64_media
,bnei
) },
5745 { SH64_MEDIA_INSN_BRK
, SEM_FN_NAME (sh64_media
,brk
) },
5746 { SH64_MEDIA_INSN_BYTEREV
, SEM_FN_NAME (sh64_media
,byterev
) },
5747 { SH64_MEDIA_INSN_CMPEQ
, SEM_FN_NAME (sh64_media
,cmpeq
) },
5748 { SH64_MEDIA_INSN_CMPGT
, SEM_FN_NAME (sh64_media
,cmpgt
) },
5749 { SH64_MEDIA_INSN_CMPGTU
, SEM_FN_NAME (sh64_media
,cmpgtu
) },
5750 { SH64_MEDIA_INSN_CMVEQ
, SEM_FN_NAME (sh64_media
,cmveq
) },
5751 { SH64_MEDIA_INSN_CMVNE
, SEM_FN_NAME (sh64_media
,cmvne
) },
5752 { SH64_MEDIA_INSN_FABSD
, SEM_FN_NAME (sh64_media
,fabsd
) },
5753 { SH64_MEDIA_INSN_FABSS
, SEM_FN_NAME (sh64_media
,fabss
) },
5754 { SH64_MEDIA_INSN_FADDD
, SEM_FN_NAME (sh64_media
,faddd
) },
5755 { SH64_MEDIA_INSN_FADDS
, SEM_FN_NAME (sh64_media
,fadds
) },
5756 { SH64_MEDIA_INSN_FCMPEQD
, SEM_FN_NAME (sh64_media
,fcmpeqd
) },
5757 { SH64_MEDIA_INSN_FCMPEQS
, SEM_FN_NAME (sh64_media
,fcmpeqs
) },
5758 { SH64_MEDIA_INSN_FCMPGED
, SEM_FN_NAME (sh64_media
,fcmpged
) },
5759 { SH64_MEDIA_INSN_FCMPGES
, SEM_FN_NAME (sh64_media
,fcmpges
) },
5760 { SH64_MEDIA_INSN_FCMPGTD
, SEM_FN_NAME (sh64_media
,fcmpgtd
) },
5761 { SH64_MEDIA_INSN_FCMPGTS
, SEM_FN_NAME (sh64_media
,fcmpgts
) },
5762 { SH64_MEDIA_INSN_FCMPUND
, SEM_FN_NAME (sh64_media
,fcmpund
) },
5763 { SH64_MEDIA_INSN_FCMPUNS
, SEM_FN_NAME (sh64_media
,fcmpuns
) },
5764 { SH64_MEDIA_INSN_FCNVDS
, SEM_FN_NAME (sh64_media
,fcnvds
) },
5765 { SH64_MEDIA_INSN_FCNVSD
, SEM_FN_NAME (sh64_media
,fcnvsd
) },
5766 { SH64_MEDIA_INSN_FDIVD
, SEM_FN_NAME (sh64_media
,fdivd
) },
5767 { SH64_MEDIA_INSN_FDIVS
, SEM_FN_NAME (sh64_media
,fdivs
) },
5768 { SH64_MEDIA_INSN_FGETSCR
, SEM_FN_NAME (sh64_media
,fgetscr
) },
5769 { SH64_MEDIA_INSN_FIPRS
, SEM_FN_NAME (sh64_media
,fiprs
) },
5770 { SH64_MEDIA_INSN_FLDD
, SEM_FN_NAME (sh64_media
,fldd
) },
5771 { SH64_MEDIA_INSN_FLDP
, SEM_FN_NAME (sh64_media
,fldp
) },
5772 { SH64_MEDIA_INSN_FLDS
, SEM_FN_NAME (sh64_media
,flds
) },
5773 { SH64_MEDIA_INSN_FLDXD
, SEM_FN_NAME (sh64_media
,fldxd
) },
5774 { SH64_MEDIA_INSN_FLDXP
, SEM_FN_NAME (sh64_media
,fldxp
) },
5775 { SH64_MEDIA_INSN_FLDXS
, SEM_FN_NAME (sh64_media
,fldxs
) },
5776 { SH64_MEDIA_INSN_FLOATLD
, SEM_FN_NAME (sh64_media
,floatld
) },
5777 { SH64_MEDIA_INSN_FLOATLS
, SEM_FN_NAME (sh64_media
,floatls
) },
5778 { SH64_MEDIA_INSN_FLOATQD
, SEM_FN_NAME (sh64_media
,floatqd
) },
5779 { SH64_MEDIA_INSN_FLOATQS
, SEM_FN_NAME (sh64_media
,floatqs
) },
5780 { SH64_MEDIA_INSN_FMACS
, SEM_FN_NAME (sh64_media
,fmacs
) },
5781 { SH64_MEDIA_INSN_FMOVD
, SEM_FN_NAME (sh64_media
,fmovd
) },
5782 { SH64_MEDIA_INSN_FMOVDQ
, SEM_FN_NAME (sh64_media
,fmovdq
) },
5783 { SH64_MEDIA_INSN_FMOVLS
, SEM_FN_NAME (sh64_media
,fmovls
) },
5784 { SH64_MEDIA_INSN_FMOVQD
, SEM_FN_NAME (sh64_media
,fmovqd
) },
5785 { SH64_MEDIA_INSN_FMOVS
, SEM_FN_NAME (sh64_media
,fmovs
) },
5786 { SH64_MEDIA_INSN_FMOVSL
, SEM_FN_NAME (sh64_media
,fmovsl
) },
5787 { SH64_MEDIA_INSN_FMULD
, SEM_FN_NAME (sh64_media
,fmuld
) },
5788 { SH64_MEDIA_INSN_FMULS
, SEM_FN_NAME (sh64_media
,fmuls
) },
5789 { SH64_MEDIA_INSN_FNEGD
, SEM_FN_NAME (sh64_media
,fnegd
) },
5790 { SH64_MEDIA_INSN_FNEGS
, SEM_FN_NAME (sh64_media
,fnegs
) },
5791 { SH64_MEDIA_INSN_FPUTSCR
, SEM_FN_NAME (sh64_media
,fputscr
) },
5792 { SH64_MEDIA_INSN_FSQRTD
, SEM_FN_NAME (sh64_media
,fsqrtd
) },
5793 { SH64_MEDIA_INSN_FSQRTS
, SEM_FN_NAME (sh64_media
,fsqrts
) },
5794 { SH64_MEDIA_INSN_FSTD
, SEM_FN_NAME (sh64_media
,fstd
) },
5795 { SH64_MEDIA_INSN_FSTP
, SEM_FN_NAME (sh64_media
,fstp
) },
5796 { SH64_MEDIA_INSN_FSTS
, SEM_FN_NAME (sh64_media
,fsts
) },
5797 { SH64_MEDIA_INSN_FSTXD
, SEM_FN_NAME (sh64_media
,fstxd
) },
5798 { SH64_MEDIA_INSN_FSTXP
, SEM_FN_NAME (sh64_media
,fstxp
) },
5799 { SH64_MEDIA_INSN_FSTXS
, SEM_FN_NAME (sh64_media
,fstxs
) },
5800 { SH64_MEDIA_INSN_FSUBD
, SEM_FN_NAME (sh64_media
,fsubd
) },
5801 { SH64_MEDIA_INSN_FSUBS
, SEM_FN_NAME (sh64_media
,fsubs
) },
5802 { SH64_MEDIA_INSN_FTRCDL
, SEM_FN_NAME (sh64_media
,ftrcdl
) },
5803 { SH64_MEDIA_INSN_FTRCSL
, SEM_FN_NAME (sh64_media
,ftrcsl
) },
5804 { SH64_MEDIA_INSN_FTRCDQ
, SEM_FN_NAME (sh64_media
,ftrcdq
) },
5805 { SH64_MEDIA_INSN_FTRCSQ
, SEM_FN_NAME (sh64_media
,ftrcsq
) },
5806 { SH64_MEDIA_INSN_FTRVS
, SEM_FN_NAME (sh64_media
,ftrvs
) },
5807 { SH64_MEDIA_INSN_GETCFG
, SEM_FN_NAME (sh64_media
,getcfg
) },
5808 { SH64_MEDIA_INSN_GETCON
, SEM_FN_NAME (sh64_media
,getcon
) },
5809 { SH64_MEDIA_INSN_GETTR
, SEM_FN_NAME (sh64_media
,gettr
) },
5810 { SH64_MEDIA_INSN_ICBI
, SEM_FN_NAME (sh64_media
,icbi
) },
5811 { SH64_MEDIA_INSN_LDB
, SEM_FN_NAME (sh64_media
,ldb
) },
5812 { SH64_MEDIA_INSN_LDL
, SEM_FN_NAME (sh64_media
,ldl
) },
5813 { SH64_MEDIA_INSN_LDQ
, SEM_FN_NAME (sh64_media
,ldq
) },
5814 { SH64_MEDIA_INSN_LDUB
, SEM_FN_NAME (sh64_media
,ldub
) },
5815 { SH64_MEDIA_INSN_LDUW
, SEM_FN_NAME (sh64_media
,lduw
) },
5816 { SH64_MEDIA_INSN_LDW
, SEM_FN_NAME (sh64_media
,ldw
) },
5817 { SH64_MEDIA_INSN_LDHIL
, SEM_FN_NAME (sh64_media
,ldhil
) },
5818 { SH64_MEDIA_INSN_LDHIQ
, SEM_FN_NAME (sh64_media
,ldhiq
) },
5819 { SH64_MEDIA_INSN_LDLOL
, SEM_FN_NAME (sh64_media
,ldlol
) },
5820 { SH64_MEDIA_INSN_LDLOQ
, SEM_FN_NAME (sh64_media
,ldloq
) },
5821 { SH64_MEDIA_INSN_LDXB
, SEM_FN_NAME (sh64_media
,ldxb
) },
5822 { SH64_MEDIA_INSN_LDXL
, SEM_FN_NAME (sh64_media
,ldxl
) },
5823 { SH64_MEDIA_INSN_LDXQ
, SEM_FN_NAME (sh64_media
,ldxq
) },
5824 { SH64_MEDIA_INSN_LDXUB
, SEM_FN_NAME (sh64_media
,ldxub
) },
5825 { SH64_MEDIA_INSN_LDXUW
, SEM_FN_NAME (sh64_media
,ldxuw
) },
5826 { SH64_MEDIA_INSN_LDXW
, SEM_FN_NAME (sh64_media
,ldxw
) },
5827 { SH64_MEDIA_INSN_MABSL
, SEM_FN_NAME (sh64_media
,mabsl
) },
5828 { SH64_MEDIA_INSN_MABSW
, SEM_FN_NAME (sh64_media
,mabsw
) },
5829 { SH64_MEDIA_INSN_MADDL
, SEM_FN_NAME (sh64_media
,maddl
) },
5830 { SH64_MEDIA_INSN_MADDW
, SEM_FN_NAME (sh64_media
,maddw
) },
5831 { SH64_MEDIA_INSN_MADDSL
, SEM_FN_NAME (sh64_media
,maddsl
) },
5832 { SH64_MEDIA_INSN_MADDSUB
, SEM_FN_NAME (sh64_media
,maddsub
) },
5833 { SH64_MEDIA_INSN_MADDSW
, SEM_FN_NAME (sh64_media
,maddsw
) },
5834 { SH64_MEDIA_INSN_MCMPEQB
, SEM_FN_NAME (sh64_media
,mcmpeqb
) },
5835 { SH64_MEDIA_INSN_MCMPEQL
, SEM_FN_NAME (sh64_media
,mcmpeql
) },
5836 { SH64_MEDIA_INSN_MCMPEQW
, SEM_FN_NAME (sh64_media
,mcmpeqw
) },
5837 { SH64_MEDIA_INSN_MCMPGTL
, SEM_FN_NAME (sh64_media
,mcmpgtl
) },
5838 { SH64_MEDIA_INSN_MCMPGTUB
, SEM_FN_NAME (sh64_media
,mcmpgtub
) },
5839 { SH64_MEDIA_INSN_MCMPGTW
, SEM_FN_NAME (sh64_media
,mcmpgtw
) },
5840 { SH64_MEDIA_INSN_MCMV
, SEM_FN_NAME (sh64_media
,mcmv
) },
5841 { SH64_MEDIA_INSN_MCNVSLW
, SEM_FN_NAME (sh64_media
,mcnvslw
) },
5842 { SH64_MEDIA_INSN_MCNVSWB
, SEM_FN_NAME (sh64_media
,mcnvswb
) },
5843 { SH64_MEDIA_INSN_MCNVSWUB
, SEM_FN_NAME (sh64_media
,mcnvswub
) },
5844 { SH64_MEDIA_INSN_MEXTR1
, SEM_FN_NAME (sh64_media
,mextr1
) },
5845 { SH64_MEDIA_INSN_MEXTR2
, SEM_FN_NAME (sh64_media
,mextr2
) },
5846 { SH64_MEDIA_INSN_MEXTR3
, SEM_FN_NAME (sh64_media
,mextr3
) },
5847 { SH64_MEDIA_INSN_MEXTR4
, SEM_FN_NAME (sh64_media
,mextr4
) },
5848 { SH64_MEDIA_INSN_MEXTR5
, SEM_FN_NAME (sh64_media
,mextr5
) },
5849 { SH64_MEDIA_INSN_MEXTR6
, SEM_FN_NAME (sh64_media
,mextr6
) },
5850 { SH64_MEDIA_INSN_MEXTR7
, SEM_FN_NAME (sh64_media
,mextr7
) },
5851 { SH64_MEDIA_INSN_MMACFXWL
, SEM_FN_NAME (sh64_media
,mmacfxwl
) },
5852 { SH64_MEDIA_INSN_MMACNFX_WL
, SEM_FN_NAME (sh64_media
,mmacnfx_wl
) },
5853 { SH64_MEDIA_INSN_MMULL
, SEM_FN_NAME (sh64_media
,mmull
) },
5854 { SH64_MEDIA_INSN_MMULW
, SEM_FN_NAME (sh64_media
,mmulw
) },
5855 { SH64_MEDIA_INSN_MMULFXL
, SEM_FN_NAME (sh64_media
,mmulfxl
) },
5856 { SH64_MEDIA_INSN_MMULFXW
, SEM_FN_NAME (sh64_media
,mmulfxw
) },
5857 { SH64_MEDIA_INSN_MMULFXRPW
, SEM_FN_NAME (sh64_media
,mmulfxrpw
) },
5858 { SH64_MEDIA_INSN_MMULHIWL
, SEM_FN_NAME (sh64_media
,mmulhiwl
) },
5859 { SH64_MEDIA_INSN_MMULLOWL
, SEM_FN_NAME (sh64_media
,mmullowl
) },
5860 { SH64_MEDIA_INSN_MMULSUMWQ
, SEM_FN_NAME (sh64_media
,mmulsumwq
) },
5861 { SH64_MEDIA_INSN_MOVI
, SEM_FN_NAME (sh64_media
,movi
) },
5862 { SH64_MEDIA_INSN_MPERMW
, SEM_FN_NAME (sh64_media
,mpermw
) },
5863 { SH64_MEDIA_INSN_MSADUBQ
, SEM_FN_NAME (sh64_media
,msadubq
) },
5864 { SH64_MEDIA_INSN_MSHALDSL
, SEM_FN_NAME (sh64_media
,mshaldsl
) },
5865 { SH64_MEDIA_INSN_MSHALDSW
, SEM_FN_NAME (sh64_media
,mshaldsw
) },
5866 { SH64_MEDIA_INSN_MSHARDL
, SEM_FN_NAME (sh64_media
,mshardl
) },
5867 { SH64_MEDIA_INSN_MSHARDW
, SEM_FN_NAME (sh64_media
,mshardw
) },
5868 { SH64_MEDIA_INSN_MSHARDSQ
, SEM_FN_NAME (sh64_media
,mshardsq
) },
5869 { SH64_MEDIA_INSN_MSHFHIB
, SEM_FN_NAME (sh64_media
,mshfhib
) },
5870 { SH64_MEDIA_INSN_MSHFHIL
, SEM_FN_NAME (sh64_media
,mshfhil
) },
5871 { SH64_MEDIA_INSN_MSHFHIW
, SEM_FN_NAME (sh64_media
,mshfhiw
) },
5872 { SH64_MEDIA_INSN_MSHFLOB
, SEM_FN_NAME (sh64_media
,mshflob
) },
5873 { SH64_MEDIA_INSN_MSHFLOL
, SEM_FN_NAME (sh64_media
,mshflol
) },
5874 { SH64_MEDIA_INSN_MSHFLOW
, SEM_FN_NAME (sh64_media
,mshflow
) },
5875 { SH64_MEDIA_INSN_MSHLLDL
, SEM_FN_NAME (sh64_media
,mshlldl
) },
5876 { SH64_MEDIA_INSN_MSHLLDW
, SEM_FN_NAME (sh64_media
,mshlldw
) },
5877 { SH64_MEDIA_INSN_MSHLRDL
, SEM_FN_NAME (sh64_media
,mshlrdl
) },
5878 { SH64_MEDIA_INSN_MSHLRDW
, SEM_FN_NAME (sh64_media
,mshlrdw
) },
5879 { SH64_MEDIA_INSN_MSUBL
, SEM_FN_NAME (sh64_media
,msubl
) },
5880 { SH64_MEDIA_INSN_MSUBW
, SEM_FN_NAME (sh64_media
,msubw
) },
5881 { SH64_MEDIA_INSN_MSUBSL
, SEM_FN_NAME (sh64_media
,msubsl
) },
5882 { SH64_MEDIA_INSN_MSUBSUB
, SEM_FN_NAME (sh64_media
,msubsub
) },
5883 { SH64_MEDIA_INSN_MSUBSW
, SEM_FN_NAME (sh64_media
,msubsw
) },
5884 { SH64_MEDIA_INSN_MULSL
, SEM_FN_NAME (sh64_media
,mulsl
) },
5885 { SH64_MEDIA_INSN_MULUL
, SEM_FN_NAME (sh64_media
,mulul
) },
5886 { SH64_MEDIA_INSN_NOP
, SEM_FN_NAME (sh64_media
,nop
) },
5887 { SH64_MEDIA_INSN_NSB
, SEM_FN_NAME (sh64_media
,nsb
) },
5888 { SH64_MEDIA_INSN_OCBI
, SEM_FN_NAME (sh64_media
,ocbi
) },
5889 { SH64_MEDIA_INSN_OCBP
, SEM_FN_NAME (sh64_media
,ocbp
) },
5890 { SH64_MEDIA_INSN_OCBWB
, SEM_FN_NAME (sh64_media
,ocbwb
) },
5891 { SH64_MEDIA_INSN_OR
, SEM_FN_NAME (sh64_media
,or) },
5892 { SH64_MEDIA_INSN_ORI
, SEM_FN_NAME (sh64_media
,ori
) },
5893 { SH64_MEDIA_INSN_PREFI
, SEM_FN_NAME (sh64_media
,prefi
) },
5894 { SH64_MEDIA_INSN_PTA
, SEM_FN_NAME (sh64_media
,pta
) },
5895 { SH64_MEDIA_INSN_PTABS
, SEM_FN_NAME (sh64_media
,ptabs
) },
5896 { SH64_MEDIA_INSN_PTB
, SEM_FN_NAME (sh64_media
,ptb
) },
5897 { SH64_MEDIA_INSN_PTREL
, SEM_FN_NAME (sh64_media
,ptrel
) },
5898 { SH64_MEDIA_INSN_PUTCFG
, SEM_FN_NAME (sh64_media
,putcfg
) },
5899 { SH64_MEDIA_INSN_PUTCON
, SEM_FN_NAME (sh64_media
,putcon
) },
5900 { SH64_MEDIA_INSN_RTE
, SEM_FN_NAME (sh64_media
,rte
) },
5901 { SH64_MEDIA_INSN_SHARD
, SEM_FN_NAME (sh64_media
,shard
) },
5902 { SH64_MEDIA_INSN_SHARDL
, SEM_FN_NAME (sh64_media
,shardl
) },
5903 { SH64_MEDIA_INSN_SHARI
, SEM_FN_NAME (sh64_media
,shari
) },
5904 { SH64_MEDIA_INSN_SHARIL
, SEM_FN_NAME (sh64_media
,sharil
) },
5905 { SH64_MEDIA_INSN_SHLLD
, SEM_FN_NAME (sh64_media
,shlld
) },
5906 { SH64_MEDIA_INSN_SHLLDL
, SEM_FN_NAME (sh64_media
,shlldl
) },
5907 { SH64_MEDIA_INSN_SHLLI
, SEM_FN_NAME (sh64_media
,shlli
) },
5908 { SH64_MEDIA_INSN_SHLLIL
, SEM_FN_NAME (sh64_media
,shllil
) },
5909 { SH64_MEDIA_INSN_SHLRD
, SEM_FN_NAME (sh64_media
,shlrd
) },
5910 { SH64_MEDIA_INSN_SHLRDL
, SEM_FN_NAME (sh64_media
,shlrdl
) },
5911 { SH64_MEDIA_INSN_SHLRI
, SEM_FN_NAME (sh64_media
,shlri
) },
5912 { SH64_MEDIA_INSN_SHLRIL
, SEM_FN_NAME (sh64_media
,shlril
) },
5913 { SH64_MEDIA_INSN_SHORI
, SEM_FN_NAME (sh64_media
,shori
) },
5914 { SH64_MEDIA_INSN_SLEEP
, SEM_FN_NAME (sh64_media
,sleep
) },
5915 { SH64_MEDIA_INSN_STB
, SEM_FN_NAME (sh64_media
,stb
) },
5916 { SH64_MEDIA_INSN_STL
, SEM_FN_NAME (sh64_media
,stl
) },
5917 { SH64_MEDIA_INSN_STQ
, SEM_FN_NAME (sh64_media
,stq
) },
5918 { SH64_MEDIA_INSN_STW
, SEM_FN_NAME (sh64_media
,stw
) },
5919 { SH64_MEDIA_INSN_STHIL
, SEM_FN_NAME (sh64_media
,sthil
) },
5920 { SH64_MEDIA_INSN_STHIQ
, SEM_FN_NAME (sh64_media
,sthiq
) },
5921 { SH64_MEDIA_INSN_STLOL
, SEM_FN_NAME (sh64_media
,stlol
) },
5922 { SH64_MEDIA_INSN_STLOQ
, SEM_FN_NAME (sh64_media
,stloq
) },
5923 { SH64_MEDIA_INSN_STXB
, SEM_FN_NAME (sh64_media
,stxb
) },
5924 { SH64_MEDIA_INSN_STXL
, SEM_FN_NAME (sh64_media
,stxl
) },
5925 { SH64_MEDIA_INSN_STXQ
, SEM_FN_NAME (sh64_media
,stxq
) },
5926 { SH64_MEDIA_INSN_STXW
, SEM_FN_NAME (sh64_media
,stxw
) },
5927 { SH64_MEDIA_INSN_SUB
, SEM_FN_NAME (sh64_media
,sub
) },
5928 { SH64_MEDIA_INSN_SUBL
, SEM_FN_NAME (sh64_media
,subl
) },
5929 { SH64_MEDIA_INSN_SWAPQ
, SEM_FN_NAME (sh64_media
,swapq
) },
5930 { SH64_MEDIA_INSN_SYNCI
, SEM_FN_NAME (sh64_media
,synci
) },
5931 { SH64_MEDIA_INSN_SYNCO
, SEM_FN_NAME (sh64_media
,synco
) },
5932 { SH64_MEDIA_INSN_TRAPA
, SEM_FN_NAME (sh64_media
,trapa
) },
5933 { SH64_MEDIA_INSN_XOR
, SEM_FN_NAME (sh64_media
,xor) },
5934 { SH64_MEDIA_INSN_XORI
, SEM_FN_NAME (sh64_media
,xori
) },
5938 /* Add the semantic fns to IDESC_TABLE. */
5941 SEM_FN_NAME (sh64_media
,init_idesc_table
) (SIM_CPU
*current_cpu
)
5943 IDESC
*idesc_table
= CPU_IDESC (current_cpu
);
5944 const struct sem_fn_desc
*sf
;
5945 int mach_num
= MACH_NUM (CPU_MACH (current_cpu
));
5947 for (sf
= &sem_fns
[0]; sf
->fn
!= 0; ++sf
)
5949 const CGEN_INSN
*insn
= idesc_table
[sf
->index
].idata
;
5950 int valid_p
= (CGEN_INSN_VIRTUAL_P (insn
)
5951 || CGEN_INSN_MACH_HAS_P (insn
, mach_num
));
5954 idesc_table
[sf
->index
].sem_fast
= sf
->fn
;
5956 idesc_table
[sf
->index
].sem_fast
= SEM_FN_NAME (sh64_media
,x_invalid
);
5959 idesc_table
[sf
->index
].sem_full
= sf
->fn
;
5961 idesc_table
[sf
->index
].sem_full
= SEM_FN_NAME (sh64_media
,x_invalid
);