1 /* Simulator instruction semantics for sh64.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright 1996-2010 Free Software Foundation, Inc.
7 This file is part of the GNU simulators.
9 This file is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
33 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
35 /* This is used so that we can compile two copies of the semantic code,
36 one with full feature support and one without that runs fast(er).
37 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */
39 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
41 #define TRACE_RESULT(cpu, abuf, name, type, val)
43 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
46 /* x-invalid: --invalid-- */
49 SEM_FN_NAME (sh64_media
,x_invalid
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
51 #define FLD(f) abuf->fields.sfmt_empty.f
52 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
53 int UNUSED written
= 0;
54 IADDR UNUSED pc
= abuf
->addr
;
55 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
58 /* Update the recorded pc in the cpu state struct.
59 Only necessary for WITH_SCACHE case, but to avoid the
60 conditional compilation .... */
62 /* Virtual insns have zero size. Overwrite vpc with address of next insn
63 using the default-insn-bitsize spec. When executing insns in parallel
64 we may want to queue the fault and continue execution. */
65 vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
66 vpc
= sim_engine_invalid_insn (current_cpu
, pc
, vpc
);
73 /* x-after: --after-- */
76 SEM_FN_NAME (sh64_media
,x_after
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
78 #define FLD(f) abuf->fields.sfmt_empty.f
79 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
80 int UNUSED written
= 0;
81 IADDR UNUSED pc
= abuf
->addr
;
82 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
85 #if WITH_SCACHE_PBB_SH64_MEDIA
86 sh64_media_pbb_after (current_cpu
, sem_arg
);
94 /* x-before: --before-- */
97 SEM_FN_NAME (sh64_media
,x_before
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
99 #define FLD(f) abuf->fields.sfmt_empty.f
100 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
101 int UNUSED written
= 0;
102 IADDR UNUSED pc
= abuf
->addr
;
103 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
106 #if WITH_SCACHE_PBB_SH64_MEDIA
107 sh64_media_pbb_before (current_cpu
, sem_arg
);
115 /* x-cti-chain: --cti-chain-- */
118 SEM_FN_NAME (sh64_media
,x_cti_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
120 #define FLD(f) abuf->fields.sfmt_empty.f
121 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
122 int UNUSED written
= 0;
123 IADDR UNUSED pc
= abuf
->addr
;
124 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
127 #if WITH_SCACHE_PBB_SH64_MEDIA
129 vpc
= sh64_media_pbb_cti_chain (current_cpu
, sem_arg
,
130 pbb_br_type
, pbb_br_npc
);
133 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
134 vpc
= sh64_media_pbb_cti_chain (current_cpu
, sem_arg
,
135 CPU_PBB_BR_TYPE (current_cpu
),
136 CPU_PBB_BR_NPC (current_cpu
));
145 /* x-chain: --chain-- */
148 SEM_FN_NAME (sh64_media
,x_chain
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
150 #define FLD(f) abuf->fields.sfmt_empty.f
151 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
152 int UNUSED written
= 0;
153 IADDR UNUSED pc
= abuf
->addr
;
154 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
157 #if WITH_SCACHE_PBB_SH64_MEDIA
158 vpc
= sh64_media_pbb_chain (current_cpu
, sem_arg
);
169 /* x-begin: --begin-- */
172 SEM_FN_NAME (sh64_media
,x_begin
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
174 #define FLD(f) abuf->fields.sfmt_empty.f
175 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
176 int UNUSED written
= 0;
177 IADDR UNUSED pc
= abuf
->addr
;
178 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 0);
181 #if WITH_SCACHE_PBB_SH64_MEDIA
182 #if defined DEFINE_SWITCH || defined FAST_P
183 /* In the switch case FAST_P is a constant, allowing several optimizations
184 in any called inline functions. */
185 vpc
= sh64_media_pbb_begin (current_cpu
, FAST_P
);
187 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
188 vpc
= sh64_media_pbb_begin (current_cpu
, STATE_RUN_FAST_P (CPU_STATE (current_cpu
)));
190 vpc
= sh64_media_pbb_begin (current_cpu
, 0);
200 /* add: add $rm, $rn, $rd */
203 SEM_FN_NAME (sh64_media
,add
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
205 #define FLD(f) abuf->fields.sfmt_add.f
206 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
207 int UNUSED written
= 0;
208 IADDR UNUSED pc
= abuf
->addr
;
209 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
212 DI opval
= ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
213 SET_H_GR (FLD (f_dest
), opval
);
214 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
221 /* addl: add.l $rm, $rn, $rd */
224 SEM_FN_NAME (sh64_media
,addl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
226 #define FLD(f) abuf->fields.sfmt_add.f
227 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
228 int UNUSED written
= 0;
229 IADDR UNUSED pc
= abuf
->addr
;
230 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
233 DI opval
= ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
234 SET_H_GR (FLD (f_dest
), opval
);
235 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
242 /* addi: addi $rm, $disp10, $rd */
245 SEM_FN_NAME (sh64_media
,addi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
247 #define FLD(f) abuf->fields.sfmt_addi.f
248 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
249 int UNUSED written
= 0;
250 IADDR UNUSED pc
= abuf
->addr
;
251 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
254 DI opval
= ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)));
255 SET_H_GR (FLD (f_dest
), opval
);
256 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
263 /* addil: addi.l $rm, $disp10, $rd */
266 SEM_FN_NAME (sh64_media
,addil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
268 #define FLD(f) abuf->fields.sfmt_addi.f
269 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
270 int UNUSED written
= 0;
271 IADDR UNUSED pc
= abuf
->addr
;
272 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
275 DI opval
= EXTSIDI (ADDSI (EXTSISI (FLD (f_disp10
)), SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)));
276 SET_H_GR (FLD (f_dest
), opval
);
277 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
284 /* addzl: addz.l $rm, $rn, $rd */
287 SEM_FN_NAME (sh64_media
,addzl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
289 #define FLD(f) abuf->fields.sfmt_add.f
290 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
291 int UNUSED written
= 0;
292 IADDR UNUSED pc
= abuf
->addr
;
293 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
296 DI opval
= ZEXTSIDI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
297 SET_H_GR (FLD (f_dest
), opval
);
298 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
305 /* alloco: alloco $rm, $disp6x32 */
308 SEM_FN_NAME (sh64_media
,alloco
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
310 #define FLD(f) abuf->fields.sfmt_xori.f
311 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
312 int UNUSED written
= 0;
313 IADDR UNUSED pc
= abuf
->addr
;
314 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
318 DI opval
= GET_H_GR (FLD (f_left
));
319 SET_H_GR (FLD (f_left
), opval
);
320 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
329 /* and: and $rm, $rn, $rd */
332 SEM_FN_NAME (sh64_media
,and) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
334 #define FLD(f) abuf->fields.sfmt_add.f
335 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
336 int UNUSED written
= 0;
337 IADDR UNUSED pc
= abuf
->addr
;
338 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
341 DI opval
= ANDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
342 SET_H_GR (FLD (f_dest
), opval
);
343 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
350 /* andc: andc $rm, $rn, $rd */
353 SEM_FN_NAME (sh64_media
,andc
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
355 #define FLD(f) abuf->fields.sfmt_add.f
356 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
357 int UNUSED written
= 0;
358 IADDR UNUSED pc
= abuf
->addr
;
359 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
362 DI opval
= ANDDI (GET_H_GR (FLD (f_left
)), INVDI (GET_H_GR (FLD (f_right
))));
363 SET_H_GR (FLD (f_dest
), opval
);
364 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
371 /* andi: andi $rm, $disp10, $rd */
374 SEM_FN_NAME (sh64_media
,andi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
376 #define FLD(f) abuf->fields.sfmt_addi.f
377 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
378 int UNUSED written
= 0;
379 IADDR UNUSED pc
= abuf
->addr
;
380 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
383 DI opval
= ANDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)));
384 SET_H_GR (FLD (f_dest
), opval
);
385 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
392 /* beq: beq$likely $rm, $rn, $tra */
395 SEM_FN_NAME (sh64_media
,beq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
397 #define FLD(f) abuf->fields.sfmt_beq.f
398 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
399 int UNUSED written
= 0;
400 IADDR UNUSED pc
= abuf
->addr
;
402 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
406 if (EQDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
408 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
409 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
411 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
416 abuf
->written
= written
;
417 SEM_BRANCH_FINI (vpc
);
422 /* beqi: beqi$likely $rm, $imm6, $tra */
425 SEM_FN_NAME (sh64_media
,beqi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
427 #define FLD(f) abuf->fields.sfmt_beqi.f
428 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
429 int UNUSED written
= 0;
430 IADDR UNUSED pc
= abuf
->addr
;
432 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
436 if (EQDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm6
)))) {
438 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
439 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
441 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
446 abuf
->written
= written
;
447 SEM_BRANCH_FINI (vpc
);
452 /* bge: bge$likely $rm, $rn, $tra */
455 SEM_FN_NAME (sh64_media
,bge
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
457 #define FLD(f) abuf->fields.sfmt_beq.f
458 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
459 int UNUSED written
= 0;
460 IADDR UNUSED pc
= abuf
->addr
;
462 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
466 if (GEDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
468 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
469 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
471 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
476 abuf
->written
= written
;
477 SEM_BRANCH_FINI (vpc
);
482 /* bgeu: bgeu$likely $rm, $rn, $tra */
485 SEM_FN_NAME (sh64_media
,bgeu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
487 #define FLD(f) abuf->fields.sfmt_beq.f
488 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
489 int UNUSED written
= 0;
490 IADDR UNUSED pc
= abuf
->addr
;
492 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
496 if (GEUDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
498 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
499 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
501 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
506 abuf
->written
= written
;
507 SEM_BRANCH_FINI (vpc
);
512 /* bgt: bgt$likely $rm, $rn, $tra */
515 SEM_FN_NAME (sh64_media
,bgt
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
517 #define FLD(f) abuf->fields.sfmt_beq.f
518 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
519 int UNUSED written
= 0;
520 IADDR UNUSED pc
= abuf
->addr
;
522 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
526 if (GTDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
528 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
529 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
531 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
536 abuf
->written
= written
;
537 SEM_BRANCH_FINI (vpc
);
542 /* bgtu: bgtu$likely $rm, $rn, $tra */
545 SEM_FN_NAME (sh64_media
,bgtu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
547 #define FLD(f) abuf->fields.sfmt_beq.f
548 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
549 int UNUSED written
= 0;
550 IADDR UNUSED pc
= abuf
->addr
;
552 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
556 if (GTUDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
558 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
559 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
561 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
566 abuf
->written
= written
;
567 SEM_BRANCH_FINI (vpc
);
572 /* blink: blink $trb, $rd */
575 SEM_FN_NAME (sh64_media
,blink
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
577 #define FLD(f) abuf->fields.sfmt_blink.f
578 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
579 int UNUSED written
= 0;
580 IADDR UNUSED pc
= abuf
->addr
;
582 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
586 DI opval
= ORDI (ADDDI (pc
, 4), 1);
587 SET_H_GR (FLD (f_dest
), opval
);
588 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
591 UDI opval
= CPU (h_tr
[FLD (f_trb
)]);
592 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
593 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
595 if (EQSI (FLD (f_dest
), 63)) {
602 SEM_BRANCH_FINI (vpc
);
607 /* bne: bne$likely $rm, $rn, $tra */
610 SEM_FN_NAME (sh64_media
,bne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
612 #define FLD(f) abuf->fields.sfmt_beq.f
613 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
614 int UNUSED written
= 0;
615 IADDR UNUSED pc
= abuf
->addr
;
617 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
621 if (NEDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) {
623 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
624 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
626 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
631 abuf
->written
= written
;
632 SEM_BRANCH_FINI (vpc
);
637 /* bnei: bnei$likely $rm, $imm6, $tra */
640 SEM_FN_NAME (sh64_media
,bnei
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
642 #define FLD(f) abuf->fields.sfmt_beqi.f
643 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
644 int UNUSED written
= 0;
645 IADDR UNUSED pc
= abuf
->addr
;
647 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
651 if (NEDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm6
)))) {
653 UDI opval
= CPU (h_tr
[FLD (f_tra
)]);
654 SEM_BRANCH_VIA_ADDR (current_cpu
, sem_arg
, opval
, vpc
);
656 TRACE_RESULT (current_cpu
, abuf
, "pc", 'D', opval
);
661 abuf
->written
= written
;
662 SEM_BRANCH_FINI (vpc
);
670 SEM_FN_NAME (sh64_media
,brk
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
672 #define FLD(f) abuf->fields.sfmt_empty.f
673 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
674 int UNUSED written
= 0;
675 IADDR UNUSED pc
= abuf
->addr
;
676 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
678 sh64_break (current_cpu
, pc
);
684 /* byterev: byterev $rm, $rd */
687 SEM_FN_NAME (sh64_media
,byterev
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
689 #define FLD(f) abuf->fields.sfmt_xori.f
690 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
691 int UNUSED written
= 0;
692 IADDR UNUSED pc
= abuf
->addr
;
693 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
698 tmp_source
= GET_H_GR (FLD (f_left
));
701 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
702 tmp_source
= SRLDI (tmp_source
, 8);
705 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
706 tmp_source
= SRLDI (tmp_source
, 8);
709 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
710 tmp_source
= SRLDI (tmp_source
, 8);
713 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
714 tmp_source
= SRLDI (tmp_source
, 8);
717 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
718 tmp_source
= SRLDI (tmp_source
, 8);
721 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
722 tmp_source
= SRLDI (tmp_source
, 8);
725 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
726 tmp_source
= SRLDI (tmp_source
, 8);
729 tmp_result
= ORDI (SLLDI (tmp_result
, 8), ANDDI (tmp_source
, 255));
730 tmp_source
= SRLDI (tmp_source
, 8);
733 DI opval
= tmp_result
;
734 SET_H_GR (FLD (f_dest
), opval
);
735 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
743 /* cmpeq: cmpeq $rm, $rn, $rd */
746 SEM_FN_NAME (sh64_media
,cmpeq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
748 #define FLD(f) abuf->fields.sfmt_add.f
749 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
750 int UNUSED written
= 0;
751 IADDR UNUSED pc
= abuf
->addr
;
752 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
755 DI opval
= ((EQDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) ? (1) : (0));
756 SET_H_GR (FLD (f_dest
), opval
);
757 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
764 /* cmpgt: cmpgt $rm, $rn, $rd */
767 SEM_FN_NAME (sh64_media
,cmpgt
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
769 #define FLD(f) abuf->fields.sfmt_add.f
770 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
771 int UNUSED written
= 0;
772 IADDR UNUSED pc
= abuf
->addr
;
773 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
776 DI opval
= ((GTDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) ? (1) : (0));
777 SET_H_GR (FLD (f_dest
), opval
);
778 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
785 /* cmpgtu: cmpgtu $rm,$rn, $rd */
788 SEM_FN_NAME (sh64_media
,cmpgtu
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
790 #define FLD(f) abuf->fields.sfmt_add.f
791 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
792 int UNUSED written
= 0;
793 IADDR UNUSED pc
= abuf
->addr
;
794 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
797 DI opval
= ((GTUDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))) ? (1) : (0));
798 SET_H_GR (FLD (f_dest
), opval
);
799 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
806 /* cmveq: cmveq $rm, $rn, $rd */
809 SEM_FN_NAME (sh64_media
,cmveq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
811 #define FLD(f) abuf->fields.sfmt_add.f
812 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
813 int UNUSED written
= 0;
814 IADDR UNUSED pc
= abuf
->addr
;
815 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
817 if (EQDI (GET_H_GR (FLD (f_left
)), 0)) {
819 DI opval
= GET_H_GR (FLD (f_right
));
820 SET_H_GR (FLD (f_dest
), opval
);
822 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
826 abuf
->written
= written
;
831 /* cmvne: cmvne $rm, $rn, $rd */
834 SEM_FN_NAME (sh64_media
,cmvne
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
836 #define FLD(f) abuf->fields.sfmt_add.f
837 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
838 int UNUSED written
= 0;
839 IADDR UNUSED pc
= abuf
->addr
;
840 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
842 if (NEDI (GET_H_GR (FLD (f_left
)), 0)) {
844 DI opval
= GET_H_GR (FLD (f_right
));
845 SET_H_GR (FLD (f_dest
), opval
);
847 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
851 abuf
->written
= written
;
856 /* fabsd: fabs.d $drgh, $drf */
859 SEM_FN_NAME (sh64_media
,fabsd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
861 #define FLD(f) abuf->fields.sfmt_fabsd.f
862 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
863 int UNUSED written
= 0;
864 IADDR UNUSED pc
= abuf
->addr
;
865 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
868 DF opval
= sh64_fabsd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
869 SET_H_DR (FLD (f_dest
), opval
);
870 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
877 /* fabss: fabs.s $frgh, $frf */
880 SEM_FN_NAME (sh64_media
,fabss
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
882 #define FLD(f) abuf->fields.sfmt_fabsd.f
883 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
884 int UNUSED written
= 0;
885 IADDR UNUSED pc
= abuf
->addr
;
886 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
889 SF opval
= sh64_fabss (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
890 CPU (h_fr
[FLD (f_dest
)]) = opval
;
891 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
898 /* faddd: fadd.d $drg, $drh, $drf */
901 SEM_FN_NAME (sh64_media
,faddd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
903 #define FLD(f) abuf->fields.sfmt_add.f
904 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
905 int UNUSED written
= 0;
906 IADDR UNUSED pc
= abuf
->addr
;
907 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
910 DF opval
= sh64_faddd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
911 SET_H_DR (FLD (f_dest
), opval
);
912 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
919 /* fadds: fadd.s $frg, $frh, $frf */
922 SEM_FN_NAME (sh64_media
,fadds
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
924 #define FLD(f) abuf->fields.sfmt_add.f
925 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
926 int UNUSED written
= 0;
927 IADDR UNUSED pc
= abuf
->addr
;
928 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
931 SF opval
= sh64_fadds (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
932 CPU (h_fr
[FLD (f_dest
)]) = opval
;
933 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
940 /* fcmpeqd: fcmpeq.d $drg, $drh, $rd */
943 SEM_FN_NAME (sh64_media
,fcmpeqd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
945 #define FLD(f) abuf->fields.sfmt_add.f
946 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
947 int UNUSED written
= 0;
948 IADDR UNUSED pc
= abuf
->addr
;
949 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
952 DI opval
= ZEXTBIDI (sh64_fcmpeqd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
953 SET_H_GR (FLD (f_dest
), opval
);
954 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
961 /* fcmpeqs: fcmpeq.s $frg, $frh, $rd */
964 SEM_FN_NAME (sh64_media
,fcmpeqs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
966 #define FLD(f) abuf->fields.sfmt_add.f
967 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
968 int UNUSED written
= 0;
969 IADDR UNUSED pc
= abuf
->addr
;
970 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
973 DI opval
= ZEXTBIDI (sh64_fcmpeqs (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
974 SET_H_GR (FLD (f_dest
), opval
);
975 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
982 /* fcmpged: fcmpge.d $drg, $drh, $rd */
985 SEM_FN_NAME (sh64_media
,fcmpged
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
987 #define FLD(f) abuf->fields.sfmt_add.f
988 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
989 int UNUSED written
= 0;
990 IADDR UNUSED pc
= abuf
->addr
;
991 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
994 DI opval
= ZEXTBIDI (sh64_fcmpged (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
995 SET_H_GR (FLD (f_dest
), opval
);
996 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1003 /* fcmpges: fcmpge.s $frg, $frh, $rd */
1006 SEM_FN_NAME (sh64_media
,fcmpges
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1008 #define FLD(f) abuf->fields.sfmt_add.f
1009 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1010 int UNUSED written
= 0;
1011 IADDR UNUSED pc
= abuf
->addr
;
1012 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1015 DI opval
= ZEXTBIDI (sh64_fcmpges (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
1016 SET_H_GR (FLD (f_dest
), opval
);
1017 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1024 /* fcmpgtd: fcmpgt.d $drg, $drh, $rd */
1027 SEM_FN_NAME (sh64_media
,fcmpgtd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1029 #define FLD(f) abuf->fields.sfmt_add.f
1030 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1031 int UNUSED written
= 0;
1032 IADDR UNUSED pc
= abuf
->addr
;
1033 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1036 DI opval
= ZEXTBIDI (sh64_fcmpgtd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
1037 SET_H_GR (FLD (f_dest
), opval
);
1038 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1045 /* fcmpgts: fcmpgt.s $frg, $frh, $rd */
1048 SEM_FN_NAME (sh64_media
,fcmpgts
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1050 #define FLD(f) abuf->fields.sfmt_add.f
1051 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1052 int UNUSED written
= 0;
1053 IADDR UNUSED pc
= abuf
->addr
;
1054 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1057 DI opval
= ZEXTBIDI (sh64_fcmpgts (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
1058 SET_H_GR (FLD (f_dest
), opval
);
1059 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1066 /* fcmpund: fcmpun.d $drg, $drh, $rd */
1069 SEM_FN_NAME (sh64_media
,fcmpund
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1071 #define FLD(f) abuf->fields.sfmt_add.f
1072 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1073 int UNUSED written
= 0;
1074 IADDR UNUSED pc
= abuf
->addr
;
1075 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1078 DI opval
= ZEXTBIDI (sh64_fcmpund (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
))));
1079 SET_H_GR (FLD (f_dest
), opval
);
1080 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1087 /* fcmpuns: fcmpun.s $frg, $frh, $rd */
1090 SEM_FN_NAME (sh64_media
,fcmpuns
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1092 #define FLD(f) abuf->fields.sfmt_add.f
1093 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1094 int UNUSED written
= 0;
1095 IADDR UNUSED pc
= abuf
->addr
;
1096 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1099 DI opval
= ZEXTBIDI (sh64_fcmpuns (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)])));
1100 SET_H_GR (FLD (f_dest
), opval
);
1101 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1108 /* fcnvds: fcnv.ds $drgh, $frf */
1111 SEM_FN_NAME (sh64_media
,fcnvds
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1113 #define FLD(f) abuf->fields.sfmt_fabsd.f
1114 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1115 int UNUSED written
= 0;
1116 IADDR UNUSED pc
= abuf
->addr
;
1117 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1120 SF opval
= sh64_fcnvds (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1121 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1122 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1129 /* fcnvsd: fcnv.sd $frgh, $drf */
1132 SEM_FN_NAME (sh64_media
,fcnvsd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1134 #define FLD(f) abuf->fields.sfmt_fabsd.f
1135 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1136 int UNUSED written
= 0;
1137 IADDR UNUSED pc
= abuf
->addr
;
1138 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1141 DF opval
= sh64_fcnvsd (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1142 SET_H_DR (FLD (f_dest
), opval
);
1143 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1150 /* fdivd: fdiv.d $drg, $drh, $drf */
1153 SEM_FN_NAME (sh64_media
,fdivd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1155 #define FLD(f) abuf->fields.sfmt_add.f
1156 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1157 int UNUSED written
= 0;
1158 IADDR UNUSED pc
= abuf
->addr
;
1159 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1162 DF opval
= sh64_fdivd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
1163 SET_H_DR (FLD (f_dest
), opval
);
1164 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1171 /* fdivs: fdiv.s $frg, $frh, $frf */
1174 SEM_FN_NAME (sh64_media
,fdivs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1176 #define FLD(f) abuf->fields.sfmt_add.f
1177 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1178 int UNUSED written
= 0;
1179 IADDR UNUSED pc
= abuf
->addr
;
1180 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1183 SF opval
= sh64_fdivs (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
1184 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1185 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1192 /* fgetscr: fgetscr $frf */
1195 SEM_FN_NAME (sh64_media
,fgetscr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1197 #define FLD(f) abuf->fields.sfmt_shori.f
1198 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1199 int UNUSED written
= 0;
1200 IADDR UNUSED pc
= abuf
->addr
;
1201 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1204 SF opval
= SUBWORDSISF (CPU (h_fpscr
));
1205 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1206 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1213 /* fiprs: fipr.s $fvg, $fvh, $frf */
1216 SEM_FN_NAME (sh64_media
,fiprs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1218 #define FLD(f) abuf->fields.sfmt_add.f
1219 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1220 int UNUSED written
= 0;
1221 IADDR UNUSED pc
= abuf
->addr
;
1222 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1226 SF opval
= GET_H_FV (FLD (f_left
));
1227 SET_H_FV (FLD (f_left
), opval
);
1228 TRACE_RESULT (current_cpu
, abuf
, "fv", 'f', opval
);
1231 SF opval
= GET_H_FV (FLD (f_right
));
1232 SET_H_FV (FLD (f_right
), opval
);
1233 TRACE_RESULT (current_cpu
, abuf
, "fv", 'f', opval
);
1236 SF opval
= sh64_fiprs (current_cpu
, FLD (f_left
), FLD (f_right
));
1237 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1238 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1246 /* fldd: fld.d $rm, $disp10x8, $drf */
1249 SEM_FN_NAME (sh64_media
,fldd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1251 #define FLD(f) abuf->fields.sfmt_fldd.f
1252 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1253 int UNUSED written
= 0;
1254 IADDR UNUSED pc
= abuf
->addr
;
1255 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1258 DF opval
= GETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
)));
1259 SET_H_DR (FLD (f_dest
), opval
);
1260 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1267 /* fldp: fld.p $rm, $disp10x8, $fpf */
1270 SEM_FN_NAME (sh64_media
,fldp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1272 #define FLD(f) abuf->fields.sfmt_fldd.f
1273 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1274 int UNUSED written
= 0;
1275 IADDR UNUSED pc
= abuf
->addr
;
1276 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1280 SF opval
= GET_H_FP (FLD (f_dest
));
1281 SET_H_FP (FLD (f_dest
), opval
);
1282 TRACE_RESULT (current_cpu
, abuf
, "fp", 'f', opval
);
1284 sh64_fldp (current_cpu
, pc
, GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
), FLD (f_dest
));
1291 /* flds: fld.s $rm, $disp10x4, $frf */
1294 SEM_FN_NAME (sh64_media
,flds
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1296 #define FLD(f) abuf->fields.sfmt_flds.f
1297 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1298 int UNUSED written
= 0;
1299 IADDR UNUSED pc
= abuf
->addr
;
1300 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1303 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x4
)));
1304 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1305 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1312 /* fldxd: fldx.d $rm, $rn, $drf */
1315 SEM_FN_NAME (sh64_media
,fldxd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1317 #define FLD(f) abuf->fields.sfmt_add.f
1318 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1319 int UNUSED written
= 0;
1320 IADDR UNUSED pc
= abuf
->addr
;
1321 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1324 DF opval
= GETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
1325 SET_H_DR (FLD (f_dest
), opval
);
1326 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1333 /* fldxp: fldx.p $rm, $rn, $fpf */
1336 SEM_FN_NAME (sh64_media
,fldxp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1338 #define FLD(f) abuf->fields.sfmt_add.f
1339 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1340 int UNUSED written
= 0;
1341 IADDR UNUSED pc
= abuf
->addr
;
1342 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1346 SF opval
= GET_H_FP (FLD (f_dest
));
1347 SET_H_FP (FLD (f_dest
), opval
);
1348 TRACE_RESULT (current_cpu
, abuf
, "fp", 'f', opval
);
1350 sh64_fldp (current_cpu
, pc
, GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)), FLD (f_dest
));
1357 /* fldxs: fldx.s $rm, $rn, $frf */
1360 SEM_FN_NAME (sh64_media
,fldxs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1362 #define FLD(f) abuf->fields.sfmt_add.f
1363 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1364 int UNUSED written
= 0;
1365 IADDR UNUSED pc
= abuf
->addr
;
1366 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1369 SF opval
= GETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
1370 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1371 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1378 /* floatld: float.ld $frgh, $drf */
1381 SEM_FN_NAME (sh64_media
,floatld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1383 #define FLD(f) abuf->fields.sfmt_fabsd.f
1384 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1385 int UNUSED written
= 0;
1386 IADDR UNUSED pc
= abuf
->addr
;
1387 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1390 DF opval
= sh64_floatld (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1391 SET_H_DR (FLD (f_dest
), opval
);
1392 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1399 /* floatls: float.ls $frgh, $frf */
1402 SEM_FN_NAME (sh64_media
,floatls
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1404 #define FLD(f) abuf->fields.sfmt_fabsd.f
1405 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1406 int UNUSED written
= 0;
1407 IADDR UNUSED pc
= abuf
->addr
;
1408 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1411 SF opval
= sh64_floatls (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1412 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1413 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1420 /* floatqd: float.qd $drgh, $drf */
1423 SEM_FN_NAME (sh64_media
,floatqd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1425 #define FLD(f) abuf->fields.sfmt_fabsd.f
1426 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1427 int UNUSED written
= 0;
1428 IADDR UNUSED pc
= abuf
->addr
;
1429 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1432 DF opval
= sh64_floatqd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1433 SET_H_DR (FLD (f_dest
), opval
);
1434 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1441 /* floatqs: float.qs $drgh, $frf */
1444 SEM_FN_NAME (sh64_media
,floatqs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1446 #define FLD(f) abuf->fields.sfmt_fabsd.f
1447 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1448 int UNUSED written
= 0;
1449 IADDR UNUSED pc
= abuf
->addr
;
1450 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1453 SF opval
= sh64_floatqs (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1454 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1455 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1462 /* fmacs: fmac.s $frg, $frh, $frf */
1465 SEM_FN_NAME (sh64_media
,fmacs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1467 #define FLD(f) abuf->fields.sfmt_add.f
1468 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1469 int UNUSED written
= 0;
1470 IADDR UNUSED pc
= abuf
->addr
;
1471 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1474 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
)])));
1475 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1476 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1483 /* fmovd: fmov.d $drgh, $drf */
1486 SEM_FN_NAME (sh64_media
,fmovd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1488 #define FLD(f) abuf->fields.sfmt_fabsd.f
1489 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1490 int UNUSED written
= 0;
1491 IADDR UNUSED pc
= abuf
->addr
;
1492 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1495 DF opval
= GET_H_DR (FLD (f_left_right
));
1496 SET_H_DR (FLD (f_dest
), opval
);
1497 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1504 /* fmovdq: fmov.dq $drgh, $rd */
1507 SEM_FN_NAME (sh64_media
,fmovdq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1509 #define FLD(f) abuf->fields.sfmt_fabsd.f
1510 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1511 int UNUSED written
= 0;
1512 IADDR UNUSED pc
= abuf
->addr
;
1513 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1516 DI opval
= SUBWORDDFDI (GET_H_DR (FLD (f_left_right
)));
1517 SET_H_GR (FLD (f_dest
), opval
);
1518 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1525 /* fmovls: fmov.ls $rm, $frf */
1528 SEM_FN_NAME (sh64_media
,fmovls
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1530 #define FLD(f) abuf->fields.sfmt_xori.f
1531 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1532 int UNUSED written
= 0;
1533 IADDR UNUSED pc
= abuf
->addr
;
1534 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1537 SF opval
= SUBWORDSISF (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1));
1538 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1539 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1546 /* fmovqd: fmov.qd $rm, $drf */
1549 SEM_FN_NAME (sh64_media
,fmovqd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1551 #define FLD(f) abuf->fields.sfmt_xori.f
1552 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1553 int UNUSED written
= 0;
1554 IADDR UNUSED pc
= abuf
->addr
;
1555 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1558 DF opval
= SUBWORDDIDF (GET_H_GR (FLD (f_left
)));
1559 SET_H_DR (FLD (f_dest
), opval
);
1560 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1567 /* fmovs: fmov.s $frgh, $frf */
1570 SEM_FN_NAME (sh64_media
,fmovs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1572 #define FLD(f) abuf->fields.sfmt_fabsd.f
1573 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1574 int UNUSED written
= 0;
1575 IADDR UNUSED pc
= abuf
->addr
;
1576 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1579 SF opval
= CPU (h_fr
[FLD (f_left_right
)]);
1580 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1581 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1588 /* fmovsl: fmov.sl $frgh, $rd */
1591 SEM_FN_NAME (sh64_media
,fmovsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1593 #define FLD(f) abuf->fields.sfmt_fabsd.f
1594 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1595 int UNUSED written
= 0;
1596 IADDR UNUSED pc
= abuf
->addr
;
1597 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1600 DI opval
= EXTSIDI (SUBWORDSFSI (CPU (h_fr
[FLD (f_left_right
)])));
1601 SET_H_GR (FLD (f_dest
), opval
);
1602 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
1609 /* fmuld: fmul.d $drg, $drh, $drf */
1612 SEM_FN_NAME (sh64_media
,fmuld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1614 #define FLD(f) abuf->fields.sfmt_add.f
1615 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1616 int UNUSED written
= 0;
1617 IADDR UNUSED pc
= abuf
->addr
;
1618 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1621 DF opval
= sh64_fmuld (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
1622 SET_H_DR (FLD (f_dest
), opval
);
1623 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1630 /* fmuls: fmul.s $frg, $frh, $frf */
1633 SEM_FN_NAME (sh64_media
,fmuls
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1635 #define FLD(f) abuf->fields.sfmt_add.f
1636 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1637 int UNUSED written
= 0;
1638 IADDR UNUSED pc
= abuf
->addr
;
1639 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1642 SF opval
= sh64_fmuls (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
1643 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1644 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1651 /* fnegd: fneg.d $drgh, $drf */
1654 SEM_FN_NAME (sh64_media
,fnegd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1656 #define FLD(f) abuf->fields.sfmt_fabsd.f
1657 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1658 int UNUSED written
= 0;
1659 IADDR UNUSED pc
= abuf
->addr
;
1660 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1663 DF opval
= sh64_fnegd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1664 SET_H_DR (FLD (f_dest
), opval
);
1665 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1672 /* fnegs: fneg.s $frgh, $frf */
1675 SEM_FN_NAME (sh64_media
,fnegs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1677 #define FLD(f) abuf->fields.sfmt_fabsd.f
1678 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1679 int UNUSED written
= 0;
1680 IADDR UNUSED pc
= abuf
->addr
;
1681 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1684 SF opval
= sh64_fnegs (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1685 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1686 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1693 /* fputscr: fputscr $frgh */
1696 SEM_FN_NAME (sh64_media
,fputscr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1698 #define FLD(f) abuf->fields.sfmt_fabsd.f
1699 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1700 int UNUSED written
= 0;
1701 IADDR UNUSED pc
= abuf
->addr
;
1702 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1705 SI opval
= SUBWORDSFSI (CPU (h_fr
[FLD (f_left_right
)]));
1706 CPU (h_fpscr
) = opval
;
1707 TRACE_RESULT (current_cpu
, abuf
, "fpscr", 'x', opval
);
1714 /* fsqrtd: fsqrt.d $drgh, $drf */
1717 SEM_FN_NAME (sh64_media
,fsqrtd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1719 #define FLD(f) abuf->fields.sfmt_fabsd.f
1720 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1721 int UNUSED written
= 0;
1722 IADDR UNUSED pc
= abuf
->addr
;
1723 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1726 DF opval
= sh64_fsqrtd (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1727 SET_H_DR (FLD (f_dest
), opval
);
1728 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1735 /* fsqrts: fsqrt.s $frgh, $frf */
1738 SEM_FN_NAME (sh64_media
,fsqrts
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1740 #define FLD(f) abuf->fields.sfmt_fabsd.f
1741 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1742 int UNUSED written
= 0;
1743 IADDR UNUSED pc
= abuf
->addr
;
1744 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1747 SF opval
= sh64_fsqrts (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1748 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1749 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1756 /* fstd: fst.d $rm, $disp10x8, $drf */
1759 SEM_FN_NAME (sh64_media
,fstd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1761 #define FLD(f) abuf->fields.sfmt_fldd.f
1762 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1763 int UNUSED written
= 0;
1764 IADDR UNUSED pc
= abuf
->addr
;
1765 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1768 DF opval
= GET_H_DR (FLD (f_dest
));
1769 SETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
)), opval
);
1770 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1777 /* fstp: fst.p $rm, $disp10x8, $fpf */
1780 SEM_FN_NAME (sh64_media
,fstp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1782 #define FLD(f) abuf->fields.sfmt_fldd.f
1783 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1784 int UNUSED written
= 0;
1785 IADDR UNUSED pc
= abuf
->addr
;
1786 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1790 SF opval
= GET_H_FP (FLD (f_dest
));
1791 SET_H_FP (FLD (f_dest
), opval
);
1792 TRACE_RESULT (current_cpu
, abuf
, "fp", 'f', opval
);
1794 sh64_fstp (current_cpu
, pc
, GET_H_GR (FLD (f_left
)), FLD (f_disp10x8
), FLD (f_dest
));
1801 /* fsts: fst.s $rm, $disp10x4, $frf */
1804 SEM_FN_NAME (sh64_media
,fsts
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1806 #define FLD(f) abuf->fields.sfmt_flds.f
1807 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1808 int UNUSED written
= 0;
1809 IADDR UNUSED pc
= abuf
->addr
;
1810 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1813 SF opval
= CPU (h_fr
[FLD (f_dest
)]);
1814 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp10x4
)), opval
);
1815 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1822 /* fstxd: fstx.d $rm, $rn, $drf */
1825 SEM_FN_NAME (sh64_media
,fstxd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1827 #define FLD(f) abuf->fields.sfmt_add.f
1828 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1829 int UNUSED written
= 0;
1830 IADDR UNUSED pc
= abuf
->addr
;
1831 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1834 DF opval
= GET_H_DR (FLD (f_dest
));
1835 SETMEMDF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
1836 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1843 /* fstxp: fstx.p $rm, $rn, $fpf */
1846 SEM_FN_NAME (sh64_media
,fstxp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1848 #define FLD(f) abuf->fields.sfmt_add.f
1849 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1850 int UNUSED written
= 0;
1851 IADDR UNUSED pc
= abuf
->addr
;
1852 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1856 SF opval
= GET_H_FP (FLD (f_dest
));
1857 SET_H_FP (FLD (f_dest
), opval
);
1858 TRACE_RESULT (current_cpu
, abuf
, "fp", 'f', opval
);
1860 sh64_fstp (current_cpu
, pc
, GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)), FLD (f_dest
));
1867 /* fstxs: fstx.s $rm, $rn, $frf */
1870 SEM_FN_NAME (sh64_media
,fstxs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1872 #define FLD(f) abuf->fields.sfmt_add.f
1873 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1874 int UNUSED written
= 0;
1875 IADDR UNUSED pc
= abuf
->addr
;
1876 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1879 SF opval
= CPU (h_fr
[FLD (f_dest
)]);
1880 SETMEMSF (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
1881 TRACE_RESULT (current_cpu
, abuf
, "memory", 'f', opval
);
1888 /* fsubd: fsub.d $drg, $drh, $drf */
1891 SEM_FN_NAME (sh64_media
,fsubd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1893 #define FLD(f) abuf->fields.sfmt_add.f
1894 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1895 int UNUSED written
= 0;
1896 IADDR UNUSED pc
= abuf
->addr
;
1897 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1900 DF opval
= sh64_fsubd (current_cpu
, GET_H_DR (FLD (f_left
)), GET_H_DR (FLD (f_right
)));
1901 SET_H_DR (FLD (f_dest
), opval
);
1902 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1909 /* fsubs: fsub.s $frg, $frh, $frf */
1912 SEM_FN_NAME (sh64_media
,fsubs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1914 #define FLD(f) abuf->fields.sfmt_add.f
1915 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1916 int UNUSED written
= 0;
1917 IADDR UNUSED pc
= abuf
->addr
;
1918 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1921 SF opval
= sh64_fsubs (current_cpu
, CPU (h_fr
[FLD (f_left
)]), CPU (h_fr
[FLD (f_right
)]));
1922 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1923 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1930 /* ftrcdl: ftrc.dl $drgh, $frf */
1933 SEM_FN_NAME (sh64_media
,ftrcdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1935 #define FLD(f) abuf->fields.sfmt_fabsd.f
1936 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1937 int UNUSED written
= 0;
1938 IADDR UNUSED pc
= abuf
->addr
;
1939 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1942 SF opval
= sh64_ftrcdl (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1943 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1944 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1951 /* ftrcsl: ftrc.sl $frgh, $frf */
1954 SEM_FN_NAME (sh64_media
,ftrcsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1956 #define FLD(f) abuf->fields.sfmt_fabsd.f
1957 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1958 int UNUSED written
= 0;
1959 IADDR UNUSED pc
= abuf
->addr
;
1960 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1963 SF opval
= sh64_ftrcsl (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
1964 CPU (h_fr
[FLD (f_dest
)]) = opval
;
1965 TRACE_RESULT (current_cpu
, abuf
, "fr", 'f', opval
);
1972 /* ftrcdq: ftrc.dq $drgh, $drf */
1975 SEM_FN_NAME (sh64_media
,ftrcdq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1977 #define FLD(f) abuf->fields.sfmt_fabsd.f
1978 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
1979 int UNUSED written
= 0;
1980 IADDR UNUSED pc
= abuf
->addr
;
1981 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
1984 DF opval
= sh64_ftrcdq (current_cpu
, GET_H_DR (FLD (f_left_right
)));
1985 SET_H_DR (FLD (f_dest
), opval
);
1986 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
1993 /* ftrcsq: ftrc.sq $frgh, $drf */
1996 SEM_FN_NAME (sh64_media
,ftrcsq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
1998 #define FLD(f) abuf->fields.sfmt_fabsd.f
1999 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2000 int UNUSED written
= 0;
2001 IADDR UNUSED pc
= abuf
->addr
;
2002 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2005 DF opval
= sh64_ftrcsq (current_cpu
, CPU (h_fr
[FLD (f_left_right
)]));
2006 SET_H_DR (FLD (f_dest
), opval
);
2007 TRACE_RESULT (current_cpu
, abuf
, "dr", 'f', opval
);
2014 /* ftrvs: ftrv.s $mtrxg, $fvh, $fvf */
2017 SEM_FN_NAME (sh64_media
,ftrvs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2019 #define FLD(f) abuf->fields.sfmt_add.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);
2027 SF opval
= GET_H_FMTX (FLD (f_left
));
2028 SET_H_FMTX (FLD (f_left
), opval
);
2029 TRACE_RESULT (current_cpu
, abuf
, "fmtx", 'f', opval
);
2032 SF opval
= GET_H_FV (FLD (f_right
));
2033 SET_H_FV (FLD (f_right
), opval
);
2034 TRACE_RESULT (current_cpu
, abuf
, "fv", 'f', opval
);
2037 SF opval
= GET_H_FV (FLD (f_dest
));
2038 SET_H_FV (FLD (f_dest
), opval
);
2039 TRACE_RESULT (current_cpu
, abuf
, "fv", 'f', opval
);
2041 sh64_ftrvs (current_cpu
, FLD (f_left
), FLD (f_right
), FLD (f_dest
));
2048 /* getcfg: getcfg $rm, $disp6, $rd */
2051 SEM_FN_NAME (sh64_media
,getcfg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2053 #define FLD(f) abuf->fields.sfmt_getcfg.f
2054 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2055 int UNUSED written
= 0;
2056 IADDR UNUSED pc
= abuf
->addr
;
2057 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2061 tmp_address
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2064 DI opval
= GETMEMSI (current_cpu
, pc
, tmp_address
);
2065 SET_H_GR (FLD (f_dest
), opval
);
2066 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2074 /* getcon: getcon $crk, $rd */
2077 SEM_FN_NAME (sh64_media
,getcon
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2079 #define FLD(f) abuf->fields.sfmt_xori.f
2080 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2081 int UNUSED written
= 0;
2082 IADDR UNUSED pc
= abuf
->addr
;
2083 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2086 DI opval
= GET_H_CR (FLD (f_left
));
2087 SET_H_GR (FLD (f_dest
), opval
);
2088 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2095 /* gettr: gettr $trb, $rd */
2098 SEM_FN_NAME (sh64_media
,gettr
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2100 #define FLD(f) abuf->fields.sfmt_blink.f
2101 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2102 int UNUSED written
= 0;
2103 IADDR UNUSED pc
= abuf
->addr
;
2104 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2107 DI opval
= CPU (h_tr
[FLD (f_trb
)]);
2108 SET_H_GR (FLD (f_dest
), opval
);
2109 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2116 /* icbi: icbi $rm, $disp6x32 */
2119 SEM_FN_NAME (sh64_media
,icbi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2121 #define FLD(f) abuf->fields.sfmt_xori.f
2122 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2123 int UNUSED written
= 0;
2124 IADDR UNUSED pc
= abuf
->addr
;
2125 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2129 DI opval
= GET_H_GR (FLD (f_left
));
2130 SET_H_GR (FLD (f_left
), opval
);
2131 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2140 /* ldb: ld.b $rm, $disp10, $rd */
2143 SEM_FN_NAME (sh64_media
,ldb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2145 #define FLD(f) abuf->fields.sfmt_addi.f
2146 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2147 int UNUSED written
= 0;
2148 IADDR UNUSED pc
= abuf
->addr
;
2149 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2152 DI opval
= EXTQIDI (GETMEMQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)))));
2153 SET_H_GR (FLD (f_dest
), opval
);
2154 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2161 /* ldl: ld.l $rm, $disp10x4, $rd */
2164 SEM_FN_NAME (sh64_media
,ldl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2166 #define FLD(f) abuf->fields.sfmt_flds.f
2167 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2168 int UNUSED written
= 0;
2169 IADDR UNUSED pc
= abuf
->addr
;
2170 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2173 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x4
)))));
2174 SET_H_GR (FLD (f_dest
), opval
);
2175 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2182 /* ldq: ld.q $rm, $disp10x8, $rd */
2185 SEM_FN_NAME (sh64_media
,ldq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2187 #define FLD(f) abuf->fields.sfmt_fldd.f
2188 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2189 int UNUSED written
= 0;
2190 IADDR UNUSED pc
= abuf
->addr
;
2191 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2194 DI opval
= GETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x8
))));
2195 SET_H_GR (FLD (f_dest
), opval
);
2196 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2203 /* ldub: ld.ub $rm, $disp10, $rd */
2206 SEM_FN_NAME (sh64_media
,ldub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2208 #define FLD(f) abuf->fields.sfmt_addi.f
2209 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2210 int UNUSED written
= 0;
2211 IADDR UNUSED pc
= abuf
->addr
;
2212 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2215 DI opval
= ZEXTQIDI (GETMEMQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
)))));
2216 SET_H_GR (FLD (f_dest
), opval
);
2217 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2224 /* lduw: ld.uw $rm, $disp10x2, $rd */
2227 SEM_FN_NAME (sh64_media
,lduw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2229 #define FLD(f) abuf->fields.sfmt_lduw.f
2230 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2231 int UNUSED written
= 0;
2232 IADDR UNUSED pc
= abuf
->addr
;
2233 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2236 DI opval
= ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x2
)))));
2237 SET_H_GR (FLD (f_dest
), opval
);
2238 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2245 /* ldw: ld.w $rm, $disp10x2, $rd */
2248 SEM_FN_NAME (sh64_media
,ldw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2250 #define FLD(f) abuf->fields.sfmt_lduw.f
2251 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2252 int UNUSED written
= 0;
2253 IADDR UNUSED pc
= abuf
->addr
;
2254 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2257 DI opval
= EXTHIDI (GETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x2
)))));
2258 SET_H_GR (FLD (f_dest
), opval
);
2259 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2266 /* ldhil: ldhi.l $rm, $disp6, $rd */
2269 SEM_FN_NAME (sh64_media
,ldhil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2271 #define FLD(f) abuf->fields.sfmt_getcfg.f
2272 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2273 int UNUSED written
= 0;
2274 IADDR UNUSED pc
= abuf
->addr
;
2275 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2281 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2282 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 3), 1);
2284 if (ANDQI (tmp_bytecount
, 4)) {
2286 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -4)));
2287 SET_H_GR (FLD (f_dest
), opval
);
2288 written
|= (1 << 6);
2289 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2292 if (GET_H_ENDIAN ()) {
2294 if (ANDQI (tmp_bytecount
, 2)) {
2295 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2297 if (ANDQI (tmp_bytecount
, 1)) {
2298 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2301 DI opval
= EXTSIDI (tmp_val
);
2302 SET_H_GR (FLD (f_dest
), opval
);
2303 written
|= (1 << 6);
2304 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2309 if (ANDQI (tmp_bytecount
, 1)) {
2310 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2312 if (ANDQI (tmp_bytecount
, 2)) {
2313 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2316 DI opval
= EXTSIDI (SLLSI (tmp_val
, SUBSI (32, MULSI (8, tmp_bytecount
))));
2317 SET_H_GR (FLD (f_dest
), opval
);
2318 written
|= (1 << 6);
2319 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2326 abuf
->written
= written
;
2331 /* ldhiq: ldhi.q $rm, $disp6, $rd */
2334 SEM_FN_NAME (sh64_media
,ldhiq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2336 #define FLD(f) abuf->fields.sfmt_getcfg.f
2337 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2338 int UNUSED written
= 0;
2339 IADDR UNUSED pc
= abuf
->addr
;
2340 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2346 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2347 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 7), 1);
2349 if (ANDQI (tmp_bytecount
, 8)) {
2351 DI opval
= GETMEMDI (current_cpu
, pc
, ANDDI (tmp_addr
, -8));
2352 SET_H_GR (FLD (f_dest
), opval
);
2353 written
|= (1 << 7);
2354 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2357 if (GET_H_ENDIAN ()) {
2359 if (ANDQI (tmp_bytecount
, 4)) {
2360 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8))));
2362 if (ANDQI (tmp_bytecount
, 2)) {
2363 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2365 if (ANDQI (tmp_bytecount
, 1)) {
2366 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2370 SET_H_GR (FLD (f_dest
), opval
);
2371 written
|= (1 << 7);
2372 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2377 if (ANDQI (tmp_bytecount
, 1)) {
2378 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2380 if (ANDQI (tmp_bytecount
, 2)) {
2381 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4))));
2383 if (ANDQI (tmp_bytecount
, 4)) {
2384 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8))));
2387 DI opval
= SLLDI (tmp_val
, SUBSI (64, MULSI (8, tmp_bytecount
)));
2388 SET_H_GR (FLD (f_dest
), opval
);
2389 written
|= (1 << 7);
2390 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2397 abuf
->written
= written
;
2402 /* ldlol: ldlo.l $rm, $disp6, $rd */
2405 SEM_FN_NAME (sh64_media
,ldlol
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2407 #define FLD(f) abuf->fields.sfmt_getcfg.f
2408 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2409 int UNUSED written
= 0;
2410 IADDR UNUSED pc
= abuf
->addr
;
2411 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2417 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2418 tmp_bytecount
= SUBSI (4, ANDDI (tmp_addr
, 3));
2420 if (ANDQI (tmp_bytecount
, 4)) {
2422 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, tmp_addr
));
2423 SET_H_GR (FLD (f_dest
), opval
);
2424 written
|= (1 << 6);
2425 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2428 if (GET_H_ENDIAN ()) {
2430 if (ANDQI (tmp_bytecount
, 1)) {
2431 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2433 if (ANDQI (tmp_bytecount
, 2)) {
2434 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2437 DI opval
= EXTSIDI (SLLSI (tmp_val
, SUBSI (32, MULSI (8, tmp_bytecount
))));
2438 SET_H_GR (FLD (f_dest
), opval
);
2439 written
|= (1 << 6);
2440 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2445 if (ANDQI (tmp_bytecount
, 2)) {
2446 tmp_val
= ADDSI (SLLSI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2448 if (ANDQI (tmp_bytecount
, 1)) {
2449 tmp_val
= ADDSI (SLLSI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2452 DI opval
= EXTSIDI (tmp_val
);
2453 SET_H_GR (FLD (f_dest
), opval
);
2454 written
|= (1 << 6);
2455 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2462 abuf
->written
= written
;
2467 /* ldloq: ldlo.q $rm, $disp6, $rd */
2470 SEM_FN_NAME (sh64_media
,ldloq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2472 #define FLD(f) abuf->fields.sfmt_getcfg.f
2473 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2474 int UNUSED written
= 0;
2475 IADDR UNUSED pc
= abuf
->addr
;
2476 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2482 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
2483 tmp_bytecount
= SUBSI (8, ANDDI (tmp_addr
, 7));
2485 if (ANDQI (tmp_bytecount
, 8)) {
2487 DI opval
= GETMEMDI (current_cpu
, pc
, tmp_addr
);
2488 SET_H_GR (FLD (f_dest
), opval
);
2489 written
|= (1 << 7);
2490 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2493 if (GET_H_ENDIAN ()) {
2495 if (ANDQI (tmp_bytecount
, 1)) {
2496 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2498 if (ANDQI (tmp_bytecount
, 2)) {
2499 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2501 if (ANDQI (tmp_bytecount
, 4)) {
2502 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4))));
2505 DI opval
= SLLDI (tmp_val
, SUBSI (64, MULSI (8, tmp_bytecount
)));
2506 SET_H_GR (FLD (f_dest
), opval
);
2507 written
|= (1 << 7);
2508 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2513 if (ANDQI (tmp_bytecount
, 4)) {
2514 tmp_val
= ADDDI (SLLDI (tmp_val
, 32), ZEXTSIDI (GETMEMSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4))));
2516 if (ANDQI (tmp_bytecount
, 2)) {
2517 tmp_val
= ADDDI (SLLDI (tmp_val
, 16), ZEXTHIDI (GETMEMHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2))));
2519 if (ANDQI (tmp_bytecount
, 1)) {
2520 tmp_val
= ADDDI (SLLDI (tmp_val
, 8), ZEXTQIDI (GETMEMQI (current_cpu
, pc
, tmp_addr
)));
2524 SET_H_GR (FLD (f_dest
), opval
);
2525 written
|= (1 << 7);
2526 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2533 abuf
->written
= written
;
2538 /* ldxb: ldx.b $rm, $rn, $rd */
2541 SEM_FN_NAME (sh64_media
,ldxb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2543 #define FLD(f) abuf->fields.sfmt_add.f
2544 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2545 int UNUSED written
= 0;
2546 IADDR UNUSED pc
= abuf
->addr
;
2547 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2550 DI opval
= EXTQIDI (GETMEMQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2551 SET_H_GR (FLD (f_dest
), opval
);
2552 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2559 /* ldxl: ldx.l $rm, $rn, $rd */
2562 SEM_FN_NAME (sh64_media
,ldxl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2564 #define FLD(f) abuf->fields.sfmt_add.f
2565 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2566 int UNUSED written
= 0;
2567 IADDR UNUSED pc
= abuf
->addr
;
2568 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2571 DI opval
= EXTSIDI (GETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2572 SET_H_GR (FLD (f_dest
), opval
);
2573 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2580 /* ldxq: ldx.q $rm, $rn, $rd */
2583 SEM_FN_NAME (sh64_media
,ldxq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2585 #define FLD(f) abuf->fields.sfmt_add.f
2586 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2587 int UNUSED written
= 0;
2588 IADDR UNUSED pc
= abuf
->addr
;
2589 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2592 DI opval
= GETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))));
2593 SET_H_GR (FLD (f_dest
), opval
);
2594 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2601 /* ldxub: ldx.ub $rm, $rn, $rd */
2604 SEM_FN_NAME (sh64_media
,ldxub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2606 #define FLD(f) abuf->fields.sfmt_add.f
2607 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2608 int UNUSED written
= 0;
2609 IADDR UNUSED pc
= abuf
->addr
;
2610 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2613 DI opval
= ZEXTQIDI (GETMEMUQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2614 SET_H_GR (FLD (f_dest
), opval
);
2615 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2622 /* ldxuw: ldx.uw $rm, $rn, $rd */
2625 SEM_FN_NAME (sh64_media
,ldxuw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2627 #define FLD(f) abuf->fields.sfmt_add.f
2628 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2629 int UNUSED written
= 0;
2630 IADDR UNUSED pc
= abuf
->addr
;
2631 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2634 DI opval
= ZEXTHIDI (GETMEMUHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2635 SET_H_GR (FLD (f_dest
), opval
);
2636 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2643 /* ldxw: ldx.w $rm, $rn, $rd */
2646 SEM_FN_NAME (sh64_media
,ldxw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2648 #define FLD(f) abuf->fields.sfmt_add.f
2649 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2650 int UNUSED written
= 0;
2651 IADDR UNUSED pc
= abuf
->addr
;
2652 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2655 DI opval
= EXTHIDI (GETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)))));
2656 SET_H_GR (FLD (f_dest
), opval
);
2657 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2664 /* mabsl: mabs.l $rm, $rd */
2667 SEM_FN_NAME (sh64_media
,mabsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2669 #define FLD(f) abuf->fields.sfmt_xori.f
2670 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2671 int UNUSED written
= 0;
2672 IADDR UNUSED pc
= abuf
->addr
;
2673 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2678 tmp_result0
= ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1));
2679 tmp_result1
= ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0));
2681 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2682 SET_H_GR (FLD (f_dest
), opval
);
2683 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2691 /* mabsw: mabs.w $rm, $rd */
2694 SEM_FN_NAME (sh64_media
,mabsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2696 #define FLD(f) abuf->fields.sfmt_xori.f
2697 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2698 int UNUSED written
= 0;
2699 IADDR UNUSED pc
= abuf
->addr
;
2700 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2707 tmp_result0
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3));
2708 tmp_result1
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2));
2709 tmp_result2
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1));
2710 tmp_result3
= ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0));
2712 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2713 SET_H_GR (FLD (f_dest
), opval
);
2714 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2722 /* maddl: madd.l $rm, $rn, $rd */
2725 SEM_FN_NAME (sh64_media
,maddl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2727 #define FLD(f) abuf->fields.sfmt_add.f
2728 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2729 int UNUSED written
= 0;
2730 IADDR UNUSED pc
= abuf
->addr
;
2731 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2736 tmp_result0
= ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
2737 tmp_result1
= ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0));
2739 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2740 SET_H_GR (FLD (f_dest
), opval
);
2741 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2749 /* maddw: madd.w $rm, $rn, $rd */
2752 SEM_FN_NAME (sh64_media
,maddw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2754 #define FLD(f) abuf->fields.sfmt_add.f
2755 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2756 int UNUSED written
= 0;
2757 IADDR UNUSED pc
= abuf
->addr
;
2758 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2765 tmp_result0
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3));
2766 tmp_result1
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2));
2767 tmp_result2
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1));
2768 tmp_result3
= ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0));
2770 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2771 SET_H_GR (FLD (f_dest
), opval
);
2772 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2780 /* maddsl: madds.l $rm, $rn, $rd */
2783 SEM_FN_NAME (sh64_media
,maddsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2785 #define FLD(f) abuf->fields.sfmt_add.f
2786 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2787 int UNUSED written
= 0;
2788 IADDR UNUSED pc
= abuf
->addr
;
2789 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2794 tmp_result0
= ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2795 tmp_result1
= ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2797 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2798 SET_H_GR (FLD (f_dest
), opval
);
2799 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2807 /* maddsub: madds.ub $rm, $rn, $rd */
2810 SEM_FN_NAME (sh64_media
,maddsub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2812 #define FLD(f) abuf->fields.sfmt_add.f
2813 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2814 int UNUSED written
= 0;
2815 IADDR UNUSED pc
= abuf
->addr
;
2816 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2827 tmp_result0
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7)))) : (SUBQI (SLLQI (1, 8), 1)))));
2828 tmp_result1
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6)))) : (SUBQI (SLLQI (1, 8), 1)))));
2829 tmp_result2
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5)))) : (SUBQI (SLLQI (1, 8), 1)))));
2830 tmp_result3
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4)))) : (SUBQI (SLLQI (1, 8), 1)))));
2831 tmp_result4
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3)))) : (SUBQI (SLLQI (1, 8), 1)))));
2832 tmp_result5
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2)))) : (SUBQI (SLLQI (1, 8), 1)))));
2833 tmp_result6
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBQI (SLLQI (1, 8), 1)))));
2834 tmp_result7
= ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBQI (SLLQI (1, 8), 1)))));
2836 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
))))))));
2837 SET_H_GR (FLD (f_dest
), opval
);
2838 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2846 /* maddsw: madds.w $rm, $rn, $rd */
2849 SEM_FN_NAME (sh64_media
,maddsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2851 #define FLD(f) abuf->fields.sfmt_add.f
2852 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2853 int UNUSED written
= 0;
2854 IADDR UNUSED pc
= abuf
->addr
;
2855 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2862 tmp_result0
= ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2863 tmp_result1
= ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2864 tmp_result2
= ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2865 tmp_result3
= ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2867 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2868 SET_H_GR (FLD (f_dest
), opval
);
2869 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2877 /* mcmpeqb: mcmpeq.b $rm, $rn, $rd */
2880 SEM_FN_NAME (sh64_media
,mcmpeqb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2882 #define FLD(f) abuf->fields.sfmt_add.f
2883 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2884 int UNUSED written
= 0;
2885 IADDR UNUSED pc
= abuf
->addr
;
2886 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2897 tmp_result0
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))) ? (INVQI (0)) : (0));
2898 tmp_result1
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))) ? (INVQI (0)) : (0));
2899 tmp_result2
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))) ? (INVQI (0)) : (0));
2900 tmp_result3
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))) ? (INVQI (0)) : (0));
2901 tmp_result4
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))) ? (INVQI (0)) : (0));
2902 tmp_result5
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))) ? (INVQI (0)) : (0));
2903 tmp_result6
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))) ? (INVQI (0)) : (0));
2904 tmp_result7
= ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))) ? (INVQI (0)) : (0));
2906 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
))))))));
2907 SET_H_GR (FLD (f_dest
), opval
);
2908 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2916 /* mcmpeql: mcmpeq.l $rm, $rn, $rd */
2919 SEM_FN_NAME (sh64_media
,mcmpeql
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2921 #define FLD(f) abuf->fields.sfmt_add.f
2922 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2923 int UNUSED written
= 0;
2924 IADDR UNUSED pc
= abuf
->addr
;
2925 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2930 tmp_result0
= ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))) ? (INVSI (0)) : (0));
2931 tmp_result1
= ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))) ? (INVSI (0)) : (0));
2933 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2934 SET_H_GR (FLD (f_dest
), opval
);
2935 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2943 /* mcmpeqw: mcmpeq.w $rm, $rn, $rd */
2946 SEM_FN_NAME (sh64_media
,mcmpeqw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2948 #define FLD(f) abuf->fields.sfmt_add.f
2949 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2950 int UNUSED written
= 0;
2951 IADDR UNUSED pc
= abuf
->addr
;
2952 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2959 tmp_result0
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))) ? (INVHI (0)) : (0));
2960 tmp_result1
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))) ? (INVHI (0)) : (0));
2961 tmp_result2
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))) ? (INVHI (0)) : (0));
2962 tmp_result3
= ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))) ? (INVHI (0)) : (0));
2964 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
2965 SET_H_GR (FLD (f_dest
), opval
);
2966 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
2974 /* mcmpgtl: mcmpgt.l $rm, $rn, $rd */
2977 SEM_FN_NAME (sh64_media
,mcmpgtl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
2979 #define FLD(f) abuf->fields.sfmt_add.f
2980 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
2981 int UNUSED written
= 0;
2982 IADDR UNUSED pc
= abuf
->addr
;
2983 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
2988 tmp_result0
= ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))) ? (INVSI (0)) : (0));
2989 tmp_result1
= ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))) ? (INVSI (0)) : (0));
2991 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
2992 SET_H_GR (FLD (f_dest
), opval
);
2993 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3001 /* mcmpgtub: mcmpgt.ub $rm, $rn, $rd */
3004 SEM_FN_NAME (sh64_media
,mcmpgtub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3006 #define FLD(f) abuf->fields.sfmt_add.f
3007 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3008 int UNUSED written
= 0;
3009 IADDR UNUSED pc
= abuf
->addr
;
3010 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3021 tmp_result0
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))) ? (INVQI (0)) : (0));
3022 tmp_result1
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))) ? (INVQI (0)) : (0));
3023 tmp_result2
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))) ? (INVQI (0)) : (0));
3024 tmp_result3
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))) ? (INVQI (0)) : (0));
3025 tmp_result4
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))) ? (INVQI (0)) : (0));
3026 tmp_result5
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))) ? (INVQI (0)) : (0));
3027 tmp_result6
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))) ? (INVQI (0)) : (0));
3028 tmp_result7
= ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))) ? (INVQI (0)) : (0));
3030 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
))))))));
3031 SET_H_GR (FLD (f_dest
), opval
);
3032 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3040 /* mcmpgtw: mcmpgt.w $rm, $rn, $rd */
3043 SEM_FN_NAME (sh64_media
,mcmpgtw
) (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);
3056 tmp_result0
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))) ? (INVHI (0)) : (0));
3057 tmp_result1
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))) ? (INVHI (0)) : (0));
3058 tmp_result2
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))) ? (INVHI (0)) : (0));
3059 tmp_result3
= ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0))) ? (INVHI (0)) : (0));
3061 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3062 SET_H_GR (FLD (f_dest
), opval
);
3063 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3071 /* mcmv: mcmv $rm, $rn, $rd */
3074 SEM_FN_NAME (sh64_media
,mcmv
) (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);
3083 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
)))));
3084 SET_H_GR (FLD (f_dest
), opval
);
3085 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3092 /* mcnvslw: mcnvs.lw $rm, $rn, $rd */
3095 SEM_FN_NAME (sh64_media
,mcnvslw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3097 #define FLD(f) abuf->fields.sfmt_add.f
3098 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3099 int UNUSED written
= 0;
3100 IADDR UNUSED pc
= abuf
->addr
;
3101 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3108 tmp_result0
= ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3109 tmp_result1
= ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3110 tmp_result2
= ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3111 tmp_result3
= ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3113 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3114 SET_H_GR (FLD (f_dest
), opval
);
3115 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3123 /* mcnvswb: mcnvs.wb $rm, $rn, $rd */
3126 SEM_FN_NAME (sh64_media
,mcnvswb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3128 #define FLD(f) abuf->fields.sfmt_add.f
3129 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3130 int UNUSED written
= 0;
3131 IADDR UNUSED pc
= abuf
->addr
;
3132 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3143 tmp_result0
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3144 tmp_result1
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3145 tmp_result2
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3146 tmp_result3
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3147 tmp_result4
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3148 tmp_result5
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3149 tmp_result6
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3150 tmp_result7
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3152 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
))))))));
3153 SET_H_GR (FLD (f_dest
), opval
);
3154 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3162 /* mcnvswub: mcnvs.wub $rm, $rn, $rd */
3165 SEM_FN_NAME (sh64_media
,mcnvswub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3167 #define FLD(f) abuf->fields.sfmt_add.f
3168 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3169 int UNUSED written
= 0;
3170 IADDR UNUSED pc
= abuf
->addr
;
3171 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3182 tmp_result0
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
3183 tmp_result1
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
3184 tmp_result2
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
3185 tmp_result3
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
3186 tmp_result4
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
3187 tmp_result5
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
3188 tmp_result6
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
3189 tmp_result7
= ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
3191 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
))))))));
3192 SET_H_GR (FLD (f_dest
), opval
);
3193 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3201 /* mextr1: mextr1 $rm, $rn, $rd */
3204 SEM_FN_NAME (sh64_media
,mextr1
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3206 #define FLD(f) abuf->fields.sfmt_add.f
3207 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3208 int UNUSED written
= 0;
3209 IADDR UNUSED pc
= abuf
->addr
;
3210 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3216 tmp_count
= MULQI (8, 1);
3217 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3218 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3219 tmp_count
= MULQI (8, SUBQI (8, 1));
3220 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3222 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3223 SET_H_GR (FLD (f_dest
), opval
);
3224 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3232 /* mextr2: mextr2 $rm, $rn, $rd */
3235 SEM_FN_NAME (sh64_media
,mextr2
) (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);
3247 tmp_count
= MULQI (8, 2);
3248 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3249 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3250 tmp_count
= MULQI (8, SUBQI (8, 2));
3251 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3253 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3254 SET_H_GR (FLD (f_dest
), opval
);
3255 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3263 /* mextr3: mextr3 $rm, $rn, $rd */
3266 SEM_FN_NAME (sh64_media
,mextr3
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3268 #define FLD(f) abuf->fields.sfmt_add.f
3269 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3270 int UNUSED written
= 0;
3271 IADDR UNUSED pc
= abuf
->addr
;
3272 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3278 tmp_count
= MULQI (8, 3);
3279 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3280 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3281 tmp_count
= MULQI (8, SUBQI (8, 3));
3282 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3284 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3285 SET_H_GR (FLD (f_dest
), opval
);
3286 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3294 /* mextr4: mextr4 $rm, $rn, $rd */
3297 SEM_FN_NAME (sh64_media
,mextr4
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3299 #define FLD(f) abuf->fields.sfmt_add.f
3300 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3301 int UNUSED written
= 0;
3302 IADDR UNUSED pc
= abuf
->addr
;
3303 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3309 tmp_count
= MULQI (8, 4);
3310 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3311 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3312 tmp_count
= MULQI (8, SUBQI (8, 4));
3313 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3315 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3316 SET_H_GR (FLD (f_dest
), opval
);
3317 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3325 /* mextr5: mextr5 $rm, $rn, $rd */
3328 SEM_FN_NAME (sh64_media
,mextr5
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3330 #define FLD(f) abuf->fields.sfmt_add.f
3331 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3332 int UNUSED written
= 0;
3333 IADDR UNUSED pc
= abuf
->addr
;
3334 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3340 tmp_count
= MULQI (8, 5);
3341 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3342 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3343 tmp_count
= MULQI (8, SUBQI (8, 5));
3344 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3346 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3347 SET_H_GR (FLD (f_dest
), opval
);
3348 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3356 /* mextr6: mextr6 $rm, $rn, $rd */
3359 SEM_FN_NAME (sh64_media
,mextr6
) (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);
3371 tmp_count
= MULQI (8, 6);
3372 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3373 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3374 tmp_count
= MULQI (8, SUBQI (8, 6));
3375 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3377 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3378 SET_H_GR (FLD (f_dest
), opval
);
3379 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3387 /* mextr7: mextr7 $rm, $rn, $rd */
3390 SEM_FN_NAME (sh64_media
,mextr7
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3392 #define FLD(f) abuf->fields.sfmt_add.f
3393 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3394 int UNUSED written
= 0;
3395 IADDR UNUSED pc
= abuf
->addr
;
3396 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3402 tmp_count
= MULQI (8, 7);
3403 tmp_mask
= SLLDI (INVSI (0), tmp_count
);
3404 tmp_rhs
= SRLDI (ANDDI (GET_H_GR (FLD (f_left
)), tmp_mask
), tmp_count
);
3405 tmp_count
= MULQI (8, SUBQI (8, 7));
3406 tmp_mask
= SRLDI (INVSI (0), tmp_count
);
3408 DI opval
= ORDI (tmp_rhs
, SLLDI (ANDDI (GET_H_GR (FLD (f_right
)), tmp_mask
), tmp_count
));
3409 SET_H_GR (FLD (f_dest
), opval
);
3410 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3418 /* mmacfxwl: mmacfx.wl $rm, $rn, $rd */
3421 SEM_FN_NAME (sh64_media
,mmacfxwl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3423 #define FLD(f) abuf->fields.sfmt_add.f
3424 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3425 int UNUSED written
= 0;
3426 IADDR UNUSED pc
= abuf
->addr
;
3427 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3433 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 1);
3434 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 0);
3435 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3436 tmp_temp
= ((LTDI (SLLDI (tmp_temp
, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp
, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp
, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3437 tmp_result0
= ((LTDI (ADDDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3438 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3439 tmp_temp
= ((LTDI (SLLDI (tmp_temp
, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp
, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp
, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3440 tmp_result1
= ((LTDI (ADDDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3442 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3443 SET_H_GR (FLD (f_dest
), opval
);
3444 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3452 /* mmacnfx.wl: mmacnfx.wl $rm, $rn, $rd */
3455 SEM_FN_NAME (sh64_media
,mmacnfx_wl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3457 #define FLD(f) abuf->fields.sfmt_add.f
3458 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3459 int UNUSED written
= 0;
3460 IADDR UNUSED pc
= abuf
->addr
;
3461 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3467 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 1);
3468 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 0);
3469 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3470 tmp_temp
= ((LTDI (SLLDI (tmp_temp
, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp
, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp
, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3471 tmp_result0
= ((LTDI (SUBDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result0
), EXTSIDI (tmp_temp
))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3472 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3473 tmp_temp
= ((LTDI (SLLDI (tmp_temp
, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp
, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp
, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3474 tmp_result1
= ((LTDI (SUBDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result1
), EXTSIDI (tmp_temp
))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3476 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3477 SET_H_GR (FLD (f_dest
), opval
);
3478 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3486 /* mmull: mmul.l $rm, $rn, $rd */
3489 SEM_FN_NAME (sh64_media
,mmull
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3491 #define FLD(f) abuf->fields.sfmt_add.f
3492 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3493 int UNUSED written
= 0;
3494 IADDR UNUSED pc
= abuf
->addr
;
3495 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3500 tmp_result0
= MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
3501 tmp_result1
= MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0));
3503 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3504 SET_H_GR (FLD (f_dest
), opval
);
3505 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3513 /* mmulw: mmul.w $rm, $rn, $rd */
3516 SEM_FN_NAME (sh64_media
,mmulw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3518 #define FLD(f) abuf->fields.sfmt_add.f
3519 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3520 int UNUSED written
= 0;
3521 IADDR UNUSED pc
= abuf
->addr
;
3522 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3529 tmp_result0
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3));
3530 tmp_result1
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2));
3531 tmp_result2
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1));
3532 tmp_result3
= MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0));
3534 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3535 SET_H_GR (FLD (f_dest
), opval
);
3536 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3544 /* mmulfxl: mmulfx.l $rm, $rn, $rd */
3547 SEM_FN_NAME (sh64_media
,mmulfxl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3549 #define FLD(f) abuf->fields.sfmt_add.f
3550 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3551 int UNUSED written
= 0;
3552 IADDR UNUSED pc
= abuf
->addr
;
3553 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3559 tmp_temp
= MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
3560 tmp_result0
= ((LTDI (SRADI (tmp_temp
, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp
, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp
, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3561 tmp_temp
= MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0)));
3562 tmp_result1
= ((LTDI (SRADI (tmp_temp
, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp
, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp
, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3564 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3565 SET_H_GR (FLD (f_dest
), opval
);
3566 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3574 /* mmulfxw: mmulfx.w $rm, $rn, $rd */
3577 SEM_FN_NAME (sh64_media
,mmulfxw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3579 #define FLD(f) abuf->fields.sfmt_add.f
3580 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3581 int UNUSED written
= 0;
3582 IADDR UNUSED pc
= abuf
->addr
;
3583 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3591 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3592 tmp_result0
= ((LTSI (SRASI (tmp_temp
, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp
, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp
, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3593 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3594 tmp_result1
= ((LTSI (SRASI (tmp_temp
, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp
, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp
, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3595 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)));
3596 tmp_result2
= ((LTSI (SRASI (tmp_temp
, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp
, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp
, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3597 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3598 tmp_result3
= ((LTSI (SRASI (tmp_temp
, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp
, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp
, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3600 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3601 SET_H_GR (FLD (f_dest
), opval
);
3602 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3610 /* mmulfxrpw: mmulfxrp.w $rm, $rn, $rd */
3613 SEM_FN_NAME (sh64_media
,mmulfxrpw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3615 #define FLD(f) abuf->fields.sfmt_add.f
3616 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3617 int UNUSED written
= 0;
3618 IADDR UNUSED pc
= abuf
->addr
;
3619 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3628 tmp_c
= SLLSI (1, 14);
3629 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3630 tmp_result0
= ((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp
, tmp_c
), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3631 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3632 tmp_result1
= ((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp
, tmp_c
), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3633 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)));
3634 tmp_result2
= ((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp
, tmp_c
), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3635 tmp_temp
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3636 tmp_result3
= ((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp
, tmp_c
), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp
, tmp_c
), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3638 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3639 SET_H_GR (FLD (f_dest
), opval
);
3640 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3648 /* mmulhiwl: mmulhi.wl $rm, $rn, $rd */
3651 SEM_FN_NAME (sh64_media
,mmulhiwl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3653 #define FLD(f) abuf->fields.sfmt_add.f
3654 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3655 int UNUSED written
= 0;
3656 IADDR UNUSED pc
= abuf
->addr
;
3657 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3662 tmp_result0
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1)));
3663 tmp_result1
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3665 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3666 SET_H_GR (FLD (f_dest
), opval
);
3667 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3675 /* mmullowl: mmullo.wl $rm, $rn, $rd */
3678 SEM_FN_NAME (sh64_media
,mmullowl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3680 #define FLD(f) abuf->fields.sfmt_add.f
3681 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3682 int UNUSED written
= 0;
3683 IADDR UNUSED pc
= abuf
->addr
;
3684 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3689 tmp_result0
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3)));
3690 tmp_result1
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2)));
3692 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3693 SET_H_GR (FLD (f_dest
), opval
);
3694 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3702 /* mmulsumwq: mmulsum.wq $rm, $rn, $rd */
3705 SEM_FN_NAME (sh64_media
,mmulsumwq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3707 #define FLD(f) abuf->fields.sfmt_add.f
3708 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3709 int UNUSED written
= 0;
3710 IADDR UNUSED pc
= abuf
->addr
;
3711 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3715 tmp_acc
= MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0)));
3716 tmp_acc
= ADDDI (tmp_acc
, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1))));
3717 tmp_acc
= ADDDI (tmp_acc
, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2))));
3718 tmp_acc
= ADDDI (tmp_acc
, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3))));
3720 DI opval
= ADDDI (GET_H_GR (FLD (f_dest
)), tmp_acc
);
3721 SET_H_GR (FLD (f_dest
), opval
);
3722 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3730 /* movi: movi $imm16, $rd */
3733 SEM_FN_NAME (sh64_media
,movi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3735 #define FLD(f) abuf->fields.sfmt_movi.f
3736 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3737 int UNUSED written
= 0;
3738 IADDR UNUSED pc
= abuf
->addr
;
3739 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3742 DI opval
= EXTSIDI (FLD (f_imm16
));
3743 SET_H_GR (FLD (f_dest
), opval
);
3744 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3751 /* mpermw: mperm.w $rm, $rn, $rd */
3754 SEM_FN_NAME (sh64_media
,mpermw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3756 #define FLD(f) abuf->fields.sfmt_add.f
3757 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3758 int UNUSED written
= 0;
3759 IADDR UNUSED pc
= abuf
->addr
;
3760 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3768 tmp_control
= ANDQI (GET_H_GR (FLD (f_right
)), 255);
3769 tmp_result0
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (tmp_control
, 3)));
3770 tmp_result1
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (SRLQI (tmp_control
, 2), 3)));
3771 tmp_result2
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (SRLQI (tmp_control
, 4), 3)));
3772 tmp_result3
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), SUBSI (3, ANDQI (SRLQI (tmp_control
, 6), 3)));
3774 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3775 SET_H_GR (FLD (f_dest
), opval
);
3776 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3784 /* msadubq: msad.ubq $rm, $rn, $rd */
3787 SEM_FN_NAME (sh64_media
,msadubq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3789 #define FLD(f) abuf->fields.sfmt_add.f
3790 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3791 int UNUSED written
= 0;
3792 IADDR UNUSED pc
= abuf
->addr
;
3793 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3797 tmp_acc
= ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0)));
3798 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))));
3799 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))));
3800 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))));
3801 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))));
3802 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))));
3803 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))));
3804 tmp_acc
= ADDDI (tmp_acc
, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))));
3806 DI opval
= ADDDI (GET_H_GR (FLD (f_dest
)), tmp_acc
);
3807 SET_H_GR (FLD (f_dest
), opval
);
3808 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3816 /* mshaldsl: mshalds.l $rm, $rn, $rd */
3819 SEM_FN_NAME (sh64_media
,mshaldsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3821 #define FLD(f) abuf->fields.sfmt_add.f
3822 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3823 int UNUSED written
= 0;
3824 IADDR UNUSED pc
= abuf
->addr
;
3825 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3830 tmp_result0
= ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3831 tmp_result1
= ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3833 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3834 SET_H_GR (FLD (f_dest
), opval
);
3835 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3843 /* mshaldsw: mshalds.w $rm, $rn, $rd */
3846 SEM_FN_NAME (sh64_media
,mshaldsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3848 #define FLD(f) abuf->fields.sfmt_add.f
3849 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3850 int UNUSED written
= 0;
3851 IADDR UNUSED pc
= abuf
->addr
;
3852 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3859 tmp_result0
= ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3860 tmp_result1
= ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3861 tmp_result2
= ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3862 tmp_result3
= ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3864 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3865 SET_H_GR (FLD (f_dest
), opval
);
3866 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3874 /* mshardl: mshard.l $rm, $rn, $rd */
3877 SEM_FN_NAME (sh64_media
,mshardl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3879 #define FLD(f) abuf->fields.sfmt_add.f
3880 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3881 int UNUSED written
= 0;
3882 IADDR UNUSED pc
= abuf
->addr
;
3883 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3888 tmp_result0
= SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31));
3889 tmp_result1
= SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31));
3891 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
3892 SET_H_GR (FLD (f_dest
), opval
);
3893 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3901 /* mshardw: mshard.w $rm, $rn, $rd */
3904 SEM_FN_NAME (sh64_media
,mshardw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3906 #define FLD(f) abuf->fields.sfmt_add.f
3907 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3908 int UNUSED written
= 0;
3909 IADDR UNUSED pc
= abuf
->addr
;
3910 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3917 tmp_result0
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3918 tmp_result1
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3919 tmp_result2
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3920 tmp_result3
= SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15));
3922 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
3923 SET_H_GR (FLD (f_dest
), opval
);
3924 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3932 /* mshardsq: mshards.q $rm, $rn, $rd */
3935 SEM_FN_NAME (sh64_media
,mshardsq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3937 #define FLD(f) abuf->fields.sfmt_add.f
3938 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3939 int UNUSED written
= 0;
3940 IADDR UNUSED pc
= abuf
->addr
;
3941 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3944 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)))));
3945 SET_H_GR (FLD (f_dest
), opval
);
3946 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3953 /* mshfhib: mshfhi.b $rm, $rn, $rd */
3956 SEM_FN_NAME (sh64_media
,mshfhib
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3958 #define FLD(f) abuf->fields.sfmt_add.f
3959 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3960 int UNUSED written
= 0;
3961 IADDR UNUSED pc
= abuf
->addr
;
3962 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
3973 tmp_result0
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3);
3974 tmp_result1
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3);
3975 tmp_result2
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2);
3976 tmp_result3
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2);
3977 tmp_result4
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1);
3978 tmp_result5
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1);
3979 tmp_result6
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0);
3980 tmp_result7
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0);
3982 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
))))))));
3983 SET_H_GR (FLD (f_dest
), opval
);
3984 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
3992 /* mshfhil: mshfhi.l $rm, $rn, $rd */
3995 SEM_FN_NAME (sh64_media
,mshfhil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
3997 #define FLD(f) abuf->fields.sfmt_add.f
3998 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
3999 int UNUSED written
= 0;
4000 IADDR UNUSED pc
= abuf
->addr
;
4001 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4006 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0);
4007 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0);
4009 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4010 SET_H_GR (FLD (f_dest
), opval
);
4011 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4019 /* mshfhiw: mshfhi.w $rm, $rn, $rd */
4022 SEM_FN_NAME (sh64_media
,mshfhiw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4024 #define FLD(f) abuf->fields.sfmt_add.f
4025 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4026 int UNUSED written
= 0;
4027 IADDR UNUSED pc
= abuf
->addr
;
4028 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4035 tmp_result0
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1);
4036 tmp_result1
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1);
4037 tmp_result2
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0);
4038 tmp_result3
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0);
4040 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4041 SET_H_GR (FLD (f_dest
), opval
);
4042 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4050 /* mshflob: mshflo.b $rm, $rn, $rd */
4053 SEM_FN_NAME (sh64_media
,mshflob
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4055 #define FLD(f) abuf->fields.sfmt_add.f
4056 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4057 int UNUSED written
= 0;
4058 IADDR UNUSED pc
= abuf
->addr
;
4059 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4070 tmp_result0
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7);
4071 tmp_result1
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7);
4072 tmp_result2
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6);
4073 tmp_result3
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6);
4074 tmp_result4
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5);
4075 tmp_result5
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5);
4076 tmp_result6
= SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4);
4077 tmp_result7
= SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4);
4079 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
))))))));
4080 SET_H_GR (FLD (f_dest
), opval
);
4081 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4089 /* mshflol: mshflo.l $rm, $rn, $rd */
4092 SEM_FN_NAME (sh64_media
,mshflol
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4094 #define FLD(f) abuf->fields.sfmt_add.f
4095 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4096 int UNUSED written
= 0;
4097 IADDR UNUSED pc
= abuf
->addr
;
4098 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4103 tmp_result0
= SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1);
4104 tmp_result1
= SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1);
4106 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4107 SET_H_GR (FLD (f_dest
), opval
);
4108 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4116 /* mshflow: mshflo.w $rm, $rn, $rd */
4119 SEM_FN_NAME (sh64_media
,mshflow
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4121 #define FLD(f) abuf->fields.sfmt_add.f
4122 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4123 int UNUSED written
= 0;
4124 IADDR UNUSED pc
= abuf
->addr
;
4125 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4132 tmp_result0
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3);
4133 tmp_result1
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3);
4134 tmp_result2
= SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2);
4135 tmp_result3
= SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2);
4137 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4138 SET_H_GR (FLD (f_dest
), opval
);
4139 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4147 /* mshlldl: mshlld.l $rm, $rn, $rd */
4150 SEM_FN_NAME (sh64_media
,mshlldl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4152 #define FLD(f) abuf->fields.sfmt_add.f
4153 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4154 int UNUSED written
= 0;
4155 IADDR UNUSED pc
= abuf
->addr
;
4156 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4161 tmp_result0
= SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4162 tmp_result1
= SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4164 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4165 SET_H_GR (FLD (f_dest
), opval
);
4166 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4174 /* mshlldw: mshlld.w $rm, $rn, $rd */
4177 SEM_FN_NAME (sh64_media
,mshlldw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4179 #define FLD(f) abuf->fields.sfmt_add.f
4180 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4181 int UNUSED written
= 0;
4182 IADDR UNUSED pc
= abuf
->addr
;
4183 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4190 tmp_result0
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4191 tmp_result1
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4192 tmp_result2
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4193 tmp_result3
= SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4195 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4196 SET_H_GR (FLD (f_dest
), opval
);
4197 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4205 /* mshlrdl: mshlrd.l $rm, $rn, $rd */
4208 SEM_FN_NAME (sh64_media
,mshlrdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4210 #define FLD(f) abuf->fields.sfmt_add.f
4211 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4212 int UNUSED written
= 0;
4213 IADDR UNUSED pc
= abuf
->addr
;
4214 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4219 tmp_result0
= SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4220 tmp_result1
= SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 31));
4222 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4223 SET_H_GR (FLD (f_dest
), opval
);
4224 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4232 /* mshlrdw: mshlrd.w $rm, $rn, $rd */
4235 SEM_FN_NAME (sh64_media
,mshlrdw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4237 #define FLD(f) abuf->fields.sfmt_add.f
4238 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4239 int UNUSED written
= 0;
4240 IADDR UNUSED pc
= abuf
->addr
;
4241 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4248 tmp_result0
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4249 tmp_result1
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4250 tmp_result2
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4251 tmp_result3
= SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), ANDDI (GET_H_GR (FLD (f_right
)), 15));
4253 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4254 SET_H_GR (FLD (f_dest
), opval
);
4255 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4263 /* msubl: msub.l $rm, $rn, $rd */
4266 SEM_FN_NAME (sh64_media
,msubl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4268 #define FLD(f) abuf->fields.sfmt_add.f
4269 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4270 int UNUSED written
= 0;
4271 IADDR UNUSED pc
= abuf
->addr
;
4272 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4277 tmp_result0
= SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1));
4278 tmp_result1
= SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0));
4280 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4281 SET_H_GR (FLD (f_dest
), opval
);
4282 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4290 /* msubw: msub.w $rm, $rn, $rd */
4293 SEM_FN_NAME (sh64_media
,msubw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4295 #define FLD(f) abuf->fields.sfmt_add.f
4296 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4297 int UNUSED written
= 0;
4298 IADDR UNUSED pc
= abuf
->addr
;
4299 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4306 tmp_result0
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 3));
4307 tmp_result1
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 2));
4308 tmp_result2
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 1));
4309 tmp_result3
= SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left
)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right
)), 0));
4311 DI opval
= ORDI (SLLDI (ZEXTHIDI (tmp_result3
), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2
), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1
), 16), ZEXTHIDI (tmp_result0
))));
4312 SET_H_GR (FLD (f_dest
), opval
);
4313 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4321 /* msubsl: msubs.l $rm, $rn, $rd */
4324 SEM_FN_NAME (sh64_media
,msubsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4326 #define FLD(f) abuf->fields.sfmt_add.f
4327 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4328 int UNUSED written
= 0;
4329 IADDR UNUSED pc
= abuf
->addr
;
4330 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4335 tmp_result0
= ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4336 tmp_result1
= ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4338 DI opval
= ORDI (SLLDI (ZEXTSIDI (tmp_result1
), 32), ZEXTSIDI (tmp_result0
));
4339 SET_H_GR (FLD (f_dest
), opval
);
4340 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4348 /* msubsub: msubs.ub $rm, $rn, $rd */
4351 SEM_FN_NAME (sh64_media
,msubsub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4353 #define FLD(f) abuf->fields.sfmt_add.f
4354 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4355 int UNUSED written
= 0;
4356 IADDR UNUSED pc
= abuf
->addr
;
4357 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4368 tmp_result0
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7)))) : (SUBQI (SLLQI (1, 8), 1)))));
4369 tmp_result1
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6)))) : (SUBQI (SLLQI (1, 8), 1)))));
4370 tmp_result2
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5)))) : (SUBQI (SLLQI (1, 8), 1)))));
4371 tmp_result3
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4)))) : (SUBQI (SLLQI (1, 8), 1)))));
4372 tmp_result4
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3)))) : (SUBQI (SLLQI (1, 8), 1)))));
4373 tmp_result5
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2)))) : (SUBQI (SLLQI (1, 8), 1)))));
4374 tmp_result6
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBQI (SLLQI (1, 8), 1)))));
4375 tmp_result7
= ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBQI (SLLQI (1, 8), 1)))));
4377 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
))))))));
4378 SET_H_GR (FLD (f_dest
), opval
);
4379 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4387 /* msubsw: msubs.w $rm, $rn, $rd */
4390 SEM_FN_NAME (sh64_media
,msubsw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4392 #define FLD(f) abuf->fields.sfmt_add.f
4393 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4394 int UNUSED written
= 0;
4395 IADDR UNUSED pc
= abuf
->addr
;
4396 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4407 tmp_result0
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 7)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4408 tmp_result1
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 6)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4409 tmp_result2
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 5)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4410 tmp_result3
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 4)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4411 tmp_result4
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4412 tmp_result5
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4413 tmp_result6
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4414 tmp_result7
= ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left
)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right
)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4416 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
))))))));
4417 SET_H_GR (FLD (f_dest
), opval
);
4418 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4426 /* mulsl: muls.l $rm, $rn, $rd */
4429 SEM_FN_NAME (sh64_media
,mulsl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4431 #define FLD(f) abuf->fields.sfmt_add.f
4432 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4433 int UNUSED written
= 0;
4434 IADDR UNUSED pc
= abuf
->addr
;
4435 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4438 DI opval
= MULDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
4439 SET_H_GR (FLD (f_dest
), opval
);
4440 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4447 /* mulul: mulu.l $rm, $rn, $rd */
4450 SEM_FN_NAME (sh64_media
,mulul
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4452 #define FLD(f) abuf->fields.sfmt_add.f
4453 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4454 int UNUSED written
= 0;
4455 IADDR UNUSED pc
= abuf
->addr
;
4456 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4459 DI opval
= MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
4460 SET_H_GR (FLD (f_dest
), opval
);
4461 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4471 SEM_FN_NAME (sh64_media
,nop
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4473 #define FLD(f) abuf->fields.sfmt_empty.f
4474 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4475 int UNUSED written
= 0;
4476 IADDR UNUSED pc
= abuf
->addr
;
4477 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4485 /* nsb: nsb $rm, $rd */
4488 SEM_FN_NAME (sh64_media
,nsb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4490 #define FLD(f) abuf->fields.sfmt_xori.f
4491 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4492 int UNUSED written
= 0;
4493 IADDR UNUSED pc
= abuf
->addr
;
4494 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4497 DI opval
= sh64_nsb (current_cpu
, GET_H_GR (FLD (f_left
)));
4498 SET_H_GR (FLD (f_dest
), opval
);
4499 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4506 /* ocbi: ocbi $rm, $disp6x32 */
4509 SEM_FN_NAME (sh64_media
,ocbi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4511 #define FLD(f) abuf->fields.sfmt_xori.f
4512 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4513 int UNUSED written
= 0;
4514 IADDR UNUSED pc
= abuf
->addr
;
4515 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4519 DI opval
= GET_H_GR (FLD (f_left
));
4520 SET_H_GR (FLD (f_left
), opval
);
4521 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4530 /* ocbp: ocbp $rm, $disp6x32 */
4533 SEM_FN_NAME (sh64_media
,ocbp
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4535 #define FLD(f) abuf->fields.sfmt_xori.f
4536 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4537 int UNUSED written
= 0;
4538 IADDR UNUSED pc
= abuf
->addr
;
4539 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4543 DI opval
= GET_H_GR (FLD (f_left
));
4544 SET_H_GR (FLD (f_left
), opval
);
4545 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4554 /* ocbwb: ocbwb $rm, $disp6x32 */
4557 SEM_FN_NAME (sh64_media
,ocbwb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4559 #define FLD(f) abuf->fields.sfmt_xori.f
4560 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4561 int UNUSED written
= 0;
4562 IADDR UNUSED pc
= abuf
->addr
;
4563 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4567 DI opval
= GET_H_GR (FLD (f_left
));
4568 SET_H_GR (FLD (f_left
), opval
);
4569 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4578 /* or: or $rm, $rn, $rd */
4581 SEM_FN_NAME (sh64_media
,or) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4583 #define FLD(f) abuf->fields.sfmt_add.f
4584 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4585 int UNUSED written
= 0;
4586 IADDR UNUSED pc
= abuf
->addr
;
4587 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4590 DI opval
= ORDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
4591 SET_H_GR (FLD (f_dest
), opval
);
4592 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4599 /* ori: ori $rm, $imm10, $rd */
4602 SEM_FN_NAME (sh64_media
,ori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4604 #define FLD(f) abuf->fields.sfmt_ori.f
4605 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4606 int UNUSED written
= 0;
4607 IADDR UNUSED pc
= abuf
->addr
;
4608 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4611 DI opval
= ORDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm10
)));
4612 SET_H_GR (FLD (f_dest
), opval
);
4613 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4620 /* prefi: prefi $rm, $disp6x32 */
4623 SEM_FN_NAME (sh64_media
,prefi
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4625 #define FLD(f) abuf->fields.sfmt_xori.f
4626 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4627 int UNUSED written
= 0;
4628 IADDR UNUSED pc
= abuf
->addr
;
4629 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4633 DI opval
= GET_H_GR (FLD (f_left
));
4634 SET_H_GR (FLD (f_left
), opval
);
4635 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4644 /* pta: pta$likely $disp16, $tra */
4647 SEM_FN_NAME (sh64_media
,pta
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4649 #define FLD(f) abuf->fields.sfmt_pta.f
4650 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4651 int UNUSED written
= 0;
4652 IADDR UNUSED pc
= abuf
->addr
;
4653 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4658 DI opval
= ADDSI (FLD (f_disp16
), 1);
4659 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4660 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4668 /* ptabs: ptabs$likely $rn, $tra */
4671 SEM_FN_NAME (sh64_media
,ptabs
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4673 #define FLD(f) abuf->fields.sfmt_beq.f
4674 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4675 int UNUSED written
= 0;
4676 IADDR UNUSED pc
= abuf
->addr
;
4677 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4682 DI opval
= GET_H_GR (FLD (f_right
));
4683 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4684 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4692 /* ptb: ptb$likely $disp16, $tra */
4695 SEM_FN_NAME (sh64_media
,ptb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4697 #define FLD(f) abuf->fields.sfmt_pta.f
4698 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4699 int UNUSED written
= 0;
4700 IADDR UNUSED pc
= abuf
->addr
;
4701 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4706 DI opval
= FLD (f_disp16
);
4707 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4708 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4716 /* ptrel: ptrel$likely $rn, $tra */
4719 SEM_FN_NAME (sh64_media
,ptrel
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4721 #define FLD(f) abuf->fields.sfmt_beq.f
4722 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4723 int UNUSED written
= 0;
4724 IADDR UNUSED pc
= abuf
->addr
;
4725 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4730 DI opval
= ADDDI (pc
, GET_H_GR (FLD (f_right
)));
4731 CPU (h_tr
[FLD (f_tra
)]) = opval
;
4732 TRACE_RESULT (current_cpu
, abuf
, "tr", 'D', opval
);
4740 /* putcfg: putcfg $rm, $disp6, $rd */
4743 SEM_FN_NAME (sh64_media
,putcfg
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4745 #define FLD(f) abuf->fields.sfmt_getcfg.f
4746 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4747 int UNUSED written
= 0;
4748 IADDR UNUSED pc
= abuf
->addr
;
4749 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4753 tmp_address
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
4756 SI opval
= GET_H_GR (FLD (f_dest
));
4757 SETMEMSI (current_cpu
, pc
, tmp_address
, opval
);
4758 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
4766 /* putcon: putcon $rm, $crj */
4769 SEM_FN_NAME (sh64_media
,putcon
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4771 #define FLD(f) abuf->fields.sfmt_xori.f
4772 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4773 int UNUSED written
= 0;
4774 IADDR UNUSED pc
= abuf
->addr
;
4775 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4778 DI opval
= GET_H_GR (FLD (f_left
));
4779 SET_H_CR (FLD (f_dest
), opval
);
4780 TRACE_RESULT (current_cpu
, abuf
, "cr", 'D', opval
);
4790 SEM_FN_NAME (sh64_media
,rte
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4792 #define FLD(f) abuf->fields.sfmt_empty.f
4793 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4794 int UNUSED written
= 0;
4795 IADDR UNUSED pc
= abuf
->addr
;
4796 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4804 /* shard: shard $rm, $rn, $rd */
4807 SEM_FN_NAME (sh64_media
,shard
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4809 #define FLD(f) abuf->fields.sfmt_add.f
4810 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4811 int UNUSED written
= 0;
4812 IADDR UNUSED pc
= abuf
->addr
;
4813 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4816 DI opval
= SRADI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63));
4817 SET_H_GR (FLD (f_dest
), opval
);
4818 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4825 /* shardl: shard.l $rm, $rn, $rd */
4828 SEM_FN_NAME (sh64_media
,shardl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4830 #define FLD(f) abuf->fields.sfmt_add.f
4831 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4832 int UNUSED written
= 0;
4833 IADDR UNUSED pc
= abuf
->addr
;
4834 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4837 DI opval
= EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 63)));
4838 SET_H_GR (FLD (f_dest
), opval
);
4839 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4846 /* shari: shari $rm, $uimm6, $rd */
4849 SEM_FN_NAME (sh64_media
,shari
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4851 #define FLD(f) abuf->fields.sfmt_shari.f
4852 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4853 int UNUSED written
= 0;
4854 IADDR UNUSED pc
= abuf
->addr
;
4855 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4858 DI opval
= SRADI (GET_H_GR (FLD (f_left
)), FLD (f_uimm6
));
4859 SET_H_GR (FLD (f_dest
), opval
);
4860 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4867 /* sharil: shari.l $rm, $uimm6, $rd */
4870 SEM_FN_NAME (sh64_media
,sharil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4872 #define FLD(f) abuf->fields.sfmt_shari.f
4873 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4874 int UNUSED written
= 0;
4875 IADDR UNUSED pc
= abuf
->addr
;
4876 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4879 DI opval
= EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDSI (FLD (f_uimm6
), 63)));
4880 SET_H_GR (FLD (f_dest
), opval
);
4881 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4888 /* shlld: shlld $rm, $rn, $rd */
4891 SEM_FN_NAME (sh64_media
,shlld
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4893 #define FLD(f) abuf->fields.sfmt_add.f
4894 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4895 int UNUSED written
= 0;
4896 IADDR UNUSED pc
= abuf
->addr
;
4897 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4900 DI opval
= SLLDI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63));
4901 SET_H_GR (FLD (f_dest
), opval
);
4902 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4909 /* shlldl: shlld.l $rm, $rn, $rd */
4912 SEM_FN_NAME (sh64_media
,shlldl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4914 #define FLD(f) abuf->fields.sfmt_add.f
4915 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4916 int UNUSED written
= 0;
4917 IADDR UNUSED pc
= abuf
->addr
;
4918 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4921 DI opval
= EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 63)));
4922 SET_H_GR (FLD (f_dest
), opval
);
4923 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4930 /* shlli: shlli $rm, $uimm6, $rd */
4933 SEM_FN_NAME (sh64_media
,shlli
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4935 #define FLD(f) abuf->fields.sfmt_shari.f
4936 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4937 int UNUSED written
= 0;
4938 IADDR UNUSED pc
= abuf
->addr
;
4939 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4942 DI opval
= SLLDI (GET_H_GR (FLD (f_left
)), FLD (f_uimm6
));
4943 SET_H_GR (FLD (f_dest
), opval
);
4944 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4951 /* shllil: shlli.l $rm, $uimm6, $rd */
4954 SEM_FN_NAME (sh64_media
,shllil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4956 #define FLD(f) abuf->fields.sfmt_shari.f
4957 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4958 int UNUSED written
= 0;
4959 IADDR UNUSED pc
= abuf
->addr
;
4960 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4963 DI opval
= EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDSI (FLD (f_uimm6
), 63)));
4964 SET_H_GR (FLD (f_dest
), opval
);
4965 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4972 /* shlrd: shlrd $rm, $rn, $rd */
4975 SEM_FN_NAME (sh64_media
,shlrd
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4977 #define FLD(f) abuf->fields.sfmt_add.f
4978 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
4979 int UNUSED written
= 0;
4980 IADDR UNUSED pc
= abuf
->addr
;
4981 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
4984 DI opval
= SRLDI (GET_H_GR (FLD (f_left
)), ANDDI (GET_H_GR (FLD (f_right
)), 63));
4985 SET_H_GR (FLD (f_dest
), opval
);
4986 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
4993 /* shlrdl: shlrd.l $rm, $rn, $rd */
4996 SEM_FN_NAME (sh64_media
,shlrdl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
4998 #define FLD(f) abuf->fields.sfmt_add.f
4999 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5000 int UNUSED written
= 0;
5001 IADDR UNUSED pc
= abuf
->addr
;
5002 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5005 DI opval
= EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDDI (GET_H_GR (FLD (f_right
)), 63)));
5006 SET_H_GR (FLD (f_dest
), opval
);
5007 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5014 /* shlri: shlri $rm, $uimm6, $rd */
5017 SEM_FN_NAME (sh64_media
,shlri
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5019 #define FLD(f) abuf->fields.sfmt_shari.f
5020 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5021 int UNUSED written
= 0;
5022 IADDR UNUSED pc
= abuf
->addr
;
5023 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5026 DI opval
= SRLDI (GET_H_GR (FLD (f_left
)), FLD (f_uimm6
));
5027 SET_H_GR (FLD (f_dest
), opval
);
5028 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5035 /* shlril: shlri.l $rm, $uimm6, $rd */
5038 SEM_FN_NAME (sh64_media
,shlril
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5040 #define FLD(f) abuf->fields.sfmt_shari.f
5041 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5042 int UNUSED written
= 0;
5043 IADDR UNUSED pc
= abuf
->addr
;
5044 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5047 DI opval
= EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), ANDSI (FLD (f_uimm6
), 63)));
5048 SET_H_GR (FLD (f_dest
), opval
);
5049 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5056 /* shori: shori $uimm16, $rd */
5059 SEM_FN_NAME (sh64_media
,shori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5061 #define FLD(f) abuf->fields.sfmt_shori.f
5062 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5063 int UNUSED written
= 0;
5064 IADDR UNUSED pc
= abuf
->addr
;
5065 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5068 DI opval
= ORDI (SLLDI (GET_H_GR (FLD (f_dest
)), 16), ZEXTSIDI (FLD (f_uimm16
)));
5069 SET_H_GR (FLD (f_dest
), opval
);
5070 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5080 SEM_FN_NAME (sh64_media
,sleep
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5082 #define FLD(f) abuf->fields.sfmt_empty.f
5083 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5084 int UNUSED written
= 0;
5085 IADDR UNUSED pc
= abuf
->addr
;
5086 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5094 /* stb: st.b $rm, $disp10, $rd */
5097 SEM_FN_NAME (sh64_media
,stb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5099 #define FLD(f) abuf->fields.sfmt_addi.f
5100 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5101 int UNUSED written
= 0;
5102 IADDR UNUSED pc
= abuf
->addr
;
5103 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5106 UQI opval
= ANDQI (GET_H_GR (FLD (f_dest
)), 255);
5107 SETMEMUQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10
))), opval
);
5108 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5115 /* stl: st.l $rm, $disp10x4, $rd */
5118 SEM_FN_NAME (sh64_media
,stl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5120 #define FLD(f) abuf->fields.sfmt_flds.f
5121 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5122 int UNUSED written
= 0;
5123 IADDR UNUSED pc
= abuf
->addr
;
5124 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5127 SI opval
= ANDSI (GET_H_GR (FLD (f_dest
)), 0xffffffff);
5128 SETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x4
))), opval
);
5129 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5136 /* stq: st.q $rm, $disp10x8, $rd */
5139 SEM_FN_NAME (sh64_media
,stq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5141 #define FLD(f) abuf->fields.sfmt_fldd.f
5142 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5143 int UNUSED written
= 0;
5144 IADDR UNUSED pc
= abuf
->addr
;
5145 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5148 DI opval
= GET_H_GR (FLD (f_dest
));
5149 SETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x8
))), opval
);
5150 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5157 /* stw: st.w $rm, $disp10x2, $rd */
5160 SEM_FN_NAME (sh64_media
,stw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5162 #define FLD(f) abuf->fields.sfmt_lduw.f
5163 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5164 int UNUSED written
= 0;
5165 IADDR UNUSED pc
= abuf
->addr
;
5166 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5169 HI opval
= ANDHI (GET_H_GR (FLD (f_dest
)), 65535);
5170 SETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_disp10x2
))), opval
);
5171 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5178 /* sthil: sthi.l $rm, $disp6, $rd */
5181 SEM_FN_NAME (sh64_media
,sthil
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5183 #define FLD(f) abuf->fields.sfmt_getcfg.f
5184 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5185 int UNUSED written
= 0;
5186 IADDR UNUSED pc
= abuf
->addr
;
5187 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5193 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5194 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 3), 1);
5195 if (ANDQI (tmp_bytecount
, 4)) {
5197 SI opval
= GET_H_GR (FLD (f_dest
));
5198 SETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5199 written
|= (1 << 5);
5200 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5203 if (GET_H_ENDIAN ()) {
5205 tmp_val
= GET_H_GR (FLD (f_dest
));
5206 if (ANDQI (tmp_bytecount
, 1)) {
5209 UQI opval
= ANDQI (tmp_val
, 255);
5210 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5211 written
|= (1 << 6);
5212 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5214 tmp_val
= SRLDI (tmp_val
, 8);
5217 if (ANDQI (tmp_bytecount
, 2)) {
5220 HI opval
= ANDHI (tmp_val
, 65535);
5221 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5222 written
|= (1 << 4);
5223 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5225 tmp_val
= SRLDI (tmp_val
, 16);
5231 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (32, MULSI (8, tmp_bytecount
)));
5232 if (ANDQI (tmp_bytecount
, 2)) {
5235 HI opval
= ANDHI (tmp_val
, 65535);
5236 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5237 written
|= (1 << 4);
5238 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5240 tmp_val
= SRLDI (tmp_val
, 16);
5243 if (ANDQI (tmp_bytecount
, 1)) {
5246 UQI opval
= ANDQI (tmp_val
, 255);
5247 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5248 written
|= (1 << 6);
5249 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5251 tmp_val
= SRLDI (tmp_val
, 8);
5259 abuf
->written
= written
;
5264 /* sthiq: sthi.q $rm, $disp6, $rd */
5267 SEM_FN_NAME (sh64_media
,sthiq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5269 #define FLD(f) abuf->fields.sfmt_getcfg.f
5270 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5271 int UNUSED written
= 0;
5272 IADDR UNUSED pc
= abuf
->addr
;
5273 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5279 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5280 tmp_bytecount
= ADDDI (ANDDI (tmp_addr
, 7), 1);
5281 if (ANDQI (tmp_bytecount
, 8)) {
5283 DI opval
= GET_H_GR (FLD (f_dest
));
5284 SETMEMDI (current_cpu
, pc
, ANDDI (tmp_addr
, -8), opval
);
5285 written
|= (1 << 4);
5286 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5289 if (GET_H_ENDIAN ()) {
5291 tmp_val
= GET_H_GR (FLD (f_dest
));
5292 if (ANDQI (tmp_bytecount
, 1)) {
5295 UQI opval
= ANDQI (tmp_val
, 255);
5296 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5297 written
|= (1 << 7);
5298 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5300 tmp_val
= SRLDI (tmp_val
, 8);
5303 if (ANDQI (tmp_bytecount
, 2)) {
5306 HI opval
= ANDHI (tmp_val
, 65535);
5307 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5308 written
|= (1 << 5);
5309 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5311 tmp_val
= SRLDI (tmp_val
, 16);
5314 if (ANDQI (tmp_bytecount
, 4)) {
5317 SI opval
= ANDSI (tmp_val
, 0xffffffff);
5318 SETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8), opval
);
5319 written
|= (1 << 6);
5320 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5322 tmp_val
= SRLDI (tmp_val
, 32);
5328 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (64, MULSI (8, tmp_bytecount
)));
5329 if (ANDQI (tmp_bytecount
, 4)) {
5332 SI opval
= ANDSI (tmp_val
, 0xffffffff);
5333 SETMEMSI (current_cpu
, pc
, ANDDI (tmp_addr
, -8), opval
);
5334 written
|= (1 << 6);
5335 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5337 tmp_val
= SRLDI (tmp_val
, 32);
5340 if (ANDQI (tmp_bytecount
, 2)) {
5343 HI opval
= ANDHI (tmp_val
, 65535);
5344 SETMEMHI (current_cpu
, pc
, ANDDI (tmp_addr
, -4), opval
);
5345 written
|= (1 << 5);
5346 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5348 tmp_val
= SRLDI (tmp_val
, 16);
5351 if (ANDQI (tmp_bytecount
, 1)) {
5354 UQI opval
= ANDQI (tmp_val
, 255);
5355 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5356 written
|= (1 << 7);
5357 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5359 tmp_val
= SRLDI (tmp_val
, 8);
5367 abuf
->written
= written
;
5372 /* stlol: stlo.l $rm, $disp6, $rd */
5375 SEM_FN_NAME (sh64_media
,stlol
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5377 #define FLD(f) abuf->fields.sfmt_getcfg.f
5378 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5379 int UNUSED written
= 0;
5380 IADDR UNUSED pc
= abuf
->addr
;
5381 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5387 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5388 tmp_bytecount
= SUBSI (4, ANDDI (tmp_addr
, 3));
5389 if (ANDQI (tmp_bytecount
, 4)) {
5391 USI opval
= GET_H_GR (FLD (f_dest
));
5392 SETMEMUSI (current_cpu
, pc
, tmp_addr
, opval
);
5393 written
|= (1 << 6);
5394 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5397 if (GET_H_ENDIAN ()) {
5399 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (32, MULSI (8, tmp_bytecount
)));
5400 if (ANDQI (tmp_bytecount
, 2)) {
5403 UHI opval
= ANDHI (tmp_val
, 65535);
5404 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5405 written
|= (1 << 4);
5406 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5408 tmp_val
= SRLDI (tmp_val
, 16);
5411 if (ANDQI (tmp_bytecount
, 1)) {
5414 UQI opval
= ANDQI (tmp_val
, 255);
5415 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5416 written
|= (1 << 5);
5417 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5419 tmp_val
= SRLDI (tmp_val
, 8);
5425 tmp_val
= GET_H_GR (FLD (f_dest
));
5426 if (ANDQI (tmp_bytecount
, 1)) {
5429 UQI opval
= ANDQI (tmp_val
, 255);
5430 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5431 written
|= (1 << 5);
5432 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5434 tmp_val
= SRLDI (tmp_val
, 8);
5437 if (ANDQI (tmp_bytecount
, 2)) {
5440 UHI opval
= ANDHI (tmp_val
, 65535);
5441 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5442 written
|= (1 << 4);
5443 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5445 tmp_val
= SRLDI (tmp_val
, 16);
5453 abuf
->written
= written
;
5458 /* stloq: stlo.q $rm, $disp6, $rd */
5461 SEM_FN_NAME (sh64_media
,stloq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5463 #define FLD(f) abuf->fields.sfmt_getcfg.f
5464 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5465 int UNUSED written
= 0;
5466 IADDR UNUSED pc
= abuf
->addr
;
5467 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5473 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), FLD (f_disp6
));
5474 tmp_bytecount
= SUBSI (8, ANDDI (tmp_addr
, 7));
5475 if (ANDQI (tmp_bytecount
, 8)) {
5477 UDI opval
= GET_H_GR (FLD (f_dest
));
5478 SETMEMUDI (current_cpu
, pc
, tmp_addr
, opval
);
5479 written
|= (1 << 4);
5480 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5483 if (GET_H_ENDIAN ()) {
5485 tmp_val
= SRLDI (GET_H_GR (FLD (f_dest
)), SUBSI (64, MULSI (8, tmp_bytecount
)));
5486 if (ANDQI (tmp_bytecount
, 4)) {
5489 USI opval
= ANDSI (tmp_val
, 0xffffffff);
5490 SETMEMUSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4), opval
);
5491 written
|= (1 << 7);
5492 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5494 tmp_val
= SRLDI (tmp_val
, 32);
5497 if (ANDQI (tmp_bytecount
, 2)) {
5500 UHI opval
= ANDHI (tmp_val
, 65535);
5501 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5502 written
|= (1 << 5);
5503 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5505 tmp_val
= SRLDI (tmp_val
, 16);
5508 if (ANDQI (tmp_bytecount
, 1)) {
5511 UQI opval
= ANDQI (tmp_val
, 255);
5512 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5513 written
|= (1 << 6);
5514 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5516 tmp_val
= SRLDI (tmp_val
, 8);
5522 tmp_val
= GET_H_GR (FLD (f_dest
));
5523 if (ANDQI (tmp_bytecount
, 1)) {
5526 UQI opval
= ANDQI (tmp_val
, 255);
5527 SETMEMUQI (current_cpu
, pc
, tmp_addr
, opval
);
5528 written
|= (1 << 6);
5529 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5531 tmp_val
= SRLDI (tmp_val
, 8);
5534 if (ANDQI (tmp_bytecount
, 2)) {
5537 UHI opval
= ANDHI (tmp_val
, 65535);
5538 SETMEMUHI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 1), -2), opval
);
5539 written
|= (1 << 5);
5540 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5542 tmp_val
= SRLDI (tmp_val
, 16);
5545 if (ANDQI (tmp_bytecount
, 4)) {
5548 USI opval
= ANDSI (tmp_val
, 0xffffffff);
5549 SETMEMUSI (current_cpu
, pc
, ANDDI (ADDDI (tmp_addr
, 3), -4), opval
);
5550 written
|= (1 << 7);
5551 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5553 tmp_val
= SRLDI (tmp_val
, 32);
5561 abuf
->written
= written
;
5566 /* stxb: stx.b $rm, $rn, $rd */
5569 SEM_FN_NAME (sh64_media
,stxb
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5571 #define FLD(f) abuf->fields.sfmt_add.f
5572 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5573 int UNUSED written
= 0;
5574 IADDR UNUSED pc
= abuf
->addr
;
5575 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5578 UQI opval
= SUBWORDDIQI (GET_H_GR (FLD (f_dest
)), 7);
5579 SETMEMUQI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5580 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5587 /* stxl: stx.l $rm, $rn, $rd */
5590 SEM_FN_NAME (sh64_media
,stxl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5592 #define FLD(f) abuf->fields.sfmt_add.f
5593 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5594 int UNUSED written
= 0;
5595 IADDR UNUSED pc
= abuf
->addr
;
5596 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5599 SI opval
= SUBWORDDISI (GET_H_GR (FLD (f_dest
)), 1);
5600 SETMEMSI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5601 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5608 /* stxq: stx.q $rm, $rn, $rd */
5611 SEM_FN_NAME (sh64_media
,stxq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5613 #define FLD(f) abuf->fields.sfmt_add.f
5614 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5615 int UNUSED written
= 0;
5616 IADDR UNUSED pc
= abuf
->addr
;
5617 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5620 DI opval
= GET_H_GR (FLD (f_dest
));
5621 SETMEMDI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5622 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5629 /* stxw: stx.w $rm, $rn, $rd */
5632 SEM_FN_NAME (sh64_media
,stxw
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5634 #define FLD(f) abuf->fields.sfmt_add.f
5635 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5636 int UNUSED written
= 0;
5637 IADDR UNUSED pc
= abuf
->addr
;
5638 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5641 HI opval
= SUBWORDDIHI (GET_H_GR (FLD (f_dest
)), 3);
5642 SETMEMHI (current_cpu
, pc
, ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
))), opval
);
5643 TRACE_RESULT (current_cpu
, abuf
, "memory", 'x', opval
);
5650 /* sub: sub $rm, $rn, $rd */
5653 SEM_FN_NAME (sh64_media
,sub
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5655 #define FLD(f) abuf->fields.sfmt_add.f
5656 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5657 int UNUSED written
= 0;
5658 IADDR UNUSED pc
= abuf
->addr
;
5659 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5662 DI opval
= SUBDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
5663 SET_H_GR (FLD (f_dest
), opval
);
5664 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5671 /* subl: sub.l $rm, $rn, $rd */
5674 SEM_FN_NAME (sh64_media
,subl
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5676 #define FLD(f) abuf->fields.sfmt_add.f
5677 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5678 int UNUSED written
= 0;
5679 IADDR UNUSED pc
= abuf
->addr
;
5680 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5683 DI opval
= EXTSIDI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left
)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right
)), 1)));
5684 SET_H_GR (FLD (f_dest
), opval
);
5685 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5692 /* swapq: swap.q $rm, $rn, $rd */
5695 SEM_FN_NAME (sh64_media
,swapq
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5697 #define FLD(f) abuf->fields.sfmt_add.f
5698 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5699 int UNUSED written
= 0;
5700 IADDR UNUSED pc
= abuf
->addr
;
5701 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5706 tmp_addr
= ADDDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
5707 tmp_temp
= GETMEMDI (current_cpu
, pc
, tmp_addr
);
5709 DI opval
= GET_H_GR (FLD (f_dest
));
5710 SETMEMDI (current_cpu
, pc
, tmp_addr
, opval
);
5711 TRACE_RESULT (current_cpu
, abuf
, "memory", 'D', opval
);
5714 DI opval
= tmp_temp
;
5715 SET_H_GR (FLD (f_dest
), opval
);
5716 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5727 SEM_FN_NAME (sh64_media
,synci
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5729 #define FLD(f) abuf->fields.sfmt_empty.f
5730 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5731 int UNUSED written
= 0;
5732 IADDR UNUSED pc
= abuf
->addr
;
5733 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5744 SEM_FN_NAME (sh64_media
,synco
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5746 #define FLD(f) abuf->fields.sfmt_empty.f
5747 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5748 int UNUSED written
= 0;
5749 IADDR UNUSED pc
= abuf
->addr
;
5750 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5758 /* trapa: trapa $rm */
5761 SEM_FN_NAME (sh64_media
,trapa
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5763 #define FLD(f) abuf->fields.sfmt_xori.f
5764 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5765 int UNUSED written
= 0;
5766 IADDR UNUSED pc
= abuf
->addr
;
5767 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5769 sh64_trapa (current_cpu
, GET_H_GR (FLD (f_left
)), pc
);
5775 /* xor: xor $rm, $rn, $rd */
5778 SEM_FN_NAME (sh64_media
,xor) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5780 #define FLD(f) abuf->fields.sfmt_add.f
5781 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5782 int UNUSED written
= 0;
5783 IADDR UNUSED pc
= abuf
->addr
;
5784 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5787 DI opval
= XORDI (GET_H_GR (FLD (f_left
)), GET_H_GR (FLD (f_right
)));
5788 SET_H_GR (FLD (f_dest
), opval
);
5789 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5796 /* xori: xori $rm, $imm6, $rd */
5799 SEM_FN_NAME (sh64_media
,xori
) (SIM_CPU
*current_cpu
, SEM_ARG sem_arg
)
5801 #define FLD(f) abuf->fields.sfmt_xori.f
5802 ARGBUF
*abuf
= SEM_ARGBUF (sem_arg
);
5803 int UNUSED written
= 0;
5804 IADDR UNUSED pc
= abuf
->addr
;
5805 SEM_PC vpc
= SEM_NEXT_VPC (sem_arg
, pc
, 4);
5808 DI opval
= XORDI (GET_H_GR (FLD (f_left
)), EXTSIDI (FLD (f_imm6
)));
5809 SET_H_GR (FLD (f_dest
), opval
);
5810 TRACE_RESULT (current_cpu
, abuf
, "gr", 'D', opval
);
5817 /* Table of all semantic fns. */
5819 static const struct sem_fn_desc sem_fns
[] = {
5820 { SH64_MEDIA_INSN_X_INVALID
, SEM_FN_NAME (sh64_media
,x_invalid
) },
5821 { SH64_MEDIA_INSN_X_AFTER
, SEM_FN_NAME (sh64_media
,x_after
) },
5822 { SH64_MEDIA_INSN_X_BEFORE
, SEM_FN_NAME (sh64_media
,x_before
) },
5823 { SH64_MEDIA_INSN_X_CTI_CHAIN
, SEM_FN_NAME (sh64_media
,x_cti_chain
) },
5824 { SH64_MEDIA_INSN_X_CHAIN
, SEM_FN_NAME (sh64_media
,x_chain
) },
5825 { SH64_MEDIA_INSN_X_BEGIN
, SEM_FN_NAME (sh64_media
,x_begin
) },
5826 { SH64_MEDIA_INSN_ADD
, SEM_FN_NAME (sh64_media
,add
) },
5827 { SH64_MEDIA_INSN_ADDL
, SEM_FN_NAME (sh64_media
,addl
) },
5828 { SH64_MEDIA_INSN_ADDI
, SEM_FN_NAME (sh64_media
,addi
) },
5829 { SH64_MEDIA_INSN_ADDIL
, SEM_FN_NAME (sh64_media
,addil
) },
5830 { SH64_MEDIA_INSN_ADDZL
, SEM_FN_NAME (sh64_media
,addzl
) },
5831 { SH64_MEDIA_INSN_ALLOCO
, SEM_FN_NAME (sh64_media
,alloco
) },
5832 { SH64_MEDIA_INSN_AND
, SEM_FN_NAME (sh64_media
,and) },
5833 { SH64_MEDIA_INSN_ANDC
, SEM_FN_NAME (sh64_media
,andc
) },
5834 { SH64_MEDIA_INSN_ANDI
, SEM_FN_NAME (sh64_media
,andi
) },
5835 { SH64_MEDIA_INSN_BEQ
, SEM_FN_NAME (sh64_media
,beq
) },
5836 { SH64_MEDIA_INSN_BEQI
, SEM_FN_NAME (sh64_media
,beqi
) },
5837 { SH64_MEDIA_INSN_BGE
, SEM_FN_NAME (sh64_media
,bge
) },
5838 { SH64_MEDIA_INSN_BGEU
, SEM_FN_NAME (sh64_media
,bgeu
) },
5839 { SH64_MEDIA_INSN_BGT
, SEM_FN_NAME (sh64_media
,bgt
) },
5840 { SH64_MEDIA_INSN_BGTU
, SEM_FN_NAME (sh64_media
,bgtu
) },
5841 { SH64_MEDIA_INSN_BLINK
, SEM_FN_NAME (sh64_media
,blink
) },
5842 { SH64_MEDIA_INSN_BNE
, SEM_FN_NAME (sh64_media
,bne
) },
5843 { SH64_MEDIA_INSN_BNEI
, SEM_FN_NAME (sh64_media
,bnei
) },
5844 { SH64_MEDIA_INSN_BRK
, SEM_FN_NAME (sh64_media
,brk
) },
5845 { SH64_MEDIA_INSN_BYTEREV
, SEM_FN_NAME (sh64_media
,byterev
) },
5846 { SH64_MEDIA_INSN_CMPEQ
, SEM_FN_NAME (sh64_media
,cmpeq
) },
5847 { SH64_MEDIA_INSN_CMPGT
, SEM_FN_NAME (sh64_media
,cmpgt
) },
5848 { SH64_MEDIA_INSN_CMPGTU
, SEM_FN_NAME (sh64_media
,cmpgtu
) },
5849 { SH64_MEDIA_INSN_CMVEQ
, SEM_FN_NAME (sh64_media
,cmveq
) },
5850 { SH64_MEDIA_INSN_CMVNE
, SEM_FN_NAME (sh64_media
,cmvne
) },
5851 { SH64_MEDIA_INSN_FABSD
, SEM_FN_NAME (sh64_media
,fabsd
) },
5852 { SH64_MEDIA_INSN_FABSS
, SEM_FN_NAME (sh64_media
,fabss
) },
5853 { SH64_MEDIA_INSN_FADDD
, SEM_FN_NAME (sh64_media
,faddd
) },
5854 { SH64_MEDIA_INSN_FADDS
, SEM_FN_NAME (sh64_media
,fadds
) },
5855 { SH64_MEDIA_INSN_FCMPEQD
, SEM_FN_NAME (sh64_media
,fcmpeqd
) },
5856 { SH64_MEDIA_INSN_FCMPEQS
, SEM_FN_NAME (sh64_media
,fcmpeqs
) },
5857 { SH64_MEDIA_INSN_FCMPGED
, SEM_FN_NAME (sh64_media
,fcmpged
) },
5858 { SH64_MEDIA_INSN_FCMPGES
, SEM_FN_NAME (sh64_media
,fcmpges
) },
5859 { SH64_MEDIA_INSN_FCMPGTD
, SEM_FN_NAME (sh64_media
,fcmpgtd
) },
5860 { SH64_MEDIA_INSN_FCMPGTS
, SEM_FN_NAME (sh64_media
,fcmpgts
) },
5861 { SH64_MEDIA_INSN_FCMPUND
, SEM_FN_NAME (sh64_media
,fcmpund
) },
5862 { SH64_MEDIA_INSN_FCMPUNS
, SEM_FN_NAME (sh64_media
,fcmpuns
) },
5863 { SH64_MEDIA_INSN_FCNVDS
, SEM_FN_NAME (sh64_media
,fcnvds
) },
5864 { SH64_MEDIA_INSN_FCNVSD
, SEM_FN_NAME (sh64_media
,fcnvsd
) },
5865 { SH64_MEDIA_INSN_FDIVD
, SEM_FN_NAME (sh64_media
,fdivd
) },
5866 { SH64_MEDIA_INSN_FDIVS
, SEM_FN_NAME (sh64_media
,fdivs
) },
5867 { SH64_MEDIA_INSN_FGETSCR
, SEM_FN_NAME (sh64_media
,fgetscr
) },
5868 { SH64_MEDIA_INSN_FIPRS
, SEM_FN_NAME (sh64_media
,fiprs
) },
5869 { SH64_MEDIA_INSN_FLDD
, SEM_FN_NAME (sh64_media
,fldd
) },
5870 { SH64_MEDIA_INSN_FLDP
, SEM_FN_NAME (sh64_media
,fldp
) },
5871 { SH64_MEDIA_INSN_FLDS
, SEM_FN_NAME (sh64_media
,flds
) },
5872 { SH64_MEDIA_INSN_FLDXD
, SEM_FN_NAME (sh64_media
,fldxd
) },
5873 { SH64_MEDIA_INSN_FLDXP
, SEM_FN_NAME (sh64_media
,fldxp
) },
5874 { SH64_MEDIA_INSN_FLDXS
, SEM_FN_NAME (sh64_media
,fldxs
) },
5875 { SH64_MEDIA_INSN_FLOATLD
, SEM_FN_NAME (sh64_media
,floatld
) },
5876 { SH64_MEDIA_INSN_FLOATLS
, SEM_FN_NAME (sh64_media
,floatls
) },
5877 { SH64_MEDIA_INSN_FLOATQD
, SEM_FN_NAME (sh64_media
,floatqd
) },
5878 { SH64_MEDIA_INSN_FLOATQS
, SEM_FN_NAME (sh64_media
,floatqs
) },
5879 { SH64_MEDIA_INSN_FMACS
, SEM_FN_NAME (sh64_media
,fmacs
) },
5880 { SH64_MEDIA_INSN_FMOVD
, SEM_FN_NAME (sh64_media
,fmovd
) },
5881 { SH64_MEDIA_INSN_FMOVDQ
, SEM_FN_NAME (sh64_media
,fmovdq
) },
5882 { SH64_MEDIA_INSN_FMOVLS
, SEM_FN_NAME (sh64_media
,fmovls
) },
5883 { SH64_MEDIA_INSN_FMOVQD
, SEM_FN_NAME (sh64_media
,fmovqd
) },
5884 { SH64_MEDIA_INSN_FMOVS
, SEM_FN_NAME (sh64_media
,fmovs
) },
5885 { SH64_MEDIA_INSN_FMOVSL
, SEM_FN_NAME (sh64_media
,fmovsl
) },
5886 { SH64_MEDIA_INSN_FMULD
, SEM_FN_NAME (sh64_media
,fmuld
) },
5887 { SH64_MEDIA_INSN_FMULS
, SEM_FN_NAME (sh64_media
,fmuls
) },
5888 { SH64_MEDIA_INSN_FNEGD
, SEM_FN_NAME (sh64_media
,fnegd
) },
5889 { SH64_MEDIA_INSN_FNEGS
, SEM_FN_NAME (sh64_media
,fnegs
) },
5890 { SH64_MEDIA_INSN_FPUTSCR
, SEM_FN_NAME (sh64_media
,fputscr
) },
5891 { SH64_MEDIA_INSN_FSQRTD
, SEM_FN_NAME (sh64_media
,fsqrtd
) },
5892 { SH64_MEDIA_INSN_FSQRTS
, SEM_FN_NAME (sh64_media
,fsqrts
) },
5893 { SH64_MEDIA_INSN_FSTD
, SEM_FN_NAME (sh64_media
,fstd
) },
5894 { SH64_MEDIA_INSN_FSTP
, SEM_FN_NAME (sh64_media
,fstp
) },
5895 { SH64_MEDIA_INSN_FSTS
, SEM_FN_NAME (sh64_media
,fsts
) },
5896 { SH64_MEDIA_INSN_FSTXD
, SEM_FN_NAME (sh64_media
,fstxd
) },
5897 { SH64_MEDIA_INSN_FSTXP
, SEM_FN_NAME (sh64_media
,fstxp
) },
5898 { SH64_MEDIA_INSN_FSTXS
, SEM_FN_NAME (sh64_media
,fstxs
) },
5899 { SH64_MEDIA_INSN_FSUBD
, SEM_FN_NAME (sh64_media
,fsubd
) },
5900 { SH64_MEDIA_INSN_FSUBS
, SEM_FN_NAME (sh64_media
,fsubs
) },
5901 { SH64_MEDIA_INSN_FTRCDL
, SEM_FN_NAME (sh64_media
,ftrcdl
) },
5902 { SH64_MEDIA_INSN_FTRCSL
, SEM_FN_NAME (sh64_media
,ftrcsl
) },
5903 { SH64_MEDIA_INSN_FTRCDQ
, SEM_FN_NAME (sh64_media
,ftrcdq
) },
5904 { SH64_MEDIA_INSN_FTRCSQ
, SEM_FN_NAME (sh64_media
,ftrcsq
) },
5905 { SH64_MEDIA_INSN_FTRVS
, SEM_FN_NAME (sh64_media
,ftrvs
) },
5906 { SH64_MEDIA_INSN_GETCFG
, SEM_FN_NAME (sh64_media
,getcfg
) },
5907 { SH64_MEDIA_INSN_GETCON
, SEM_FN_NAME (sh64_media
,getcon
) },
5908 { SH64_MEDIA_INSN_GETTR
, SEM_FN_NAME (sh64_media
,gettr
) },
5909 { SH64_MEDIA_INSN_ICBI
, SEM_FN_NAME (sh64_media
,icbi
) },
5910 { SH64_MEDIA_INSN_LDB
, SEM_FN_NAME (sh64_media
,ldb
) },
5911 { SH64_MEDIA_INSN_LDL
, SEM_FN_NAME (sh64_media
,ldl
) },
5912 { SH64_MEDIA_INSN_LDQ
, SEM_FN_NAME (sh64_media
,ldq
) },
5913 { SH64_MEDIA_INSN_LDUB
, SEM_FN_NAME (sh64_media
,ldub
) },
5914 { SH64_MEDIA_INSN_LDUW
, SEM_FN_NAME (sh64_media
,lduw
) },
5915 { SH64_MEDIA_INSN_LDW
, SEM_FN_NAME (sh64_media
,ldw
) },
5916 { SH64_MEDIA_INSN_LDHIL
, SEM_FN_NAME (sh64_media
,ldhil
) },
5917 { SH64_MEDIA_INSN_LDHIQ
, SEM_FN_NAME (sh64_media
,ldhiq
) },
5918 { SH64_MEDIA_INSN_LDLOL
, SEM_FN_NAME (sh64_media
,ldlol
) },
5919 { SH64_MEDIA_INSN_LDLOQ
, SEM_FN_NAME (sh64_media
,ldloq
) },
5920 { SH64_MEDIA_INSN_LDXB
, SEM_FN_NAME (sh64_media
,ldxb
) },
5921 { SH64_MEDIA_INSN_LDXL
, SEM_FN_NAME (sh64_media
,ldxl
) },
5922 { SH64_MEDIA_INSN_LDXQ
, SEM_FN_NAME (sh64_media
,ldxq
) },
5923 { SH64_MEDIA_INSN_LDXUB
, SEM_FN_NAME (sh64_media
,ldxub
) },
5924 { SH64_MEDIA_INSN_LDXUW
, SEM_FN_NAME (sh64_media
,ldxuw
) },
5925 { SH64_MEDIA_INSN_LDXW
, SEM_FN_NAME (sh64_media
,ldxw
) },
5926 { SH64_MEDIA_INSN_MABSL
, SEM_FN_NAME (sh64_media
,mabsl
) },
5927 { SH64_MEDIA_INSN_MABSW
, SEM_FN_NAME (sh64_media
,mabsw
) },
5928 { SH64_MEDIA_INSN_MADDL
, SEM_FN_NAME (sh64_media
,maddl
) },
5929 { SH64_MEDIA_INSN_MADDW
, SEM_FN_NAME (sh64_media
,maddw
) },
5930 { SH64_MEDIA_INSN_MADDSL
, SEM_FN_NAME (sh64_media
,maddsl
) },
5931 { SH64_MEDIA_INSN_MADDSUB
, SEM_FN_NAME (sh64_media
,maddsub
) },
5932 { SH64_MEDIA_INSN_MADDSW
, SEM_FN_NAME (sh64_media
,maddsw
) },
5933 { SH64_MEDIA_INSN_MCMPEQB
, SEM_FN_NAME (sh64_media
,mcmpeqb
) },
5934 { SH64_MEDIA_INSN_MCMPEQL
, SEM_FN_NAME (sh64_media
,mcmpeql
) },
5935 { SH64_MEDIA_INSN_MCMPEQW
, SEM_FN_NAME (sh64_media
,mcmpeqw
) },
5936 { SH64_MEDIA_INSN_MCMPGTL
, SEM_FN_NAME (sh64_media
,mcmpgtl
) },
5937 { SH64_MEDIA_INSN_MCMPGTUB
, SEM_FN_NAME (sh64_media
,mcmpgtub
) },
5938 { SH64_MEDIA_INSN_MCMPGTW
, SEM_FN_NAME (sh64_media
,mcmpgtw
) },
5939 { SH64_MEDIA_INSN_MCMV
, SEM_FN_NAME (sh64_media
,mcmv
) },
5940 { SH64_MEDIA_INSN_MCNVSLW
, SEM_FN_NAME (sh64_media
,mcnvslw
) },
5941 { SH64_MEDIA_INSN_MCNVSWB
, SEM_FN_NAME (sh64_media
,mcnvswb
) },
5942 { SH64_MEDIA_INSN_MCNVSWUB
, SEM_FN_NAME (sh64_media
,mcnvswub
) },
5943 { SH64_MEDIA_INSN_MEXTR1
, SEM_FN_NAME (sh64_media
,mextr1
) },
5944 { SH64_MEDIA_INSN_MEXTR2
, SEM_FN_NAME (sh64_media
,mextr2
) },
5945 { SH64_MEDIA_INSN_MEXTR3
, SEM_FN_NAME (sh64_media
,mextr3
) },
5946 { SH64_MEDIA_INSN_MEXTR4
, SEM_FN_NAME (sh64_media
,mextr4
) },
5947 { SH64_MEDIA_INSN_MEXTR5
, SEM_FN_NAME (sh64_media
,mextr5
) },
5948 { SH64_MEDIA_INSN_MEXTR6
, SEM_FN_NAME (sh64_media
,mextr6
) },
5949 { SH64_MEDIA_INSN_MEXTR7
, SEM_FN_NAME (sh64_media
,mextr7
) },
5950 { SH64_MEDIA_INSN_MMACFXWL
, SEM_FN_NAME (sh64_media
,mmacfxwl
) },
5951 { SH64_MEDIA_INSN_MMACNFX_WL
, SEM_FN_NAME (sh64_media
,mmacnfx_wl
) },
5952 { SH64_MEDIA_INSN_MMULL
, SEM_FN_NAME (sh64_media
,mmull
) },
5953 { SH64_MEDIA_INSN_MMULW
, SEM_FN_NAME (sh64_media
,mmulw
) },
5954 { SH64_MEDIA_INSN_MMULFXL
, SEM_FN_NAME (sh64_media
,mmulfxl
) },
5955 { SH64_MEDIA_INSN_MMULFXW
, SEM_FN_NAME (sh64_media
,mmulfxw
) },
5956 { SH64_MEDIA_INSN_MMULFXRPW
, SEM_FN_NAME (sh64_media
,mmulfxrpw
) },
5957 { SH64_MEDIA_INSN_MMULHIWL
, SEM_FN_NAME (sh64_media
,mmulhiwl
) },
5958 { SH64_MEDIA_INSN_MMULLOWL
, SEM_FN_NAME (sh64_media
,mmullowl
) },
5959 { SH64_MEDIA_INSN_MMULSUMWQ
, SEM_FN_NAME (sh64_media
,mmulsumwq
) },
5960 { SH64_MEDIA_INSN_MOVI
, SEM_FN_NAME (sh64_media
,movi
) },
5961 { SH64_MEDIA_INSN_MPERMW
, SEM_FN_NAME (sh64_media
,mpermw
) },
5962 { SH64_MEDIA_INSN_MSADUBQ
, SEM_FN_NAME (sh64_media
,msadubq
) },
5963 { SH64_MEDIA_INSN_MSHALDSL
, SEM_FN_NAME (sh64_media
,mshaldsl
) },
5964 { SH64_MEDIA_INSN_MSHALDSW
, SEM_FN_NAME (sh64_media
,mshaldsw
) },
5965 { SH64_MEDIA_INSN_MSHARDL
, SEM_FN_NAME (sh64_media
,mshardl
) },
5966 { SH64_MEDIA_INSN_MSHARDW
, SEM_FN_NAME (sh64_media
,mshardw
) },
5967 { SH64_MEDIA_INSN_MSHARDSQ
, SEM_FN_NAME (sh64_media
,mshardsq
) },
5968 { SH64_MEDIA_INSN_MSHFHIB
, SEM_FN_NAME (sh64_media
,mshfhib
) },
5969 { SH64_MEDIA_INSN_MSHFHIL
, SEM_FN_NAME (sh64_media
,mshfhil
) },
5970 { SH64_MEDIA_INSN_MSHFHIW
, SEM_FN_NAME (sh64_media
,mshfhiw
) },
5971 { SH64_MEDIA_INSN_MSHFLOB
, SEM_FN_NAME (sh64_media
,mshflob
) },
5972 { SH64_MEDIA_INSN_MSHFLOL
, SEM_FN_NAME (sh64_media
,mshflol
) },
5973 { SH64_MEDIA_INSN_MSHFLOW
, SEM_FN_NAME (sh64_media
,mshflow
) },
5974 { SH64_MEDIA_INSN_MSHLLDL
, SEM_FN_NAME (sh64_media
,mshlldl
) },
5975 { SH64_MEDIA_INSN_MSHLLDW
, SEM_FN_NAME (sh64_media
,mshlldw
) },
5976 { SH64_MEDIA_INSN_MSHLRDL
, SEM_FN_NAME (sh64_media
,mshlrdl
) },
5977 { SH64_MEDIA_INSN_MSHLRDW
, SEM_FN_NAME (sh64_media
,mshlrdw
) },
5978 { SH64_MEDIA_INSN_MSUBL
, SEM_FN_NAME (sh64_media
,msubl
) },
5979 { SH64_MEDIA_INSN_MSUBW
, SEM_FN_NAME (sh64_media
,msubw
) },
5980 { SH64_MEDIA_INSN_MSUBSL
, SEM_FN_NAME (sh64_media
,msubsl
) },
5981 { SH64_MEDIA_INSN_MSUBSUB
, SEM_FN_NAME (sh64_media
,msubsub
) },
5982 { SH64_MEDIA_INSN_MSUBSW
, SEM_FN_NAME (sh64_media
,msubsw
) },
5983 { SH64_MEDIA_INSN_MULSL
, SEM_FN_NAME (sh64_media
,mulsl
) },
5984 { SH64_MEDIA_INSN_MULUL
, SEM_FN_NAME (sh64_media
,mulul
) },
5985 { SH64_MEDIA_INSN_NOP
, SEM_FN_NAME (sh64_media
,nop
) },
5986 { SH64_MEDIA_INSN_NSB
, SEM_FN_NAME (sh64_media
,nsb
) },
5987 { SH64_MEDIA_INSN_OCBI
, SEM_FN_NAME (sh64_media
,ocbi
) },
5988 { SH64_MEDIA_INSN_OCBP
, SEM_FN_NAME (sh64_media
,ocbp
) },
5989 { SH64_MEDIA_INSN_OCBWB
, SEM_FN_NAME (sh64_media
,ocbwb
) },
5990 { SH64_MEDIA_INSN_OR
, SEM_FN_NAME (sh64_media
,or) },
5991 { SH64_MEDIA_INSN_ORI
, SEM_FN_NAME (sh64_media
,ori
) },
5992 { SH64_MEDIA_INSN_PREFI
, SEM_FN_NAME (sh64_media
,prefi
) },
5993 { SH64_MEDIA_INSN_PTA
, SEM_FN_NAME (sh64_media
,pta
) },
5994 { SH64_MEDIA_INSN_PTABS
, SEM_FN_NAME (sh64_media
,ptabs
) },
5995 { SH64_MEDIA_INSN_PTB
, SEM_FN_NAME (sh64_media
,ptb
) },
5996 { SH64_MEDIA_INSN_PTREL
, SEM_FN_NAME (sh64_media
,ptrel
) },
5997 { SH64_MEDIA_INSN_PUTCFG
, SEM_FN_NAME (sh64_media
,putcfg
) },
5998 { SH64_MEDIA_INSN_PUTCON
, SEM_FN_NAME (sh64_media
,putcon
) },
5999 { SH64_MEDIA_INSN_RTE
, SEM_FN_NAME (sh64_media
,rte
) },
6000 { SH64_MEDIA_INSN_SHARD
, SEM_FN_NAME (sh64_media
,shard
) },
6001 { SH64_MEDIA_INSN_SHARDL
, SEM_FN_NAME (sh64_media
,shardl
) },
6002 { SH64_MEDIA_INSN_SHARI
, SEM_FN_NAME (sh64_media
,shari
) },
6003 { SH64_MEDIA_INSN_SHARIL
, SEM_FN_NAME (sh64_media
,sharil
) },
6004 { SH64_MEDIA_INSN_SHLLD
, SEM_FN_NAME (sh64_media
,shlld
) },
6005 { SH64_MEDIA_INSN_SHLLDL
, SEM_FN_NAME (sh64_media
,shlldl
) },
6006 { SH64_MEDIA_INSN_SHLLI
, SEM_FN_NAME (sh64_media
,shlli
) },
6007 { SH64_MEDIA_INSN_SHLLIL
, SEM_FN_NAME (sh64_media
,shllil
) },
6008 { SH64_MEDIA_INSN_SHLRD
, SEM_FN_NAME (sh64_media
,shlrd
) },
6009 { SH64_MEDIA_INSN_SHLRDL
, SEM_FN_NAME (sh64_media
,shlrdl
) },
6010 { SH64_MEDIA_INSN_SHLRI
, SEM_FN_NAME (sh64_media
,shlri
) },
6011 { SH64_MEDIA_INSN_SHLRIL
, SEM_FN_NAME (sh64_media
,shlril
) },
6012 { SH64_MEDIA_INSN_SHORI
, SEM_FN_NAME (sh64_media
,shori
) },
6013 { SH64_MEDIA_INSN_SLEEP
, SEM_FN_NAME (sh64_media
,sleep
) },
6014 { SH64_MEDIA_INSN_STB
, SEM_FN_NAME (sh64_media
,stb
) },
6015 { SH64_MEDIA_INSN_STL
, SEM_FN_NAME (sh64_media
,stl
) },
6016 { SH64_MEDIA_INSN_STQ
, SEM_FN_NAME (sh64_media
,stq
) },
6017 { SH64_MEDIA_INSN_STW
, SEM_FN_NAME (sh64_media
,stw
) },
6018 { SH64_MEDIA_INSN_STHIL
, SEM_FN_NAME (sh64_media
,sthil
) },
6019 { SH64_MEDIA_INSN_STHIQ
, SEM_FN_NAME (sh64_media
,sthiq
) },
6020 { SH64_MEDIA_INSN_STLOL
, SEM_FN_NAME (sh64_media
,stlol
) },
6021 { SH64_MEDIA_INSN_STLOQ
, SEM_FN_NAME (sh64_media
,stloq
) },
6022 { SH64_MEDIA_INSN_STXB
, SEM_FN_NAME (sh64_media
,stxb
) },
6023 { SH64_MEDIA_INSN_STXL
, SEM_FN_NAME (sh64_media
,stxl
) },
6024 { SH64_MEDIA_INSN_STXQ
, SEM_FN_NAME (sh64_media
,stxq
) },
6025 { SH64_MEDIA_INSN_STXW
, SEM_FN_NAME (sh64_media
,stxw
) },
6026 { SH64_MEDIA_INSN_SUB
, SEM_FN_NAME (sh64_media
,sub
) },
6027 { SH64_MEDIA_INSN_SUBL
, SEM_FN_NAME (sh64_media
,subl
) },
6028 { SH64_MEDIA_INSN_SWAPQ
, SEM_FN_NAME (sh64_media
,swapq
) },
6029 { SH64_MEDIA_INSN_SYNCI
, SEM_FN_NAME (sh64_media
,synci
) },
6030 { SH64_MEDIA_INSN_SYNCO
, SEM_FN_NAME (sh64_media
,synco
) },
6031 { SH64_MEDIA_INSN_TRAPA
, SEM_FN_NAME (sh64_media
,trapa
) },
6032 { SH64_MEDIA_INSN_XOR
, SEM_FN_NAME (sh64_media
,xor) },
6033 { SH64_MEDIA_INSN_XORI
, SEM_FN_NAME (sh64_media
,xori
) },
6037 /* Add the semantic fns to IDESC_TABLE. */
6040 SEM_FN_NAME (sh64_media
,init_idesc_table
) (SIM_CPU
*current_cpu
)
6042 IDESC
*idesc_table
= CPU_IDESC (current_cpu
);
6043 const struct sem_fn_desc
*sf
;
6044 int mach_num
= MACH_NUM (CPU_MACH (current_cpu
));
6046 for (sf
= &sem_fns
[0]; sf
->fn
!= 0; ++sf
)
6048 const CGEN_INSN
*insn
= idesc_table
[sf
->index
].idata
;
6049 int valid_p
= (CGEN_INSN_VIRTUAL_P (insn
)
6050 || CGEN_INSN_MACH_HAS_P (insn
, mach_num
));
6053 idesc_table
[sf
->index
].sem_fast
= sf
->fn
;
6055 idesc_table
[sf
->index
].sem_fast
= SEM_FN_NAME (sh64_media
,x_invalid
);
6058 idesc_table
[sf
->index
].sem_full
= sf
->fn
;
6060 idesc_table
[sf
->index
].sem_full
= SEM_FN_NAME (sh64_media
,x_invalid
);