* Contribute Hitachi SH5 simulator.
[deliverable/binutils-gdb.git] / sim / sh64 / sem-media.c
CommitLineData
cbb38b47
BE
1/* Simulator instruction semantics for sh64.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
6
7This file is part of the GNU Simulators.
8
9This program is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2, or (at your option)
12any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License along
20with this program; if not, write to the Free Software Foundation, Inc.,
2159 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23*/
24
25#define WANT_CPU sh64
26#define WANT_CPU_SH64
27
28#include "sim-main.h"
29#include "cgen-mem.h"
30#include "cgen-ops.h"
31
32#undef GET_ATTR
33#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
34#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
35#else
36#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr)
37#endif
38
39/* This is used so that we can compile two copies of the semantic code,
40 one with full feature support and one without that runs fast(er).
41 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */
42#if FAST_P
43#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn)
44#undef TRACE_RESULT
45#define TRACE_RESULT(cpu, abuf, name, type, val)
46#else
47#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn)
48#endif
49
50/* x-invalid: --invalid-- */
51
52static SEM_PC
53SEM_FN_NAME (sh64_media,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
54{
55#define FLD(f) abuf->fields.fmt_empty.f
56 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
57 int UNUSED written = 0;
58 IADDR UNUSED pc = abuf->addr;
59 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
60
61 {
62 /* Update the recorded pc in the cpu state struct.
63 Only necessary for WITH_SCACHE case, but to avoid the
64 conditional compilation .... */
65 SET_H_PC (pc);
66 /* Virtual insns have zero size. Overwrite vpc with address of next insn
67 using the default-insn-bitsize spec. When executing insns in parallel
68 we may want to queue the fault and continue execution. */
69 vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
70 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
71 }
72
73 return vpc;
74#undef FLD
75}
76
77/* x-after: --after-- */
78
79static SEM_PC
80SEM_FN_NAME (sh64_media,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
81{
82#define FLD(f) abuf->fields.fmt_empty.f
83 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
84 int UNUSED written = 0;
85 IADDR UNUSED pc = abuf->addr;
86 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
87
88 {
89#if WITH_SCACHE_PBB_SH64_MEDIA
90 sh64_media_pbb_after (current_cpu, sem_arg);
91#endif
92 }
93
94 return vpc;
95#undef FLD
96}
97
98/* x-before: --before-- */
99
100static SEM_PC
101SEM_FN_NAME (sh64_media,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
102{
103#define FLD(f) abuf->fields.fmt_empty.f
104 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
105 int UNUSED written = 0;
106 IADDR UNUSED pc = abuf->addr;
107 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
108
109 {
110#if WITH_SCACHE_PBB_SH64_MEDIA
111 sh64_media_pbb_before (current_cpu, sem_arg);
112#endif
113 }
114
115 return vpc;
116#undef FLD
117}
118
119/* x-cti-chain: --cti-chain-- */
120
121static SEM_PC
122SEM_FN_NAME (sh64_media,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
123{
124#define FLD(f) abuf->fields.fmt_empty.f
125 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
126 int UNUSED written = 0;
127 IADDR UNUSED pc = abuf->addr;
128 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
129
130 {
131#if WITH_SCACHE_PBB_SH64_MEDIA
132#ifdef DEFINE_SWITCH
133 vpc = sh64_media_pbb_cti_chain (current_cpu, sem_arg,
134 pbb_br_type, pbb_br_npc);
135 BREAK (sem);
136#else
137 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
138 vpc = sh64_media_pbb_cti_chain (current_cpu, sem_arg,
139 CPU_PBB_BR_TYPE (current_cpu),
140 CPU_PBB_BR_NPC (current_cpu));
141#endif
142#endif
143 }
144
145 return vpc;
146#undef FLD
147}
148
149/* x-chain: --chain-- */
150
151static SEM_PC
152SEM_FN_NAME (sh64_media,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
153{
154#define FLD(f) abuf->fields.fmt_empty.f
155 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
156 int UNUSED written = 0;
157 IADDR UNUSED pc = abuf->addr;
158 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
159
160 {
161#if WITH_SCACHE_PBB_SH64_MEDIA
162 vpc = sh64_media_pbb_chain (current_cpu, sem_arg);
163#ifdef DEFINE_SWITCH
164 BREAK (sem);
165#endif
166#endif
167 }
168
169 return vpc;
170#undef FLD
171}
172
173/* x-begin: --begin-- */
174
175static SEM_PC
176SEM_FN_NAME (sh64_media,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
177{
178#define FLD(f) abuf->fields.fmt_empty.f
179 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
180 int UNUSED written = 0;
181 IADDR UNUSED pc = abuf->addr;
182 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
183
184 {
185#if WITH_SCACHE_PBB_SH64_MEDIA
186#if defined DEFINE_SWITCH || defined FAST_P
187 /* In the switch case FAST_P is a constant, allowing several optimizations
188 in any called inline functions. */
189 vpc = sh64_media_pbb_begin (current_cpu, FAST_P);
190#else
191#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
192 vpc = sh64_media_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
193#else
194 vpc = sh64_media_pbb_begin (current_cpu, 0);
195#endif
196#endif
197#endif
198 }
199
200 return vpc;
201#undef FLD
202}
203
204/* add: add $rm, $rn, $rd */
205
206static SEM_PC
207SEM_FN_NAME (sh64_media,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
208{
209#define FLD(f) abuf->fields.sfmt_add.f
210 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
211 int UNUSED written = 0;
212 IADDR UNUSED pc = abuf->addr;
213 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
214
215 {
216 DI opval = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
217 SET_H_GR (FLD (f_dest), opval);
218 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
219 }
220
221 return vpc;
222#undef FLD
223}
224
225/* addl: add.l $rm, $rn, $rd */
226
227static SEM_PC
228SEM_FN_NAME (sh64_media,addl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
229{
230#define FLD(f) abuf->fields.sfmt_add.f
231 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
232 int UNUSED written = 0;
233 IADDR UNUSED pc = abuf->addr;
234 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
235
236 {
237 DI opval = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
238 SET_H_GR (FLD (f_dest), opval);
239 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
240 }
241
242 return vpc;
243#undef FLD
244}
245
246/* addi: addi $rm, $disp10, $rd */
247
248static SEM_PC
249SEM_FN_NAME (sh64_media,addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
250{
251#define FLD(f) abuf->fields.sfmt_addi.f
252 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
253 int UNUSED written = 0;
254 IADDR UNUSED pc = abuf->addr;
255 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
256
257 {
258 DI opval = ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10)));
259 SET_H_GR (FLD (f_dest), opval);
260 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
261 }
262
263 return vpc;
264#undef FLD
265}
266
267/* addil: addi.l $rm, $disp10, $rd */
268
269static SEM_PC
270SEM_FN_NAME (sh64_media,addil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
271{
272#define FLD(f) abuf->fields.sfmt_addi.f
273 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
274 int UNUSED written = 0;
275 IADDR UNUSED pc = abuf->addr;
276 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
277
278 {
279 DI opval = EXTSIDI (ADDSI (EXTSISI (FLD (f_disp10)), SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)));
280 SET_H_GR (FLD (f_dest), opval);
281 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
282 }
283
284 return vpc;
285#undef FLD
286}
287
288/* addzl: addz.l $rm, $rn, $rd */
289
290static SEM_PC
291SEM_FN_NAME (sh64_media,addzl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
292{
293#define FLD(f) abuf->fields.sfmt_add.f
294 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
295 int UNUSED written = 0;
296 IADDR UNUSED pc = abuf->addr;
297 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
298
299 {
300 DI opval = ZEXTSIDI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
301 SET_H_GR (FLD (f_dest), opval);
302 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
303 }
304
305 return vpc;
306#undef FLD
307}
308
309/* alloco: alloco $rm, $disp6x32 */
310
311static SEM_PC
312SEM_FN_NAME (sh64_media,alloco) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
313{
314#define FLD(f) abuf->fields.fmt_empty.f
315 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
316 int UNUSED written = 0;
317 IADDR UNUSED pc = abuf->addr;
318 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
319
320((void) 0); /*nop*/
321
322 return vpc;
323#undef FLD
324}
325
326/* and: and $rm, $rn, $rd */
327
328static SEM_PC
329SEM_FN_NAME (sh64_media,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
330{
331#define FLD(f) abuf->fields.sfmt_add.f
332 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
333 int UNUSED written = 0;
334 IADDR UNUSED pc = abuf->addr;
335 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
336
337 {
338 DI opval = ANDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
339 SET_H_GR (FLD (f_dest), opval);
340 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
341 }
342
343 return vpc;
344#undef FLD
345}
346
347/* andc: andc $rm, $rn, $rd */
348
349static SEM_PC
350SEM_FN_NAME (sh64_media,andc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
351{
352#define FLD(f) abuf->fields.sfmt_add.f
353 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
354 int UNUSED written = 0;
355 IADDR UNUSED pc = abuf->addr;
356 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
357
358 {
359 DI opval = ANDDI (GET_H_GR (FLD (f_left)), INVDI (GET_H_GR (FLD (f_right))));
360 SET_H_GR (FLD (f_dest), opval);
361 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
362 }
363
364 return vpc;
365#undef FLD
366}
367
368/* andi: andi $rm, $disp10, $rd */
369
370static SEM_PC
371SEM_FN_NAME (sh64_media,andi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
372{
373#define FLD(f) abuf->fields.sfmt_addi.f
374 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
375 int UNUSED written = 0;
376 IADDR UNUSED pc = abuf->addr;
377 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
378
379 {
380 DI opval = ANDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10)));
381 SET_H_GR (FLD (f_dest), opval);
382 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
383 }
384
385 return vpc;
386#undef FLD
387}
388
389/* beq: beq$likely $rm, $rn, $tra */
390
391static SEM_PC
392SEM_FN_NAME (sh64_media,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
393{
394#define FLD(f) abuf->fields.sfmt_beq.f
395 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
396 int UNUSED written = 0;
397 IADDR UNUSED pc = abuf->addr;
398 SEM_BRANCH_INIT
399 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
400
401if (EQDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
402 {
403 UDI opval = CPU (h_tr[FLD (f_tra)]);
404 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
405 written |= (1 << 3);
406 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
407 }
408}
409
410 abuf->written = written;
411 SEM_BRANCH_FINI (vpc);
412 return vpc;
413#undef FLD
414}
415
416/* beqi: beqi$likely $rm, $imm6, $tra */
417
418static SEM_PC
419SEM_FN_NAME (sh64_media,beqi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
420{
421#define FLD(f) abuf->fields.sfmt_beqi.f
422 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
423 int UNUSED written = 0;
424 IADDR UNUSED pc = abuf->addr;
425 SEM_BRANCH_INIT
426 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
427
428if (EQDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)))) {
429 {
430 UDI opval = CPU (h_tr[FLD (f_tra)]);
431 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
432 written |= (1 << 3);
433 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
434 }
435}
436
437 abuf->written = written;
438 SEM_BRANCH_FINI (vpc);
439 return vpc;
440#undef FLD
441}
442
443/* bge: bge$likely $rm, $rn, $tra */
444
445static SEM_PC
446SEM_FN_NAME (sh64_media,bge) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
447{
448#define FLD(f) abuf->fields.sfmt_beq.f
449 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
450 int UNUSED written = 0;
451 IADDR UNUSED pc = abuf->addr;
452 SEM_BRANCH_INIT
453 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
454
455if (GEDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
456 {
457 UDI opval = CPU (h_tr[FLD (f_tra)]);
458 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
459 written |= (1 << 3);
460 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
461 }
462}
463
464 abuf->written = written;
465 SEM_BRANCH_FINI (vpc);
466 return vpc;
467#undef FLD
468}
469
470/* bgeu: bgeu$likely $rm, $rn, $tra */
471
472static SEM_PC
473SEM_FN_NAME (sh64_media,bgeu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
474{
475#define FLD(f) abuf->fields.sfmt_beq.f
476 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
477 int UNUSED written = 0;
478 IADDR UNUSED pc = abuf->addr;
479 SEM_BRANCH_INIT
480 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
481
482if (GEUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
483 {
484 UDI opval = CPU (h_tr[FLD (f_tra)]);
485 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
486 written |= (1 << 3);
487 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
488 }
489}
490
491 abuf->written = written;
492 SEM_BRANCH_FINI (vpc);
493 return vpc;
494#undef FLD
495}
496
497/* bgt: bgt$likely $rm, $rn, $tra */
498
499static SEM_PC
500SEM_FN_NAME (sh64_media,bgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
501{
502#define FLD(f) abuf->fields.sfmt_beq.f
503 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
504 int UNUSED written = 0;
505 IADDR UNUSED pc = abuf->addr;
506 SEM_BRANCH_INIT
507 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
508
509if (GTDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
510 {
511 UDI opval = CPU (h_tr[FLD (f_tra)]);
512 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
513 written |= (1 << 3);
514 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
515 }
516}
517
518 abuf->written = written;
519 SEM_BRANCH_FINI (vpc);
520 return vpc;
521#undef FLD
522}
523
524/* bgtu: bgtu$likely $rm, $rn, $tra */
525
526static SEM_PC
527SEM_FN_NAME (sh64_media,bgtu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
528{
529#define FLD(f) abuf->fields.sfmt_beq.f
530 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
531 int UNUSED written = 0;
532 IADDR UNUSED pc = abuf->addr;
533 SEM_BRANCH_INIT
534 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
535
536if (GTUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
537 {
538 UDI opval = CPU (h_tr[FLD (f_tra)]);
539 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
540 written |= (1 << 3);
541 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
542 }
543}
544
545 abuf->written = written;
546 SEM_BRANCH_FINI (vpc);
547 return vpc;
548#undef FLD
549}
550
551/* blink: blink $trb, $rd */
552
553static SEM_PC
554SEM_FN_NAME (sh64_media,blink) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
555{
556#define FLD(f) abuf->fields.sfmt_blink.f
557 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
558 int UNUSED written = 0;
559 IADDR UNUSED pc = abuf->addr;
560 SEM_BRANCH_INIT
561 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
562
563{
564 {
565 DI opval = ORDI (ADDDI (pc, 4), 1);
566 SET_H_GR (FLD (f_dest), opval);
567 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
568 }
569 {
570 UDI opval = CPU (h_tr[FLD (f_trb)]);
571 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
572 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
573 }
574}
575
576 SEM_BRANCH_FINI (vpc);
577 return vpc;
578#undef FLD
579}
580
581/* bne: bne$likely $rm, $rn, $tra */
582
583static SEM_PC
584SEM_FN_NAME (sh64_media,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
585{
586#define FLD(f) abuf->fields.sfmt_beq.f
587 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
588 int UNUSED written = 0;
589 IADDR UNUSED pc = abuf->addr;
590 SEM_BRANCH_INIT
591 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
592
593if (NEDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) {
594 {
595 UDI opval = CPU (h_tr[FLD (f_tra)]);
596 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
597 written |= (1 << 3);
598 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
599 }
600}
601
602 abuf->written = written;
603 SEM_BRANCH_FINI (vpc);
604 return vpc;
605#undef FLD
606}
607
608/* bnei: bnei$likely $rm, $imm6, $tra */
609
610static SEM_PC
611SEM_FN_NAME (sh64_media,bnei) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
612{
613#define FLD(f) abuf->fields.sfmt_beqi.f
614 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
615 int UNUSED written = 0;
616 IADDR UNUSED pc = abuf->addr;
617 SEM_BRANCH_INIT
618 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
619
620if (NEDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)))) {
621 {
622 UDI opval = CPU (h_tr[FLD (f_tra)]);
623 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
624 written |= (1 << 3);
625 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval);
626 }
627}
628
629 abuf->written = written;
630 SEM_BRANCH_FINI (vpc);
631 return vpc;
632#undef FLD
633}
634
635/* brk: brk */
636
637static SEM_PC
638SEM_FN_NAME (sh64_media,brk) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
639{
640#define FLD(f) abuf->fields.fmt_empty.f
641 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
642 int UNUSED written = 0;
643 IADDR UNUSED pc = abuf->addr;
644 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
645
646sh64_break (current_cpu, pc);
647
648 return vpc;
649#undef FLD
650}
651
652/* byterev: byterev $rm, $rd */
653
654static SEM_PC
655SEM_FN_NAME (sh64_media,byterev) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
656{
657#define FLD(f) abuf->fields.sfmt_xori.f
658 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
659 int UNUSED written = 0;
660 IADDR UNUSED pc = abuf->addr;
661 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
662
663{
664 DI tmp_source;
665 DI tmp_result;
666 tmp_source = GET_H_GR (FLD (f_left));
667 tmp_result = 0;
668{
669 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
670 tmp_source = SRLDI (tmp_source, 8);
671}
672{
673 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
674 tmp_source = SRLDI (tmp_source, 8);
675}
676{
677 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
678 tmp_source = SRLDI (tmp_source, 8);
679}
680{
681 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
682 tmp_source = SRLDI (tmp_source, 8);
683}
684{
685 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
686 tmp_source = SRLDI (tmp_source, 8);
687}
688{
689 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
690 tmp_source = SRLDI (tmp_source, 8);
691}
692{
693 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
694 tmp_source = SRLDI (tmp_source, 8);
695}
696{
697 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255));
698 tmp_source = SRLDI (tmp_source, 8);
699}
700 {
701 DI opval = tmp_result;
702 SET_H_GR (FLD (f_dest), opval);
703 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
704 }
705}
706
707 return vpc;
708#undef FLD
709}
710
711/* cmpeq: cmpeq $rm, $rn, $rd */
712
713static SEM_PC
714SEM_FN_NAME (sh64_media,cmpeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
715{
716#define FLD(f) abuf->fields.sfmt_add.f
717 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
718 int UNUSED written = 0;
719 IADDR UNUSED pc = abuf->addr;
720 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
721
722 {
723 DI opval = ((EQDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0));
724 SET_H_GR (FLD (f_dest), opval);
725 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
726 }
727
728 return vpc;
729#undef FLD
730}
731
732/* cmpgt: cmpgt $rm, $rn, $rd */
733
734static SEM_PC
735SEM_FN_NAME (sh64_media,cmpgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
736{
737#define FLD(f) abuf->fields.sfmt_add.f
738 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
739 int UNUSED written = 0;
740 IADDR UNUSED pc = abuf->addr;
741 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
742
743 {
744 DI opval = ((GTDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0));
745 SET_H_GR (FLD (f_dest), opval);
746 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
747 }
748
749 return vpc;
750#undef FLD
751}
752
753/* cmpgtu: cmpgtu $rm,$rn, $rd */
754
755static SEM_PC
756SEM_FN_NAME (sh64_media,cmpgtu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
757{
758#define FLD(f) abuf->fields.sfmt_add.f
759 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
760 int UNUSED written = 0;
761 IADDR UNUSED pc = abuf->addr;
762 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
763
764 {
765 DI opval = ((GTUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0));
766 SET_H_GR (FLD (f_dest), opval);
767 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
768 }
769
770 return vpc;
771#undef FLD
772}
773
774/* cmveq: cmveq $rm, $rn, $rd */
775
776static SEM_PC
777SEM_FN_NAME (sh64_media,cmveq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
778{
779#define FLD(f) abuf->fields.sfmt_add.f
780 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
781 int UNUSED written = 0;
782 IADDR UNUSED pc = abuf->addr;
783 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
784
785if (EQDI (GET_H_GR (FLD (f_left)), 0)) {
786 {
787 DI opval = GET_H_GR (FLD (f_right));
788 SET_H_GR (FLD (f_dest), opval);
789 written |= (1 << 2);
790 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
791 }
792}
793
794 abuf->written = written;
795 return vpc;
796#undef FLD
797}
798
799/* cmvne: cmvne $rm, $rn, $rd */
800
801static SEM_PC
802SEM_FN_NAME (sh64_media,cmvne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
803{
804#define FLD(f) abuf->fields.sfmt_add.f
805 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
806 int UNUSED written = 0;
807 IADDR UNUSED pc = abuf->addr;
808 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
809
810if (NEDI (GET_H_GR (FLD (f_left)), 0)) {
811 {
812 DI opval = GET_H_GR (FLD (f_right));
813 SET_H_GR (FLD (f_dest), opval);
814 written |= (1 << 2);
815 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
816 }
817}
818
819 abuf->written = written;
820 return vpc;
821#undef FLD
822}
823
824/* fabsd: fabs.d $drgh, $drf */
825
826static SEM_PC
827SEM_FN_NAME (sh64_media,fabsd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
828{
829#define FLD(f) abuf->fields.sfmt_fabsd.f
830 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
831 int UNUSED written = 0;
832 IADDR UNUSED pc = abuf->addr;
833 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
834
835 {
836 DF opval = sh64_fabsd (current_cpu, GET_H_DR (FLD (f_left_right)));
837 SET_H_DR (FLD (f_dest), opval);
838 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
839 }
840
841 return vpc;
842#undef FLD
843}
844
845/* fabss: fabs.s $frgh, $frf */
846
847static SEM_PC
848SEM_FN_NAME (sh64_media,fabss) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
849{
850#define FLD(f) abuf->fields.sfmt_fabsd.f
851 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
852 int UNUSED written = 0;
853 IADDR UNUSED pc = abuf->addr;
854 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
855
856 {
857 SF opval = sh64_fabss (current_cpu, CPU (h_fr[FLD (f_left_right)]));
858 CPU (h_fr[FLD (f_dest)]) = opval;
859 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
860 }
861
862 return vpc;
863#undef FLD
864}
865
866/* faddd: fadd.d $drg, $drh, $drf */
867
868static SEM_PC
869SEM_FN_NAME (sh64_media,faddd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
870{
871#define FLD(f) abuf->fields.sfmt_add.f
872 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
873 int UNUSED written = 0;
874 IADDR UNUSED pc = abuf->addr;
875 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
876
877 {
878 DF opval = sh64_faddd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)));
879 SET_H_DR (FLD (f_dest), opval);
880 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
881 }
882
883 return vpc;
884#undef FLD
885}
886
887/* fadds: fadd.s $frg, $frh, $frf */
888
889static SEM_PC
890SEM_FN_NAME (sh64_media,fadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
891{
892#define FLD(f) abuf->fields.sfmt_add.f
893 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
894 int UNUSED written = 0;
895 IADDR UNUSED pc = abuf->addr;
896 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
897
898 {
899 SF opval = sh64_fadds (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]));
900 CPU (h_fr[FLD (f_dest)]) = opval;
901 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
902 }
903
904 return vpc;
905#undef FLD
906}
907
908/* fcmpeqd: fcmpeq.d $drg, $drh, $rd */
909
910static SEM_PC
911SEM_FN_NAME (sh64_media,fcmpeqd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
912{
913#define FLD(f) abuf->fields.sfmt_add.f
914 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
915 int UNUSED written = 0;
916 IADDR UNUSED pc = abuf->addr;
917 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
918
919 {
920 DI opval = ZEXTBIDI (sh64_fcmpeqd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))));
921 SET_H_GR (FLD (f_dest), opval);
922 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
923 }
924
925 return vpc;
926#undef FLD
927}
928
929/* fcmpeqs: fcmpeq.s $frg, $frh, $rd */
930
931static SEM_PC
932SEM_FN_NAME (sh64_media,fcmpeqs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
933{
934#define FLD(f) abuf->fields.sfmt_add.f
935 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
936 int UNUSED written = 0;
937 IADDR UNUSED pc = abuf->addr;
938 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
939
940 {
941 DI opval = ZEXTBIDI (sh64_fcmpeqs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
942 SET_H_GR (FLD (f_dest), opval);
943 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
944 }
945
946 return vpc;
947#undef FLD
948}
949
950/* fcmpged: fcmpge.d $drg, $drh, $rd */
951
952static SEM_PC
953SEM_FN_NAME (sh64_media,fcmpged) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
954{
955#define FLD(f) abuf->fields.sfmt_add.f
956 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
957 int UNUSED written = 0;
958 IADDR UNUSED pc = abuf->addr;
959 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
960
961 {
962 DI opval = ZEXTBIDI (sh64_fcmpged (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))));
963 SET_H_GR (FLD (f_dest), opval);
964 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
965 }
966
967 return vpc;
968#undef FLD
969}
970
971/* fcmpges: fcmpge.s $frg, $frh, $rd */
972
973static SEM_PC
974SEM_FN_NAME (sh64_media,fcmpges) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
975{
976#define FLD(f) abuf->fields.sfmt_add.f
977 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
978 int UNUSED written = 0;
979 IADDR UNUSED pc = abuf->addr;
980 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
981
982 {
983 DI opval = ZEXTBIDI (sh64_fcmpges (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
984 SET_H_GR (FLD (f_dest), opval);
985 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
986 }
987
988 return vpc;
989#undef FLD
990}
991
992/* fcmpgtd: fcmpgt.d $drg, $drh, $rd */
993
994static SEM_PC
995SEM_FN_NAME (sh64_media,fcmpgtd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
996{
997#define FLD(f) abuf->fields.sfmt_add.f
998 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
999 int UNUSED written = 0;
1000 IADDR UNUSED pc = abuf->addr;
1001 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1002
1003 {
1004 DI opval = ZEXTBIDI (sh64_fcmpgtd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))));
1005 SET_H_GR (FLD (f_dest), opval);
1006 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
1007 }
1008
1009 return vpc;
1010#undef FLD
1011}
1012
1013/* fcmpgts: fcmpgt.s $frg, $frh, $rd */
1014
1015static SEM_PC
1016SEM_FN_NAME (sh64_media,fcmpgts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1017{
1018#define FLD(f) abuf->fields.sfmt_add.f
1019 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1020 int UNUSED written = 0;
1021 IADDR UNUSED pc = abuf->addr;
1022 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1023
1024 {
1025 DI opval = ZEXTBIDI (sh64_fcmpgts (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
1026 SET_H_GR (FLD (f_dest), opval);
1027 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
1028 }
1029
1030 return vpc;
1031#undef FLD
1032}
1033
1034/* fcmpund: fcmpun.d $drg, $drh, $rd */
1035
1036static SEM_PC
1037SEM_FN_NAME (sh64_media,fcmpund) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1038{
1039#define FLD(f) abuf->fields.sfmt_add.f
1040 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1041 int UNUSED written = 0;
1042 IADDR UNUSED pc = abuf->addr;
1043 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1044
1045 {
1046 DI opval = ZEXTBIDI (sh64_fcmpund (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))));
1047 SET_H_GR (FLD (f_dest), opval);
1048 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
1049 }
1050
1051 return vpc;
1052#undef FLD
1053}
1054
1055/* fcmpuns: fcmpun.s $frg, $frh, $rd */
1056
1057static SEM_PC
1058SEM_FN_NAME (sh64_media,fcmpuns) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1059{
1060#define FLD(f) abuf->fields.sfmt_add.f
1061 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1062 int UNUSED written = 0;
1063 IADDR UNUSED pc = abuf->addr;
1064 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1065
1066 {
1067 DI opval = ZEXTBIDI (sh64_fcmpuns (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
1068 SET_H_GR (FLD (f_dest), opval);
1069 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
1070 }
1071
1072 return vpc;
1073#undef FLD
1074}
1075
1076/* fcnvds: fcnv.ds $drgh, $frf */
1077
1078static SEM_PC
1079SEM_FN_NAME (sh64_media,fcnvds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1080{
1081#define FLD(f) abuf->fields.sfmt_fabsd.f
1082 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1083 int UNUSED written = 0;
1084 IADDR UNUSED pc = abuf->addr;
1085 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1086
1087 {
1088 SF opval = sh64_fcnvds (current_cpu, GET_H_DR (FLD (f_left_right)));
1089 CPU (h_fr[FLD (f_dest)]) = opval;
1090 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1091 }
1092
1093 return vpc;
1094#undef FLD
1095}
1096
1097/* fcnvsd: fcnv.sd $frgh, $drf */
1098
1099static SEM_PC
1100SEM_FN_NAME (sh64_media,fcnvsd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1101{
1102#define FLD(f) abuf->fields.sfmt_fabsd.f
1103 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1104 int UNUSED written = 0;
1105 IADDR UNUSED pc = abuf->addr;
1106 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1107
1108 {
1109 DF opval = sh64_fcnvsd (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1110 SET_H_DR (FLD (f_dest), opval);
1111 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1112 }
1113
1114 return vpc;
1115#undef FLD
1116}
1117
1118/* fdivd: fdiv.d $drg, $drh, $drf */
1119
1120static SEM_PC
1121SEM_FN_NAME (sh64_media,fdivd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1122{
1123#define FLD(f) abuf->fields.sfmt_add.f
1124 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1125 int UNUSED written = 0;
1126 IADDR UNUSED pc = abuf->addr;
1127 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1128
1129 {
1130 DF opval = sh64_fdivd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)));
1131 SET_H_DR (FLD (f_dest), opval);
1132 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1133 }
1134
1135 return vpc;
1136#undef FLD
1137}
1138
1139/* fdivs: fdiv.s $frg, $frh, $frf */
1140
1141static SEM_PC
1142SEM_FN_NAME (sh64_media,fdivs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1143{
1144#define FLD(f) abuf->fields.sfmt_add.f
1145 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1146 int UNUSED written = 0;
1147 IADDR UNUSED pc = abuf->addr;
1148 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1149
1150 {
1151 SF opval = sh64_fdivs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]));
1152 CPU (h_fr[FLD (f_dest)]) = opval;
1153 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1154 }
1155
1156 return vpc;
1157#undef FLD
1158}
1159
1160/* fgetscr: fgetscr $frf */
1161
1162static SEM_PC
1163SEM_FN_NAME (sh64_media,fgetscr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1164{
1165#define FLD(f) abuf->fields.fmt_empty.f
1166 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1167 int UNUSED written = 0;
1168 IADDR UNUSED pc = abuf->addr;
1169 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1170
1171((void) 0); /*nop*/
1172
1173 return vpc;
1174#undef FLD
1175}
1176
1177/* fiprs: fipr.s $fvg, $fvh, $frf */
1178
1179static SEM_PC
1180SEM_FN_NAME (sh64_media,fiprs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1181{
1182#define FLD(f) abuf->fields.sfmt_add.f
1183 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1184 int UNUSED written = 0;
1185 IADDR UNUSED pc = abuf->addr;
1186 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1187
1188{
1189 UQI tmp_g;
1190 UQI tmp_h;
1191 SF tmp_temp;
1192 tmp_g = FLD (f_left);
1193 tmp_h = FLD (f_right);
1194 tmp_temp = sh64_fmuls (current_cpu, CPU (h_fr[tmp_g]), CPU (h_fr[tmp_h]));
1195 tmp_temp = sh64_fadds (current_cpu, tmp_temp, sh64_fmuls (current_cpu, CPU (h_fr[ADDQI (tmp_g, 1)]), CPU (h_fr[ADDQI (tmp_h, 1)])));
1196 tmp_temp = sh64_fadds (current_cpu, tmp_temp, sh64_fmuls (current_cpu, CPU (h_fr[ADDQI (tmp_g, 2)]), CPU (h_fr[ADDQI (tmp_h, 2)])));
1197 tmp_temp = sh64_fadds (current_cpu, tmp_temp, sh64_fmuls (current_cpu, CPU (h_fr[ADDQI (tmp_g, 3)]), CPU (h_fr[ADDQI (tmp_h, 3)])));
1198 {
1199 SF opval = tmp_temp;
1200 CPU (h_fr[FLD (f_dest)]) = opval;
1201 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1202 }
1203}
1204
1205 return vpc;
1206#undef FLD
1207}
1208
1209/* fldd: fld.d $rm, $disp10x8, $drf */
1210
1211static SEM_PC
1212SEM_FN_NAME (sh64_media,fldd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1213{
1214#define FLD(f) abuf->fields.sfmt_fldd.f
1215 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1216 int UNUSED written = 0;
1217 IADDR UNUSED pc = abuf->addr;
1218 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1219
1220 {
1221 DF opval = GETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8)));
1222 SET_H_DR (FLD (f_dest), opval);
1223 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1224 }
1225
1226 return vpc;
1227#undef FLD
1228}
1229
1230/* fldp: fld.p $rm, $disp10x8, $fpf */
1231
1232static SEM_PC
1233SEM_FN_NAME (sh64_media,fldp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1234{
1235#define FLD(f) abuf->fields.sfmt_fldd.f
1236 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1237 int UNUSED written = 0;
1238 IADDR UNUSED pc = abuf->addr;
1239 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1240
1241{
1242 QI tmp_f;
1243 tmp_f = FLD (f_dest);
1244 {
1245 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8)));
1246 CPU (h_fr[tmp_f]) = opval;
1247 TRACE_RESULT (current_cpu, abuf, "fr-f", 'f', opval);
1248 }
1249 {
1250 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), ADDSI (FLD (f_disp10x8), 4)));
1251 CPU (h_fr[ADDQI (tmp_f, 1)]) = opval;
1252 TRACE_RESULT (current_cpu, abuf, "fr-add--DFLT-f-1", 'f', opval);
1253 }
1254}
1255
1256 return vpc;
1257#undef FLD
1258}
1259
1260/* flds: fld.s $rm, $disp10x4, $frf */
1261
1262static SEM_PC
1263SEM_FN_NAME (sh64_media,flds) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1264{
1265#define FLD(f) abuf->fields.sfmt_flds.f
1266 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1267 int UNUSED written = 0;
1268 IADDR UNUSED pc = abuf->addr;
1269 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1270
1271 {
1272 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x4)));
1273 CPU (h_fr[FLD (f_dest)]) = opval;
1274 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1275 }
1276
1277 return vpc;
1278#undef FLD
1279}
1280
1281/* fldxd: fldx.d $rm, $rn, $drf */
1282
1283static SEM_PC
1284SEM_FN_NAME (sh64_media,fldxd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1285{
1286#define FLD(f) abuf->fields.sfmt_add.f
1287 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1288 int UNUSED written = 0;
1289 IADDR UNUSED pc = abuf->addr;
1290 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1291
1292 {
1293 DF opval = GETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))));
1294 SET_H_DR (FLD (f_dest), opval);
1295 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1296 }
1297
1298 return vpc;
1299#undef FLD
1300}
1301
1302/* fldxp: fldx.p $rm, $rn, $fpf */
1303
1304static SEM_PC
1305SEM_FN_NAME (sh64_media,fldxp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1306{
1307#define FLD(f) abuf->fields.sfmt_add.f
1308 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1309 int UNUSED written = 0;
1310 IADDR UNUSED pc = abuf->addr;
1311 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1312
1313{
1314 QI tmp_f;
1315 tmp_f = FLD (f_dest);
1316 {
1317 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))));
1318 CPU (h_fr[tmp_f]) = opval;
1319 TRACE_RESULT (current_cpu, abuf, "fr-f", 'f', opval);
1320 }
1321 {
1322 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), ADDDI (GET_H_GR (FLD (f_right)), 4)));
1323 CPU (h_fr[ADDQI (tmp_f, 1)]) = opval;
1324 TRACE_RESULT (current_cpu, abuf, "fr-add--DFLT-f-1", 'f', opval);
1325 }
1326}
1327
1328 return vpc;
1329#undef FLD
1330}
1331
1332/* fldxs: fldx.s $rm, $rn, $frf */
1333
1334static SEM_PC
1335SEM_FN_NAME (sh64_media,fldxs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1336{
1337#define FLD(f) abuf->fields.sfmt_add.f
1338 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1339 int UNUSED written = 0;
1340 IADDR UNUSED pc = abuf->addr;
1341 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1342
1343 {
1344 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))));
1345 CPU (h_fr[FLD (f_dest)]) = opval;
1346 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1347 }
1348
1349 return vpc;
1350#undef FLD
1351}
1352
1353/* floatld: float.ld $frgh, $drf */
1354
1355static SEM_PC
1356SEM_FN_NAME (sh64_media,floatld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1357{
1358#define FLD(f) abuf->fields.sfmt_fabsd.f
1359 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1360 int UNUSED written = 0;
1361 IADDR UNUSED pc = abuf->addr;
1362 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1363
1364 {
1365 DF opval = sh64_floatld (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1366 SET_H_DR (FLD (f_dest), opval);
1367 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1368 }
1369
1370 return vpc;
1371#undef FLD
1372}
1373
1374/* floatls: float.ls $frgh, $frf */
1375
1376static SEM_PC
1377SEM_FN_NAME (sh64_media,floatls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1378{
1379#define FLD(f) abuf->fields.sfmt_fabsd.f
1380 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1381 int UNUSED written = 0;
1382 IADDR UNUSED pc = abuf->addr;
1383 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1384
1385 {
1386 SF opval = sh64_floatls (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1387 CPU (h_fr[FLD (f_dest)]) = opval;
1388 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1389 }
1390
1391 return vpc;
1392#undef FLD
1393}
1394
1395/* floatqd: float.qd $drgh, $drf */
1396
1397static SEM_PC
1398SEM_FN_NAME (sh64_media,floatqd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1399{
1400#define FLD(f) abuf->fields.sfmt_fabsd.f
1401 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1402 int UNUSED written = 0;
1403 IADDR UNUSED pc = abuf->addr;
1404 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1405
1406 {
1407 DF opval = sh64_floatqd (current_cpu, GET_H_DR (FLD (f_left_right)));
1408 SET_H_DR (FLD (f_dest), opval);
1409 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1410 }
1411
1412 return vpc;
1413#undef FLD
1414}
1415
1416/* floatqs: float.qs $drgh, $frf */
1417
1418static SEM_PC
1419SEM_FN_NAME (sh64_media,floatqs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1420{
1421#define FLD(f) abuf->fields.sfmt_fabsd.f
1422 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1423 int UNUSED written = 0;
1424 IADDR UNUSED pc = abuf->addr;
1425 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1426
1427 {
1428 SF opval = sh64_floatqs (current_cpu, GET_H_DR (FLD (f_left_right)));
1429 CPU (h_fr[FLD (f_dest)]) = opval;
1430 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1431 }
1432
1433 return vpc;
1434#undef FLD
1435}
1436
1437/* fmacs: fmac.s $frg, $frh, $frf */
1438
1439static SEM_PC
1440SEM_FN_NAME (sh64_media,fmacs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1441{
1442#define FLD(f) abuf->fields.sfmt_add.f
1443 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1444 int UNUSED written = 0;
1445 IADDR UNUSED pc = abuf->addr;
1446 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1447
1448 {
1449 SF opval = sh64_fadds (current_cpu, CPU (h_fr[FLD (f_dest)]), sh64_fmuls (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])));
1450 CPU (h_fr[FLD (f_dest)]) = opval;
1451 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1452 }
1453
1454 return vpc;
1455#undef FLD
1456}
1457
1458/* fmovd: fmov.d $drgh, $drf */
1459
1460static SEM_PC
1461SEM_FN_NAME (sh64_media,fmovd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1462{
1463#define FLD(f) abuf->fields.sfmt_fabsd.f
1464 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1465 int UNUSED written = 0;
1466 IADDR UNUSED pc = abuf->addr;
1467 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1468
1469 {
1470 DF opval = GET_H_DR (FLD (f_left_right));
1471 SET_H_DR (FLD (f_dest), opval);
1472 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1473 }
1474
1475 return vpc;
1476#undef FLD
1477}
1478
1479/* fmovdq: fmov.dq $drgh, $rd */
1480
1481static SEM_PC
1482SEM_FN_NAME (sh64_media,fmovdq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1483{
1484#define FLD(f) abuf->fields.sfmt_fabsd.f
1485 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1486 int UNUSED written = 0;
1487 IADDR UNUSED pc = abuf->addr;
1488 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1489
1490 {
1491 DI opval = SUBWORDDFDI (GET_H_DR (FLD (f_left_right)));
1492 SET_H_GR (FLD (f_dest), opval);
1493 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
1494 }
1495
1496 return vpc;
1497#undef FLD
1498}
1499
1500/* fmovls: fmov.ls $rm, $frf */
1501
1502static SEM_PC
1503SEM_FN_NAME (sh64_media,fmovls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1504{
1505#define FLD(f) abuf->fields.sfmt_xori.f
1506 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1507 int UNUSED written = 0;
1508 IADDR UNUSED pc = abuf->addr;
1509 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1510
1511 {
1512 SF opval = SUBWORDSISF (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1));
1513 CPU (h_fr[FLD (f_dest)]) = opval;
1514 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1515 }
1516
1517 return vpc;
1518#undef FLD
1519}
1520
1521/* fmovqd: fmov.qd $rm, $drf */
1522
1523static SEM_PC
1524SEM_FN_NAME (sh64_media,fmovqd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1525{
1526#define FLD(f) abuf->fields.sfmt_xori.f
1527 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1528 int UNUSED written = 0;
1529 IADDR UNUSED pc = abuf->addr;
1530 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1531
1532 {
1533 DF opval = SUBWORDDIDF (GET_H_GR (FLD (f_left)));
1534 SET_H_DR (FLD (f_dest), opval);
1535 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1536 }
1537
1538 return vpc;
1539#undef FLD
1540}
1541
1542/* fmovs: fmov.s $frgh, $frf */
1543
1544static SEM_PC
1545SEM_FN_NAME (sh64_media,fmovs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1546{
1547#define FLD(f) abuf->fields.sfmt_fabsd.f
1548 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1549 int UNUSED written = 0;
1550 IADDR UNUSED pc = abuf->addr;
1551 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1552
1553 {
1554 SF opval = CPU (h_fr[FLD (f_left_right)]);
1555 CPU (h_fr[FLD (f_dest)]) = opval;
1556 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1557 }
1558
1559 return vpc;
1560#undef FLD
1561}
1562
1563/* fmovsl: fmov.sl $frgh, $rd */
1564
1565static SEM_PC
1566SEM_FN_NAME (sh64_media,fmovsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1567{
1568#define FLD(f) abuf->fields.sfmt_fabsd.f
1569 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1570 int UNUSED written = 0;
1571 IADDR UNUSED pc = abuf->addr;
1572 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1573
1574 {
1575 DI opval = EXTSIDI (SUBWORDSFSI (CPU (h_fr[FLD (f_left_right)])));
1576 SET_H_GR (FLD (f_dest), opval);
1577 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
1578 }
1579
1580 return vpc;
1581#undef FLD
1582}
1583
1584/* fmuld: fmul.d $drg, $drh, $drf */
1585
1586static SEM_PC
1587SEM_FN_NAME (sh64_media,fmuld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1588{
1589#define FLD(f) abuf->fields.sfmt_add.f
1590 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1591 int UNUSED written = 0;
1592 IADDR UNUSED pc = abuf->addr;
1593 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1594
1595 {
1596 DF opval = sh64_fmuld (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)));
1597 SET_H_DR (FLD (f_dest), opval);
1598 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1599 }
1600
1601 return vpc;
1602#undef FLD
1603}
1604
1605/* fmuls: fmul.s $frg, $frh, $frf */
1606
1607static SEM_PC
1608SEM_FN_NAME (sh64_media,fmuls) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1609{
1610#define FLD(f) abuf->fields.sfmt_add.f
1611 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1612 int UNUSED written = 0;
1613 IADDR UNUSED pc = abuf->addr;
1614 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1615
1616 {
1617 SF opval = sh64_fmuls (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]));
1618 CPU (h_fr[FLD (f_dest)]) = opval;
1619 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1620 }
1621
1622 return vpc;
1623#undef FLD
1624}
1625
1626/* fnegd: fneg.d $drgh, $drf */
1627
1628static SEM_PC
1629SEM_FN_NAME (sh64_media,fnegd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1630{
1631#define FLD(f) abuf->fields.sfmt_fabsd.f
1632 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1633 int UNUSED written = 0;
1634 IADDR UNUSED pc = abuf->addr;
1635 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1636
1637 {
1638 DF opval = sh64_fnegd (current_cpu, GET_H_DR (FLD (f_left_right)));
1639 SET_H_DR (FLD (f_dest), opval);
1640 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1641 }
1642
1643 return vpc;
1644#undef FLD
1645}
1646
1647/* fnegs: fneg.s $frgh, $frf */
1648
1649static SEM_PC
1650SEM_FN_NAME (sh64_media,fnegs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1651{
1652#define FLD(f) abuf->fields.sfmt_fabsd.f
1653 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1654 int UNUSED written = 0;
1655 IADDR UNUSED pc = abuf->addr;
1656 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1657
1658 {
1659 SF opval = sh64_fnegs (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1660 CPU (h_fr[FLD (f_dest)]) = opval;
1661 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1662 }
1663
1664 return vpc;
1665#undef FLD
1666}
1667
1668/* fputscr: fputscr $frgh */
1669
1670static SEM_PC
1671SEM_FN_NAME (sh64_media,fputscr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1672{
1673#define FLD(f) abuf->fields.fmt_empty.f
1674 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1675 int UNUSED written = 0;
1676 IADDR UNUSED pc = abuf->addr;
1677 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1678
1679((void) 0); /*nop*/
1680
1681 return vpc;
1682#undef FLD
1683}
1684
1685/* fsqrtd: fsqrt.d $drgh, $drf */
1686
1687static SEM_PC
1688SEM_FN_NAME (sh64_media,fsqrtd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1689{
1690#define FLD(f) abuf->fields.sfmt_fabsd.f
1691 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1692 int UNUSED written = 0;
1693 IADDR UNUSED pc = abuf->addr;
1694 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1695
1696 {
1697 DF opval = sh64_fsqrtd (current_cpu, GET_H_DR (FLD (f_left_right)));
1698 SET_H_DR (FLD (f_dest), opval);
1699 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1700 }
1701
1702 return vpc;
1703#undef FLD
1704}
1705
1706/* fsqrts: fsqrt.s $frgh, $frf */
1707
1708static SEM_PC
1709SEM_FN_NAME (sh64_media,fsqrts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1710{
1711#define FLD(f) abuf->fields.sfmt_fabsd.f
1712 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1713 int UNUSED written = 0;
1714 IADDR UNUSED pc = abuf->addr;
1715 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1716
1717 {
1718 SF opval = sh64_fsqrts (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1719 CPU (h_fr[FLD (f_dest)]) = opval;
1720 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1721 }
1722
1723 return vpc;
1724#undef FLD
1725}
1726
1727/* fstd: fst.d $rm, $disp10x8, $drf */
1728
1729static SEM_PC
1730SEM_FN_NAME (sh64_media,fstd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1731{
1732#define FLD(f) abuf->fields.sfmt_fldd.f
1733 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1734 int UNUSED written = 0;
1735 IADDR UNUSED pc = abuf->addr;
1736 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1737
1738 {
1739 DF opval = GET_H_DR (FLD (f_dest));
1740 SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8)), opval);
1741 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1742 }
1743
1744 return vpc;
1745#undef FLD
1746}
1747
1748/* fstp: fst.p $rm, $disp10x8, $fpf */
1749
1750static SEM_PC
1751SEM_FN_NAME (sh64_media,fstp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1752{
1753#define FLD(f) abuf->fields.sfmt_fldd.f
1754 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1755 int UNUSED written = 0;
1756 IADDR UNUSED pc = abuf->addr;
1757 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1758
1759{
1760 QI tmp_f;
1761 tmp_f = FLD (f_dest);
1762 {
1763 SF opval = CPU (h_fr[tmp_f]);
1764 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8)), opval);
1765 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1766 }
1767 {
1768 SF opval = CPU (h_fr[ADDQI (tmp_f, 1)]);
1769 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), ADDSI (FLD (f_disp10x8), 4)), opval);
1770 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1771 }
1772}
1773
1774 return vpc;
1775#undef FLD
1776}
1777
1778/* fsts: fst.s $rm, $disp10x4, $frf */
1779
1780static SEM_PC
1781SEM_FN_NAME (sh64_media,fsts) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1782{
1783#define FLD(f) abuf->fields.sfmt_flds.f
1784 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1785 int UNUSED written = 0;
1786 IADDR UNUSED pc = abuf->addr;
1787 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1788
1789 {
1790 SF opval = CPU (h_fr[FLD (f_dest)]);
1791 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x4)), opval);
1792 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1793 }
1794
1795 return vpc;
1796#undef FLD
1797}
1798
1799/* fstxd: fstx.d $rm, $rn, $drf */
1800
1801static SEM_PC
1802SEM_FN_NAME (sh64_media,fstxd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1803{
1804#define FLD(f) abuf->fields.sfmt_add.f
1805 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1806 int UNUSED written = 0;
1807 IADDR UNUSED pc = abuf->addr;
1808 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1809
1810 {
1811 DF opval = GET_H_DR (FLD (f_dest));
1812 SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
1813 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1814 }
1815
1816 return vpc;
1817#undef FLD
1818}
1819
1820/* fstxp: fstx.p $rm, $rn, $fpf */
1821
1822static SEM_PC
1823SEM_FN_NAME (sh64_media,fstxp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1824{
1825#define FLD(f) abuf->fields.sfmt_add.f
1826 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1827 int UNUSED written = 0;
1828 IADDR UNUSED pc = abuf->addr;
1829 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1830
1831{
1832 QI tmp_f;
1833 tmp_f = FLD (f_dest);
1834 {
1835 SF opval = CPU (h_fr[tmp_f]);
1836 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
1837 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1838 }
1839 {
1840 SF opval = CPU (h_fr[ADDQI (tmp_f, 1)]);
1841 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), ADDDI (GET_H_GR (FLD (f_right)), 4)), opval);
1842 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1843 }
1844}
1845
1846 return vpc;
1847#undef FLD
1848}
1849
1850/* fstxs: fstx.s $rm, $rn, $frf */
1851
1852static SEM_PC
1853SEM_FN_NAME (sh64_media,fstxs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1854{
1855#define FLD(f) abuf->fields.sfmt_add.f
1856 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1857 int UNUSED written = 0;
1858 IADDR UNUSED pc = abuf->addr;
1859 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1860
1861 {
1862 SF opval = CPU (h_fr[FLD (f_dest)]);
1863 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
1864 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval);
1865 }
1866
1867 return vpc;
1868#undef FLD
1869}
1870
1871/* fsubd: fsub.d $drg, $drh, $drf */
1872
1873static SEM_PC
1874SEM_FN_NAME (sh64_media,fsubd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1875{
1876#define FLD(f) abuf->fields.sfmt_add.f
1877 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1878 int UNUSED written = 0;
1879 IADDR UNUSED pc = abuf->addr;
1880 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1881
1882 {
1883 DF opval = sh64_fsubd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)));
1884 SET_H_DR (FLD (f_dest), opval);
1885 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1886 }
1887
1888 return vpc;
1889#undef FLD
1890}
1891
1892/* fsubs: fsub.s $frg, $frh, $frf */
1893
1894static SEM_PC
1895SEM_FN_NAME (sh64_media,fsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1896{
1897#define FLD(f) abuf->fields.sfmt_add.f
1898 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1899 int UNUSED written = 0;
1900 IADDR UNUSED pc = abuf->addr;
1901 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1902
1903 {
1904 SF opval = sh64_fsubs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]));
1905 CPU (h_fr[FLD (f_dest)]) = opval;
1906 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1907 }
1908
1909 return vpc;
1910#undef FLD
1911}
1912
1913/* ftrcdl: ftrc.dl $drgh, $frf */
1914
1915static SEM_PC
1916SEM_FN_NAME (sh64_media,ftrcdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1917{
1918#define FLD(f) abuf->fields.sfmt_fabsd.f
1919 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1920 int UNUSED written = 0;
1921 IADDR UNUSED pc = abuf->addr;
1922 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1923
1924 {
1925 SF opval = sh64_ftrcdl (current_cpu, GET_H_DR (FLD (f_left_right)));
1926 CPU (h_fr[FLD (f_dest)]) = opval;
1927 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1928 }
1929
1930 return vpc;
1931#undef FLD
1932}
1933
1934/* ftrcsl: ftrc.sl $frgh, $frf */
1935
1936static SEM_PC
1937SEM_FN_NAME (sh64_media,ftrcsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1938{
1939#define FLD(f) abuf->fields.sfmt_fabsd.f
1940 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1941 int UNUSED written = 0;
1942 IADDR UNUSED pc = abuf->addr;
1943 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1944
1945 {
1946 SF opval = sh64_ftrcsl (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1947 CPU (h_fr[FLD (f_dest)]) = opval;
1948 TRACE_RESULT (current_cpu, abuf, "frf", 'f', opval);
1949 }
1950
1951 return vpc;
1952#undef FLD
1953}
1954
1955/* ftrcdq: ftrc.dq $drgh, $drf */
1956
1957static SEM_PC
1958SEM_FN_NAME (sh64_media,ftrcdq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1959{
1960#define FLD(f) abuf->fields.sfmt_fabsd.f
1961 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1962 int UNUSED written = 0;
1963 IADDR UNUSED pc = abuf->addr;
1964 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1965
1966 {
1967 DF opval = sh64_ftrcdq (current_cpu, GET_H_DR (FLD (f_left_right)));
1968 SET_H_DR (FLD (f_dest), opval);
1969 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1970 }
1971
1972 return vpc;
1973#undef FLD
1974}
1975
1976/* ftrcsq: ftrc.sq $frgh, $drf */
1977
1978static SEM_PC
1979SEM_FN_NAME (sh64_media,ftrcsq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1980{
1981#define FLD(f) abuf->fields.sfmt_fabsd.f
1982 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1983 int UNUSED written = 0;
1984 IADDR UNUSED pc = abuf->addr;
1985 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1986
1987 {
1988 DF opval = sh64_ftrcsq (current_cpu, CPU (h_fr[FLD (f_left_right)]));
1989 SET_H_DR (FLD (f_dest), opval);
1990 TRACE_RESULT (current_cpu, abuf, "drf", 'f', opval);
1991 }
1992
1993 return vpc;
1994#undef FLD
1995}
1996
1997/* ftrvs: ftrv.s $mtrxg, $fvh, $fvf */
1998
1999static SEM_PC
2000SEM_FN_NAME (sh64_media,ftrvs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2001{
2002#define FLD(f) abuf->fields.sfmt_add.f
2003 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2004 int UNUSED written = 0;
2005 IADDR UNUSED pc = abuf->addr;
2006 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2007
2008sh64_ftrvs (current_cpu, FLD (f_left), FLD (f_right), FLD (f_dest));
2009
2010 return vpc;
2011#undef FLD
2012}
2013
2014/* getcfg: getcfg $rm, $disp6, $rd */
2015
2016static SEM_PC
2017SEM_FN_NAME (sh64_media,getcfg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2018{
2019#define FLD(f) abuf->fields.fmt_empty.f
2020 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2021 int UNUSED written = 0;
2022 IADDR UNUSED pc = abuf->addr;
2023 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2024
2025((void) 0); /*nop*/
2026
2027 return vpc;
2028#undef FLD
2029}
2030
2031/* getcon: getcon $crk, $rd */
2032
2033static SEM_PC
2034SEM_FN_NAME (sh64_media,getcon) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2035{
2036#define FLD(f) abuf->fields.sfmt_xori.f
2037 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2038 int UNUSED written = 0;
2039 IADDR UNUSED pc = abuf->addr;
2040 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2041
2042 {
2043 DI opval = GET_H_CR (FLD (f_left));
2044 SET_H_GR (FLD (f_dest), opval);
2045 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2046 }
2047
2048 return vpc;
2049#undef FLD
2050}
2051
2052/* gettr: gettr $trb, $rd */
2053
2054static SEM_PC
2055SEM_FN_NAME (sh64_media,gettr) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2056{
2057#define FLD(f) abuf->fields.sfmt_blink.f
2058 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2059 int UNUSED written = 0;
2060 IADDR UNUSED pc = abuf->addr;
2061 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2062
2063 {
2064 DI opval = CPU (h_tr[FLD (f_trb)]);
2065 SET_H_GR (FLD (f_dest), opval);
2066 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2067 }
2068
2069 return vpc;
2070#undef FLD
2071}
2072
2073/* icbi: icbi $rm, $disp6x32 */
2074
2075static SEM_PC
2076SEM_FN_NAME (sh64_media,icbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2077{
2078#define FLD(f) abuf->fields.fmt_empty.f
2079 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2080 int UNUSED written = 0;
2081 IADDR UNUSED pc = abuf->addr;
2082 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2083
2084((void) 0); /*nop*/
2085
2086 return vpc;
2087#undef FLD
2088}
2089
2090/* ldb: ld.b $rm, $disp10, $rd */
2091
2092static SEM_PC
2093SEM_FN_NAME (sh64_media,ldb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2094{
2095#define FLD(f) abuf->fields.sfmt_addi.f
2096 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2097 int UNUSED written = 0;
2098 IADDR UNUSED pc = abuf->addr;
2099 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2100
2101 {
2102 DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10)))));
2103 SET_H_GR (FLD (f_dest), opval);
2104 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2105 }
2106
2107 return vpc;
2108#undef FLD
2109}
2110
2111/* ldl: ld.l $rm, $disp10x4, $rd */
2112
2113static SEM_PC
2114SEM_FN_NAME (sh64_media,ldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2115{
2116#define FLD(f) abuf->fields.sfmt_flds.f
2117 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2118 int UNUSED written = 0;
2119 IADDR UNUSED pc = abuf->addr;
2120 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2121
2122 {
2123 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4)))));
2124 SET_H_GR (FLD (f_dest), opval);
2125 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2126 }
2127
2128 return vpc;
2129#undef FLD
2130}
2131
2132/* ldq: ld.q $rm, $disp10x8, $rd */
2133
2134static SEM_PC
2135SEM_FN_NAME (sh64_media,ldq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2136{
2137#define FLD(f) abuf->fields.sfmt_fldd.f
2138 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2139 int UNUSED written = 0;
2140 IADDR UNUSED pc = abuf->addr;
2141 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2142
2143 {
2144 DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8))));
2145 SET_H_GR (FLD (f_dest), opval);
2146 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2147 }
2148
2149 return vpc;
2150#undef FLD
2151}
2152
2153/* ldub: ld.ub $rm, $disp10, $rd */
2154
2155static SEM_PC
2156SEM_FN_NAME (sh64_media,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2157{
2158#define FLD(f) abuf->fields.sfmt_addi.f
2159 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2160 int UNUSED written = 0;
2161 IADDR UNUSED pc = abuf->addr;
2162 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2163
2164 {
2165 DI opval = ZEXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10)))));
2166 SET_H_GR (FLD (f_dest), opval);
2167 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2168 }
2169
2170 return vpc;
2171#undef FLD
2172}
2173
2174/* lduw: ld.uw $rm, $disp10x2, $rd */
2175
2176static SEM_PC
2177SEM_FN_NAME (sh64_media,lduw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2178{
2179#define FLD(f) abuf->fields.sfmt_lduw.f
2180 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2181 int UNUSED written = 0;
2182 IADDR UNUSED pc = abuf->addr;
2183 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2184
2185 {
2186 DI opval = ZEXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2)))));
2187 SET_H_GR (FLD (f_dest), opval);
2188 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2189 }
2190
2191 return vpc;
2192#undef FLD
2193}
2194
2195/* ldw: ld.w $rm, $disp10x2, $rd */
2196
2197static SEM_PC
2198SEM_FN_NAME (sh64_media,ldw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2199{
2200#define FLD(f) abuf->fields.sfmt_lduw.f
2201 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2202 int UNUSED written = 0;
2203 IADDR UNUSED pc = abuf->addr;
2204 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2205
2206 {
2207 DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2)))));
2208 SET_H_GR (FLD (f_dest), opval);
2209 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2210 }
2211
2212 return vpc;
2213#undef FLD
2214}
2215
2216/* ldhil: ldhi.l $rm, $disp6, $rd */
2217
2218static SEM_PC
2219SEM_FN_NAME (sh64_media,ldhil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2220{
2221#define FLD(f) abuf->fields.fmt_empty.f
2222 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2223 int UNUSED written = 0;
2224 IADDR UNUSED pc = abuf->addr;
2225 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2226
2227((void) 0); /*nop*/
2228
2229 return vpc;
2230#undef FLD
2231}
2232
2233/* ldhiq: ldhi.q $rm, $disp6, $rd */
2234
2235static SEM_PC
2236SEM_FN_NAME (sh64_media,ldhiq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2237{
2238#define FLD(f) abuf->fields.fmt_empty.f
2239 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2240 int UNUSED written = 0;
2241 IADDR UNUSED pc = abuf->addr;
2242 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2243
2244((void) 0); /*nop*/
2245
2246 return vpc;
2247#undef FLD
2248}
2249
2250/* ldlol: ldlo.l $rm, $disp6, $rd */
2251
2252static SEM_PC
2253SEM_FN_NAME (sh64_media,ldlol) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2254{
2255#define FLD(f) abuf->fields.fmt_empty.f
2256 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2257 int UNUSED written = 0;
2258 IADDR UNUSED pc = abuf->addr;
2259 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2260
2261((void) 0); /*nop*/
2262
2263 return vpc;
2264#undef FLD
2265}
2266
2267/* ldloq: ldlo.q $rm, $disp6, $rd */
2268
2269static SEM_PC
2270SEM_FN_NAME (sh64_media,ldloq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2271{
2272#define FLD(f) abuf->fields.fmt_empty.f
2273 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2274 int UNUSED written = 0;
2275 IADDR UNUSED pc = abuf->addr;
2276 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2277
2278((void) 0); /*nop*/
2279
2280 return vpc;
2281#undef FLD
2282}
2283
2284/* ldxb: ldx.b $rm, $rn, $rd */
2285
2286static SEM_PC
2287SEM_FN_NAME (sh64_media,ldxb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2288{
2289#define FLD(f) abuf->fields.sfmt_add.f
2290 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2291 int UNUSED written = 0;
2292 IADDR UNUSED pc = abuf->addr;
2293 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2294
2295 {
2296 DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2297 SET_H_GR (FLD (f_dest), opval);
2298 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2299 }
2300
2301 return vpc;
2302#undef FLD
2303}
2304
2305/* ldxl: ldx.l $rm, $rn, $rd */
2306
2307static SEM_PC
2308SEM_FN_NAME (sh64_media,ldxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2309{
2310#define FLD(f) abuf->fields.sfmt_add.f
2311 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2312 int UNUSED written = 0;
2313 IADDR UNUSED pc = abuf->addr;
2314 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2315
2316 {
2317 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2318 SET_H_GR (FLD (f_dest), opval);
2319 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2320 }
2321
2322 return vpc;
2323#undef FLD
2324}
2325
2326/* ldxq: ldx.q $rm, $rn, $rd */
2327
2328static SEM_PC
2329SEM_FN_NAME (sh64_media,ldxq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2330{
2331#define FLD(f) abuf->fields.sfmt_add.f
2332 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2333 int UNUSED written = 0;
2334 IADDR UNUSED pc = abuf->addr;
2335 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2336
2337 {
2338 DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))));
2339 SET_H_GR (FLD (f_dest), opval);
2340 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2341 }
2342
2343 return vpc;
2344#undef FLD
2345}
2346
2347/* ldxub: ldx.ub $rm, $rn, $rd */
2348
2349static SEM_PC
2350SEM_FN_NAME (sh64_media,ldxub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2351{
2352#define FLD(f) abuf->fields.sfmt_add.f
2353 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2354 int UNUSED written = 0;
2355 IADDR UNUSED pc = abuf->addr;
2356 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2357
2358 {
2359 DI opval = ZEXTQIDI (GETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2360 SET_H_GR (FLD (f_dest), opval);
2361 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2362 }
2363
2364 return vpc;
2365#undef FLD
2366}
2367
2368/* ldxuw: ldx.uw $rm, $rn, $rd */
2369
2370static SEM_PC
2371SEM_FN_NAME (sh64_media,ldxuw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2372{
2373#define FLD(f) abuf->fields.sfmt_add.f
2374 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2375 int UNUSED written = 0;
2376 IADDR UNUSED pc = abuf->addr;
2377 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2378
2379 {
2380 DI opval = ZEXTHIDI (GETMEMUHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2381 SET_H_GR (FLD (f_dest), opval);
2382 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2383 }
2384
2385 return vpc;
2386#undef FLD
2387}
2388
2389/* ldxw: ldx.w $rm, $rn, $rd */
2390
2391static SEM_PC
2392SEM_FN_NAME (sh64_media,ldxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2393{
2394#define FLD(f) abuf->fields.sfmt_add.f
2395 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2396 int UNUSED written = 0;
2397 IADDR UNUSED pc = abuf->addr;
2398 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2399
2400 {
2401 DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2402 SET_H_GR (FLD (f_dest), opval);
2403 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2404 }
2405
2406 return vpc;
2407#undef FLD
2408}
2409
2410/* mabsl: mabs.l $rm, $rd */
2411
2412static SEM_PC
2413SEM_FN_NAME (sh64_media,mabsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2414{
2415#define FLD(f) abuf->fields.sfmt_xori.f
2416 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2417 int UNUSED written = 0;
2418 IADDR UNUSED pc = abuf->addr;
2419 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2420
2421{
2422 SI tmp_result1;
2423 SI tmp_result0;
2424 tmp_result0 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1));
2425 tmp_result1 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0));
2426 {
2427 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2428 SET_H_GR (FLD (f_dest), opval);
2429 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2430 }
2431}
2432
2433 return vpc;
2434#undef FLD
2435}
2436
2437/* mabsw: mabs.w $rm, $rd */
2438
2439static SEM_PC
2440SEM_FN_NAME (sh64_media,mabsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2441{
2442#define FLD(f) abuf->fields.sfmt_xori.f
2443 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2444 int UNUSED written = 0;
2445 IADDR UNUSED pc = abuf->addr;
2446 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2447
2448{
2449 HI tmp_result3;
2450 HI tmp_result2;
2451 HI tmp_result1;
2452 HI tmp_result0;
2453 tmp_result0 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3));
2454 tmp_result1 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2));
2455 tmp_result2 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1));
2456 tmp_result3 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0));
2457 {
2458 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2459 SET_H_GR (FLD (f_dest), opval);
2460 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2461 }
2462}
2463
2464 return vpc;
2465#undef FLD
2466}
2467
2468/* maddl: madd.l $rm, $rn, $rd */
2469
2470static SEM_PC
2471SEM_FN_NAME (sh64_media,maddl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2472{
2473#define FLD(f) abuf->fields.sfmt_add.f
2474 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2475 int UNUSED written = 0;
2476 IADDR UNUSED pc = abuf->addr;
2477 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2478
2479{
2480 SI tmp_result1;
2481 SI tmp_result0;
2482 tmp_result0 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
2483 tmp_result1 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
2484 {
2485 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2486 SET_H_GR (FLD (f_dest), opval);
2487 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2488 }
2489}
2490
2491 return vpc;
2492#undef FLD
2493}
2494
2495/* maddw: madd.w $rm, $rn, $rd */
2496
2497static SEM_PC
2498SEM_FN_NAME (sh64_media,maddw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2499{
2500#define FLD(f) abuf->fields.sfmt_add.f
2501 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2502 int UNUSED written = 0;
2503 IADDR UNUSED pc = abuf->addr;
2504 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2505
2506{
2507 HI tmp_result3;
2508 HI tmp_result2;
2509 HI tmp_result1;
2510 HI tmp_result0;
2511 tmp_result0 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
2512 tmp_result1 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
2513 tmp_result2 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
2514 tmp_result3 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
2515 {
2516 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2517 SET_H_GR (FLD (f_dest), opval);
2518 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2519 }
2520}
2521
2522 return vpc;
2523#undef FLD
2524}
2525
2526/* maddsl: madds.l $rm, $rn, $rd */
2527
2528static SEM_PC
2529SEM_FN_NAME (sh64_media,maddsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2530{
2531#define FLD(f) abuf->fields.sfmt_add.f
2532 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2533 int UNUSED written = 0;
2534 IADDR UNUSED pc = abuf->addr;
2535 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2536
2537{
2538 SI tmp_result1;
2539 SI tmp_result0;
2540 tmp_result0 = ((LTSI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)), SLLSI (1, SUBSI (32, 1)))) ? (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2541 tmp_result1 = ((LTSI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)), SLLSI (1, SUBSI (32, 1)))) ? (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2542 {
2543 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2544 SET_H_GR (FLD (f_dest), opval);
2545 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2546 }
2547}
2548
2549 return vpc;
2550#undef FLD
2551}
2552
2553/* maddsub: madds.ub $rm, $rn, $rd */
2554
2555static SEM_PC
2556SEM_FN_NAME (sh64_media,maddsub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2557{
2558#define FLD(f) abuf->fields.sfmt_add.f
2559 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2560 int UNUSED written = 0;
2561 IADDR UNUSED pc = abuf->addr;
2562 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2563
2564{
2565 QI tmp_result7;
2566 QI tmp_result6;
2567 QI tmp_result5;
2568 QI tmp_result4;
2569 QI tmp_result3;
2570 QI tmp_result2;
2571 QI tmp_result1;
2572 QI tmp_result0;
2573 tmp_result0 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) : (SUBQI (SLLQI (1, 8), 1)))));
2574 tmp_result1 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) : (SUBQI (SLLQI (1, 8), 1)))));
2575 tmp_result2 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) : (SUBQI (SLLQI (1, 8), 1)))));
2576 tmp_result3 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) : (SUBQI (SLLQI (1, 8), 1)))));
2577 tmp_result4 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) : (SUBQI (SLLQI (1, 8), 1)))));
2578 tmp_result5 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) : (SUBQI (SLLQI (1, 8), 1)))));
2579 tmp_result6 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) : (SUBQI (SLLQI (1, 8), 1)))));
2580 tmp_result7 = ((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), 0)) ? (0) : (((LTQI (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), SLLQI (1, 8))) ? (ADDQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) : (SUBQI (SLLQI (1, 8), 1)))));
2581 {
2582 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2583 SET_H_GR (FLD (f_dest), opval);
2584 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2585 }
2586}
2587
2588 return vpc;
2589#undef FLD
2590}
2591
2592/* maddsw: madds.w $rm, $rn, $rd */
2593
2594static SEM_PC
2595SEM_FN_NAME (sh64_media,maddsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2596{
2597#define FLD(f) abuf->fields.sfmt_add.f
2598 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2599 int UNUSED written = 0;
2600 IADDR UNUSED pc = abuf->addr;
2601 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2602
2603{
2604 HI tmp_result3;
2605 HI tmp_result2;
2606 HI tmp_result1;
2607 HI tmp_result0;
2608 tmp_result0 = ((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)), SLLHI (1, SUBSI (16, 1)))) ? (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2609 tmp_result1 = ((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)), SLLHI (1, SUBSI (16, 1)))) ? (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2610 tmp_result2 = ((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)), SLLHI (1, SUBSI (16, 1)))) ? (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2611 tmp_result3 = ((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)), SLLHI (1, SUBSI (16, 1)))) ? (ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2612 {
2613 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2614 SET_H_GR (FLD (f_dest), opval);
2615 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2616 }
2617}
2618
2619 return vpc;
2620#undef FLD
2621}
2622
2623/* mcmpeqb: mcmpeq.b $rm, $rn, $rd */
2624
2625static SEM_PC
2626SEM_FN_NAME (sh64_media,mcmpeqb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2627{
2628#define FLD(f) abuf->fields.sfmt_add.f
2629 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2630 int UNUSED written = 0;
2631 IADDR UNUSED pc = abuf->addr;
2632 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2633
2634{
2635 QI tmp_result7;
2636 QI tmp_result6;
2637 QI tmp_result5;
2638 QI tmp_result4;
2639 QI tmp_result3;
2640 QI tmp_result2;
2641 QI tmp_result1;
2642 QI tmp_result0;
2643 tmp_result0 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0));
2644 tmp_result1 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0));
2645 tmp_result2 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0));
2646 tmp_result3 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0));
2647 tmp_result4 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0));
2648 tmp_result5 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0));
2649 tmp_result6 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0));
2650 tmp_result7 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0));
2651 {
2652 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2653 SET_H_GR (FLD (f_dest), opval);
2654 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2655 }
2656}
2657
2658 return vpc;
2659#undef FLD
2660}
2661
2662/* mcmpeql: mcmpeq.l $rm, $rn, $rd */
2663
2664static SEM_PC
2665SEM_FN_NAME (sh64_media,mcmpeql) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2666{
2667#define FLD(f) abuf->fields.sfmt_add.f
2668 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2669 int UNUSED written = 0;
2670 IADDR UNUSED pc = abuf->addr;
2671 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2672
2673{
2674 SI tmp_result1;
2675 SI tmp_result0;
2676 tmp_result0 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0));
2677 tmp_result1 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0));
2678 {
2679 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2680 SET_H_GR (FLD (f_dest), opval);
2681 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2682 }
2683}
2684
2685 return vpc;
2686#undef FLD
2687}
2688
2689/* mcmpeqw: mcmpeq.w $rm, $rn, $rd */
2690
2691static SEM_PC
2692SEM_FN_NAME (sh64_media,mcmpeqw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2693{
2694#define FLD(f) abuf->fields.sfmt_add.f
2695 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2696 int UNUSED written = 0;
2697 IADDR UNUSED pc = abuf->addr;
2698 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2699
2700{
2701 HI tmp_result3;
2702 HI tmp_result2;
2703 HI tmp_result1;
2704 HI tmp_result0;
2705 tmp_result0 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0));
2706 tmp_result1 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0));
2707 tmp_result2 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0));
2708 tmp_result3 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0));
2709 {
2710 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2711 SET_H_GR (FLD (f_dest), opval);
2712 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2713 }
2714}
2715
2716 return vpc;
2717#undef FLD
2718}
2719
2720/* mcmpgtl: mcmpgt.l $rm, $rn, $rd */
2721
2722static SEM_PC
2723SEM_FN_NAME (sh64_media,mcmpgtl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2724{
2725#define FLD(f) abuf->fields.sfmt_add.f
2726 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2727 int UNUSED written = 0;
2728 IADDR UNUSED pc = abuf->addr;
2729 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2730
2731{
2732 SI tmp_result1;
2733 SI tmp_result0;
2734 tmp_result0 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0));
2735 tmp_result1 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0));
2736 {
2737 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2738 SET_H_GR (FLD (f_dest), opval);
2739 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2740 }
2741}
2742
2743 return vpc;
2744#undef FLD
2745}
2746
2747/* mcmpgtub: mcmpgt.ub $rm, $rn, $rd */
2748
2749static SEM_PC
2750SEM_FN_NAME (sh64_media,mcmpgtub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2751{
2752#define FLD(f) abuf->fields.sfmt_add.f
2753 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2754 int UNUSED written = 0;
2755 IADDR UNUSED pc = abuf->addr;
2756 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2757
2758{
2759 QI tmp_result7;
2760 QI tmp_result6;
2761 QI tmp_result5;
2762 QI tmp_result4;
2763 QI tmp_result3;
2764 QI tmp_result2;
2765 QI tmp_result1;
2766 QI tmp_result0;
2767 tmp_result0 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0));
2768 tmp_result1 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0));
2769 tmp_result2 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0));
2770 tmp_result3 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0));
2771 tmp_result4 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0));
2772 tmp_result5 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0));
2773 tmp_result6 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0));
2774 tmp_result7 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0));
2775 {
2776 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2777 SET_H_GR (FLD (f_dest), opval);
2778 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2779 }
2780}
2781
2782 return vpc;
2783#undef FLD
2784}
2785
2786/* mcmpgtw: mcmpgt.w $rm, $rn, $rd */
2787
2788static SEM_PC
2789SEM_FN_NAME (sh64_media,mcmpgtw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2790{
2791#define FLD(f) abuf->fields.sfmt_add.f
2792 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2793 int UNUSED written = 0;
2794 IADDR UNUSED pc = abuf->addr;
2795 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2796
2797{
2798 HI tmp_result3;
2799 HI tmp_result2;
2800 HI tmp_result1;
2801 HI tmp_result0;
2802 tmp_result0 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0));
2803 tmp_result1 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0));
2804 tmp_result2 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0));
2805 tmp_result3 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0));
2806 {
2807 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2808 SET_H_GR (FLD (f_dest), opval);
2809 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2810 }
2811}
2812
2813 return vpc;
2814#undef FLD
2815}
2816
2817/* mcmv: mcmv $rm, $rn, $rd */
2818
2819static SEM_PC
2820SEM_FN_NAME (sh64_media,mcmv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2821{
2822#define FLD(f) abuf->fields.sfmt_add.f
2823 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2824 int UNUSED written = 0;
2825 IADDR UNUSED pc = abuf->addr;
2826 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2827
2828 {
2829 DI opval = ORDI (ANDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), ANDDI (GET_H_GR (FLD (f_dest)), INVDI (GET_H_GR (FLD (f_right)))));
2830 SET_H_GR (FLD (f_dest), opval);
2831 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2832 }
2833
2834 return vpc;
2835#undef FLD
2836}
2837
2838/* mcnvslw: mcnvs.lw $rm, $rn, $rd */
2839
2840static SEM_PC
2841SEM_FN_NAME (sh64_media,mcnvslw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2842{
2843#define FLD(f) abuf->fields.sfmt_add.f
2844 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2845 int UNUSED written = 0;
2846 IADDR UNUSED pc = abuf->addr;
2847 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2848
2849{
2850 HI tmp_result3;
2851 HI tmp_result2;
2852 HI tmp_result1;
2853 HI tmp_result0;
2854 tmp_result0 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SLLHI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2855 tmp_result1 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SLLHI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2856 tmp_result2 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), SLLHI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2857 tmp_result3 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), SLLHI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2858 {
2859 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2860 SET_H_GR (FLD (f_dest), opval);
2861 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2862 }
2863}
2864
2865 return vpc;
2866#undef FLD
2867}
2868
2869/* mcnvswb: mcnvs.wb $rm, $rn, $rd */
2870
2871static SEM_PC
2872SEM_FN_NAME (sh64_media,mcnvswb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2873{
2874#define FLD(f) abuf->fields.sfmt_add.f
2875 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2876 int UNUSED written = 0;
2877 IADDR UNUSED pc = abuf->addr;
2878 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2879
2880{
2881 QI tmp_result7;
2882 QI tmp_result6;
2883 QI tmp_result5;
2884 QI tmp_result4;
2885 QI tmp_result3;
2886 QI tmp_result2;
2887 QI tmp_result1;
2888 QI tmp_result0;
2889 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2890 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2891 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2892 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2893 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2894 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2895 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2896 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), NEGQI (SLLQI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLQI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
2897 {
2898 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2899 SET_H_GR (FLD (f_dest), opval);
2900 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2901 }
2902}
2903
2904 return vpc;
2905#undef FLD
2906}
2907
2908/* mcnvswub: mcnvs.wub $rm, $rn, $rd */
2909
2910static SEM_PC
2911SEM_FN_NAME (sh64_media,mcnvswub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2912{
2913#define FLD(f) abuf->fields.sfmt_add.f
2914 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2915 int UNUSED written = 0;
2916 IADDR UNUSED pc = abuf->addr;
2917 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2918
2919{
2920 QI tmp_result7;
2921 QI tmp_result6;
2922 QI tmp_result5;
2923 QI tmp_result4;
2924 QI tmp_result3;
2925 QI tmp_result2;
2926 QI tmp_result1;
2927 QI tmp_result0;
2928 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
2929 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
2930 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
2931 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
2932 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
2933 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
2934 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
2935 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), 0)) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLQI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
2936 {
2937 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2938 SET_H_GR (FLD (f_dest), opval);
2939 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2940 }
2941}
2942
2943 return vpc;
2944#undef FLD
2945}
2946
2947/* mextr1: mextr1 $rm, $rn, $rd */
2948
2949static SEM_PC
2950SEM_FN_NAME (sh64_media,mextr1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2951{
2952#define FLD(f) abuf->fields.sfmt_add.f
2953 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2954 int UNUSED written = 0;
2955 IADDR UNUSED pc = abuf->addr;
2956 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2957
2958{
2959 QI tmp_count;
2960 DI tmp_mask;
2961 DI tmp_rhs;
2962 tmp_count = MULQI (8, SUBQI (8, 1));
2963 tmp_mask = SLLDI (INVSI (0), tmp_count);
2964 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
2965 tmp_count = MULQI (8, 1);
2966 tmp_mask = SRLDI (INVSI (0), tmp_count);
2967 {
2968 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
2969 SET_H_GR (FLD (f_dest), opval);
2970 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
2971 }
2972}
2973
2974 return vpc;
2975#undef FLD
2976}
2977
2978/* mextr2: mextr2 $rm, $rn, $rd */
2979
2980static SEM_PC
2981SEM_FN_NAME (sh64_media,mextr2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2982{
2983#define FLD(f) abuf->fields.sfmt_add.f
2984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2985 int UNUSED written = 0;
2986 IADDR UNUSED pc = abuf->addr;
2987 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2988
2989{
2990 QI tmp_count;
2991 DI tmp_mask;
2992 DI tmp_rhs;
2993 tmp_count = MULQI (8, SUBQI (8, 2));
2994 tmp_mask = SLLDI (INVSI (0), tmp_count);
2995 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
2996 tmp_count = MULQI (8, 2);
2997 tmp_mask = SRLDI (INVSI (0), tmp_count);
2998 {
2999 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3000 SET_H_GR (FLD (f_dest), opval);
3001 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3002 }
3003}
3004
3005 return vpc;
3006#undef FLD
3007}
3008
3009/* mextr3: mextr3 $rm, $rn, $rd */
3010
3011static SEM_PC
3012SEM_FN_NAME (sh64_media,mextr3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3013{
3014#define FLD(f) abuf->fields.sfmt_add.f
3015 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3016 int UNUSED written = 0;
3017 IADDR UNUSED pc = abuf->addr;
3018 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3019
3020{
3021 QI tmp_count;
3022 DI tmp_mask;
3023 DI tmp_rhs;
3024 tmp_count = MULQI (8, SUBQI (8, 3));
3025 tmp_mask = SLLDI (INVSI (0), tmp_count);
3026 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3027 tmp_count = MULQI (8, 3);
3028 tmp_mask = SRLDI (INVSI (0), tmp_count);
3029 {
3030 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3031 SET_H_GR (FLD (f_dest), opval);
3032 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3033 }
3034}
3035
3036 return vpc;
3037#undef FLD
3038}
3039
3040/* mextr4: mextr4 $rm, $rn, $rd */
3041
3042static SEM_PC
3043SEM_FN_NAME (sh64_media,mextr4) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3044{
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);
3050
3051{
3052 QI tmp_count;
3053 DI tmp_mask;
3054 DI tmp_rhs;
3055 tmp_count = MULQI (8, SUBQI (8, 4));
3056 tmp_mask = SLLDI (INVSI (0), tmp_count);
3057 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3058 tmp_count = MULQI (8, 4);
3059 tmp_mask = SRLDI (INVSI (0), tmp_count);
3060 {
3061 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3062 SET_H_GR (FLD (f_dest), opval);
3063 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3064 }
3065}
3066
3067 return vpc;
3068#undef FLD
3069}
3070
3071/* mextr5: mextr5 $rm, $rn, $rd */
3072
3073static SEM_PC
3074SEM_FN_NAME (sh64_media,mextr5) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3075{
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);
3081
3082{
3083 QI tmp_count;
3084 DI tmp_mask;
3085 DI tmp_rhs;
3086 tmp_count = MULQI (8, SUBQI (8, 5));
3087 tmp_mask = SLLDI (INVSI (0), tmp_count);
3088 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3089 tmp_count = MULQI (8, 5);
3090 tmp_mask = SRLDI (INVSI (0), tmp_count);
3091 {
3092 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3093 SET_H_GR (FLD (f_dest), opval);
3094 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3095 }
3096}
3097
3098 return vpc;
3099#undef FLD
3100}
3101
3102/* mextr6: mextr6 $rm, $rn, $rd */
3103
3104static SEM_PC
3105SEM_FN_NAME (sh64_media,mextr6) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3106{
3107#define FLD(f) abuf->fields.sfmt_add.f
3108 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3109 int UNUSED written = 0;
3110 IADDR UNUSED pc = abuf->addr;
3111 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3112
3113{
3114 QI tmp_count;
3115 DI tmp_mask;
3116 DI tmp_rhs;
3117 tmp_count = MULQI (8, SUBQI (8, 6));
3118 tmp_mask = SLLDI (INVSI (0), tmp_count);
3119 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3120 tmp_count = MULQI (8, 6);
3121 tmp_mask = SRLDI (INVSI (0), tmp_count);
3122 {
3123 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3124 SET_H_GR (FLD (f_dest), opval);
3125 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3126 }
3127}
3128
3129 return vpc;
3130#undef FLD
3131}
3132
3133/* mextr7: mextr7 $rm, $rn, $rd */
3134
3135static SEM_PC
3136SEM_FN_NAME (sh64_media,mextr7) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3137{
3138#define FLD(f) abuf->fields.sfmt_add.f
3139 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3140 int UNUSED written = 0;
3141 IADDR UNUSED pc = abuf->addr;
3142 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3143
3144{
3145 QI tmp_count;
3146 DI tmp_mask;
3147 DI tmp_rhs;
3148 tmp_count = MULQI (8, SUBQI (8, 7));
3149 tmp_mask = SLLDI (INVSI (0), tmp_count);
3150 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
3151 tmp_count = MULQI (8, 7);
3152 tmp_mask = SRLDI (INVSI (0), tmp_count);
3153 {
3154 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3155 SET_H_GR (FLD (f_dest), opval);
3156 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3157 }
3158}
3159
3160 return vpc;
3161#undef FLD
3162}
3163
3164/* mmacfxwl: mmacfx.wl $rm, $rn, $rd */
3165
3166static SEM_PC
3167SEM_FN_NAME (sh64_media,mmacfxwl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3168{
3169#define FLD(f) abuf->fields.sfmt_add.f
3170 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3171 int UNUSED written = 0;
3172 IADDR UNUSED pc = abuf->addr;
3173 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3174
3175{
3176 SI tmp_temp;
3177 SI tmp_result1;
3178 SI tmp_result0;
3179 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0);
3180 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
3181 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3182 tmp_temp = ((LTSI (SLLSI (tmp_temp, 1), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (tmp_temp, 1), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3183 tmp_result0 = ((LTSI (ADDSI (tmp_result0, tmp_temp), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (ADDSI (tmp_result0, tmp_temp), SLLSI (1, SUBSI (32, 1)))) ? (ADDSI (tmp_result0, tmp_temp)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3184 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3185 tmp_temp = ((LTSI (SLLSI (tmp_temp, 1), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (tmp_temp, 1), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3186 tmp_result1 = ((LTSI (ADDSI (tmp_result1, tmp_temp), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (ADDSI (tmp_result1, tmp_temp), SLLSI (1, SUBSI (32, 1)))) ? (ADDSI (tmp_result1, tmp_temp)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3187 {
3188 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3189 SET_H_GR (FLD (f_dest), opval);
3190 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3191 }
3192}
3193
3194 return vpc;
3195#undef FLD
3196}
3197
3198/* mmacnfx.wl: mmacnfx.wl $rm, $rn, $rd */
3199
3200static SEM_PC
3201SEM_FN_NAME (sh64_media,mmacnfx_wl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3202{
3203#define FLD(f) abuf->fields.sfmt_add.f
3204 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3205 int UNUSED written = 0;
3206 IADDR UNUSED pc = abuf->addr;
3207 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3208
3209{
3210 SI tmp_temp;
3211 SI tmp_result1;
3212 SI tmp_result0;
3213 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0);
3214 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
3215 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3216 tmp_temp = ((LTSI (SLLSI (tmp_temp, 1), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (tmp_temp, 1), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3217 tmp_result0 = ((LTSI (SUBSI (tmp_result0, tmp_temp), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SUBSI (tmp_result0, tmp_temp), SLLSI (1, SUBSI (32, 1)))) ? (SUBSI (tmp_result0, tmp_temp)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3218 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3219 tmp_temp = ((LTSI (SLLSI (tmp_temp, 1), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (tmp_temp, 1), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3220 tmp_result1 = ((LTSI (SUBSI (tmp_result1, tmp_temp), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SUBSI (tmp_result1, tmp_temp), SLLSI (1, SUBSI (32, 1)))) ? (SUBSI (tmp_result1, tmp_temp)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3221 {
3222 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3223 SET_H_GR (FLD (f_dest), opval);
3224 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3225 }
3226}
3227
3228 return vpc;
3229#undef FLD
3230}
3231
3232/* mmull: mmul.l $rm, $rn, $rd */
3233
3234static SEM_PC
3235SEM_FN_NAME (sh64_media,mmull) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3236{
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);
3242
3243{
3244 SI tmp_result1;
3245 SI tmp_result0;
3246 tmp_result0 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
3247 tmp_result1 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
3248 {
3249 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3250 SET_H_GR (FLD (f_dest), opval);
3251 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3252 }
3253}
3254
3255 return vpc;
3256#undef FLD
3257}
3258
3259/* mmulw: mmul.w $rm, $rn, $rd */
3260
3261static SEM_PC
3262SEM_FN_NAME (sh64_media,mmulw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3263{
3264#define FLD(f) abuf->fields.sfmt_add.f
3265 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3266 int UNUSED written = 0;
3267 IADDR UNUSED pc = abuf->addr;
3268 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3269
3270{
3271 HI tmp_result3;
3272 HI tmp_result2;
3273 HI tmp_result1;
3274 HI tmp_result0;
3275 tmp_result0 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
3276 tmp_result1 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
3277 tmp_result2 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
3278 tmp_result3 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
3279 {
3280 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3281 SET_H_GR (FLD (f_dest), opval);
3282 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3283 }
3284}
3285
3286 return vpc;
3287#undef FLD
3288}
3289
3290/* mmulfxl: mmulfx.l $rm, $rn, $rd */
3291
3292static SEM_PC
3293SEM_FN_NAME (sh64_media,mmulfxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3294{
3295#define FLD(f) abuf->fields.sfmt_add.f
3296 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3297 int UNUSED written = 0;
3298 IADDR UNUSED pc = abuf->addr;
3299 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3300
3301{
3302 DI tmp_temp;
3303 SI tmp_result0;
3304 SI tmp_result1;
3305 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)));
3306 tmp_result0 = ((LTDI (SRADI (tmp_temp, 31), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLSI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3307 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
3308 tmp_result1 = ((LTDI (SRADI (tmp_temp, 31), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLSI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3309 {
3310 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3311 SET_H_GR (FLD (f_dest), opval);
3312 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3313 }
3314}
3315
3316 return vpc;
3317#undef FLD
3318}
3319
3320/* mmulfxw: mmulfx.w $rm, $rn, $rd */
3321
3322static SEM_PC
3323SEM_FN_NAME (sh64_media,mmulfxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3324{
3325#define FLD(f) abuf->fields.sfmt_add.f
3326 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3327 int UNUSED written = 0;
3328 IADDR UNUSED pc = abuf->addr;
3329 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3330
3331{
3332 SI tmp_temp;
3333 HI tmp_result0;
3334 HI tmp_result1;
3335 HI tmp_result2;
3336 HI tmp_result3;
3337 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3338 tmp_result0 = ((LTSI (SRASI (tmp_temp, 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3339 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3340 tmp_result1 = ((LTSI (SRASI (tmp_temp, 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3341 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3342 tmp_result2 = ((LTSI (SRASI (tmp_temp, 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3343 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3344 tmp_result3 = ((LTSI (SRASI (tmp_temp, 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3345 {
3346 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3347 SET_H_GR (FLD (f_dest), opval);
3348 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3349 }
3350}
3351
3352 return vpc;
3353#undef FLD
3354}
3355
3356/* mmulfxrpw: mmulfxrp.w $rm, $rn, $rd */
3357
3358static SEM_PC
3359SEM_FN_NAME (sh64_media,mmulfxrpw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3360{
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);
3366
3367{
3368 SI tmp_temp;
3369 HI tmp_result0;
3370 HI tmp_result1;
3371 HI tmp_result2;
3372 HI tmp_result3;
3373 HI tmp_c;
3374 tmp_c = SLLSI (1, 14);
3375 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3376 tmp_result0 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3377 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3378 tmp_result1 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3379 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3380 tmp_result2 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3381 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3382 tmp_result3 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLHI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3383 {
3384 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3385 SET_H_GR (FLD (f_dest), opval);
3386 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3387 }
3388}
3389
3390 return vpc;
3391#undef FLD
3392}
3393
3394/* mmulhiwl: mmulhi.wl $rm, $rn, $rd */
3395
3396static SEM_PC
3397SEM_FN_NAME (sh64_media,mmulhiwl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3398{
3399#define FLD(f) abuf->fields.sfmt_add.f
3400 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3401 int UNUSED written = 0;
3402 IADDR UNUSED pc = abuf->addr;
3403 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3404
3405{
3406 SI tmp_result1;
3407 SI tmp_result0;
3408 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3409 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3410 {
3411 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3412 SET_H_GR (FLD (f_dest), opval);
3413 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3414 }
3415}
3416
3417 return vpc;
3418#undef FLD
3419}
3420
3421/* mmullowl: mmullo.wl $rm, $rn, $rd */
3422
3423static SEM_PC
3424SEM_FN_NAME (sh64_media,mmullowl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3425{
3426#define FLD(f) abuf->fields.sfmt_add.f
3427 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3428 int UNUSED written = 0;
3429 IADDR UNUSED pc = abuf->addr;
3430 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3431
3432{
3433 SI tmp_result1;
3434 SI tmp_result0;
3435 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3436 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3437 {
3438 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3439 SET_H_GR (FLD (f_dest), opval);
3440 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3441 }
3442}
3443
3444 return vpc;
3445#undef FLD
3446}
3447
3448/* mmulsumwq: mmulsum.wq $rm, $rn, $rd */
3449
3450static SEM_PC
3451SEM_FN_NAME (sh64_media,mmulsumwq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3452{
3453#define FLD(f) abuf->fields.sfmt_add.f
3454 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3455 int UNUSED written = 0;
3456 IADDR UNUSED pc = abuf->addr;
3457 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3458
3459{
3460 DI tmp_acc;
3461 tmp_acc = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3462 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))));
3463 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))));
3464 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))));
3465 {
3466 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc);
3467 SET_H_GR (FLD (f_dest), opval);
3468 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3469 }
3470}
3471
3472 return vpc;
3473#undef FLD
3474}
3475
3476/* movi: movi $imm16, $rd */
3477
3478static SEM_PC
3479SEM_FN_NAME (sh64_media,movi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3480{
3481#define FLD(f) abuf->fields.sfmt_movi.f
3482 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3483 int UNUSED written = 0;
3484 IADDR UNUSED pc = abuf->addr;
3485 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3486
3487 {
3488 DI opval = EXTSIDI (FLD (f_imm16));
3489 SET_H_GR (FLD (f_dest), opval);
3490 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3491 }
3492
3493 return vpc;
3494#undef FLD
3495}
3496
3497/* mpermw: mperm.w $rm, $rn, $rd */
3498
3499static SEM_PC
3500SEM_FN_NAME (sh64_media,mpermw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3501{
3502#define FLD(f) abuf->fields.sfmt_add.f
3503 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3504 int UNUSED written = 0;
3505 IADDR UNUSED pc = abuf->addr;
3506 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3507
3508{
3509 QI tmp_control;
3510 HI tmp_result3;
3511 HI tmp_result2;
3512 HI tmp_result1;
3513 HI tmp_result0;
3514 tmp_control = ANDQI (GET_H_GR (FLD (f_right)), 63);
3515 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (tmp_control, 3)));
3516 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 2), 3)));
3517 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 4), 3)));
3518 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 6), 3)));
3519 {
3520 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3521 SET_H_GR (FLD (f_dest), opval);
3522 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3523 }
3524}
3525
3526 return vpc;
3527#undef FLD
3528}
3529
3530/* msadubq: msad.ubq $rm, $rn, $rd */
3531
3532static SEM_PC
3533SEM_FN_NAME (sh64_media,msadubq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3534{
3535#define FLD(f) abuf->fields.sfmt_add.f
3536 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3537 int UNUSED written = 0;
3538 IADDR UNUSED pc = abuf->addr;
3539 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3540
3541{
3542 DI tmp_acc;
3543 tmp_acc = ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)));
3544 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))));
3545 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))));
3546 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))));
3547 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))));
3548 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))));
3549 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))));
3550 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))));
3551 {
3552 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc);
3553 SET_H_GR (FLD (f_dest), opval);
3554 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3555 }
3556}
3557
3558 return vpc;
3559#undef FLD
3560}
3561
3562/* mshaldsl: mshalds.l $rm, $rn, $rd */
3563
3564static SEM_PC
3565SEM_FN_NAME (sh64_media,mshaldsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3566{
3567#define FLD(f) abuf->fields.sfmt_add.f
3568 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3569 int UNUSED written = 0;
3570 IADDR UNUSED pc = abuf->addr;
3571 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3572
3573{
3574 SI tmp_result1;
3575 SI tmp_result0;
3576 tmp_result0 = ((LTSI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3577 tmp_result1 = ((LTSI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLSI (1, SUBSI (32, 1)))) ? (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3578 {
3579 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3580 SET_H_GR (FLD (f_dest), opval);
3581 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3582 }
3583}
3584
3585 return vpc;
3586#undef FLD
3587}
3588
3589/* mshaldsw: mshalds.w $rm, $rn, $rd */
3590
3591static SEM_PC
3592SEM_FN_NAME (sh64_media,mshaldsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3593{
3594#define FLD(f) abuf->fields.sfmt_add.f
3595 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3596 int UNUSED written = 0;
3597 IADDR UNUSED pc = abuf->addr;
3598 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3599
3600{
3601 HI tmp_result3;
3602 HI tmp_result2;
3603 HI tmp_result1;
3604 HI tmp_result0;
3605 tmp_result0 = ((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLHI (1, SUBSI (16, 1)))) ? (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3606 tmp_result1 = ((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLHI (1, SUBSI (16, 1)))) ? (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3607 tmp_result2 = ((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLHI (1, SUBSI (16, 1)))) ? (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3608 tmp_result3 = ((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTHI (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLHI (1, SUBSI (16, 1)))) ? (SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3609 {
3610 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3611 SET_H_GR (FLD (f_dest), opval);
3612 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3613 }
3614}
3615
3616 return vpc;
3617#undef FLD
3618}
3619
3620/* mshardl: mshard.l $rm, $rn, $rd */
3621
3622static SEM_PC
3623SEM_FN_NAME (sh64_media,mshardl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3624{
3625#define FLD(f) abuf->fields.sfmt_add.f
3626 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3627 int UNUSED written = 0;
3628 IADDR UNUSED pc = abuf->addr;
3629 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3630
3631{
3632 SI tmp_result1;
3633 SI tmp_result0;
3634 tmp_result0 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
3635 tmp_result1 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
3636 {
3637 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3638 SET_H_GR (FLD (f_dest), opval);
3639 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3640 }
3641}
3642
3643 return vpc;
3644#undef FLD
3645}
3646
3647/* mshardw: mshard.w $rm, $rn, $rd */
3648
3649static SEM_PC
3650SEM_FN_NAME (sh64_media,mshardw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3651{
3652#define FLD(f) abuf->fields.sfmt_add.f
3653 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3654 int UNUSED written = 0;
3655 IADDR UNUSED pc = abuf->addr;
3656 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3657
3658{
3659 HI tmp_result3;
3660 HI tmp_result2;
3661 HI tmp_result1;
3662 HI tmp_result0;
3663 tmp_result0 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
3664 tmp_result1 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
3665 tmp_result2 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
3666 tmp_result3 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
3667 {
3668 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3669 SET_H_GR (FLD (f_dest), opval);
3670 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3671 }
3672}
3673
3674 return vpc;
3675#undef FLD
3676}
3677
3678/* mshardsq: mshards.q $rm, $rn, $rd */
3679
3680static SEM_PC
3681SEM_FN_NAME (sh64_media,mshardsq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3682{
3683#define FLD(f) abuf->fields.sfmt_add.f
3684 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3685 int UNUSED written = 0;
3686 IADDR UNUSED pc = abuf->addr;
3687 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3688
3689 {
3690 DI opval = ((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGDI (SLLDI (1, SUBSI (16, 1)))) : (((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), SLLDI (1, SUBSI (16, 1)))) ? (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63))) : (SUBDI (SLLDI (1, SUBSI (16, 1)), 1)))));
3691 SET_H_GR (FLD (f_dest), opval);
3692 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3693 }
3694
3695 return vpc;
3696#undef FLD
3697}
3698
3699/* mshfhib: mshfhi.b $rm, $rn, $rd */
3700
3701static SEM_PC
3702SEM_FN_NAME (sh64_media,mshfhib) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3703{
3704#define FLD(f) abuf->fields.sfmt_add.f
3705 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3706 int UNUSED written = 0;
3707 IADDR UNUSED pc = abuf->addr;
3708 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3709
3710{
3711 QI tmp_result7;
3712 QI tmp_result6;
3713 QI tmp_result5;
3714 QI tmp_result4;
3715 QI tmp_result3;
3716 QI tmp_result2;
3717 QI tmp_result1;
3718 QI tmp_result0;
3719 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4);
3720 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4);
3721 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5);
3722 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5);
3723 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6);
3724 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6);
3725 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7);
3726 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7);
3727 {
3728 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
3729 SET_H_GR (FLD (f_dest), opval);
3730 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3731 }
3732}
3733
3734 return vpc;
3735#undef FLD
3736}
3737
3738/* mshfhil: mshfhi.l $rm, $rn, $rd */
3739
3740static SEM_PC
3741SEM_FN_NAME (sh64_media,mshfhil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3742{
3743#define FLD(f) abuf->fields.sfmt_add.f
3744 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3745 int UNUSED written = 0;
3746 IADDR UNUSED pc = abuf->addr;
3747 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3748
3749{
3750 SI tmp_result1;
3751 SI tmp_result0;
3752 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 1);
3753 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 1);
3754 {
3755 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3756 SET_H_GR (FLD (f_dest), opval);
3757 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3758 }
3759}
3760
3761 return vpc;
3762#undef FLD
3763}
3764
3765/* mshfhiw: mshfhi.w $rm, $rn, $rd */
3766
3767static SEM_PC
3768SEM_FN_NAME (sh64_media,mshfhiw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3769{
3770#define FLD(f) abuf->fields.sfmt_add.f
3771 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3772 int UNUSED written = 0;
3773 IADDR UNUSED pc = abuf->addr;
3774 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3775
3776{
3777 HI tmp_result3;
3778 HI tmp_result2;
3779 HI tmp_result1;
3780 HI tmp_result0;
3781 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2);
3782 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2);
3783 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3);
3784 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3);
3785 {
3786 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3787 SET_H_GR (FLD (f_dest), opval);
3788 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3789 }
3790}
3791
3792 return vpc;
3793#undef FLD
3794}
3795
3796/* mshflob: mshflo.b $rm, $rn, $rd */
3797
3798static SEM_PC
3799SEM_FN_NAME (sh64_media,mshflob) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3800{
3801#define FLD(f) abuf->fields.sfmt_add.f
3802 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3803 int UNUSED written = 0;
3804 IADDR UNUSED pc = abuf->addr;
3805 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3806
3807{
3808 QI tmp_result7;
3809 QI tmp_result6;
3810 QI tmp_result5;
3811 QI tmp_result4;
3812 QI tmp_result3;
3813 QI tmp_result2;
3814 QI tmp_result1;
3815 QI tmp_result0;
3816 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0);
3817 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0);
3818 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1);
3819 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1);
3820 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2);
3821 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2);
3822 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3);
3823 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3);
3824 {
3825 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
3826 SET_H_GR (FLD (f_dest), opval);
3827 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3828 }
3829}
3830
3831 return vpc;
3832#undef FLD
3833}
3834
3835/* mshflol: mshflo.l $rm, $rn, $rd */
3836
3837static SEM_PC
3838SEM_FN_NAME (sh64_media,mshflol) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3839{
3840#define FLD(f) abuf->fields.sfmt_add.f
3841 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3842 int UNUSED written = 0;
3843 IADDR UNUSED pc = abuf->addr;
3844 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3845
3846{
3847 SI tmp_result1;
3848 SI tmp_result0;
3849 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 0);
3850 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 0);
3851 {
3852 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3853 SET_H_GR (FLD (f_dest), opval);
3854 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3855 }
3856}
3857
3858 return vpc;
3859#undef FLD
3860}
3861
3862/* mshflow: mshflo.w $rm, $rn, $rd */
3863
3864static SEM_PC
3865SEM_FN_NAME (sh64_media,mshflow) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3866{
3867#define FLD(f) abuf->fields.sfmt_add.f
3868 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3869 int UNUSED written = 0;
3870 IADDR UNUSED pc = abuf->addr;
3871 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3872
3873{
3874 HI tmp_result3;
3875 HI tmp_result2;
3876 HI tmp_result1;
3877 HI tmp_result0;
3878 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0);
3879 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0);
3880 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1);
3881 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1);
3882 {
3883 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3884 SET_H_GR (FLD (f_dest), opval);
3885 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3886 }
3887}
3888
3889 return vpc;
3890#undef FLD
3891}
3892
3893/* mshlldl: mshlld.l $rm, $rn, $rd */
3894
3895static SEM_PC
3896SEM_FN_NAME (sh64_media,mshlldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3897{
3898#define FLD(f) abuf->fields.sfmt_add.f
3899 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3900 int UNUSED written = 0;
3901 IADDR UNUSED pc = abuf->addr;
3902 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3903
3904{
3905 SI tmp_result1;
3906 SI tmp_result0;
3907 tmp_result0 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
3908 tmp_result1 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
3909 {
3910 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3911 SET_H_GR (FLD (f_dest), opval);
3912 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3913 }
3914}
3915
3916 return vpc;
3917#undef FLD
3918}
3919
3920/* mshlldw: mshlld.w $rm, $rn, $rd */
3921
3922static SEM_PC
3923SEM_FN_NAME (sh64_media,mshlldw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3924{
3925#define FLD(f) abuf->fields.sfmt_add.f
3926 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3927 int UNUSED written = 0;
3928 IADDR UNUSED pc = abuf->addr;
3929 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3930
3931{
3932 HI tmp_result3;
3933 HI tmp_result2;
3934 HI tmp_result1;
3935 HI tmp_result0;
3936 tmp_result0 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
3937 tmp_result1 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
3938 tmp_result2 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
3939 tmp_result3 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
3940 {
3941 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3942 SET_H_GR (FLD (f_dest), opval);
3943 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3944 }
3945}
3946
3947 return vpc;
3948#undef FLD
3949}
3950
3951/* mshlrdl: mshlrd.l $rm, $rn, $rd */
3952
3953static SEM_PC
3954SEM_FN_NAME (sh64_media,mshlrdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3955{
3956#define FLD(f) abuf->fields.sfmt_add.f
3957 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3958 int UNUSED written = 0;
3959 IADDR UNUSED pc = abuf->addr;
3960 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3961
3962{
3963 SI tmp_result1;
3964 SI tmp_result0;
3965 tmp_result0 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
3966 tmp_result1 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
3967 {
3968 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3969 SET_H_GR (FLD (f_dest), opval);
3970 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
3971 }
3972}
3973
3974 return vpc;
3975#undef FLD
3976}
3977
3978/* mshlrdw: mshlrd.w $rm, $rn, $rd */
3979
3980static SEM_PC
3981SEM_FN_NAME (sh64_media,mshlrdw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3982{
3983#define FLD(f) abuf->fields.sfmt_add.f
3984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3985 int UNUSED written = 0;
3986 IADDR UNUSED pc = abuf->addr;
3987 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3988
3989{
3990 HI tmp_result3;
3991 HI tmp_result2;
3992 HI tmp_result1;
3993 HI tmp_result0;
3994 tmp_result0 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
3995 tmp_result1 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
3996 tmp_result2 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
3997 tmp_result3 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
3998 {
3999 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4000 SET_H_GR (FLD (f_dest), opval);
4001 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4002 }
4003}
4004
4005 return vpc;
4006#undef FLD
4007}
4008
4009/* msubl: msub.l $rm, $rn, $rd */
4010
4011static SEM_PC
4012SEM_FN_NAME (sh64_media,msubl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4013{
4014#define FLD(f) abuf->fields.sfmt_add.f
4015 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4016 int UNUSED written = 0;
4017 IADDR UNUSED pc = abuf->addr;
4018 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4019
4020{
4021 SI tmp_result1;
4022 SI tmp_result0;
4023 tmp_result0 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
4024 tmp_result1 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
4025 {
4026 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4027 SET_H_GR (FLD (f_dest), opval);
4028 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4029 }
4030}
4031
4032 return vpc;
4033#undef FLD
4034}
4035
4036/* msubw: msub.w $rm, $rn, $rd */
4037
4038static SEM_PC
4039SEM_FN_NAME (sh64_media,msubw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4040{
4041#define FLD(f) abuf->fields.sfmt_add.f
4042 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4043 int UNUSED written = 0;
4044 IADDR UNUSED pc = abuf->addr;
4045 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4046
4047{
4048 HI tmp_result3;
4049 HI tmp_result2;
4050 HI tmp_result1;
4051 HI tmp_result0;
4052 tmp_result0 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
4053 tmp_result1 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
4054 tmp_result2 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
4055 tmp_result3 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
4056 {
4057 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4058 SET_H_GR (FLD (f_dest), opval);
4059 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4060 }
4061}
4062
4063 return vpc;
4064#undef FLD
4065}
4066
4067/* msubsl: msubs.l $rm, $rn, $rd */
4068
4069static SEM_PC
4070SEM_FN_NAME (sh64_media,msubsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4071{
4072#define FLD(f) abuf->fields.sfmt_add.f
4073 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4074 int UNUSED written = 0;
4075 IADDR UNUSED pc = abuf->addr;
4076 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4077
4078{
4079 SI tmp_result1;
4080 SI tmp_result0;
4081 tmp_result0 = ((LTSI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)), SLLSI (1, SUBSI (32, 1)))) ? (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4082 tmp_result1 = ((LTSI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)), NEGSI (SLLSI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTSI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)), SLLSI (1, SUBSI (32, 1)))) ? (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4083 {
4084 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4085 SET_H_GR (FLD (f_dest), opval);
4086 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4087 }
4088}
4089
4090 return vpc;
4091#undef FLD
4092}
4093
4094/* msubsub: msubs.ub $rm, $rn, $rd */
4095
4096static SEM_PC
4097SEM_FN_NAME (sh64_media,msubsub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4098{
4099#define FLD(f) abuf->fields.sfmt_add.f
4100 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4101 int UNUSED written = 0;
4102 IADDR UNUSED pc = abuf->addr;
4103 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4104
4105{
4106 QI tmp_result7;
4107 QI tmp_result6;
4108 QI tmp_result5;
4109 QI tmp_result4;
4110 QI tmp_result3;
4111 QI tmp_result2;
4112 QI tmp_result1;
4113 QI tmp_result0;
4114 tmp_result0 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) : (SUBQI (SLLQI (1, 8), 1)))));
4115 tmp_result1 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) : (SUBQI (SLLQI (1, 8), 1)))));
4116 tmp_result2 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) : (SUBQI (SLLQI (1, 8), 1)))));
4117 tmp_result3 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) : (SUBQI (SLLQI (1, 8), 1)))));
4118 tmp_result4 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) : (SUBQI (SLLQI (1, 8), 1)))));
4119 tmp_result5 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) : (SUBQI (SLLQI (1, 8), 1)))));
4120 tmp_result6 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) : (SUBQI (SLLQI (1, 8), 1)))));
4121 tmp_result7 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), 0)) ? (0) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), SLLQI (1, 8))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) : (SUBQI (SLLQI (1, 8), 1)))));
4122 {
4123 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
4124 SET_H_GR (FLD (f_dest), opval);
4125 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4126 }
4127}
4128
4129 return vpc;
4130#undef FLD
4131}
4132
4133/* msubsw: msubs.w $rm, $rn, $rd */
4134
4135static SEM_PC
4136SEM_FN_NAME (sh64_media,msubsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4137{
4138#define FLD(f) abuf->fields.sfmt_add.f
4139 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4140 int UNUSED written = 0;
4141 IADDR UNUSED pc = abuf->addr;
4142 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4143
4144{
4145 QI tmp_result7;
4146 QI tmp_result6;
4147 QI tmp_result5;
4148 QI tmp_result4;
4149 QI tmp_result3;
4150 QI tmp_result2;
4151 QI tmp_result1;
4152 QI tmp_result0;
4153 tmp_result0 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4154 tmp_result1 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4155 tmp_result2 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4156 tmp_result3 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4157 tmp_result4 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4158 tmp_result5 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4159 tmp_result6 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4160 tmp_result7 = ((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), NEGHI (SLLHI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)), SLLHI (1, SUBSI (16, 1)))) ? (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4161 {
4162 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
4163 SET_H_GR (FLD (f_dest), opval);
4164 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4165 }
4166}
4167
4168 return vpc;
4169#undef FLD
4170}
4171
4172/* mulsl: muls.l $rm, $rn, $rd */
4173
4174static SEM_PC
4175SEM_FN_NAME (sh64_media,mulsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4176{
4177#define FLD(f) abuf->fields.sfmt_add.f
4178 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4179 int UNUSED written = 0;
4180 IADDR UNUSED pc = abuf->addr;
4181 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4182
4183 {
4184 DI opval = MULDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
4185 SET_H_GR (FLD (f_dest), opval);
4186 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4187 }
4188
4189 return vpc;
4190#undef FLD
4191}
4192
4193/* mulul: mulu.l $rm, $rn, $rd */
4194
4195static SEM_PC
4196SEM_FN_NAME (sh64_media,mulul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4197{
4198#define FLD(f) abuf->fields.sfmt_add.f
4199 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4200 int UNUSED written = 0;
4201 IADDR UNUSED pc = abuf->addr;
4202 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4203
4204 {
4205 DI opval = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
4206 SET_H_GR (FLD (f_dest), opval);
4207 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4208 }
4209
4210 return vpc;
4211#undef FLD
4212}
4213
4214/* nop: nop */
4215
4216static SEM_PC
4217SEM_FN_NAME (sh64_media,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4218{
4219#define FLD(f) abuf->fields.fmt_empty.f
4220 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4221 int UNUSED written = 0;
4222 IADDR UNUSED pc = abuf->addr;
4223 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4224
4225((void) 0); /*nop*/
4226
4227 return vpc;
4228#undef FLD
4229}
4230
4231/* nsb: nsb $rm, $rd */
4232
4233static SEM_PC
4234SEM_FN_NAME (sh64_media,nsb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4235{
4236#define FLD(f) abuf->fields.sfmt_xori.f
4237 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4238 int UNUSED written = 0;
4239 IADDR UNUSED pc = abuf->addr;
4240 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4241
4242 {
4243 DI opval = sh64_nsb (current_cpu, GET_H_GR (FLD (f_left)));
4244 SET_H_GR (FLD (f_dest), opval);
4245 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4246 }
4247
4248 return vpc;
4249#undef FLD
4250}
4251
4252/* ocbi: ocbi $rm, $disp6x32 */
4253
4254static SEM_PC
4255SEM_FN_NAME (sh64_media,ocbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4256{
4257#define FLD(f) abuf->fields.fmt_empty.f
4258 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4259 int UNUSED written = 0;
4260 IADDR UNUSED pc = abuf->addr;
4261 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4262
4263((void) 0); /*nop*/
4264
4265 return vpc;
4266#undef FLD
4267}
4268
4269/* ocbp: ocbp $rm, $disp6x32 */
4270
4271static SEM_PC
4272SEM_FN_NAME (sh64_media,ocbp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4273{
4274#define FLD(f) abuf->fields.fmt_empty.f
4275 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4276 int UNUSED written = 0;
4277 IADDR UNUSED pc = abuf->addr;
4278 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4279
4280((void) 0); /*nop*/
4281
4282 return vpc;
4283#undef FLD
4284}
4285
4286/* ocbwb: ocbwb $rm, $disp6x32 */
4287
4288static SEM_PC
4289SEM_FN_NAME (sh64_media,ocbwb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4290{
4291#define FLD(f) abuf->fields.fmt_empty.f
4292 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4293 int UNUSED written = 0;
4294 IADDR UNUSED pc = abuf->addr;
4295 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4296
4297((void) 0); /*nop*/
4298
4299 return vpc;
4300#undef FLD
4301}
4302
4303/* or: or $rm, $rn, $rd */
4304
4305static SEM_PC
4306SEM_FN_NAME (sh64_media,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4307{
4308#define FLD(f) abuf->fields.sfmt_add.f
4309 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4310 int UNUSED written = 0;
4311 IADDR UNUSED pc = abuf->addr;
4312 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4313
4314 {
4315 DI opval = ORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
4316 SET_H_GR (FLD (f_dest), opval);
4317 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4318 }
4319
4320 return vpc;
4321#undef FLD
4322}
4323
4324/* ori: ori $rm, $imm10, $rd */
4325
4326static SEM_PC
4327SEM_FN_NAME (sh64_media,ori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4328{
4329#define FLD(f) abuf->fields.sfmt_ori.f
4330 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4331 int UNUSED written = 0;
4332 IADDR UNUSED pc = abuf->addr;
4333 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4334
4335 {
4336 DI opval = ORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm10)));
4337 SET_H_GR (FLD (f_dest), opval);
4338 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4339 }
4340
4341 return vpc;
4342#undef FLD
4343}
4344
4345/* prefi: prefi $rm, $disp6x32 */
4346
4347static SEM_PC
4348SEM_FN_NAME (sh64_media,prefi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4349{
4350#define FLD(f) abuf->fields.fmt_empty.f
4351 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4352 int UNUSED written = 0;
4353 IADDR UNUSED pc = abuf->addr;
4354 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4355
4356((void) 0); /*nop*/
4357
4358 return vpc;
4359#undef FLD
4360}
4361
4362/* pta: pta$likely $disp16, $tra */
4363
4364static SEM_PC
4365SEM_FN_NAME (sh64_media,pta) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4366{
4367#define FLD(f) abuf->fields.sfmt_pta.f
4368 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4369 int UNUSED written = 0;
4370 IADDR UNUSED pc = abuf->addr;
4371 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4372
4373 {
4374 DI opval = ADDSI (FLD (f_disp16), 1);
4375 CPU (h_tr[FLD (f_tra)]) = opval;
4376 TRACE_RESULT (current_cpu, abuf, "tra", 'D', opval);
4377 }
4378
4379 return vpc;
4380#undef FLD
4381}
4382
4383/* ptabs: ptabs$likely $rn, $tra */
4384
4385static SEM_PC
4386SEM_FN_NAME (sh64_media,ptabs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4387{
4388#define FLD(f) abuf->fields.sfmt_beq.f
4389 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4390 int UNUSED written = 0;
4391 IADDR UNUSED pc = abuf->addr;
4392 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4393
4394 {
4395 DI opval = GET_H_GR (FLD (f_right));
4396 CPU (h_tr[FLD (f_tra)]) = opval;
4397 TRACE_RESULT (current_cpu, abuf, "tra", 'D', opval);
4398 }
4399
4400 return vpc;
4401#undef FLD
4402}
4403
4404/* ptb: ptb$likely $disp16, $tra */
4405
4406static SEM_PC
4407SEM_FN_NAME (sh64_media,ptb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4408{
4409#define FLD(f) abuf->fields.sfmt_pta.f
4410 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4411 int UNUSED written = 0;
4412 IADDR UNUSED pc = abuf->addr;
4413 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4414
4415 {
4416 DI opval = FLD (f_disp16);
4417 CPU (h_tr[FLD (f_tra)]) = opval;
4418 TRACE_RESULT (current_cpu, abuf, "tra", 'D', opval);
4419 }
4420
4421 return vpc;
4422#undef FLD
4423}
4424
4425/* ptrel: ptrel$likely $rn, $tra */
4426
4427static SEM_PC
4428SEM_FN_NAME (sh64_media,ptrel) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4429{
4430#define FLD(f) abuf->fields.sfmt_beq.f
4431 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4432 int UNUSED written = 0;
4433 IADDR UNUSED pc = abuf->addr;
4434 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4435
4436 {
4437 DI opval = ADDDI (pc, GET_H_GR (FLD (f_right)));
4438 CPU (h_tr[FLD (f_tra)]) = opval;
4439 TRACE_RESULT (current_cpu, abuf, "tra", 'D', opval);
4440 }
4441
4442 return vpc;
4443#undef FLD
4444}
4445
4446/* putcfg: putcfg $rm, $disp6, $rd */
4447
4448static SEM_PC
4449SEM_FN_NAME (sh64_media,putcfg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4450{
4451#define FLD(f) abuf->fields.fmt_empty.f
4452 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4453 int UNUSED written = 0;
4454 IADDR UNUSED pc = abuf->addr;
4455 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4456
4457((void) 0); /*nop*/
4458
4459 return vpc;
4460#undef FLD
4461}
4462
4463/* putcon: putcon $rm, $crj */
4464
4465static SEM_PC
4466SEM_FN_NAME (sh64_media,putcon) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4467{
4468#define FLD(f) abuf->fields.sfmt_xori.f
4469 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4470 int UNUSED written = 0;
4471 IADDR UNUSED pc = abuf->addr;
4472 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4473
4474 {
4475 DI opval = GET_H_GR (FLD (f_left));
4476 SET_H_CR (FLD (f_dest), opval);
4477 TRACE_RESULT (current_cpu, abuf, "crj", 'D', opval);
4478 }
4479
4480 return vpc;
4481#undef FLD
4482}
4483
4484/* rte: rte */
4485
4486static SEM_PC
4487SEM_FN_NAME (sh64_media,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4488{
4489#define FLD(f) abuf->fields.fmt_empty.f
4490 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4491 int UNUSED written = 0;
4492 IADDR UNUSED pc = abuf->addr;
4493 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4494
4495((void) 0); /*nop*/
4496
4497 return vpc;
4498#undef FLD
4499}
4500
4501/* shard: shard $rm, $rn, $rd */
4502
4503static SEM_PC
4504SEM_FN_NAME (sh64_media,shard) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4505{
4506#define FLD(f) abuf->fields.sfmt_add.f
4507 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4508 int UNUSED written = 0;
4509 IADDR UNUSED pc = abuf->addr;
4510 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4511
4512 {
4513 DI opval = SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4514 SET_H_GR (FLD (f_dest), opval);
4515 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4516 }
4517
4518 return vpc;
4519#undef FLD
4520}
4521
4522/* shardl: shard.l $rm, $rn, $rd */
4523
4524static SEM_PC
4525SEM_FN_NAME (sh64_media,shardl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4526{
4527#define FLD(f) abuf->fields.sfmt_add.f
4528 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4529 int UNUSED written = 0;
4530 IADDR UNUSED pc = abuf->addr;
4531 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4532
4533 {
4534 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4535 SET_H_GR (FLD (f_dest), opval);
4536 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4537 }
4538
4539 return vpc;
4540#undef FLD
4541}
4542
4543/* shari: shari $rm, $uimm6, $rd */
4544
4545static SEM_PC
4546SEM_FN_NAME (sh64_media,shari) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4547{
4548#define FLD(f) abuf->fields.sfmt_shari.f
4549 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4550 int UNUSED written = 0;
4551 IADDR UNUSED pc = abuf->addr;
4552 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4553
4554 {
4555 DI opval = SRADI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4556 SET_H_GR (FLD (f_dest), opval);
4557 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4558 }
4559
4560 return vpc;
4561#undef FLD
4562}
4563
4564/* sharil: shari.l $rm, $uimm6, $rd */
4565
4566static SEM_PC
4567SEM_FN_NAME (sh64_media,sharil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4568{
4569#define FLD(f) abuf->fields.sfmt_shari.f
4570 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4571 int UNUSED written = 0;
4572 IADDR UNUSED pc = abuf->addr;
4573 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4574
4575 {
4576 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4577 SET_H_GR (FLD (f_dest), opval);
4578 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4579 }
4580
4581 return vpc;
4582#undef FLD
4583}
4584
4585/* shlld: shlld $rm, $rn, $rd */
4586
4587static SEM_PC
4588SEM_FN_NAME (sh64_media,shlld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4589{
4590#define FLD(f) abuf->fields.sfmt_add.f
4591 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4592 int UNUSED written = 0;
4593 IADDR UNUSED pc = abuf->addr;
4594 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4595
4596 {
4597 DI opval = SLLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4598 SET_H_GR (FLD (f_dest), opval);
4599 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4600 }
4601
4602 return vpc;
4603#undef FLD
4604}
4605
4606/* shlldl: shlld.l $rm, $rn, $rd */
4607
4608static SEM_PC
4609SEM_FN_NAME (sh64_media,shlldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4610{
4611#define FLD(f) abuf->fields.sfmt_add.f
4612 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4613 int UNUSED written = 0;
4614 IADDR UNUSED pc = abuf->addr;
4615 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4616
4617 {
4618 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4619 SET_H_GR (FLD (f_dest), opval);
4620 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4621 }
4622
4623 return vpc;
4624#undef FLD
4625}
4626
4627/* shlli: shlli $rm, $uimm6, $rd */
4628
4629static SEM_PC
4630SEM_FN_NAME (sh64_media,shlli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4631{
4632#define FLD(f) abuf->fields.sfmt_shari.f
4633 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4634 int UNUSED written = 0;
4635 IADDR UNUSED pc = abuf->addr;
4636 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4637
4638 {
4639 DI opval = SLLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4640 SET_H_GR (FLD (f_dest), opval);
4641 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4642 }
4643
4644 return vpc;
4645#undef FLD
4646}
4647
4648/* shllil: shlli.l $rm, $uimm6, $rd */
4649
4650static SEM_PC
4651SEM_FN_NAME (sh64_media,shllil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4652{
4653#define FLD(f) abuf->fields.sfmt_shari.f
4654 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4655 int UNUSED written = 0;
4656 IADDR UNUSED pc = abuf->addr;
4657 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4658
4659 {
4660 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4661 SET_H_GR (FLD (f_dest), opval);
4662 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4663 }
4664
4665 return vpc;
4666#undef FLD
4667}
4668
4669/* shlrd: shlrd $rm, $rn, $rd */
4670
4671static SEM_PC
4672SEM_FN_NAME (sh64_media,shlrd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4673{
4674#define FLD(f) abuf->fields.sfmt_add.f
4675 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4676 int UNUSED written = 0;
4677 IADDR UNUSED pc = abuf->addr;
4678 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4679
4680 {
4681 DI opval = SRLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4682 SET_H_GR (FLD (f_dest), opval);
4683 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4684 }
4685
4686 return vpc;
4687#undef FLD
4688}
4689
4690/* shlrdl: shlrd.l $rm, $rn, $rd */
4691
4692static SEM_PC
4693SEM_FN_NAME (sh64_media,shlrdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4694{
4695#define FLD(f) abuf->fields.sfmt_add.f
4696 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4697 int UNUSED written = 0;
4698 IADDR UNUSED pc = abuf->addr;
4699 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4700
4701 {
4702 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4703 SET_H_GR (FLD (f_dest), opval);
4704 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4705 }
4706
4707 return vpc;
4708#undef FLD
4709}
4710
4711/* shlri: shlri $rm, $uimm6, $rd */
4712
4713static SEM_PC
4714SEM_FN_NAME (sh64_media,shlri) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4715{
4716#define FLD(f) abuf->fields.sfmt_shari.f
4717 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4718 int UNUSED written = 0;
4719 IADDR UNUSED pc = abuf->addr;
4720 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4721
4722 {
4723 DI opval = SRLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4724 SET_H_GR (FLD (f_dest), opval);
4725 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4726 }
4727
4728 return vpc;
4729#undef FLD
4730}
4731
4732/* shlril: shlri.l $rm, $uimm6, $rd */
4733
4734static SEM_PC
4735SEM_FN_NAME (sh64_media,shlril) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4736{
4737#define FLD(f) abuf->fields.sfmt_shari.f
4738 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4739 int UNUSED written = 0;
4740 IADDR UNUSED pc = abuf->addr;
4741 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4742
4743 {
4744 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4745 SET_H_GR (FLD (f_dest), opval);
4746 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4747 }
4748
4749 return vpc;
4750#undef FLD
4751}
4752
4753/* shori: shori $uimm16, $rd */
4754
4755static SEM_PC
4756SEM_FN_NAME (sh64_media,shori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4757{
4758#define FLD(f) abuf->fields.sfmt_shori.f
4759 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4760 int UNUSED written = 0;
4761 IADDR UNUSED pc = abuf->addr;
4762 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4763
4764 {
4765 DI opval = ORDI (SLLDI (GET_H_GR (FLD (f_dest)), 16), ZEXTSIDI (FLD (f_uimm16)));
4766 SET_H_GR (FLD (f_dest), opval);
4767 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
4768 }
4769
4770 return vpc;
4771#undef FLD
4772}
4773
4774/* sleep: sleep */
4775
4776static SEM_PC
4777SEM_FN_NAME (sh64_media,sleep) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4778{
4779#define FLD(f) abuf->fields.fmt_empty.f
4780 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4781 int UNUSED written = 0;
4782 IADDR UNUSED pc = abuf->addr;
4783 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4784
4785((void) 0); /*nop*/
4786
4787 return vpc;
4788#undef FLD
4789}
4790
4791/* stb: st.b $rm, $disp10, $rd */
4792
4793static SEM_PC
4794SEM_FN_NAME (sh64_media,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4795{
4796#define FLD(f) abuf->fields.sfmt_addi.f
4797 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4798 int UNUSED written = 0;
4799 IADDR UNUSED pc = abuf->addr;
4800 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4801
4802 {
4803 UQI opval = ANDQI (GET_H_GR (FLD (f_dest)), 255);
4804 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))), opval);
4805 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4806 }
4807
4808 return vpc;
4809#undef FLD
4810}
4811
4812/* stl: st.l $rm, $disp10x4, $rd */
4813
4814static SEM_PC
4815SEM_FN_NAME (sh64_media,stl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4816{
4817#define FLD(f) abuf->fields.sfmt_flds.f
4818 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4819 int UNUSED written = 0;
4820 IADDR UNUSED pc = abuf->addr;
4821 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4822
4823 {
4824 SI opval = ANDSI (GET_H_GR (FLD (f_dest)), 0xffffffff);
4825 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4))), opval);
4826 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4827 }
4828
4829 return vpc;
4830#undef FLD
4831}
4832
4833/* stq: st.q $rm, $disp10x8, $rd */
4834
4835static SEM_PC
4836SEM_FN_NAME (sh64_media,stq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4837{
4838#define FLD(f) abuf->fields.sfmt_fldd.f
4839 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4840 int UNUSED written = 0;
4841 IADDR UNUSED pc = abuf->addr;
4842 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4843
4844 {
4845 DI opval = GET_H_GR (FLD (f_dest));
4846 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8))), opval);
4847 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
4848 }
4849
4850 return vpc;
4851#undef FLD
4852}
4853
4854/* stw: st.w $rm, $disp10x2, $rd */
4855
4856static SEM_PC
4857SEM_FN_NAME (sh64_media,stw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4858{
4859#define FLD(f) abuf->fields.sfmt_lduw.f
4860 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4861 int UNUSED written = 0;
4862 IADDR UNUSED pc = abuf->addr;
4863 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4864
4865 {
4866 HI opval = ANDHI (GET_H_GR (FLD (f_dest)), 65535);
4867 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))), opval);
4868 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4869 }
4870
4871 return vpc;
4872#undef FLD
4873}
4874
4875/* sthil: sthi.l $rm, $disp6, $rd */
4876
4877static SEM_PC
4878SEM_FN_NAME (sh64_media,sthil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4879{
4880#define FLD(f) abuf->fields.sfmt_sthil.f
4881 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4882 int UNUSED written = 0;
4883 IADDR UNUSED pc = abuf->addr;
4884 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4885
4886{
4887 DI tmp_addr;
4888 QI tmp_bytecount;
4889 DI tmp_val;
4890 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
4891 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1);
4892if (GET_H_ENDIAN ()) {
4893 tmp_val = GET_H_GR (FLD (f_dest));
4894} else {
4895 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount)));
4896}
4897 tmp_addr = ADDDI (SUBDI (tmp_addr, tmp_bytecount), 1);
4898if (GTQI (tmp_bytecount, 3)) {
4899{
4900 {
4901 UQI opval = ANDQI (tmp_val, 255);
4902 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4903 written |= (1 << 4);
4904 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4905 }
4906 tmp_val = SRLDI (tmp_val, 8);
4907 tmp_addr = ADDDI (tmp_addr, 1);
4908}
4909}
4910if (GTQI (tmp_bytecount, 2)) {
4911{
4912 {
4913 UQI opval = ANDQI (tmp_val, 255);
4914 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4915 written |= (1 << 4);
4916 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4917 }
4918 tmp_val = SRLDI (tmp_val, 8);
4919 tmp_addr = ADDDI (tmp_addr, 1);
4920}
4921}
4922if (GTQI (tmp_bytecount, 1)) {
4923{
4924 {
4925 UQI opval = ANDQI (tmp_val, 255);
4926 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4927 written |= (1 << 4);
4928 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4929 }
4930 tmp_val = SRLDI (tmp_val, 8);
4931 tmp_addr = ADDDI (tmp_addr, 1);
4932}
4933}
4934if (GTQI (tmp_bytecount, 0)) {
4935{
4936 {
4937 UQI opval = ANDQI (tmp_val, 255);
4938 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4939 written |= (1 << 4);
4940 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4941 }
4942 tmp_val = SRLDI (tmp_val, 8);
4943 tmp_addr = ADDDI (tmp_addr, 1);
4944}
4945}
4946}
4947
4948 abuf->written = written;
4949 return vpc;
4950#undef FLD
4951}
4952
4953/* sthiq: sthi.q $rm, $disp6, $rd */
4954
4955static SEM_PC
4956SEM_FN_NAME (sh64_media,sthiq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4957{
4958#define FLD(f) abuf->fields.sfmt_sthil.f
4959 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4960 int UNUSED written = 0;
4961 IADDR UNUSED pc = abuf->addr;
4962 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4963
4964{
4965 DI tmp_addr;
4966 QI tmp_bytecount;
4967 DI tmp_val;
4968 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
4969 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1);
4970if (GET_H_ENDIAN ()) {
4971 tmp_val = GET_H_GR (FLD (f_dest));
4972} else {
4973 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount)));
4974}
4975 tmp_addr = ADDDI (SUBDI (tmp_addr, tmp_bytecount), 1);
4976if (GTQI (tmp_bytecount, 7)) {
4977{
4978 {
4979 UQI opval = ANDQI (tmp_val, 255);
4980 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4981 written |= (1 << 4);
4982 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4983 }
4984 tmp_val = SRLDI (tmp_val, 8);
4985 tmp_addr = ADDDI (tmp_addr, 1);
4986}
4987}
4988if (GTQI (tmp_bytecount, 6)) {
4989{
4990 {
4991 UQI opval = ANDQI (tmp_val, 255);
4992 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
4993 written |= (1 << 4);
4994 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4995 }
4996 tmp_val = SRLDI (tmp_val, 8);
4997 tmp_addr = ADDDI (tmp_addr, 1);
4998}
4999}
5000if (GTQI (tmp_bytecount, 5)) {
5001{
5002 {
5003 UQI opval = ANDQI (tmp_val, 255);
5004 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5005 written |= (1 << 4);
5006 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5007 }
5008 tmp_val = SRLDI (tmp_val, 8);
5009 tmp_addr = ADDDI (tmp_addr, 1);
5010}
5011}
5012if (GTQI (tmp_bytecount, 4)) {
5013{
5014 {
5015 UQI opval = ANDQI (tmp_val, 255);
5016 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5017 written |= (1 << 4);
5018 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5019 }
5020 tmp_val = SRLDI (tmp_val, 8);
5021 tmp_addr = ADDDI (tmp_addr, 1);
5022}
5023}
5024if (GTQI (tmp_bytecount, 3)) {
5025{
5026 {
5027 UQI opval = ANDQI (tmp_val, 255);
5028 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5029 written |= (1 << 4);
5030 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5031 }
5032 tmp_val = SRLDI (tmp_val, 8);
5033 tmp_addr = ADDDI (tmp_addr, 1);
5034}
5035}
5036if (GTQI (tmp_bytecount, 2)) {
5037{
5038 {
5039 UQI opval = ANDQI (tmp_val, 255);
5040 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5041 written |= (1 << 4);
5042 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5043 }
5044 tmp_val = SRLDI (tmp_val, 8);
5045 tmp_addr = ADDDI (tmp_addr, 1);
5046}
5047}
5048if (GTQI (tmp_bytecount, 1)) {
5049{
5050 {
5051 UQI opval = ANDQI (tmp_val, 255);
5052 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5053 written |= (1 << 4);
5054 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5055 }
5056 tmp_val = SRLDI (tmp_val, 8);
5057 tmp_addr = ADDDI (tmp_addr, 1);
5058}
5059}
5060if (GTQI (tmp_bytecount, 0)) {
5061{
5062 {
5063 UQI opval = ANDQI (tmp_val, 255);
5064 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5065 written |= (1 << 4);
5066 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5067 }
5068 tmp_val = SRLDI (tmp_val, 8);
5069 tmp_addr = ADDDI (tmp_addr, 1);
5070}
5071}
5072}
5073
5074 abuf->written = written;
5075 return vpc;
5076#undef FLD
5077}
5078
5079/* stlol: stlo.l $rm, $disp6, $rd */
5080
5081static SEM_PC
5082SEM_FN_NAME (sh64_media,stlol) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5083{
5084#define FLD(f) abuf->fields.fmt_empty.f
5085 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5086 int UNUSED written = 0;
5087 IADDR UNUSED pc = abuf->addr;
5088 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5089
5090((void) 0); /*nop*/
5091
5092 return vpc;
5093#undef FLD
5094}
5095
5096/* stloq: stlo.q $rm, $disp6, $rd */
5097
5098static SEM_PC
5099SEM_FN_NAME (sh64_media,stloq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5100{
5101#define FLD(f) abuf->fields.fmt_empty.f
5102 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5103 int UNUSED written = 0;
5104 IADDR UNUSED pc = abuf->addr;
5105 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5106
5107((void) 0); /*nop*/
5108
5109 return vpc;
5110#undef FLD
5111}
5112
5113/* stxb: stx.b $rm, $rn, $rd */
5114
5115static SEM_PC
5116SEM_FN_NAME (sh64_media,stxb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5117{
5118#define FLD(f) abuf->fields.sfmt_add.f
5119 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5120 int UNUSED written = 0;
5121 IADDR UNUSED pc = abuf->addr;
5122 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5123
5124 {
5125 UQI opval = SUBWORDDIQI (GET_H_GR (FLD (f_dest)), 7);
5126 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5127 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5128 }
5129
5130 return vpc;
5131#undef FLD
5132}
5133
5134/* stxl: stx.l $rm, $rn, $rd */
5135
5136static SEM_PC
5137SEM_FN_NAME (sh64_media,stxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5138{
5139#define FLD(f) abuf->fields.sfmt_add.f
5140 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5141 int UNUSED written = 0;
5142 IADDR UNUSED pc = abuf->addr;
5143 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5144
5145 {
5146 SI opval = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
5147 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5148 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5149 }
5150
5151 return vpc;
5152#undef FLD
5153}
5154
5155/* stxq: stx.q $rm, $rn, $rd */
5156
5157static SEM_PC
5158SEM_FN_NAME (sh64_media,stxq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5159{
5160#define FLD(f) abuf->fields.sfmt_add.f
5161 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5162 int UNUSED written = 0;
5163 IADDR UNUSED pc = abuf->addr;
5164 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5165
5166 {
5167 DI opval = GET_H_GR (FLD (f_dest));
5168 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5169 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5170 }
5171
5172 return vpc;
5173#undef FLD
5174}
5175
5176/* stxw: stx.w $rm, $rn, $rd */
5177
5178static SEM_PC
5179SEM_FN_NAME (sh64_media,stxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5180{
5181#define FLD(f) abuf->fields.sfmt_add.f
5182 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5183 int UNUSED written = 0;
5184 IADDR UNUSED pc = abuf->addr;
5185 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5186
5187 {
5188 HI opval = SUBWORDDIHI (GET_H_GR (FLD (f_dest)), 3);
5189 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5190 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5191 }
5192
5193 return vpc;
5194#undef FLD
5195}
5196
5197/* sub: sub $rm, $rn, $rd */
5198
5199static SEM_PC
5200SEM_FN_NAME (sh64_media,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5201{
5202#define FLD(f) abuf->fields.sfmt_add.f
5203 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5204 int UNUSED written = 0;
5205 IADDR UNUSED pc = abuf->addr;
5206 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5207
5208 {
5209 DI opval = SUBDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5210 SET_H_GR (FLD (f_dest), opval);
5211 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5212 }
5213
5214 return vpc;
5215#undef FLD
5216}
5217
5218/* subl: sub.l $rm, $rn, $rd */
5219
5220static SEM_PC
5221SEM_FN_NAME (sh64_media,subl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5222{
5223#define FLD(f) abuf->fields.sfmt_add.f
5224 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5225 int UNUSED written = 0;
5226 IADDR UNUSED pc = abuf->addr;
5227 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5228
5229 {
5230 DI opval = EXTSIDI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
5231 SET_H_GR (FLD (f_dest), opval);
5232 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5233 }
5234
5235 return vpc;
5236#undef FLD
5237}
5238
5239/* swapq: swap.q $rm, $rn, $rd */
5240
5241static SEM_PC
5242SEM_FN_NAME (sh64_media,swapq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5243{
5244#define FLD(f) abuf->fields.sfmt_add.f
5245 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5246 int UNUSED written = 0;
5247 IADDR UNUSED pc = abuf->addr;
5248 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5249
5250{
5251 DI tmp_addr;
5252 DI tmp_temp;
5253 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5254 tmp_temp = GETMEMDI (current_cpu, pc, tmp_addr);
5255 {
5256 DI opval = GET_H_GR (FLD (f_dest));
5257 SETMEMDI (current_cpu, pc, tmp_addr, opval);
5258 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5259 }
5260 {
5261 DI opval = tmp_temp;
5262 SET_H_GR (FLD (f_dest), opval);
5263 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5264 }
5265}
5266
5267 return vpc;
5268#undef FLD
5269}
5270
5271/* synci: synci */
5272
5273static SEM_PC
5274SEM_FN_NAME (sh64_media,synci) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5275{
5276#define FLD(f) abuf->fields.fmt_empty.f
5277 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5278 int UNUSED written = 0;
5279 IADDR UNUSED pc = abuf->addr;
5280 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5281
5282((void) 0); /*nop*/
5283
5284 return vpc;
5285#undef FLD
5286}
5287
5288/* synco: synco */
5289
5290static SEM_PC
5291SEM_FN_NAME (sh64_media,synco) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5292{
5293#define FLD(f) abuf->fields.fmt_empty.f
5294 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5295 int UNUSED written = 0;
5296 IADDR UNUSED pc = abuf->addr;
5297 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5298
5299((void) 0); /*nop*/
5300
5301 return vpc;
5302#undef FLD
5303}
5304
5305/* trapa: trapa $rm */
5306
5307static SEM_PC
5308SEM_FN_NAME (sh64_media,trapa) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5309{
5310#define FLD(f) abuf->fields.sfmt_xori.f
5311 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5312 int UNUSED written = 0;
5313 IADDR UNUSED pc = abuf->addr;
5314 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5315
5316sh64_trapa (current_cpu, GET_H_GR (FLD (f_left)), pc);
5317
5318 return vpc;
5319#undef FLD
5320}
5321
5322/* xor: xor $rm, $rn, $rd */
5323
5324static SEM_PC
5325SEM_FN_NAME (sh64_media,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5326{
5327#define FLD(f) abuf->fields.sfmt_add.f
5328 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5329 int UNUSED written = 0;
5330 IADDR UNUSED pc = abuf->addr;
5331 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5332
5333 {
5334 DI opval = XORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5335 SET_H_GR (FLD (f_dest), opval);
5336 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5337 }
5338
5339 return vpc;
5340#undef FLD
5341}
5342
5343/* xori: xori $rm, $imm6, $rd */
5344
5345static SEM_PC
5346SEM_FN_NAME (sh64_media,xori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5347{
5348#define FLD(f) abuf->fields.sfmt_xori.f
5349 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5350 int UNUSED written = 0;
5351 IADDR UNUSED pc = abuf->addr;
5352 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5353
5354 {
5355 DI opval = XORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)));
5356 SET_H_GR (FLD (f_dest), opval);
5357 TRACE_RESULT (current_cpu, abuf, "rd", 'D', opval);
5358 }
5359
5360 return vpc;
5361#undef FLD
5362}
5363
5364/* Table of all semantic fns. */
5365
5366static const struct sem_fn_desc sem_fns[] = {
5367 { SH64_MEDIA_INSN_X_INVALID, SEM_FN_NAME (sh64_media,x_invalid) },
5368 { SH64_MEDIA_INSN_X_AFTER, SEM_FN_NAME (sh64_media,x_after) },
5369 { SH64_MEDIA_INSN_X_BEFORE, SEM_FN_NAME (sh64_media,x_before) },
5370 { SH64_MEDIA_INSN_X_CTI_CHAIN, SEM_FN_NAME (sh64_media,x_cti_chain) },
5371 { SH64_MEDIA_INSN_X_CHAIN, SEM_FN_NAME (sh64_media,x_chain) },
5372 { SH64_MEDIA_INSN_X_BEGIN, SEM_FN_NAME (sh64_media,x_begin) },
5373 { SH64_MEDIA_INSN_ADD, SEM_FN_NAME (sh64_media,add) },
5374 { SH64_MEDIA_INSN_ADDL, SEM_FN_NAME (sh64_media,addl) },
5375 { SH64_MEDIA_INSN_ADDI, SEM_FN_NAME (sh64_media,addi) },
5376 { SH64_MEDIA_INSN_ADDIL, SEM_FN_NAME (sh64_media,addil) },
5377 { SH64_MEDIA_INSN_ADDZL, SEM_FN_NAME (sh64_media,addzl) },
5378 { SH64_MEDIA_INSN_ALLOCO, SEM_FN_NAME (sh64_media,alloco) },
5379 { SH64_MEDIA_INSN_AND, SEM_FN_NAME (sh64_media,and) },
5380 { SH64_MEDIA_INSN_ANDC, SEM_FN_NAME (sh64_media,andc) },
5381 { SH64_MEDIA_INSN_ANDI, SEM_FN_NAME (sh64_media,andi) },
5382 { SH64_MEDIA_INSN_BEQ, SEM_FN_NAME (sh64_media,beq) },
5383 { SH64_MEDIA_INSN_BEQI, SEM_FN_NAME (sh64_media,beqi) },
5384 { SH64_MEDIA_INSN_BGE, SEM_FN_NAME (sh64_media,bge) },
5385 { SH64_MEDIA_INSN_BGEU, SEM_FN_NAME (sh64_media,bgeu) },
5386 { SH64_MEDIA_INSN_BGT, SEM_FN_NAME (sh64_media,bgt) },
5387 { SH64_MEDIA_INSN_BGTU, SEM_FN_NAME (sh64_media,bgtu) },
5388 { SH64_MEDIA_INSN_BLINK, SEM_FN_NAME (sh64_media,blink) },
5389 { SH64_MEDIA_INSN_BNE, SEM_FN_NAME (sh64_media,bne) },
5390 { SH64_MEDIA_INSN_BNEI, SEM_FN_NAME (sh64_media,bnei) },
5391 { SH64_MEDIA_INSN_BRK, SEM_FN_NAME (sh64_media,brk) },
5392 { SH64_MEDIA_INSN_BYTEREV, SEM_FN_NAME (sh64_media,byterev) },
5393 { SH64_MEDIA_INSN_CMPEQ, SEM_FN_NAME (sh64_media,cmpeq) },
5394 { SH64_MEDIA_INSN_CMPGT, SEM_FN_NAME (sh64_media,cmpgt) },
5395 { SH64_MEDIA_INSN_CMPGTU, SEM_FN_NAME (sh64_media,cmpgtu) },
5396 { SH64_MEDIA_INSN_CMVEQ, SEM_FN_NAME (sh64_media,cmveq) },
5397 { SH64_MEDIA_INSN_CMVNE, SEM_FN_NAME (sh64_media,cmvne) },
5398 { SH64_MEDIA_INSN_FABSD, SEM_FN_NAME (sh64_media,fabsd) },
5399 { SH64_MEDIA_INSN_FABSS, SEM_FN_NAME (sh64_media,fabss) },
5400 { SH64_MEDIA_INSN_FADDD, SEM_FN_NAME (sh64_media,faddd) },
5401 { SH64_MEDIA_INSN_FADDS, SEM_FN_NAME (sh64_media,fadds) },
5402 { SH64_MEDIA_INSN_FCMPEQD, SEM_FN_NAME (sh64_media,fcmpeqd) },
5403 { SH64_MEDIA_INSN_FCMPEQS, SEM_FN_NAME (sh64_media,fcmpeqs) },
5404 { SH64_MEDIA_INSN_FCMPGED, SEM_FN_NAME (sh64_media,fcmpged) },
5405 { SH64_MEDIA_INSN_FCMPGES, SEM_FN_NAME (sh64_media,fcmpges) },
5406 { SH64_MEDIA_INSN_FCMPGTD, SEM_FN_NAME (sh64_media,fcmpgtd) },
5407 { SH64_MEDIA_INSN_FCMPGTS, SEM_FN_NAME (sh64_media,fcmpgts) },
5408 { SH64_MEDIA_INSN_FCMPUND, SEM_FN_NAME (sh64_media,fcmpund) },
5409 { SH64_MEDIA_INSN_FCMPUNS, SEM_FN_NAME (sh64_media,fcmpuns) },
5410 { SH64_MEDIA_INSN_FCNVDS, SEM_FN_NAME (sh64_media,fcnvds) },
5411 { SH64_MEDIA_INSN_FCNVSD, SEM_FN_NAME (sh64_media,fcnvsd) },
5412 { SH64_MEDIA_INSN_FDIVD, SEM_FN_NAME (sh64_media,fdivd) },
5413 { SH64_MEDIA_INSN_FDIVS, SEM_FN_NAME (sh64_media,fdivs) },
5414 { SH64_MEDIA_INSN_FGETSCR, SEM_FN_NAME (sh64_media,fgetscr) },
5415 { SH64_MEDIA_INSN_FIPRS, SEM_FN_NAME (sh64_media,fiprs) },
5416 { SH64_MEDIA_INSN_FLDD, SEM_FN_NAME (sh64_media,fldd) },
5417 { SH64_MEDIA_INSN_FLDP, SEM_FN_NAME (sh64_media,fldp) },
5418 { SH64_MEDIA_INSN_FLDS, SEM_FN_NAME (sh64_media,flds) },
5419 { SH64_MEDIA_INSN_FLDXD, SEM_FN_NAME (sh64_media,fldxd) },
5420 { SH64_MEDIA_INSN_FLDXP, SEM_FN_NAME (sh64_media,fldxp) },
5421 { SH64_MEDIA_INSN_FLDXS, SEM_FN_NAME (sh64_media,fldxs) },
5422 { SH64_MEDIA_INSN_FLOATLD, SEM_FN_NAME (sh64_media,floatld) },
5423 { SH64_MEDIA_INSN_FLOATLS, SEM_FN_NAME (sh64_media,floatls) },
5424 { SH64_MEDIA_INSN_FLOATQD, SEM_FN_NAME (sh64_media,floatqd) },
5425 { SH64_MEDIA_INSN_FLOATQS, SEM_FN_NAME (sh64_media,floatqs) },
5426 { SH64_MEDIA_INSN_FMACS, SEM_FN_NAME (sh64_media,fmacs) },
5427 { SH64_MEDIA_INSN_FMOVD, SEM_FN_NAME (sh64_media,fmovd) },
5428 { SH64_MEDIA_INSN_FMOVDQ, SEM_FN_NAME (sh64_media,fmovdq) },
5429 { SH64_MEDIA_INSN_FMOVLS, SEM_FN_NAME (sh64_media,fmovls) },
5430 { SH64_MEDIA_INSN_FMOVQD, SEM_FN_NAME (sh64_media,fmovqd) },
5431 { SH64_MEDIA_INSN_FMOVS, SEM_FN_NAME (sh64_media,fmovs) },
5432 { SH64_MEDIA_INSN_FMOVSL, SEM_FN_NAME (sh64_media,fmovsl) },
5433 { SH64_MEDIA_INSN_FMULD, SEM_FN_NAME (sh64_media,fmuld) },
5434 { SH64_MEDIA_INSN_FMULS, SEM_FN_NAME (sh64_media,fmuls) },
5435 { SH64_MEDIA_INSN_FNEGD, SEM_FN_NAME (sh64_media,fnegd) },
5436 { SH64_MEDIA_INSN_FNEGS, SEM_FN_NAME (sh64_media,fnegs) },
5437 { SH64_MEDIA_INSN_FPUTSCR, SEM_FN_NAME (sh64_media,fputscr) },
5438 { SH64_MEDIA_INSN_FSQRTD, SEM_FN_NAME (sh64_media,fsqrtd) },
5439 { SH64_MEDIA_INSN_FSQRTS, SEM_FN_NAME (sh64_media,fsqrts) },
5440 { SH64_MEDIA_INSN_FSTD, SEM_FN_NAME (sh64_media,fstd) },
5441 { SH64_MEDIA_INSN_FSTP, SEM_FN_NAME (sh64_media,fstp) },
5442 { SH64_MEDIA_INSN_FSTS, SEM_FN_NAME (sh64_media,fsts) },
5443 { SH64_MEDIA_INSN_FSTXD, SEM_FN_NAME (sh64_media,fstxd) },
5444 { SH64_MEDIA_INSN_FSTXP, SEM_FN_NAME (sh64_media,fstxp) },
5445 { SH64_MEDIA_INSN_FSTXS, SEM_FN_NAME (sh64_media,fstxs) },
5446 { SH64_MEDIA_INSN_FSUBD, SEM_FN_NAME (sh64_media,fsubd) },
5447 { SH64_MEDIA_INSN_FSUBS, SEM_FN_NAME (sh64_media,fsubs) },
5448 { SH64_MEDIA_INSN_FTRCDL, SEM_FN_NAME (sh64_media,ftrcdl) },
5449 { SH64_MEDIA_INSN_FTRCSL, SEM_FN_NAME (sh64_media,ftrcsl) },
5450 { SH64_MEDIA_INSN_FTRCDQ, SEM_FN_NAME (sh64_media,ftrcdq) },
5451 { SH64_MEDIA_INSN_FTRCSQ, SEM_FN_NAME (sh64_media,ftrcsq) },
5452 { SH64_MEDIA_INSN_FTRVS, SEM_FN_NAME (sh64_media,ftrvs) },
5453 { SH64_MEDIA_INSN_GETCFG, SEM_FN_NAME (sh64_media,getcfg) },
5454 { SH64_MEDIA_INSN_GETCON, SEM_FN_NAME (sh64_media,getcon) },
5455 { SH64_MEDIA_INSN_GETTR, SEM_FN_NAME (sh64_media,gettr) },
5456 { SH64_MEDIA_INSN_ICBI, SEM_FN_NAME (sh64_media,icbi) },
5457 { SH64_MEDIA_INSN_LDB, SEM_FN_NAME (sh64_media,ldb) },
5458 { SH64_MEDIA_INSN_LDL, SEM_FN_NAME (sh64_media,ldl) },
5459 { SH64_MEDIA_INSN_LDQ, SEM_FN_NAME (sh64_media,ldq) },
5460 { SH64_MEDIA_INSN_LDUB, SEM_FN_NAME (sh64_media,ldub) },
5461 { SH64_MEDIA_INSN_LDUW, SEM_FN_NAME (sh64_media,lduw) },
5462 { SH64_MEDIA_INSN_LDW, SEM_FN_NAME (sh64_media,ldw) },
5463 { SH64_MEDIA_INSN_LDHIL, SEM_FN_NAME (sh64_media,ldhil) },
5464 { SH64_MEDIA_INSN_LDHIQ, SEM_FN_NAME (sh64_media,ldhiq) },
5465 { SH64_MEDIA_INSN_LDLOL, SEM_FN_NAME (sh64_media,ldlol) },
5466 { SH64_MEDIA_INSN_LDLOQ, SEM_FN_NAME (sh64_media,ldloq) },
5467 { SH64_MEDIA_INSN_LDXB, SEM_FN_NAME (sh64_media,ldxb) },
5468 { SH64_MEDIA_INSN_LDXL, SEM_FN_NAME (sh64_media,ldxl) },
5469 { SH64_MEDIA_INSN_LDXQ, SEM_FN_NAME (sh64_media,ldxq) },
5470 { SH64_MEDIA_INSN_LDXUB, SEM_FN_NAME (sh64_media,ldxub) },
5471 { SH64_MEDIA_INSN_LDXUW, SEM_FN_NAME (sh64_media,ldxuw) },
5472 { SH64_MEDIA_INSN_LDXW, SEM_FN_NAME (sh64_media,ldxw) },
5473 { SH64_MEDIA_INSN_MABSL, SEM_FN_NAME (sh64_media,mabsl) },
5474 { SH64_MEDIA_INSN_MABSW, SEM_FN_NAME (sh64_media,mabsw) },
5475 { SH64_MEDIA_INSN_MADDL, SEM_FN_NAME (sh64_media,maddl) },
5476 { SH64_MEDIA_INSN_MADDW, SEM_FN_NAME (sh64_media,maddw) },
5477 { SH64_MEDIA_INSN_MADDSL, SEM_FN_NAME (sh64_media,maddsl) },
5478 { SH64_MEDIA_INSN_MADDSUB, SEM_FN_NAME (sh64_media,maddsub) },
5479 { SH64_MEDIA_INSN_MADDSW, SEM_FN_NAME (sh64_media,maddsw) },
5480 { SH64_MEDIA_INSN_MCMPEQB, SEM_FN_NAME (sh64_media,mcmpeqb) },
5481 { SH64_MEDIA_INSN_MCMPEQL, SEM_FN_NAME (sh64_media,mcmpeql) },
5482 { SH64_MEDIA_INSN_MCMPEQW, SEM_FN_NAME (sh64_media,mcmpeqw) },
5483 { SH64_MEDIA_INSN_MCMPGTL, SEM_FN_NAME (sh64_media,mcmpgtl) },
5484 { SH64_MEDIA_INSN_MCMPGTUB, SEM_FN_NAME (sh64_media,mcmpgtub) },
5485 { SH64_MEDIA_INSN_MCMPGTW, SEM_FN_NAME (sh64_media,mcmpgtw) },
5486 { SH64_MEDIA_INSN_MCMV, SEM_FN_NAME (sh64_media,mcmv) },
5487 { SH64_MEDIA_INSN_MCNVSLW, SEM_FN_NAME (sh64_media,mcnvslw) },
5488 { SH64_MEDIA_INSN_MCNVSWB, SEM_FN_NAME (sh64_media,mcnvswb) },
5489 { SH64_MEDIA_INSN_MCNVSWUB, SEM_FN_NAME (sh64_media,mcnvswub) },
5490 { SH64_MEDIA_INSN_MEXTR1, SEM_FN_NAME (sh64_media,mextr1) },
5491 { SH64_MEDIA_INSN_MEXTR2, SEM_FN_NAME (sh64_media,mextr2) },
5492 { SH64_MEDIA_INSN_MEXTR3, SEM_FN_NAME (sh64_media,mextr3) },
5493 { SH64_MEDIA_INSN_MEXTR4, SEM_FN_NAME (sh64_media,mextr4) },
5494 { SH64_MEDIA_INSN_MEXTR5, SEM_FN_NAME (sh64_media,mextr5) },
5495 { SH64_MEDIA_INSN_MEXTR6, SEM_FN_NAME (sh64_media,mextr6) },
5496 { SH64_MEDIA_INSN_MEXTR7, SEM_FN_NAME (sh64_media,mextr7) },
5497 { SH64_MEDIA_INSN_MMACFXWL, SEM_FN_NAME (sh64_media,mmacfxwl) },
5498 { SH64_MEDIA_INSN_MMACNFX_WL, SEM_FN_NAME (sh64_media,mmacnfx_wl) },
5499 { SH64_MEDIA_INSN_MMULL, SEM_FN_NAME (sh64_media,mmull) },
5500 { SH64_MEDIA_INSN_MMULW, SEM_FN_NAME (sh64_media,mmulw) },
5501 { SH64_MEDIA_INSN_MMULFXL, SEM_FN_NAME (sh64_media,mmulfxl) },
5502 { SH64_MEDIA_INSN_MMULFXW, SEM_FN_NAME (sh64_media,mmulfxw) },
5503 { SH64_MEDIA_INSN_MMULFXRPW, SEM_FN_NAME (sh64_media,mmulfxrpw) },
5504 { SH64_MEDIA_INSN_MMULHIWL, SEM_FN_NAME (sh64_media,mmulhiwl) },
5505 { SH64_MEDIA_INSN_MMULLOWL, SEM_FN_NAME (sh64_media,mmullowl) },
5506 { SH64_MEDIA_INSN_MMULSUMWQ, SEM_FN_NAME (sh64_media,mmulsumwq) },
5507 { SH64_MEDIA_INSN_MOVI, SEM_FN_NAME (sh64_media,movi) },
5508 { SH64_MEDIA_INSN_MPERMW, SEM_FN_NAME (sh64_media,mpermw) },
5509 { SH64_MEDIA_INSN_MSADUBQ, SEM_FN_NAME (sh64_media,msadubq) },
5510 { SH64_MEDIA_INSN_MSHALDSL, SEM_FN_NAME (sh64_media,mshaldsl) },
5511 { SH64_MEDIA_INSN_MSHALDSW, SEM_FN_NAME (sh64_media,mshaldsw) },
5512 { SH64_MEDIA_INSN_MSHARDL, SEM_FN_NAME (sh64_media,mshardl) },
5513 { SH64_MEDIA_INSN_MSHARDW, SEM_FN_NAME (sh64_media,mshardw) },
5514 { SH64_MEDIA_INSN_MSHARDSQ, SEM_FN_NAME (sh64_media,mshardsq) },
5515 { SH64_MEDIA_INSN_MSHFHIB, SEM_FN_NAME (sh64_media,mshfhib) },
5516 { SH64_MEDIA_INSN_MSHFHIL, SEM_FN_NAME (sh64_media,mshfhil) },
5517 { SH64_MEDIA_INSN_MSHFHIW, SEM_FN_NAME (sh64_media,mshfhiw) },
5518 { SH64_MEDIA_INSN_MSHFLOB, SEM_FN_NAME (sh64_media,mshflob) },
5519 { SH64_MEDIA_INSN_MSHFLOL, SEM_FN_NAME (sh64_media,mshflol) },
5520 { SH64_MEDIA_INSN_MSHFLOW, SEM_FN_NAME (sh64_media,mshflow) },
5521 { SH64_MEDIA_INSN_MSHLLDL, SEM_FN_NAME (sh64_media,mshlldl) },
5522 { SH64_MEDIA_INSN_MSHLLDW, SEM_FN_NAME (sh64_media,mshlldw) },
5523 { SH64_MEDIA_INSN_MSHLRDL, SEM_FN_NAME (sh64_media,mshlrdl) },
5524 { SH64_MEDIA_INSN_MSHLRDW, SEM_FN_NAME (sh64_media,mshlrdw) },
5525 { SH64_MEDIA_INSN_MSUBL, SEM_FN_NAME (sh64_media,msubl) },
5526 { SH64_MEDIA_INSN_MSUBW, SEM_FN_NAME (sh64_media,msubw) },
5527 { SH64_MEDIA_INSN_MSUBSL, SEM_FN_NAME (sh64_media,msubsl) },
5528 { SH64_MEDIA_INSN_MSUBSUB, SEM_FN_NAME (sh64_media,msubsub) },
5529 { SH64_MEDIA_INSN_MSUBSW, SEM_FN_NAME (sh64_media,msubsw) },
5530 { SH64_MEDIA_INSN_MULSL, SEM_FN_NAME (sh64_media,mulsl) },
5531 { SH64_MEDIA_INSN_MULUL, SEM_FN_NAME (sh64_media,mulul) },
5532 { SH64_MEDIA_INSN_NOP, SEM_FN_NAME (sh64_media,nop) },
5533 { SH64_MEDIA_INSN_NSB, SEM_FN_NAME (sh64_media,nsb) },
5534 { SH64_MEDIA_INSN_OCBI, SEM_FN_NAME (sh64_media,ocbi) },
5535 { SH64_MEDIA_INSN_OCBP, SEM_FN_NAME (sh64_media,ocbp) },
5536 { SH64_MEDIA_INSN_OCBWB, SEM_FN_NAME (sh64_media,ocbwb) },
5537 { SH64_MEDIA_INSN_OR, SEM_FN_NAME (sh64_media,or) },
5538 { SH64_MEDIA_INSN_ORI, SEM_FN_NAME (sh64_media,ori) },
5539 { SH64_MEDIA_INSN_PREFI, SEM_FN_NAME (sh64_media,prefi) },
5540 { SH64_MEDIA_INSN_PTA, SEM_FN_NAME (sh64_media,pta) },
5541 { SH64_MEDIA_INSN_PTABS, SEM_FN_NAME (sh64_media,ptabs) },
5542 { SH64_MEDIA_INSN_PTB, SEM_FN_NAME (sh64_media,ptb) },
5543 { SH64_MEDIA_INSN_PTREL, SEM_FN_NAME (sh64_media,ptrel) },
5544 { SH64_MEDIA_INSN_PUTCFG, SEM_FN_NAME (sh64_media,putcfg) },
5545 { SH64_MEDIA_INSN_PUTCON, SEM_FN_NAME (sh64_media,putcon) },
5546 { SH64_MEDIA_INSN_RTE, SEM_FN_NAME (sh64_media,rte) },
5547 { SH64_MEDIA_INSN_SHARD, SEM_FN_NAME (sh64_media,shard) },
5548 { SH64_MEDIA_INSN_SHARDL, SEM_FN_NAME (sh64_media,shardl) },
5549 { SH64_MEDIA_INSN_SHARI, SEM_FN_NAME (sh64_media,shari) },
5550 { SH64_MEDIA_INSN_SHARIL, SEM_FN_NAME (sh64_media,sharil) },
5551 { SH64_MEDIA_INSN_SHLLD, SEM_FN_NAME (sh64_media,shlld) },
5552 { SH64_MEDIA_INSN_SHLLDL, SEM_FN_NAME (sh64_media,shlldl) },
5553 { SH64_MEDIA_INSN_SHLLI, SEM_FN_NAME (sh64_media,shlli) },
5554 { SH64_MEDIA_INSN_SHLLIL, SEM_FN_NAME (sh64_media,shllil) },
5555 { SH64_MEDIA_INSN_SHLRD, SEM_FN_NAME (sh64_media,shlrd) },
5556 { SH64_MEDIA_INSN_SHLRDL, SEM_FN_NAME (sh64_media,shlrdl) },
5557 { SH64_MEDIA_INSN_SHLRI, SEM_FN_NAME (sh64_media,shlri) },
5558 { SH64_MEDIA_INSN_SHLRIL, SEM_FN_NAME (sh64_media,shlril) },
5559 { SH64_MEDIA_INSN_SHORI, SEM_FN_NAME (sh64_media,shori) },
5560 { SH64_MEDIA_INSN_SLEEP, SEM_FN_NAME (sh64_media,sleep) },
5561 { SH64_MEDIA_INSN_STB, SEM_FN_NAME (sh64_media,stb) },
5562 { SH64_MEDIA_INSN_STL, SEM_FN_NAME (sh64_media,stl) },
5563 { SH64_MEDIA_INSN_STQ, SEM_FN_NAME (sh64_media,stq) },
5564 { SH64_MEDIA_INSN_STW, SEM_FN_NAME (sh64_media,stw) },
5565 { SH64_MEDIA_INSN_STHIL, SEM_FN_NAME (sh64_media,sthil) },
5566 { SH64_MEDIA_INSN_STHIQ, SEM_FN_NAME (sh64_media,sthiq) },
5567 { SH64_MEDIA_INSN_STLOL, SEM_FN_NAME (sh64_media,stlol) },
5568 { SH64_MEDIA_INSN_STLOQ, SEM_FN_NAME (sh64_media,stloq) },
5569 { SH64_MEDIA_INSN_STXB, SEM_FN_NAME (sh64_media,stxb) },
5570 { SH64_MEDIA_INSN_STXL, SEM_FN_NAME (sh64_media,stxl) },
5571 { SH64_MEDIA_INSN_STXQ, SEM_FN_NAME (sh64_media,stxq) },
5572 { SH64_MEDIA_INSN_STXW, SEM_FN_NAME (sh64_media,stxw) },
5573 { SH64_MEDIA_INSN_SUB, SEM_FN_NAME (sh64_media,sub) },
5574 { SH64_MEDIA_INSN_SUBL, SEM_FN_NAME (sh64_media,subl) },
5575 { SH64_MEDIA_INSN_SWAPQ, SEM_FN_NAME (sh64_media,swapq) },
5576 { SH64_MEDIA_INSN_SYNCI, SEM_FN_NAME (sh64_media,synci) },
5577 { SH64_MEDIA_INSN_SYNCO, SEM_FN_NAME (sh64_media,synco) },
5578 { SH64_MEDIA_INSN_TRAPA, SEM_FN_NAME (sh64_media,trapa) },
5579 { SH64_MEDIA_INSN_XOR, SEM_FN_NAME (sh64_media,xor) },
5580 { SH64_MEDIA_INSN_XORI, SEM_FN_NAME (sh64_media,xori) },
5581 { 0, 0 }
5582};
5583
5584/* Add the semantic fns to IDESC_TABLE. */
5585
5586void
5587SEM_FN_NAME (sh64_media,init_idesc_table) (SIM_CPU *current_cpu)
5588{
5589 IDESC *idesc_table = CPU_IDESC (current_cpu);
5590 const struct sem_fn_desc *sf;
5591 int mach_num = MACH_NUM (CPU_MACH (current_cpu));
5592
5593 for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
5594 {
5595 const CGEN_INSN *insn = idesc_table[sf->index].idata;
5596 int valid_p = (CGEN_INSN_VIRTUAL_P (insn)
5597 || CGEN_INSN_MACH_HAS_P (insn, mach_num));
5598#if FAST_P
5599 if (valid_p)
5600 idesc_table[sf->index].sem_fast = sf->fn;
5601 else
5602 idesc_table[sf->index].sem_fast = SEM_FN_NAME (sh64_media,x_invalid);
5603#else
5604 if (valid_p)
5605 idesc_table[sf->index].sem_full = sf->fn;
5606 else
5607 idesc_table[sf->index].sem_full = SEM_FN_NAME (sh64_media,x_invalid);
5608#endif
5609 }
5610}
5611
This page took 0.276598 seconds and 4 git commands to generate.