1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998, 1999, 2000 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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "drf", '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, "frf", '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, "drf", '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, "frf", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "frf", '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, "drf", '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, "drf", '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, "frf", '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, "frf", '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, "drf", '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", '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-add--DFLT-f-1", '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, "frf", '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, "drf", '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", '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-add--DFLT-f-1", '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, "frf", '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, "drf", '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, "frf", '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, "drf", '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, "frf", '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, "frf", '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, "drf", '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, "rd", '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, "frf", '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, "drf", '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, "frf", '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, "rd", '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, "drf", '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, "frf", '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, "drf", '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, "frf", '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, "drf", '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, "frf", '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, "drf", '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, "frf", '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, "frf", '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, "frf", '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, "drf", '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, "drf", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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, "rd", '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.fmt_empty.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);
2233 /* ldhiq: ldhi.q $rm, $disp6, $rd */
2236 SEM_FN_NAME (sh64_media,ldhiq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2238 #define FLD(f) abuf->fields.fmt_empty.f
2239 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2240 int UNUSED written = 0;
2241 IADDR UNUSED pc = abuf->addr;
2242 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2250 /* ldlol: ldlo.l $rm, $disp6, $rd */
2253 SEM_FN_NAME (sh64_media,ldlol) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2255 #define FLD(f) abuf->fields.fmt_empty.f
2256 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2257 int UNUSED written = 0;
2258 IADDR UNUSED pc = abuf->addr;
2259 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2267 /* ldloq: ldlo.q $rm, $disp6, $rd */
2270 SEM_FN_NAME (sh64_media,ldloq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2272 #define FLD(f) abuf->fields.fmt_empty.f
2273 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2274 int UNUSED written = 0;
2275 IADDR UNUSED pc = abuf->addr;
2276 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2284 /* ldxb: ldx.b $rm, $rn, $rd */
2287 SEM_FN_NAME (sh64_media,ldxb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2289 #define FLD(f) abuf->fields.sfmt_add.f
2290 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2291 int UNUSED written = 0;
2292 IADDR UNUSED pc = abuf->addr;
2293 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2296 DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2297 SET_H_GR (FLD (f_dest), opval);
2298 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2305 /* ldxl: ldx.l $rm, $rn, $rd */
2308 SEM_FN_NAME (sh64_media,ldxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2310 #define FLD(f) abuf->fields.sfmt_add.f
2311 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2312 int UNUSED written = 0;
2313 IADDR UNUSED pc = abuf->addr;
2314 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2317 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2318 SET_H_GR (FLD (f_dest), opval);
2319 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2326 /* ldxq: ldx.q $rm, $rn, $rd */
2329 SEM_FN_NAME (sh64_media,ldxq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2331 #define FLD(f) abuf->fields.sfmt_add.f
2332 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2333 int UNUSED written = 0;
2334 IADDR UNUSED pc = abuf->addr;
2335 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2338 DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))));
2339 SET_H_GR (FLD (f_dest), opval);
2340 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2347 /* ldxub: ldx.ub $rm, $rn, $rd */
2350 SEM_FN_NAME (sh64_media,ldxub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2352 #define FLD(f) abuf->fields.sfmt_add.f
2353 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2354 int UNUSED written = 0;
2355 IADDR UNUSED pc = abuf->addr;
2356 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2359 DI opval = ZEXTQIDI (GETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2360 SET_H_GR (FLD (f_dest), opval);
2361 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2368 /* ldxuw: ldx.uw $rm, $rn, $rd */
2371 SEM_FN_NAME (sh64_media,ldxuw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2373 #define FLD(f) abuf->fields.sfmt_add.f
2374 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2375 int UNUSED written = 0;
2376 IADDR UNUSED pc = abuf->addr;
2377 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2380 DI opval = ZEXTHIDI (GETMEMUHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2381 SET_H_GR (FLD (f_dest), opval);
2382 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2389 /* ldxw: ldx.w $rm, $rn, $rd */
2392 SEM_FN_NAME (sh64_media,ldxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2394 #define FLD(f) abuf->fields.sfmt_add.f
2395 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2396 int UNUSED written = 0;
2397 IADDR UNUSED pc = abuf->addr;
2398 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2401 DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2402 SET_H_GR (FLD (f_dest), opval);
2403 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2410 /* mabsl: mabs.l $rm, $rd */
2413 SEM_FN_NAME (sh64_media,mabsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2415 #define FLD(f) abuf->fields.sfmt_xori.f
2416 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2417 int UNUSED written = 0;
2418 IADDR UNUSED pc = abuf->addr;
2419 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2424 tmp_result0 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1));
2425 tmp_result1 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0));
2427 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2428 SET_H_GR (FLD (f_dest), opval);
2429 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2437 /* mabsw: mabs.w $rm, $rd */
2440 SEM_FN_NAME (sh64_media,mabsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2442 #define FLD(f) abuf->fields.sfmt_xori.f
2443 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2444 int UNUSED written = 0;
2445 IADDR UNUSED pc = abuf->addr;
2446 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2453 tmp_result0 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3));
2454 tmp_result1 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2));
2455 tmp_result2 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1));
2456 tmp_result3 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0));
2458 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2459 SET_H_GR (FLD (f_dest), opval);
2460 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2468 /* maddl: madd.l $rm, $rn, $rd */
2471 SEM_FN_NAME (sh64_media,maddl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2473 #define FLD(f) abuf->fields.sfmt_add.f
2474 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2475 int UNUSED written = 0;
2476 IADDR UNUSED pc = abuf->addr;
2477 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2482 tmp_result0 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
2483 tmp_result1 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
2485 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2486 SET_H_GR (FLD (f_dest), opval);
2487 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2495 /* maddw: madd.w $rm, $rn, $rd */
2498 SEM_FN_NAME (sh64_media,maddw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2500 #define FLD(f) abuf->fields.sfmt_add.f
2501 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2502 int UNUSED written = 0;
2503 IADDR UNUSED pc = abuf->addr;
2504 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2511 tmp_result0 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
2512 tmp_result1 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
2513 tmp_result2 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
2514 tmp_result3 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
2516 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2517 SET_H_GR (FLD (f_dest), opval);
2518 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2526 /* maddsl: madds.l $rm, $rn, $rd */
2529 SEM_FN_NAME (sh64_media,maddsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2531 #define FLD(f) abuf->fields.sfmt_add.f
2532 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2533 int UNUSED written = 0;
2534 IADDR UNUSED pc = abuf->addr;
2535 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2540 tmp_result0 = ((LTSI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)), SLLSI (1, SUBSI (32, 1)))) ? (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2541 tmp_result1 = ((LTSI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)), SLLSI (1, SUBSI (32, 1)))) ? (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2543 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2544 SET_H_GR (FLD (f_dest), opval);
2545 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2553 /* maddsub: madds.ub $rm, $rn, $rd */
2556 SEM_FN_NAME (sh64_media,maddsub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2558 #define FLD(f) abuf->fields.sfmt_add.f
2559 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2560 int UNUSED written = 0;
2561 IADDR UNUSED pc = abuf->addr;
2562 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2573 tmp_result0 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) : (SUBQI (SLLQI (1, 8), 1)))));
2574 tmp_result1 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) : (SUBQI (SLLQI (1, 8), 1)))));
2575 tmp_result2 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) : (SUBQI (SLLQI (1, 8), 1)))));
2576 tmp_result3 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) : (SUBQI (SLLQI (1, 8), 1)))));
2577 tmp_result4 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) : (SUBQI (SLLQI (1, 8), 1)))));
2578 tmp_result5 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) : (SUBQI (SLLQI (1, 8), 1)))));
2579 tmp_result6 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) : (SUBQI (SLLQI (1, 8), 1)))));
2580 tmp_result7 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) : (SUBQI (SLLQI (1, 8), 1)))));
2582 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))))))));
2583 SET_H_GR (FLD (f_dest), opval);
2584 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2592 /* maddsw: madds.w $rm, $rn, $rd */
2595 SEM_FN_NAME (sh64_media,maddsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2597 #define FLD(f) abuf->fields.sfmt_add.f
2598 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2599 int UNUSED written = 0;
2600 IADDR UNUSED pc = abuf->addr;
2601 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2608 tmp_result0 = ((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)), SLLHI (1, SUBSI (16, 1)))) ? (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2609 tmp_result1 = ((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)), SLLHI (1, SUBSI (16, 1)))) ? (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2610 tmp_result2 = ((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)), SLLHI (1, SUBSI (16, 1)))) ? (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2611 tmp_result3 = ((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)), SLLHI (1, SUBSI (16, 1)))) ? (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2613 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2614 SET_H_GR (FLD (f_dest), opval);
2615 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2623 /* mcmpeqb: mcmpeq.b $rm, $rn, $rd */
2626 SEM_FN_NAME (sh64_media,mcmpeqb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2628 #define FLD(f) abuf->fields.sfmt_add.f
2629 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2630 int UNUSED written = 0;
2631 IADDR UNUSED pc = abuf->addr;
2632 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2643 tmp_result0 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0));
2644 tmp_result1 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0));
2645 tmp_result2 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0));
2646 tmp_result3 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0));
2647 tmp_result4 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0));
2648 tmp_result5 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0));
2649 tmp_result6 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0));
2650 tmp_result7 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0));
2652 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))))))));
2653 SET_H_GR (FLD (f_dest), opval);
2654 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2662 /* mcmpeql: mcmpeq.l $rm, $rn, $rd */
2665 SEM_FN_NAME (sh64_media,mcmpeql) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2667 #define FLD(f) abuf->fields.sfmt_add.f
2668 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2669 int UNUSED written = 0;
2670 IADDR UNUSED pc = abuf->addr;
2671 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2676 tmp_result0 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0));
2677 tmp_result1 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0));
2679 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2680 SET_H_GR (FLD (f_dest), opval);
2681 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2689 /* mcmpeqw: mcmpeq.w $rm, $rn, $rd */
2692 SEM_FN_NAME (sh64_media,mcmpeqw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2694 #define FLD(f) abuf->fields.sfmt_add.f
2695 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2696 int UNUSED written = 0;
2697 IADDR UNUSED pc = abuf->addr;
2698 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2705 tmp_result0 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0));
2706 tmp_result1 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0));
2707 tmp_result2 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0));
2708 tmp_result3 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0));
2710 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2711 SET_H_GR (FLD (f_dest), opval);
2712 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2720 /* mcmpgtl: mcmpgt.l $rm, $rn, $rd */
2723 SEM_FN_NAME (sh64_media,mcmpgtl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2725 #define FLD(f) abuf->fields.sfmt_add.f
2726 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2727 int UNUSED written = 0;
2728 IADDR UNUSED pc = abuf->addr;
2729 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2734 tmp_result0 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0));
2735 tmp_result1 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0));
2737 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2738 SET_H_GR (FLD (f_dest), opval);
2739 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2747 /* mcmpgtub: mcmpgt.ub $rm, $rn, $rd */
2750 SEM_FN_NAME (sh64_media,mcmpgtub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2752 #define FLD(f) abuf->fields.sfmt_add.f
2753 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2754 int UNUSED written = 0;
2755 IADDR UNUSED pc = abuf->addr;
2756 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2767 tmp_result0 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0));
2768 tmp_result1 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0));
2769 tmp_result2 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0));
2770 tmp_result3 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0));
2771 tmp_result4 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0));
2772 tmp_result5 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0));
2773 tmp_result6 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0));
2774 tmp_result7 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0));
2776 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))))))));
2777 SET_H_GR (FLD (f_dest), opval);
2778 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2786 /* mcmpgtw: mcmpgt.w $rm, $rn, $rd */
2789 SEM_FN_NAME (sh64_media,mcmpgtw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2791 #define FLD(f) abuf->fields.sfmt_add.f
2792 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2793 int UNUSED written = 0;
2794 IADDR UNUSED pc = abuf->addr;
2795 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2802 tmp_result0 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0));
2803 tmp_result1 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0));
2804 tmp_result2 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0));
2805 tmp_result3 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0));
2807 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2808 SET_H_GR (FLD (f_dest), opval);
2809 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2817 /* mcmv: mcmv $rm, $rn, $rd */
2820 SEM_FN_NAME (sh64_media,mcmv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2822 #define FLD(f) abuf->fields.sfmt_add.f
2823 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2824 int UNUSED written = 0;
2825 IADDR UNUSED pc = abuf->addr;
2826 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2829 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)))));
2830 SET_H_GR (FLD (f_dest), opval);
2831 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2838 /* mcnvslw: mcnvs.lw $rm, $rn, $rd */
2841 SEM_FN_NAME (sh64_media,mcnvslw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2843 #define FLD(f) abuf->fields.sfmt_add.f
2844 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2845 int UNUSED written = 0;
2846 IADDR UNUSED pc = abuf->addr;
2847 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2854 tmp_result0 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SLLHI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2855 tmp_result1 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SLLHI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2856 tmp_result2 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), SLLHI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2857 tmp_result3 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), SLLHI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2859 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2860 SET_H_GR (FLD (f_dest), opval);
2861 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2869 /* mcnvswb: mcnvs.wb $rm, $rn, $rd */
2872 SEM_FN_NAME (sh64_media,mcnvswb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2874 #define FLD(f) abuf->fields.sfmt_add.f
2875 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2876 int UNUSED written = 0;
2877 IADDR UNUSED pc = abuf->addr;
2878 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2889 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2890 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2891 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2892 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2893 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2894 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2895 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2896 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2898 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))))))));
2899 SET_H_GR (FLD (f_dest), opval);
2900 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2908 /* mcnvswub: mcnvs.wub $rm, $rn, $rd */
2911 SEM_FN_NAME (sh64_media,mcnvswub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2913 #define FLD(f) abuf->fields.sfmt_add.f
2914 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2915 int UNUSED written = 0;
2916 IADDR UNUSED pc = abuf->addr;
2917 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2928 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
2929 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
2930 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
2931 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
2932 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
2933 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
2934 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
2935 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
2937 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))))))));
2938 SET_H_GR (FLD (f_dest), opval);
2939 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2947 /* mextr1: mextr1 $rm, $rn, $rd */
2950 SEM_FN_NAME (sh64_media,mextr1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2952 #define FLD(f) abuf->fields.sfmt_add.f
2953 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2954 int UNUSED written = 0;
2955 IADDR UNUSED pc = abuf->addr;
2956 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2962 tmp_count = MULQI (8, SUBQI (8, 1));
2963 tmp_mask = SLLDI (INVSI (0), tmp_count);
2964 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
2965 tmp_count = MULQI (8, 1);
2966 tmp_mask = SRLDI (INVSI (0), tmp_count);
2968 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
2969 SET_H_GR (FLD (f_dest), opval);
2970 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2978 /* mextr2: mextr2 $rm, $rn, $rd */
2981 SEM_FN_NAME (sh64_media,mextr2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2983 #define FLD(f) abuf->fields.sfmt_add.f
2984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2985 int UNUSED written = 0;
2986 IADDR UNUSED pc = abuf->addr;
2987 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2993 tmp_count = MULQI (8, SUBQI (8, 2));
2994 tmp_mask = SLLDI (INVSI (0), tmp_count);
2995 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
2996 tmp_count = MULQI (8, 2);
2997 tmp_mask = SRLDI (INVSI (0), tmp_count);
2999 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3000 SET_H_GR (FLD (f_dest), opval);
3001 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3009 /* mextr3: mextr3 $rm, $rn, $rd */
3012 SEM_FN_NAME (sh64_media,mextr3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3014 #define FLD(f) abuf->fields.sfmt_add.f
3015 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3016 int UNUSED written = 0;
3017 IADDR UNUSED pc = abuf->addr;
3018 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3024 tmp_count = MULQI (8, SUBQI (8, 3));
3025 tmp_mask = SLLDI (INVSI (0), tmp_count);
3026 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3027 tmp_count = MULQI (8, 3);
3028 tmp_mask = SRLDI (INVSI (0), tmp_count);
3030 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3031 SET_H_GR (FLD (f_dest), opval);
3032 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3040 /* mextr4: mextr4 $rm, $rn, $rd */
3043 SEM_FN_NAME (sh64_media,mextr4) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3045 #define FLD(f) abuf->fields.sfmt_add.f
3046 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3047 int UNUSED written = 0;
3048 IADDR UNUSED pc = abuf->addr;
3049 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3055 tmp_count = MULQI (8, SUBQI (8, 4));
3056 tmp_mask = SLLDI (INVSI (0), tmp_count);
3057 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3058 tmp_count = MULQI (8, 4);
3059 tmp_mask = SRLDI (INVSI (0), tmp_count);
3061 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3062 SET_H_GR (FLD (f_dest), opval);
3063 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3071 /* mextr5: mextr5 $rm, $rn, $rd */
3074 SEM_FN_NAME (sh64_media,mextr5) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3076 #define FLD(f) abuf->fields.sfmt_add.f
3077 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3078 int UNUSED written = 0;
3079 IADDR UNUSED pc = abuf->addr;
3080 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3086 tmp_count = MULQI (8, SUBQI (8, 5));
3087 tmp_mask = SLLDI (INVSI (0), tmp_count);
3088 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3089 tmp_count = MULQI (8, 5);
3090 tmp_mask = SRLDI (INVSI (0), tmp_count);
3092 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3093 SET_H_GR (FLD (f_dest), opval);
3094 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3102 /* mextr6: mextr6 $rm, $rn, $rd */
3105 SEM_FN_NAME (sh64_media,mextr6) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3107 #define FLD(f) abuf->fields.sfmt_add.f
3108 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3109 int UNUSED written = 0;
3110 IADDR UNUSED pc = abuf->addr;
3111 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3117 tmp_count = MULQI (8, SUBQI (8, 6));
3118 tmp_mask = SLLDI (INVSI (0), tmp_count);
3119 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3120 tmp_count = MULQI (8, 6);
3121 tmp_mask = SRLDI (INVSI (0), tmp_count);
3123 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3124 SET_H_GR (FLD (f_dest), opval);
3125 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3133 /* mextr7: mextr7 $rm, $rn, $rd */
3136 SEM_FN_NAME (sh64_media,mextr7) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3138 #define FLD(f) abuf->fields.sfmt_add.f
3139 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3140 int UNUSED written = 0;
3141 IADDR UNUSED pc = abuf->addr;
3142 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3148 tmp_count = MULQI (8, SUBQI (8, 7));
3149 tmp_mask = SLLDI (INVSI (0), tmp_count);
3150 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3151 tmp_count = MULQI (8, 7);
3152 tmp_mask = SRLDI (INVSI (0), tmp_count);
3154 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3155 SET_H_GR (FLD (f_dest), opval);
3156 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3164 /* mmacfxwl: mmacfx.wl $rm, $rn, $rd */
3167 SEM_FN_NAME (sh64_media,mmacfxwl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3169 #define FLD(f) abuf->fields.sfmt_add.f
3170 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3171 int UNUSED written = 0;
3172 IADDR UNUSED pc = abuf->addr;
3173 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3179 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0);
3180 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
3181 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3182 tmp_temp = ((LTSI (SLLSI (tmp_temp, 1), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (tmp_temp, 1), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3183 tmp_result0 = ((LTSI (ADDSI (tmp_result0, tmp_temp), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (ADDSI (tmp_result0, tmp_temp), SLLSI (1, SUBSI (32, 1)))) ? (ADDSI (tmp_result0, tmp_temp)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3184 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3185 tmp_temp = ((LTSI (SLLSI (tmp_temp, 1), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (tmp_temp, 1), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3186 tmp_result1 = ((LTSI (ADDSI (tmp_result1, tmp_temp), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (ADDSI (tmp_result1, tmp_temp), SLLSI (1, SUBSI (32, 1)))) ? (ADDSI (tmp_result1, tmp_temp)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3188 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3189 SET_H_GR (FLD (f_dest), opval);
3190 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3198 /* mmacnfx.wl: mmacnfx.wl $rm, $rn, $rd */
3201 SEM_FN_NAME (sh64_media,mmacnfx_wl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3203 #define FLD(f) abuf->fields.sfmt_add.f
3204 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3205 int UNUSED written = 0;
3206 IADDR UNUSED pc = abuf->addr;
3207 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3213 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0);
3214 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
3215 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3216 tmp_temp = ((LTSI (SLLSI (tmp_temp, 1), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (tmp_temp, 1), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3217 tmp_result0 = ((LTSI (SUBSI (tmp_result0, tmp_temp), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SUBSI (tmp_result0, tmp_temp), SLLSI (1, SUBSI (32, 1)))) ? (SUBSI (tmp_result0, tmp_temp)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3218 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3219 tmp_temp = ((LTSI (SLLSI (tmp_temp, 1), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (tmp_temp, 1), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3220 tmp_result1 = ((LTSI (SUBSI (tmp_result1, tmp_temp), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SUBSI (tmp_result1, tmp_temp), SLLSI (1, SUBSI (32, 1)))) ? (SUBSI (tmp_result1, tmp_temp)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3222 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3223 SET_H_GR (FLD (f_dest), opval);
3224 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3232 /* mmull: mmul.l $rm, $rn, $rd */
3235 SEM_FN_NAME (sh64_media,mmull) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3237 #define FLD(f) abuf->fields.sfmt_add.f
3238 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3239 int UNUSED written = 0;
3240 IADDR UNUSED pc = abuf->addr;
3241 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3246 tmp_result0 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
3247 tmp_result1 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
3249 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3250 SET_H_GR (FLD (f_dest), opval);
3251 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3259 /* mmulw: mmul.w $rm, $rn, $rd */
3262 SEM_FN_NAME (sh64_media,mmulw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3264 #define FLD(f) abuf->fields.sfmt_add.f
3265 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3266 int UNUSED written = 0;
3267 IADDR UNUSED pc = abuf->addr;
3268 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3275 tmp_result0 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
3276 tmp_result1 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
3277 tmp_result2 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
3278 tmp_result3 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
3280 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3281 SET_H_GR (FLD (f_dest), opval);
3282 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3290 /* mmulfxl: mmulfx.l $rm, $rn, $rd */
3293 SEM_FN_NAME (sh64_media,mmulfxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3295 #define FLD(f) abuf->fields.sfmt_add.f
3296 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3297 int UNUSED written = 0;
3298 IADDR UNUSED pc = abuf->addr;
3299 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3305 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)));
3306 tmp_result0 = ((LTDI (SRADI (tmp_temp, 31), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLSI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3307 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
3308 tmp_result1 = ((LTDI (SRADI (tmp_temp, 31), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLSI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3310 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3311 SET_H_GR (FLD (f_dest), opval);
3312 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3320 /* mmulfxw: mmulfx.w $rm, $rn, $rd */
3323 SEM_FN_NAME (sh64_media,mmulfxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3325 #define FLD(f) abuf->fields.sfmt_add.f
3326 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3327 int UNUSED written = 0;
3328 IADDR UNUSED pc = abuf->addr;
3329 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3337 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3338 tmp_result0 = ((LTSI (SRASI (tmp_temp, 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3339 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3340 tmp_result1 = ((LTSI (SRASI (tmp_temp, 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3341 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3342 tmp_result2 = ((LTSI (SRASI (tmp_temp, 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3343 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3344 tmp_result3 = ((LTSI (SRASI (tmp_temp, 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3346 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3347 SET_H_GR (FLD (f_dest), opval);
3348 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3356 /* mmulfxrpw: mmulfxrp.w $rm, $rn, $rd */
3359 SEM_FN_NAME (sh64_media,mmulfxrpw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3361 #define FLD(f) abuf->fields.sfmt_add.f
3362 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3363 int UNUSED written = 0;
3364 IADDR UNUSED pc = abuf->addr;
3365 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3374 tmp_c = SLLSI (1, 14);
3375 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3376 tmp_result0 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3377 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3378 tmp_result1 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3379 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3380 tmp_result2 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3381 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3382 tmp_result3 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3384 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3385 SET_H_GR (FLD (f_dest), opval);
3386 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3394 /* mmulhiwl: mmulhi.wl $rm, $rn, $rd */
3397 SEM_FN_NAME (sh64_media,mmulhiwl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3399 #define FLD(f) abuf->fields.sfmt_add.f
3400 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3401 int UNUSED written = 0;
3402 IADDR UNUSED pc = abuf->addr;
3403 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3408 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3409 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3411 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3412 SET_H_GR (FLD (f_dest), opval);
3413 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3421 /* mmullowl: mmullo.wl $rm, $rn, $rd */
3424 SEM_FN_NAME (sh64_media,mmullowl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3426 #define FLD(f) abuf->fields.sfmt_add.f
3427 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3428 int UNUSED written = 0;
3429 IADDR UNUSED pc = abuf->addr;
3430 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3435 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3436 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3438 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3439 SET_H_GR (FLD (f_dest), opval);
3440 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3448 /* mmulsumwq: mmulsum.wq $rm, $rn, $rd */
3451 SEM_FN_NAME (sh64_media,mmulsumwq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3453 #define FLD(f) abuf->fields.sfmt_add.f
3454 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3455 int UNUSED written = 0;
3456 IADDR UNUSED pc = abuf->addr;
3457 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3461 tmp_acc = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3462 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))));
3463 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))));
3464 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))));
3466 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc);
3467 SET_H_GR (FLD (f_dest), opval);
3468 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3476 /* movi: movi $imm16, $rd */
3479 SEM_FN_NAME (sh64_media,movi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3481 #define FLD(f) abuf->fields.sfmt_movi.f
3482 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3483 int UNUSED written = 0;
3484 IADDR UNUSED pc = abuf->addr;
3485 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3488 DI opval = EXTSIDI (FLD (f_imm16));
3489 SET_H_GR (FLD (f_dest), opval);
3490 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3497 /* mpermw: mperm.w $rm, $rn, $rd */
3500 SEM_FN_NAME (sh64_media,mpermw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3502 #define FLD(f) abuf->fields.sfmt_add.f
3503 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3504 int UNUSED written = 0;
3505 IADDR UNUSED pc = abuf->addr;
3506 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3514 tmp_control = ANDQI (GET_H_GR (FLD (f_right)), 63);
3515 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (tmp_control, 3)));
3516 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 2), 3)));
3517 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 4), 3)));
3518 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 6), 3)));
3520 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3521 SET_H_GR (FLD (f_dest), opval);
3522 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3530 /* msadubq: msad.ubq $rm, $rn, $rd */
3533 SEM_FN_NAME (sh64_media,msadubq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3535 #define FLD(f) abuf->fields.sfmt_add.f
3536 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3537 int UNUSED written = 0;
3538 IADDR UNUSED pc = abuf->addr;
3539 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3543 tmp_acc = ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)));
3544 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))));
3545 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))));
3546 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))));
3547 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))));
3548 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))));
3549 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))));
3550 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))));
3552 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc);
3553 SET_H_GR (FLD (f_dest), opval);
3554 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3562 /* mshaldsl: mshalds.l $rm, $rn, $rd */
3565 SEM_FN_NAME (sh64_media,mshaldsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3567 #define FLD(f) abuf->fields.sfmt_add.f
3568 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3569 int UNUSED written = 0;
3570 IADDR UNUSED pc = abuf->addr;
3571 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3576 tmp_result0 = ((LTSI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3577 tmp_result1 = ((LTSI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3579 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3580 SET_H_GR (FLD (f_dest), opval);
3581 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3589 /* mshaldsw: mshalds.w $rm, $rn, $rd */
3592 SEM_FN_NAME (sh64_media,mshaldsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3594 #define FLD(f) abuf->fields.sfmt_add.f
3595 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3596 int UNUSED written = 0;
3597 IADDR UNUSED pc = abuf->addr;
3598 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3605 tmp_result0 = ((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLHI (1, SUBSI (16, 1)))) ? (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3606 tmp_result1 = ((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLHI (1, SUBSI (16, 1)))) ? (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3607 tmp_result2 = ((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLHI (1, SUBSI (16, 1)))) ? (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3608 tmp_result3 = ((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLHI (1, SUBSI (16, 1)))) ? (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3610 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3611 SET_H_GR (FLD (f_dest), opval);
3612 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3620 /* mshardl: mshard.l $rm, $rn, $rd */
3623 SEM_FN_NAME (sh64_media,mshardl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3625 #define FLD(f) abuf->fields.sfmt_add.f
3626 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3627 int UNUSED written = 0;
3628 IADDR UNUSED pc = abuf->addr;
3629 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3634 tmp_result0 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
3635 tmp_result1 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
3637 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3638 SET_H_GR (FLD (f_dest), opval);
3639 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3647 /* mshardw: mshard.w $rm, $rn, $rd */
3650 SEM_FN_NAME (sh64_media,mshardw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3652 #define FLD(f) abuf->fields.sfmt_add.f
3653 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3654 int UNUSED written = 0;
3655 IADDR UNUSED pc = abuf->addr;
3656 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3663 tmp_result0 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
3664 tmp_result1 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
3665 tmp_result2 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
3666 tmp_result3 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
3668 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3669 SET_H_GR (FLD (f_dest), opval);
3670 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3678 /* mshardsq: mshards.q $rm, $rn, $rd */
3681 SEM_FN_NAME (sh64_media,mshardsq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3683 #define FLD(f) abuf->fields.sfmt_add.f
3684 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3685 int UNUSED written = 0;
3686 IADDR UNUSED pc = abuf->addr;
3687 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3690 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)))));
3691 SET_H_GR (FLD (f_dest), opval);
3692 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3699 /* mshfhib: mshfhi.b $rm, $rn, $rd */
3702 SEM_FN_NAME (sh64_media,mshfhib) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3704 #define FLD(f) abuf->fields.sfmt_add.f
3705 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3706 int UNUSED written = 0;
3707 IADDR UNUSED pc = abuf->addr;
3708 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3719 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4);
3720 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4);
3721 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5);
3722 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5);
3723 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6);
3724 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6);
3725 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7);
3726 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7);
3728 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))))))));
3729 SET_H_GR (FLD (f_dest), opval);
3730 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3738 /* mshfhil: mshfhi.l $rm, $rn, $rd */
3741 SEM_FN_NAME (sh64_media,mshfhil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3743 #define FLD(f) abuf->fields.sfmt_add.f
3744 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3745 int UNUSED written = 0;
3746 IADDR UNUSED pc = abuf->addr;
3747 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3752 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 1);
3753 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 1);
3755 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3756 SET_H_GR (FLD (f_dest), opval);
3757 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3765 /* mshfhiw: mshfhi.w $rm, $rn, $rd */
3768 SEM_FN_NAME (sh64_media,mshfhiw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3770 #define FLD(f) abuf->fields.sfmt_add.f
3771 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3772 int UNUSED written = 0;
3773 IADDR UNUSED pc = abuf->addr;
3774 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3781 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2);
3782 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2);
3783 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3);
3784 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3);
3786 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3787 SET_H_GR (FLD (f_dest), opval);
3788 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3796 /* mshflob: mshflo.b $rm, $rn, $rd */
3799 SEM_FN_NAME (sh64_media,mshflob) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3801 #define FLD(f) abuf->fields.sfmt_add.f
3802 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3803 int UNUSED written = 0;
3804 IADDR UNUSED pc = abuf->addr;
3805 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3816 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0);
3817 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0);
3818 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1);
3819 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1);
3820 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2);
3821 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2);
3822 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3);
3823 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3);
3825 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))))))));
3826 SET_H_GR (FLD (f_dest), opval);
3827 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3835 /* mshflol: mshflo.l $rm, $rn, $rd */
3838 SEM_FN_NAME (sh64_media,mshflol) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3840 #define FLD(f) abuf->fields.sfmt_add.f
3841 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3842 int UNUSED written = 0;
3843 IADDR UNUSED pc = abuf->addr;
3844 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3849 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 0);
3850 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 0);
3852 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3853 SET_H_GR (FLD (f_dest), opval);
3854 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3862 /* mshflow: mshflo.w $rm, $rn, $rd */
3865 SEM_FN_NAME (sh64_media,mshflow) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3867 #define FLD(f) abuf->fields.sfmt_add.f
3868 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3869 int UNUSED written = 0;
3870 IADDR UNUSED pc = abuf->addr;
3871 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3878 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0);
3879 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0);
3880 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1);
3881 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1);
3883 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3884 SET_H_GR (FLD (f_dest), opval);
3885 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3893 /* mshlldl: mshlld.l $rm, $rn, $rd */
3896 SEM_FN_NAME (sh64_media,mshlldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3898 #define FLD(f) abuf->fields.sfmt_add.f
3899 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3900 int UNUSED written = 0;
3901 IADDR UNUSED pc = abuf->addr;
3902 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3907 tmp_result0 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
3908 tmp_result1 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
3910 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3911 SET_H_GR (FLD (f_dest), opval);
3912 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3920 /* mshlldw: mshlld.w $rm, $rn, $rd */
3923 SEM_FN_NAME (sh64_media,mshlldw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3925 #define FLD(f) abuf->fields.sfmt_add.f
3926 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3927 int UNUSED written = 0;
3928 IADDR UNUSED pc = abuf->addr;
3929 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3936 tmp_result0 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
3937 tmp_result1 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
3938 tmp_result2 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
3939 tmp_result3 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
3941 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3942 SET_H_GR (FLD (f_dest), opval);
3943 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3951 /* mshlrdl: mshlrd.l $rm, $rn, $rd */
3954 SEM_FN_NAME (sh64_media,mshlrdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3956 #define FLD(f) abuf->fields.sfmt_add.f
3957 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3958 int UNUSED written = 0;
3959 IADDR UNUSED pc = abuf->addr;
3960 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3965 tmp_result0 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
3966 tmp_result1 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
3968 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3969 SET_H_GR (FLD (f_dest), opval);
3970 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3978 /* mshlrdw: mshlrd.w $rm, $rn, $rd */
3981 SEM_FN_NAME (sh64_media,mshlrdw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3983 #define FLD(f) abuf->fields.sfmt_add.f
3984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3985 int UNUSED written = 0;
3986 IADDR UNUSED pc = abuf->addr;
3987 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3994 tmp_result0 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
3995 tmp_result1 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
3996 tmp_result2 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
3997 tmp_result3 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
3999 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4000 SET_H_GR (FLD (f_dest), opval);
4001 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4009 /* msubl: msub.l $rm, $rn, $rd */
4012 SEM_FN_NAME (sh64_media,msubl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4014 #define FLD(f) abuf->fields.sfmt_add.f
4015 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4016 int UNUSED written = 0;
4017 IADDR UNUSED pc = abuf->addr;
4018 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4023 tmp_result0 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
4024 tmp_result1 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
4026 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4027 SET_H_GR (FLD (f_dest), opval);
4028 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4036 /* msubw: msub.w $rm, $rn, $rd */
4039 SEM_FN_NAME (sh64_media,msubw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4041 #define FLD(f) abuf->fields.sfmt_add.f
4042 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4043 int UNUSED written = 0;
4044 IADDR UNUSED pc = abuf->addr;
4045 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4052 tmp_result0 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
4053 tmp_result1 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
4054 tmp_result2 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
4055 tmp_result3 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
4057 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4058 SET_H_GR (FLD (f_dest), opval);
4059 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4067 /* msubsl: msubs.l $rm, $rn, $rd */
4070 SEM_FN_NAME (sh64_media,msubsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4072 #define FLD(f) abuf->fields.sfmt_add.f
4073 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4074 int UNUSED written = 0;
4075 IADDR UNUSED pc = abuf->addr;
4076 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4081 tmp_result0 = ((LTSI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)), SLLSI (1, SUBSI (32, 1)))) ? (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4082 tmp_result1 = ((LTSI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)), SLLSI (1, SUBSI (32, 1)))) ? (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4084 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4085 SET_H_GR (FLD (f_dest), opval);
4086 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4094 /* msubsub: msubs.ub $rm, $rn, $rd */
4097 SEM_FN_NAME (sh64_media,msubsub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4099 #define FLD(f) abuf->fields.sfmt_add.f
4100 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4101 int UNUSED written = 0;
4102 IADDR UNUSED pc = abuf->addr;
4103 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4114 tmp_result0 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) : (SUBQI (SLLQI (1, 8), 1)))));
4115 tmp_result1 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) : (SUBQI (SLLQI (1, 8), 1)))));
4116 tmp_result2 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) : (SUBQI (SLLQI (1, 8), 1)))));
4117 tmp_result3 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) : (SUBQI (SLLQI (1, 8), 1)))));
4118 tmp_result4 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) : (SUBQI (SLLQI (1, 8), 1)))));
4119 tmp_result5 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) : (SUBQI (SLLQI (1, 8), 1)))));
4120 tmp_result6 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) : (SUBQI (SLLQI (1, 8), 1)))));
4121 tmp_result7 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) : (SUBQI (SLLQI (1, 8), 1)))));
4123 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))))))));
4124 SET_H_GR (FLD (f_dest), opval);
4125 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4133 /* msubsw: msubs.w $rm, $rn, $rd */
4136 SEM_FN_NAME (sh64_media,msubsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4138 #define FLD(f) abuf->fields.sfmt_add.f
4139 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4140 int UNUSED written = 0;
4141 IADDR UNUSED pc = abuf->addr;
4142 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4153 tmp_result0 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4154 tmp_result1 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4155 tmp_result2 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4156 tmp_result3 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4157 tmp_result4 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4158 tmp_result5 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4159 tmp_result6 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4160 tmp_result7 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4162 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))))))));
4163 SET_H_GR (FLD (f_dest), opval);
4164 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4172 /* mulsl: muls.l $rm, $rn, $rd */
4175 SEM_FN_NAME (sh64_media,mulsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4177 #define FLD(f) abuf->fields.sfmt_add.f
4178 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4179 int UNUSED written = 0;
4180 IADDR UNUSED pc = abuf->addr;
4181 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4184 DI opval = MULDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
4185 SET_H_GR (FLD (f_dest), opval);
4186 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4193 /* mulul: mulu.l $rm, $rn, $rd */
4196 SEM_FN_NAME (sh64_media,mulul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4198 #define FLD(f) abuf->fields.sfmt_add.f
4199 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4200 int UNUSED written = 0;
4201 IADDR UNUSED pc = abuf->addr;
4202 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4205 DI opval = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
4206 SET_H_GR (FLD (f_dest), opval);
4207 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4217 SEM_FN_NAME (sh64_media,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4219 #define FLD(f) abuf->fields.fmt_empty.f
4220 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4221 int UNUSED written = 0;
4222 IADDR UNUSED pc = abuf->addr;
4223 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4231 /* nsb: nsb $rm, $rd */
4234 SEM_FN_NAME (sh64_media,nsb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4236 #define FLD(f) abuf->fields.sfmt_xori.f
4237 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4238 int UNUSED written = 0;
4239 IADDR UNUSED pc = abuf->addr;
4240 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4243 DI opval = sh64_nsb (current_cpu, GET_H_GR (FLD (f_left)));
4244 SET_H_GR (FLD (f_dest), opval);
4245 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4252 /* ocbi: ocbi $rm, $disp6x32 */
4255 SEM_FN_NAME (sh64_media,ocbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4257 #define FLD(f) abuf->fields.fmt_empty.f
4258 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4259 int UNUSED written = 0;
4260 IADDR UNUSED pc = abuf->addr;
4261 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4269 /* ocbp: ocbp $rm, $disp6x32 */
4272 SEM_FN_NAME (sh64_media,ocbp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4274 #define FLD(f) abuf->fields.fmt_empty.f
4275 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4276 int UNUSED written = 0;
4277 IADDR UNUSED pc = abuf->addr;
4278 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4286 /* ocbwb: ocbwb $rm, $disp6x32 */
4289 SEM_FN_NAME (sh64_media,ocbwb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4291 #define FLD(f) abuf->fields.fmt_empty.f
4292 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4293 int UNUSED written = 0;
4294 IADDR UNUSED pc = abuf->addr;
4295 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4303 /* or: or $rm, $rn, $rd */
4306 SEM_FN_NAME (sh64_media,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4308 #define FLD(f) abuf->fields.sfmt_add.f
4309 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4310 int UNUSED written = 0;
4311 IADDR UNUSED pc = abuf->addr;
4312 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4315 DI opval = ORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
4316 SET_H_GR (FLD (f_dest), opval);
4317 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4324 /* ori: ori $rm, $imm10, $rd */
4327 SEM_FN_NAME (sh64_media,ori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4329 #define FLD(f) abuf->fields.sfmt_ori.f
4330 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4331 int UNUSED written = 0;
4332 IADDR UNUSED pc = abuf->addr;
4333 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4336 DI opval = ORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm10)));
4337 SET_H_GR (FLD (f_dest), opval);
4338 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4345 /* prefi: prefi $rm, $disp6x32 */
4348 SEM_FN_NAME (sh64_media,prefi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4350 #define FLD(f) abuf->fields.fmt_empty.f
4351 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4352 int UNUSED written = 0;
4353 IADDR UNUSED pc = abuf->addr;
4354 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4362 /* pta: pta$likely $disp16, $tra */
4365 SEM_FN_NAME (sh64_media,pta) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4367 #define FLD(f) abuf->fields.sfmt_pta.f
4368 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4369 int UNUSED written = 0;
4370 IADDR UNUSED pc = abuf->addr;
4371 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4374 DI opval = ADDSI (FLD (f_disp16), 1);
4375 CPU (h_tr[FLD (f_tra)]) = opval;
4376 TRACE_RESULT (current_cpu, abuf, "tra", 'D', opval);
4383 /* ptabs: ptabs$likely $rn, $tra */
4386 SEM_FN_NAME (sh64_media,ptabs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4388 #define FLD(f) abuf->fields.sfmt_beq.f
4389 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4390 int UNUSED written = 0;
4391 IADDR UNUSED pc = abuf->addr;
4392 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4395 DI opval = GET_H_GR (FLD (f_right));
4396 CPU (h_tr[FLD (f_tra)]) = opval;
4397 TRACE_RESULT (current_cpu, abuf, "tra", 'D', opval);
4404 /* ptb: ptb$likely $disp16, $tra */
4407 SEM_FN_NAME (sh64_media,ptb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4409 #define FLD(f) abuf->fields.sfmt_pta.f
4410 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4411 int UNUSED written = 0;
4412 IADDR UNUSED pc = abuf->addr;
4413 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4416 DI opval = FLD (f_disp16);
4417 CPU (h_tr[FLD (f_tra)]) = opval;
4418 TRACE_RESULT (current_cpu, abuf, "tra", 'D', opval);
4425 /* ptrel: ptrel$likely $rn, $tra */
4428 SEM_FN_NAME (sh64_media,ptrel) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4430 #define FLD(f) abuf->fields.sfmt_beq.f
4431 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4432 int UNUSED written = 0;
4433 IADDR UNUSED pc = abuf->addr;
4434 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4437 DI opval = ADDDI (pc, GET_H_GR (FLD (f_right)));
4438 CPU (h_tr[FLD (f_tra)]) = opval;
4439 TRACE_RESULT (current_cpu, abuf, "tra", 'D', opval);
4446 /* putcfg: putcfg $rm, $disp6, $rd */
4449 SEM_FN_NAME (sh64_media,putcfg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4451 #define FLD(f) abuf->fields.fmt_empty.f
4452 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4453 int UNUSED written = 0;
4454 IADDR UNUSED pc = abuf->addr;
4455 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4463 /* putcon: putcon $rm, $crj */
4466 SEM_FN_NAME (sh64_media,putcon) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4468 #define FLD(f) abuf->fields.sfmt_xori.f
4469 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4470 int UNUSED written = 0;
4471 IADDR UNUSED pc = abuf->addr;
4472 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4475 DI opval = GET_H_GR (FLD (f_left));
4476 SET_H_CR (FLD (f_dest), opval);
4477 TRACE_RESULT (current_cpu, abuf, "crj", 'D', opval);
4487 SEM_FN_NAME (sh64_media,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4489 #define FLD(f) abuf->fields.fmt_empty.f
4490 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4491 int UNUSED written = 0;
4492 IADDR UNUSED pc = abuf->addr;
4493 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4501 /* shard: shard $rm, $rn, $rd */
4504 SEM_FN_NAME (sh64_media,shard) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4506 #define FLD(f) abuf->fields.sfmt_add.f
4507 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4508 int UNUSED written = 0;
4509 IADDR UNUSED pc = abuf->addr;
4510 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4513 DI opval = SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4514 SET_H_GR (FLD (f_dest), opval);
4515 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4522 /* shardl: shard.l $rm, $rn, $rd */
4525 SEM_FN_NAME (sh64_media,shardl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4527 #define FLD(f) abuf->fields.sfmt_add.f
4528 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4529 int UNUSED written = 0;
4530 IADDR UNUSED pc = abuf->addr;
4531 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4534 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4535 SET_H_GR (FLD (f_dest), opval);
4536 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4543 /* shari: shari $rm, $uimm6, $rd */
4546 SEM_FN_NAME (sh64_media,shari) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4548 #define FLD(f) abuf->fields.sfmt_shari.f
4549 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4550 int UNUSED written = 0;
4551 IADDR UNUSED pc = abuf->addr;
4552 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4555 DI opval = SRADI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4556 SET_H_GR (FLD (f_dest), opval);
4557 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4564 /* sharil: shari.l $rm, $uimm6, $rd */
4567 SEM_FN_NAME (sh64_media,sharil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4569 #define FLD(f) abuf->fields.sfmt_shari.f
4570 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4571 int UNUSED written = 0;
4572 IADDR UNUSED pc = abuf->addr;
4573 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4576 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4577 SET_H_GR (FLD (f_dest), opval);
4578 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4585 /* shlld: shlld $rm, $rn, $rd */
4588 SEM_FN_NAME (sh64_media,shlld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4590 #define FLD(f) abuf->fields.sfmt_add.f
4591 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4592 int UNUSED written = 0;
4593 IADDR UNUSED pc = abuf->addr;
4594 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4597 DI opval = SLLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4598 SET_H_GR (FLD (f_dest), opval);
4599 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4606 /* shlldl: shlld.l $rm, $rn, $rd */
4609 SEM_FN_NAME (sh64_media,shlldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4611 #define FLD(f) abuf->fields.sfmt_add.f
4612 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4613 int UNUSED written = 0;
4614 IADDR UNUSED pc = abuf->addr;
4615 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4618 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4619 SET_H_GR (FLD (f_dest), opval);
4620 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4627 /* shlli: shlli $rm, $uimm6, $rd */
4630 SEM_FN_NAME (sh64_media,shlli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4632 #define FLD(f) abuf->fields.sfmt_shari.f
4633 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4634 int UNUSED written = 0;
4635 IADDR UNUSED pc = abuf->addr;
4636 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4639 DI opval = SLLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4640 SET_H_GR (FLD (f_dest), opval);
4641 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4648 /* shllil: shlli.l $rm, $uimm6, $rd */
4651 SEM_FN_NAME (sh64_media,shllil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4653 #define FLD(f) abuf->fields.sfmt_shari.f
4654 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4655 int UNUSED written = 0;
4656 IADDR UNUSED pc = abuf->addr;
4657 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4660 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4661 SET_H_GR (FLD (f_dest), opval);
4662 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4669 /* shlrd: shlrd $rm, $rn, $rd */
4672 SEM_FN_NAME (sh64_media,shlrd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4674 #define FLD(f) abuf->fields.sfmt_add.f
4675 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4676 int UNUSED written = 0;
4677 IADDR UNUSED pc = abuf->addr;
4678 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4681 DI opval = SRLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4682 SET_H_GR (FLD (f_dest), opval);
4683 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4690 /* shlrdl: shlrd.l $rm, $rn, $rd */
4693 SEM_FN_NAME (sh64_media,shlrdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4695 #define FLD(f) abuf->fields.sfmt_add.f
4696 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4697 int UNUSED written = 0;
4698 IADDR UNUSED pc = abuf->addr;
4699 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4702 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4703 SET_H_GR (FLD (f_dest), opval);
4704 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4711 /* shlri: shlri $rm, $uimm6, $rd */
4714 SEM_FN_NAME (sh64_media,shlri) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4716 #define FLD(f) abuf->fields.sfmt_shari.f
4717 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4718 int UNUSED written = 0;
4719 IADDR UNUSED pc = abuf->addr;
4720 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4723 DI opval = SRLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4724 SET_H_GR (FLD (f_dest), opval);
4725 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4732 /* shlril: shlri.l $rm, $uimm6, $rd */
4735 SEM_FN_NAME (sh64_media,shlril) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4737 #define FLD(f) abuf->fields.sfmt_shari.f
4738 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4739 int UNUSED written = 0;
4740 IADDR UNUSED pc = abuf->addr;
4741 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4744 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4745 SET_H_GR (FLD (f_dest), opval);
4746 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4753 /* shori: shori $uimm16, $rd */
4756 SEM_FN_NAME (sh64_media,shori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4758 #define FLD(f) abuf->fields.sfmt_shori.f
4759 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4760 int UNUSED written = 0;
4761 IADDR UNUSED pc = abuf->addr;
4762 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4765 DI opval = ORDI (SLLDI (GET_H_GR (FLD (f_dest)), 16), ZEXTSIDI (FLD (f_uimm16)));
4766 SET_H_GR (FLD (f_dest), opval);
4767 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4777 SEM_FN_NAME (sh64_media,sleep) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4779 #define FLD(f) abuf->fields.fmt_empty.f
4780 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4781 int UNUSED written = 0;
4782 IADDR UNUSED pc = abuf->addr;
4783 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4791 /* stb: st.b $rm, $disp10, $rd */
4794 SEM_FN_NAME (sh64_media,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4796 #define FLD(f) abuf->fields.sfmt_addi.f
4797 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4798 int UNUSED written = 0;
4799 IADDR UNUSED pc = abuf->addr;
4800 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4803 UQI opval = ANDQI (GET_H_GR (FLD (f_dest)), 255);
4804 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))), opval);
4805 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4812 /* stl: st.l $rm, $disp10x4, $rd */
4815 SEM_FN_NAME (sh64_media,stl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4817 #define FLD(f) abuf->fields.sfmt_flds.f
4818 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4819 int UNUSED written = 0;
4820 IADDR UNUSED pc = abuf->addr;
4821 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4824 SI opval = ANDSI (GET_H_GR (FLD (f_dest)), 0xffffffff);
4825 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4))), opval);
4826 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4833 /* stq: st.q $rm, $disp10x8, $rd */
4836 SEM_FN_NAME (sh64_media,stq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4838 #define FLD(f) abuf->fields.sfmt_fldd.f
4839 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4840 int UNUSED written = 0;
4841 IADDR UNUSED pc = abuf->addr;
4842 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4845 DI opval = GET_H_GR (FLD (f_dest));
4846 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8))), opval);
4847 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
4854 /* stw: st.w $rm, $disp10x2, $rd */
4857 SEM_FN_NAME (sh64_media,stw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4859 #define FLD(f) abuf->fields.sfmt_lduw.f
4860 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4861 int UNUSED written = 0;
4862 IADDR UNUSED pc = abuf->addr;
4863 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4866 HI opval = ANDHI (GET_H_GR (FLD (f_dest)), 65535);
4867 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))), opval);
4868 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4875 /* sthil: sthi.l $rm, $disp6, $rd */
4878 SEM_FN_NAME (sh64_media,sthil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4880 #define FLD(f) abuf->fields.sfmt_sthil.f
4881 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4882 int UNUSED written = 0;
4883 IADDR UNUSED pc = abuf->addr;
4884 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4890 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
4891 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1);
4892 if (GET_H_ENDIAN ()) {
4893 tmp_val = GET_H_GR (FLD (f_dest));
4895 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount)));
4897 tmp_addr = ADDDI (SUBDI (tmp_addr, tmp_bytecount), 1);
4898 if (GTQI (tmp_bytecount, 3)) {
4901 UQI opval = ANDQI (tmp_val, 255);
4902 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4903 written |= (1 << 4);
4904 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4906 tmp_val = SRLDI (tmp_val, 8);
4907 tmp_addr = ADDDI (tmp_addr, 1);
4910 if (GTQI (tmp_bytecount, 2)) {
4913 UQI opval = ANDQI (tmp_val, 255);
4914 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4915 written |= (1 << 4);
4916 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4918 tmp_val = SRLDI (tmp_val, 8);
4919 tmp_addr = ADDDI (tmp_addr, 1);
4922 if (GTQI (tmp_bytecount, 1)) {
4925 UQI opval = ANDQI (tmp_val, 255);
4926 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4927 written |= (1 << 4);
4928 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4930 tmp_val = SRLDI (tmp_val, 8);
4931 tmp_addr = ADDDI (tmp_addr, 1);
4934 if (GTQI (tmp_bytecount, 0)) {
4937 UQI opval = ANDQI (tmp_val, 255);
4938 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4939 written |= (1 << 4);
4940 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4942 tmp_val = SRLDI (tmp_val, 8);
4943 tmp_addr = ADDDI (tmp_addr, 1);
4948 abuf->written = written;
4953 /* sthiq: sthi.q $rm, $disp6, $rd */
4956 SEM_FN_NAME (sh64_media,sthiq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4958 #define FLD(f) abuf->fields.sfmt_sthil.f
4959 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4960 int UNUSED written = 0;
4961 IADDR UNUSED pc = abuf->addr;
4962 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4968 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
4969 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1);
4970 if (GET_H_ENDIAN ()) {
4971 tmp_val = GET_H_GR (FLD (f_dest));
4973 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount)));
4975 tmp_addr = ADDDI (SUBDI (tmp_addr, tmp_bytecount), 1);
4976 if (GTQI (tmp_bytecount, 7)) {
4979 UQI opval = ANDQI (tmp_val, 255);
4980 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4981 written |= (1 << 4);
4982 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4984 tmp_val = SRLDI (tmp_val, 8);
4985 tmp_addr = ADDDI (tmp_addr, 1);
4988 if (GTQI (tmp_bytecount, 6)) {
4991 UQI opval = ANDQI (tmp_val, 255);
4992 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4993 written |= (1 << 4);
4994 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4996 tmp_val = SRLDI (tmp_val, 8);
4997 tmp_addr = ADDDI (tmp_addr, 1);
5000 if (GTQI (tmp_bytecount, 5)) {
5003 UQI opval = ANDQI (tmp_val, 255);
5004 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5005 written |= (1 << 4);
5006 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5008 tmp_val = SRLDI (tmp_val, 8);
5009 tmp_addr = ADDDI (tmp_addr, 1);
5012 if (GTQI (tmp_bytecount, 4)) {
5015 UQI opval = ANDQI (tmp_val, 255);
5016 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5017 written |= (1 << 4);
5018 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5020 tmp_val = SRLDI (tmp_val, 8);
5021 tmp_addr = ADDDI (tmp_addr, 1);
5024 if (GTQI (tmp_bytecount, 3)) {
5027 UQI opval = ANDQI (tmp_val, 255);
5028 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5029 written |= (1 << 4);
5030 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5032 tmp_val = SRLDI (tmp_val, 8);
5033 tmp_addr = ADDDI (tmp_addr, 1);
5036 if (GTQI (tmp_bytecount, 2)) {
5039 UQI opval = ANDQI (tmp_val, 255);
5040 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5041 written |= (1 << 4);
5042 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5044 tmp_val = SRLDI (tmp_val, 8);
5045 tmp_addr = ADDDI (tmp_addr, 1);
5048 if (GTQI (tmp_bytecount, 1)) {
5051 UQI opval = ANDQI (tmp_val, 255);
5052 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5053 written |= (1 << 4);
5054 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5056 tmp_val = SRLDI (tmp_val, 8);
5057 tmp_addr = ADDDI (tmp_addr, 1);
5060 if (GTQI (tmp_bytecount, 0)) {
5063 UQI opval = ANDQI (tmp_val, 255);
5064 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5065 written |= (1 << 4);
5066 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5068 tmp_val = SRLDI (tmp_val, 8);
5069 tmp_addr = ADDDI (tmp_addr, 1);
5074 abuf->written = written;
5079 /* stlol: stlo.l $rm, $disp6, $rd */
5082 SEM_FN_NAME (sh64_media,stlol) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5084 #define FLD(f) abuf->fields.fmt_empty.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);
5096 /* stloq: stlo.q $rm, $disp6, $rd */
5099 SEM_FN_NAME (sh64_media,stloq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5101 #define FLD(f) abuf->fields.fmt_empty.f
5102 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5103 int UNUSED written = 0;
5104 IADDR UNUSED pc = abuf->addr;
5105 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5113 /* stxb: stx.b $rm, $rn, $rd */
5116 SEM_FN_NAME (sh64_media,stxb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5118 #define FLD(f) abuf->fields.sfmt_add.f
5119 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5120 int UNUSED written = 0;
5121 IADDR UNUSED pc = abuf->addr;
5122 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5125 UQI opval = SUBWORDDIQI (GET_H_GR (FLD (f_dest)), 7);
5126 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5127 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5134 /* stxl: stx.l $rm, $rn, $rd */
5137 SEM_FN_NAME (sh64_media,stxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5139 #define FLD(f) abuf->fields.sfmt_add.f
5140 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5141 int UNUSED written = 0;
5142 IADDR UNUSED pc = abuf->addr;
5143 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5146 SI opval = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
5147 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5148 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5155 /* stxq: stx.q $rm, $rn, $rd */
5158 SEM_FN_NAME (sh64_media,stxq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5160 #define FLD(f) abuf->fields.sfmt_add.f
5161 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5162 int UNUSED written = 0;
5163 IADDR UNUSED pc = abuf->addr;
5164 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5167 DI opval = GET_H_GR (FLD (f_dest));
5168 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5169 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5176 /* stxw: stx.w $rm, $rn, $rd */
5179 SEM_FN_NAME (sh64_media,stxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5181 #define FLD(f) abuf->fields.sfmt_add.f
5182 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5183 int UNUSED written = 0;
5184 IADDR UNUSED pc = abuf->addr;
5185 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5188 HI opval = SUBWORDDIHI (GET_H_GR (FLD (f_dest)), 3);
5189 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5190 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5197 /* sub: sub $rm, $rn, $rd */
5200 SEM_FN_NAME (sh64_media,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5202 #define FLD(f) abuf->fields.sfmt_add.f
5203 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5204 int UNUSED written = 0;
5205 IADDR UNUSED pc = abuf->addr;
5206 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5209 DI opval = SUBDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5210 SET_H_GR (FLD (f_dest), opval);
5211 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5218 /* subl: sub.l $rm, $rn, $rd */
5221 SEM_FN_NAME (sh64_media,subl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5223 #define FLD(f) abuf->fields.sfmt_add.f
5224 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5225 int UNUSED written = 0;
5226 IADDR UNUSED pc = abuf->addr;
5227 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5230 DI opval = EXTSIDI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
5231 SET_H_GR (FLD (f_dest), opval);
5232 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5239 /* swapq: swap.q $rm, $rn, $rd */
5242 SEM_FN_NAME (sh64_media,swapq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5244 #define FLD(f) abuf->fields.sfmt_add.f
5245 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5246 int UNUSED written = 0;
5247 IADDR UNUSED pc = abuf->addr;
5248 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5253 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5254 tmp_temp = GETMEMDI (current_cpu, pc, tmp_addr);
5256 DI opval = GET_H_GR (FLD (f_dest));
5257 SETMEMDI (current_cpu, pc, tmp_addr, opval);
5258 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5261 DI opval = tmp_temp;
5262 SET_H_GR (FLD (f_dest), opval);
5263 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5274 SEM_FN_NAME (sh64_media,synci) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5276 #define FLD(f) abuf->fields.fmt_empty.f
5277 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5278 int UNUSED written = 0;
5279 IADDR UNUSED pc = abuf->addr;
5280 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5291 SEM_FN_NAME (sh64_media,synco) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5293 #define FLD(f) abuf->fields.fmt_empty.f
5294 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5295 int UNUSED written = 0;
5296 IADDR UNUSED pc = abuf->addr;
5297 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5305 /* trapa: trapa $rm */
5308 SEM_FN_NAME (sh64_media,trapa) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5310 #define FLD(f) abuf->fields.sfmt_xori.f
5311 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5312 int UNUSED written = 0;
5313 IADDR UNUSED pc = abuf->addr;
5314 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5316 sh64_trapa (current_cpu, GET_H_GR (FLD (f_left)), pc);
5322 /* xor: xor $rm, $rn, $rd */
5325 SEM_FN_NAME (sh64_media,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5327 #define FLD(f) abuf->fields.sfmt_add.f
5328 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5329 int UNUSED written = 0;
5330 IADDR UNUSED pc = abuf->addr;
5331 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5334 DI opval = XORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5335 SET_H_GR (FLD (f_dest), opval);
5336 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5343 /* xori: xori $rm, $imm6, $rd */
5346 SEM_FN_NAME (sh64_media,xori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5348 #define FLD(f) abuf->fields.sfmt_xori.f
5349 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5350 int UNUSED written = 0;
5351 IADDR UNUSED pc = abuf->addr;
5352 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5355 DI opval = XORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)));
5356 SET_H_GR (FLD (f_dest), opval);
5357 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5364 /* Table of all semantic fns. */
5366 static const struct sem_fn_desc sem_fns[] = {
5367 { SH64_MEDIA_INSN_X_INVALID, SEM_FN_NAME (sh64_media,x_invalid) },
5368 { SH64_MEDIA_INSN_X_AFTER, SEM_FN_NAME (sh64_media,x_after) },
5369 { SH64_MEDIA_INSN_X_BEFORE, SEM_FN_NAME (sh64_media,x_before) },
5370 { SH64_MEDIA_INSN_X_CTI_CHAIN, SEM_FN_NAME (sh64_media,x_cti_chain) },
5371 { SH64_MEDIA_INSN_X_CHAIN, SEM_FN_NAME (sh64_media,x_chain) },
5372 { SH64_MEDIA_INSN_X_BEGIN, SEM_FN_NAME (sh64_media,x_begin) },
5373 { SH64_MEDIA_INSN_ADD, SEM_FN_NAME (sh64_media,add) },
5374 { SH64_MEDIA_INSN_ADDL, SEM_FN_NAME (sh64_media,addl) },
5375 { SH64_MEDIA_INSN_ADDI, SEM_FN_NAME (sh64_media,addi) },
5376 { SH64_MEDIA_INSN_ADDIL, SEM_FN_NAME (sh64_media,addil) },
5377 { SH64_MEDIA_INSN_ADDZL, SEM_FN_NAME (sh64_media,addzl) },
5378 { SH64_MEDIA_INSN_ALLOCO, SEM_FN_NAME (sh64_media,alloco) },
5379 { SH64_MEDIA_INSN_AND, SEM_FN_NAME (sh64_media,and) },
5380 { SH64_MEDIA_INSN_ANDC, SEM_FN_NAME (sh64_media,andc) },
5381 { SH64_MEDIA_INSN_ANDI, SEM_FN_NAME (sh64_media,andi) },
5382 { SH64_MEDIA_INSN_BEQ, SEM_FN_NAME (sh64_media,beq) },
5383 { SH64_MEDIA_INSN_BEQI, SEM_FN_NAME (sh64_media,beqi) },
5384 { SH64_MEDIA_INSN_BGE, SEM_FN_NAME (sh64_media,bge) },
5385 { SH64_MEDIA_INSN_BGEU, SEM_FN_NAME (sh64_media,bgeu) },
5386 { SH64_MEDIA_INSN_BGT, SEM_FN_NAME (sh64_media,bgt) },
5387 { SH64_MEDIA_INSN_BGTU, SEM_FN_NAME (sh64_media,bgtu) },
5388 { SH64_MEDIA_INSN_BLINK, SEM_FN_NAME (sh64_media,blink) },
5389 { SH64_MEDIA_INSN_BNE, SEM_FN_NAME (sh64_media,bne) },
5390 { SH64_MEDIA_INSN_BNEI, SEM_FN_NAME (sh64_media,bnei) },
5391 { SH64_MEDIA_INSN_BRK, SEM_FN_NAME (sh64_media,brk) },
5392 { SH64_MEDIA_INSN_BYTEREV, SEM_FN_NAME (sh64_media,byterev) },
5393 { SH64_MEDIA_INSN_CMPEQ, SEM_FN_NAME (sh64_media,cmpeq) },
5394 { SH64_MEDIA_INSN_CMPGT, SEM_FN_NAME (sh64_media,cmpgt) },
5395 { SH64_MEDIA_INSN_CMPGTU, SEM_FN_NAME (sh64_media,cmpgtu) },
5396 { SH64_MEDIA_INSN_CMVEQ, SEM_FN_NAME (sh64_media,cmveq) },
5397 { SH64_MEDIA_INSN_CMVNE, SEM_FN_NAME (sh64_media,cmvne) },
5398 { SH64_MEDIA_INSN_FABSD, SEM_FN_NAME (sh64_media,fabsd) },
5399 { SH64_MEDIA_INSN_FABSS, SEM_FN_NAME (sh64_media,fabss) },
5400 { SH64_MEDIA_INSN_FADDD, SEM_FN_NAME (sh64_media,faddd) },
5401 { SH64_MEDIA_INSN_FADDS, SEM_FN_NAME (sh64_media,fadds) },
5402 { SH64_MEDIA_INSN_FCMPEQD, SEM_FN_NAME (sh64_media,fcmpeqd) },
5403 { SH64_MEDIA_INSN_FCMPEQS, SEM_FN_NAME (sh64_media,fcmpeqs) },
5404 { SH64_MEDIA_INSN_FCMPGED, SEM_FN_NAME (sh64_media,fcmpged) },
5405 { SH64_MEDIA_INSN_FCMPGES, SEM_FN_NAME (sh64_media,fcmpges) },
5406 { SH64_MEDIA_INSN_FCMPGTD, SEM_FN_NAME (sh64_media,fcmpgtd) },
5407 { SH64_MEDIA_INSN_FCMPGTS, SEM_FN_NAME (sh64_media,fcmpgts) },
5408 { SH64_MEDIA_INSN_FCMPUND, SEM_FN_NAME (sh64_media,fcmpund) },
5409 { SH64_MEDIA_INSN_FCMPUNS, SEM_FN_NAME (sh64_media,fcmpuns) },
5410 { SH64_MEDIA_INSN_FCNVDS, SEM_FN_NAME (sh64_media,fcnvds) },
5411 { SH64_MEDIA_INSN_FCNVSD, SEM_FN_NAME (sh64_media,fcnvsd) },
5412 { SH64_MEDIA_INSN_FDIVD, SEM_FN_NAME (sh64_media,fdivd) },
5413 { SH64_MEDIA_INSN_FDIVS, SEM_FN_NAME (sh64_media,fdivs) },
5414 { SH64_MEDIA_INSN_FGETSCR, SEM_FN_NAME (sh64_media,fgetscr) },
5415 { SH64_MEDIA_INSN_FIPRS, SEM_FN_NAME (sh64_media,fiprs) },
5416 { SH64_MEDIA_INSN_FLDD, SEM_FN_NAME (sh64_media,fldd) },
5417 { SH64_MEDIA_INSN_FLDP, SEM_FN_NAME (sh64_media,fldp) },
5418 { SH64_MEDIA_INSN_FLDS, SEM_FN_NAME (sh64_media,flds) },
5419 { SH64_MEDIA_INSN_FLDXD, SEM_FN_NAME (sh64_media,fldxd) },
5420 { SH64_MEDIA_INSN_FLDXP, SEM_FN_NAME (sh64_media,fldxp) },
5421 { SH64_MEDIA_INSN_FLDXS, SEM_FN_NAME (sh64_media,fldxs) },
5422 { SH64_MEDIA_INSN_FLOATLD, SEM_FN_NAME (sh64_media,floatld) },
5423 { SH64_MEDIA_INSN_FLOATLS, SEM_FN_NAME (sh64_media,floatls) },
5424 { SH64_MEDIA_INSN_FLOATQD, SEM_FN_NAME (sh64_media,floatqd) },
5425 { SH64_MEDIA_INSN_FLOATQS, SEM_FN_NAME (sh64_media,floatqs) },
5426 { SH64_MEDIA_INSN_FMACS, SEM_FN_NAME (sh64_media,fmacs) },
5427 { SH64_MEDIA_INSN_FMOVD, SEM_FN_NAME (sh64_media,fmovd) },
5428 { SH64_MEDIA_INSN_FMOVDQ, SEM_FN_NAME (sh64_media,fmovdq) },
5429 { SH64_MEDIA_INSN_FMOVLS, SEM_FN_NAME (sh64_media,fmovls) },
5430 { SH64_MEDIA_INSN_FMOVQD, SEM_FN_NAME (sh64_media,fmovqd) },
5431 { SH64_MEDIA_INSN_FMOVS, SEM_FN_NAME (sh64_media,fmovs) },
5432 { SH64_MEDIA_INSN_FMOVSL, SEM_FN_NAME (sh64_media,fmovsl) },
5433 { SH64_MEDIA_INSN_FMULD, SEM_FN_NAME (sh64_media,fmuld) },
5434 { SH64_MEDIA_INSN_FMULS, SEM_FN_NAME (sh64_media,fmuls) },
5435 { SH64_MEDIA_INSN_FNEGD, SEM_FN_NAME (sh64_media,fnegd) },
5436 { SH64_MEDIA_INSN_FNEGS, SEM_FN_NAME (sh64_media,fnegs) },
5437 { SH64_MEDIA_INSN_FPUTSCR, SEM_FN_NAME (sh64_media,fputscr) },
5438 { SH64_MEDIA_INSN_FSQRTD, SEM_FN_NAME (sh64_media,fsqrtd) },
5439 { SH64_MEDIA_INSN_FSQRTS, SEM_FN_NAME (sh64_media,fsqrts) },
5440 { SH64_MEDIA_INSN_FSTD, SEM_FN_NAME (sh64_media,fstd) },
5441 { SH64_MEDIA_INSN_FSTP, SEM_FN_NAME (sh64_media,fstp) },
5442 { SH64_MEDIA_INSN_FSTS, SEM_FN_NAME (sh64_media,fsts) },
5443 { SH64_MEDIA_INSN_FSTXD, SEM_FN_NAME (sh64_media,fstxd) },
5444 { SH64_MEDIA_INSN_FSTXP, SEM_FN_NAME (sh64_media,fstxp) },
5445 { SH64_MEDIA_INSN_FSTXS, SEM_FN_NAME (sh64_media,fstxs) },
5446 { SH64_MEDIA_INSN_FSUBD, SEM_FN_NAME (sh64_media,fsubd) },
5447 { SH64_MEDIA_INSN_FSUBS, SEM_FN_NAME (sh64_media,fsubs) },
5448 { SH64_MEDIA_INSN_FTRCDL, SEM_FN_NAME (sh64_media,ftrcdl) },
5449 { SH64_MEDIA_INSN_FTRCSL, SEM_FN_NAME (sh64_media,ftrcsl) },
5450 { SH64_MEDIA_INSN_FTRCDQ, SEM_FN_NAME (sh64_media,ftrcdq) },
5451 { SH64_MEDIA_INSN_FTRCSQ, SEM_FN_NAME (sh64_media,ftrcsq) },
5452 { SH64_MEDIA_INSN_FTRVS, SEM_FN_NAME (sh64_media,ftrvs) },
5453 { SH64_MEDIA_INSN_GETCFG, SEM_FN_NAME (sh64_media,getcfg) },
5454 { SH64_MEDIA_INSN_GETCON, SEM_FN_NAME (sh64_media,getcon) },
5455 { SH64_MEDIA_INSN_GETTR, SEM_FN_NAME (sh64_media,gettr) },
5456 { SH64_MEDIA_INSN_ICBI, SEM_FN_NAME (sh64_media,icbi) },
5457 { SH64_MEDIA_INSN_LDB, SEM_FN_NAME (sh64_media,ldb) },
5458 { SH64_MEDIA_INSN_LDL, SEM_FN_NAME (sh64_media,ldl) },
5459 { SH64_MEDIA_INSN_LDQ, SEM_FN_NAME (sh64_media,ldq) },
5460 { SH64_MEDIA_INSN_LDUB, SEM_FN_NAME (sh64_media,ldub) },
5461 { SH64_MEDIA_INSN_LDUW, SEM_FN_NAME (sh64_media,lduw) },
5462 { SH64_MEDIA_INSN_LDW, SEM_FN_NAME (sh64_media,ldw) },
5463 { SH64_MEDIA_INSN_LDHIL, SEM_FN_NAME (sh64_media,ldhil) },
5464 { SH64_MEDIA_INSN_LDHIQ, SEM_FN_NAME (sh64_media,ldhiq) },
5465 { SH64_MEDIA_INSN_LDLOL, SEM_FN_NAME (sh64_media,ldlol) },
5466 { SH64_MEDIA_INSN_LDLOQ, SEM_FN_NAME (sh64_media,ldloq) },
5467 { SH64_MEDIA_INSN_LDXB, SEM_FN_NAME (sh64_media,ldxb) },
5468 { SH64_MEDIA_INSN_LDXL, SEM_FN_NAME (sh64_media,ldxl) },
5469 { SH64_MEDIA_INSN_LDXQ, SEM_FN_NAME (sh64_media,ldxq) },
5470 { SH64_MEDIA_INSN_LDXUB, SEM_FN_NAME (sh64_media,ldxub) },
5471 { SH64_MEDIA_INSN_LDXUW, SEM_FN_NAME (sh64_media,ldxuw) },
5472 { SH64_MEDIA_INSN_LDXW, SEM_FN_NAME (sh64_media,ldxw) },
5473 { SH64_MEDIA_INSN_MABSL, SEM_FN_NAME (sh64_media,mabsl) },
5474 { SH64_MEDIA_INSN_MABSW, SEM_FN_NAME (sh64_media,mabsw) },
5475 { SH64_MEDIA_INSN_MADDL, SEM_FN_NAME (sh64_media,maddl) },
5476 { SH64_MEDIA_INSN_MADDW, SEM_FN_NAME (sh64_media,maddw) },
5477 { SH64_MEDIA_INSN_MADDSL, SEM_FN_NAME (sh64_media,maddsl) },
5478 { SH64_MEDIA_INSN_MADDSUB, SEM_FN_NAME (sh64_media,maddsub) },
5479 { SH64_MEDIA_INSN_MADDSW, SEM_FN_NAME (sh64_media,maddsw) },
5480 { SH64_MEDIA_INSN_MCMPEQB, SEM_FN_NAME (sh64_media,mcmpeqb) },
5481 { SH64_MEDIA_INSN_MCMPEQL, SEM_FN_NAME (sh64_media,mcmpeql) },
5482 { SH64_MEDIA_INSN_MCMPEQW, SEM_FN_NAME (sh64_media,mcmpeqw) },
5483 { SH64_MEDIA_INSN_MCMPGTL, SEM_FN_NAME (sh64_media,mcmpgtl) },
5484 { SH64_MEDIA_INSN_MCMPGTUB, SEM_FN_NAME (sh64_media,mcmpgtub) },
5485 { SH64_MEDIA_INSN_MCMPGTW, SEM_FN_NAME (sh64_media,mcmpgtw) },
5486 { SH64_MEDIA_INSN_MCMV, SEM_FN_NAME (sh64_media,mcmv) },
5487 { SH64_MEDIA_INSN_MCNVSLW, SEM_FN_NAME (sh64_media,mcnvslw) },
5488 { SH64_MEDIA_INSN_MCNVSWB, SEM_FN_NAME (sh64_media,mcnvswb) },
5489 { SH64_MEDIA_INSN_MCNVSWUB, SEM_FN_NAME (sh64_media,mcnvswub) },
5490 { SH64_MEDIA_INSN_MEXTR1, SEM_FN_NAME (sh64_media,mextr1) },
5491 { SH64_MEDIA_INSN_MEXTR2, SEM_FN_NAME (sh64_media,mextr2) },
5492 { SH64_MEDIA_INSN_MEXTR3, SEM_FN_NAME (sh64_media,mextr3) },
5493 { SH64_MEDIA_INSN_MEXTR4, SEM_FN_NAME (sh64_media,mextr4) },
5494 { SH64_MEDIA_INSN_MEXTR5, SEM_FN_NAME (sh64_media,mextr5) },
5495 { SH64_MEDIA_INSN_MEXTR6, SEM_FN_NAME (sh64_media,mextr6) },
5496 { SH64_MEDIA_INSN_MEXTR7, SEM_FN_NAME (sh64_media,mextr7) },
5497 { SH64_MEDIA_INSN_MMACFXWL, SEM_FN_NAME (sh64_media,mmacfxwl) },
5498 { SH64_MEDIA_INSN_MMACNFX_WL, SEM_FN_NAME (sh64_media,mmacnfx_wl) },
5499 { SH64_MEDIA_INSN_MMULL, SEM_FN_NAME (sh64_media,mmull) },
5500 { SH64_MEDIA_INSN_MMULW, SEM_FN_NAME (sh64_media,mmulw) },
5501 { SH64_MEDIA_INSN_MMULFXL, SEM_FN_NAME (sh64_media,mmulfxl) },
5502 { SH64_MEDIA_INSN_MMULFXW, SEM_FN_NAME (sh64_media,mmulfxw) },
5503 { SH64_MEDIA_INSN_MMULFXRPW, SEM_FN_NAME (sh64_media,mmulfxrpw) },
5504 { SH64_MEDIA_INSN_MMULHIWL, SEM_FN_NAME (sh64_media,mmulhiwl) },
5505 { SH64_MEDIA_INSN_MMULLOWL, SEM_FN_NAME (sh64_media,mmullowl) },
5506 { SH64_MEDIA_INSN_MMULSUMWQ, SEM_FN_NAME (sh64_media,mmulsumwq) },
5507 { SH64_MEDIA_INSN_MOVI, SEM_FN_NAME (sh64_media,movi) },
5508 { SH64_MEDIA_INSN_MPERMW, SEM_FN_NAME (sh64_media,mpermw) },
5509 { SH64_MEDIA_INSN_MSADUBQ, SEM_FN_NAME (sh64_media,msadubq) },
5510 { SH64_MEDIA_INSN_MSHALDSL, SEM_FN_NAME (sh64_media,mshaldsl) },
5511 { SH64_MEDIA_INSN_MSHALDSW, SEM_FN_NAME (sh64_media,mshaldsw) },
5512 { SH64_MEDIA_INSN_MSHARDL, SEM_FN_NAME (sh64_media,mshardl) },
5513 { SH64_MEDIA_INSN_MSHARDW, SEM_FN_NAME (sh64_media,mshardw) },
5514 { SH64_MEDIA_INSN_MSHARDSQ, SEM_FN_NAME (sh64_media,mshardsq) },
5515 { SH64_MEDIA_INSN_MSHFHIB, SEM_FN_NAME (sh64_media,mshfhib) },
5516 { SH64_MEDIA_INSN_MSHFHIL, SEM_FN_NAME (sh64_media,mshfhil) },
5517 { SH64_MEDIA_INSN_MSHFHIW, SEM_FN_NAME (sh64_media,mshfhiw) },
5518 { SH64_MEDIA_INSN_MSHFLOB, SEM_FN_NAME (sh64_media,mshflob) },
5519 { SH64_MEDIA_INSN_MSHFLOL, SEM_FN_NAME (sh64_media,mshflol) },
5520 { SH64_MEDIA_INSN_MSHFLOW, SEM_FN_NAME (sh64_media,mshflow) },
5521 { SH64_MEDIA_INSN_MSHLLDL, SEM_FN_NAME (sh64_media,mshlldl) },
5522 { SH64_MEDIA_INSN_MSHLLDW, SEM_FN_NAME (sh64_media,mshlldw) },
5523 { SH64_MEDIA_INSN_MSHLRDL, SEM_FN_NAME (sh64_media,mshlrdl) },
5524 { SH64_MEDIA_INSN_MSHLRDW, SEM_FN_NAME (sh64_media,mshlrdw) },
5525 { SH64_MEDIA_INSN_MSUBL, SEM_FN_NAME (sh64_media,msubl) },
5526 { SH64_MEDIA_INSN_MSUBW, SEM_FN_NAME (sh64_media,msubw) },
5527 { SH64_MEDIA_INSN_MSUBSL, SEM_FN_NAME (sh64_media,msubsl) },
5528 { SH64_MEDIA_INSN_MSUBSUB, SEM_FN_NAME (sh64_media,msubsub) },
5529 { SH64_MEDIA_INSN_MSUBSW, SEM_FN_NAME (sh64_media,msubsw) },
5530 { SH64_MEDIA_INSN_MULSL, SEM_FN_NAME (sh64_media,mulsl) },
5531 { SH64_MEDIA_INSN_MULUL, SEM_FN_NAME (sh64_media,mulul) },
5532 { SH64_MEDIA_INSN_NOP, SEM_FN_NAME (sh64_media,nop) },
5533 { SH64_MEDIA_INSN_NSB, SEM_FN_NAME (sh64_media,nsb) },
5534 { SH64_MEDIA_INSN_OCBI, SEM_FN_NAME (sh64_media,ocbi) },
5535 { SH64_MEDIA_INSN_OCBP, SEM_FN_NAME (sh64_media,ocbp) },
5536 { SH64_MEDIA_INSN_OCBWB, SEM_FN_NAME (sh64_media,ocbwb) },
5537 { SH64_MEDIA_INSN_OR, SEM_FN_NAME (sh64_media,or) },
5538 { SH64_MEDIA_INSN_ORI, SEM_FN_NAME (sh64_media,ori) },
5539 { SH64_MEDIA_INSN_PREFI, SEM_FN_NAME (sh64_media,prefi) },
5540 { SH64_MEDIA_INSN_PTA, SEM_FN_NAME (sh64_media,pta) },
5541 { SH64_MEDIA_INSN_PTABS, SEM_FN_NAME (sh64_media,ptabs) },
5542 { SH64_MEDIA_INSN_PTB, SEM_FN_NAME (sh64_media,ptb) },
5543 { SH64_MEDIA_INSN_PTREL, SEM_FN_NAME (sh64_media,ptrel) },
5544 { SH64_MEDIA_INSN_PUTCFG, SEM_FN_NAME (sh64_media,putcfg) },
5545 { SH64_MEDIA_INSN_PUTCON, SEM_FN_NAME (sh64_media,putcon) },
5546 { SH64_MEDIA_INSN_RTE, SEM_FN_NAME (sh64_media,rte) },
5547 { SH64_MEDIA_INSN_SHARD, SEM_FN_NAME (sh64_media,shard) },
5548 { SH64_MEDIA_INSN_SHARDL, SEM_FN_NAME (sh64_media,shardl) },
5549 { SH64_MEDIA_INSN_SHARI, SEM_FN_NAME (sh64_media,shari) },
5550 { SH64_MEDIA_INSN_SHARIL, SEM_FN_NAME (sh64_media,sharil) },
5551 { SH64_MEDIA_INSN_SHLLD, SEM_FN_NAME (sh64_media,shlld) },
5552 { SH64_MEDIA_INSN_SHLLDL, SEM_FN_NAME (sh64_media,shlldl) },
5553 { SH64_MEDIA_INSN_SHLLI, SEM_FN_NAME (sh64_media,shlli) },
5554 { SH64_MEDIA_INSN_SHLLIL, SEM_FN_NAME (sh64_media,shllil) },
5555 { SH64_MEDIA_INSN_SHLRD, SEM_FN_NAME (sh64_media,shlrd) },
5556 { SH64_MEDIA_INSN_SHLRDL, SEM_FN_NAME (sh64_media,shlrdl) },
5557 { SH64_MEDIA_INSN_SHLRI, SEM_FN_NAME (sh64_media,shlri) },
5558 { SH64_MEDIA_INSN_SHLRIL, SEM_FN_NAME (sh64_media,shlril) },
5559 { SH64_MEDIA_INSN_SHORI, SEM_FN_NAME (sh64_media,shori) },
5560 { SH64_MEDIA_INSN_SLEEP, SEM_FN_NAME (sh64_media,sleep) },
5561 { SH64_MEDIA_INSN_STB, SEM_FN_NAME (sh64_media,stb) },
5562 { SH64_MEDIA_INSN_STL, SEM_FN_NAME (sh64_media,stl) },
5563 { SH64_MEDIA_INSN_STQ, SEM_FN_NAME (sh64_media,stq) },
5564 { SH64_MEDIA_INSN_STW, SEM_FN_NAME (sh64_media,stw) },
5565 { SH64_MEDIA_INSN_STHIL, SEM_FN_NAME (sh64_media,sthil) },
5566 { SH64_MEDIA_INSN_STHIQ, SEM_FN_NAME (sh64_media,sthiq) },
5567 { SH64_MEDIA_INSN_STLOL, SEM_FN_NAME (sh64_media,stlol) },
5568 { SH64_MEDIA_INSN_STLOQ, SEM_FN_NAME (sh64_media,stloq) },
5569 { SH64_MEDIA_INSN_STXB, SEM_FN_NAME (sh64_media,stxb) },
5570 { SH64_MEDIA_INSN_STXL, SEM_FN_NAME (sh64_media,stxl) },
5571 { SH64_MEDIA_INSN_STXQ, SEM_FN_NAME (sh64_media,stxq) },
5572 { SH64_MEDIA_INSN_STXW, SEM_FN_NAME (sh64_media,stxw) },
5573 { SH64_MEDIA_INSN_SUB, SEM_FN_NAME (sh64_media,sub) },
5574 { SH64_MEDIA_INSN_SUBL, SEM_FN_NAME (sh64_media,subl) },
5575 { SH64_MEDIA_INSN_SWAPQ, SEM_FN_NAME (sh64_media,swapq) },
5576 { SH64_MEDIA_INSN_SYNCI, SEM_FN_NAME (sh64_media,synci) },
5577 { SH64_MEDIA_INSN_SYNCO, SEM_FN_NAME (sh64_media,synco) },
5578 { SH64_MEDIA_INSN_TRAPA, SEM_FN_NAME (sh64_media,trapa) },
5579 { SH64_MEDIA_INSN_XOR, SEM_FN_NAME (sh64_media,xor) },
5580 { SH64_MEDIA_INSN_XORI, SEM_FN_NAME (sh64_media,xori) },
5584 /* Add the semantic fns to IDESC_TABLE. */
5587 SEM_FN_NAME (sh64_media,init_idesc_table) (SIM_CPU *current_cpu)
5589 IDESC *idesc_table = CPU_IDESC (current_cpu);
5590 const struct sem_fn_desc *sf;
5591 int mach_num = MACH_NUM (CPU_MACH (current_cpu));
5593 for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
5595 const CGEN_INSN *insn = idesc_table[sf->index].idata;
5596 int valid_p = (CGEN_INSN_VIRTUAL_P (insn)
5597 || CGEN_INSN_MACH_HAS_P (insn, mach_num));
5600 idesc_table[sf->index].sem_fast = sf->fn;
5602 idesc_table[sf->index].sem_fast = SEM_FN_NAME (sh64_media,x_invalid);
5605 idesc_table[sf->index].sem_full = sf->fn;
5607 idesc_table[sf->index].sem_full = SEM_FN_NAME (sh64_media,x_invalid);