* ld-discard/static.d: Accept both original sym and section sym.
[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
1bbd6057 5Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
cbb38b47 6
1bbd6057 7This file is part of the GNU simulators.
cbb38b47
BE
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);
1bbd6057 218 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 239 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 260 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 281 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 302 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 340 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 361 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 382 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 567 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 703 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 725 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 746 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 767 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 790 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 815 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 838 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 859 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 880 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 901 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 922 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 943 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 964 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 985 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1006 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1027 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1048 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1069 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 1090 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1111 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1132 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1153 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1201 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1223 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1247 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1252 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1274 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1295 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1319 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1324 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1346 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1367 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1388 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1409 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1430 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1451 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1472 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1493 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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;
1bbd6057 1514 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1535 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1556 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1577 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 1598 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1619 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1640 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1661 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1699 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1720 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1885 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1906 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1927 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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;
1bbd6057 1948 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1969 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 1990 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval);
cbb38b47
BE
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);
1bbd6057 2045 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2066 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2104 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2125 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2146 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2167 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2188 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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);
1bbd6057 2209 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
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{
1bbd6057 2221#define FLD(f) abuf->fields.sfmt_ldhil.f
cbb38b47
BE
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
1bbd6057
JR
2227{
2228 DI tmp_addr;
2229 QI tmp_bytecount;
2230 SI tmp_val;
2231 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
2232 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1);
2233 tmp_val = 0;
2234if (ANDQI (tmp_bytecount, 4)) {
2235 {
2236 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -4)));
2237 SET_H_GR (FLD (f_dest), opval);
2238 written |= (1 << 6);
2239 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2240 }
2241} else {
2242if (GET_H_ENDIAN ()) {
2243{
2244if (ANDQI (tmp_bytecount, 2)) {
2245 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4))));
2246}
2247if (ANDQI (tmp_bytecount, 1)) {
2248 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2249}
2250 {
2251 DI opval = EXTSIDI (tmp_val);
2252 SET_H_GR (FLD (f_dest), opval);
2253 written |= (1 << 6);
2254 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2255 }
2256}
2257} else {
2258{
2259if (ANDQI (tmp_bytecount, 1)) {
2260 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2261}
2262if (ANDQI (tmp_bytecount, 2)) {
2263 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4))));
2264}
2265 {
2266 DI opval = EXTSIDI (SLLSI (tmp_val, SUBSI (32, MULSI (8, tmp_bytecount))));
2267 SET_H_GR (FLD (f_dest), opval);
2268 written |= (1 << 6);
2269 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2270 }
2271}
2272}
2273}
2274}
cbb38b47 2275
1bbd6057 2276 abuf->written = written;
cbb38b47
BE
2277 return vpc;
2278#undef FLD
2279}
2280
2281/* ldhiq: ldhi.q $rm, $disp6, $rd */
2282
2283static SEM_PC
2284SEM_FN_NAME (sh64_media,ldhiq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2285{
1bbd6057 2286#define FLD(f) abuf->fields.sfmt_ldhil.f
cbb38b47
BE
2287 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2288 int UNUSED written = 0;
2289 IADDR UNUSED pc = abuf->addr;
2290 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2291
1bbd6057
JR
2292{
2293 DI tmp_addr;
2294 QI tmp_bytecount;
2295 DI tmp_val;
2296 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
2297 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1);
2298 tmp_val = 0;
2299if (ANDQI (tmp_bytecount, 8)) {
2300 {
2301 DI opval = GETMEMDI (current_cpu, pc, ANDDI (tmp_addr, -8));
2302 SET_H_GR (FLD (f_dest), opval);
2303 written |= (1 << 7);
2304 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2305 }
2306} else {
2307if (GET_H_ENDIAN ()) {
2308{
2309if (ANDQI (tmp_bytecount, 4)) {
2310 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8))));
2311}
2312if (ANDQI (tmp_bytecount, 2)) {
2313 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4))));
2314}
2315if (ANDQI (tmp_bytecount, 1)) {
2316 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2317}
2318 {
2319 DI opval = tmp_val;
2320 SET_H_GR (FLD (f_dest), opval);
2321 written |= (1 << 7);
2322 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2323 }
2324}
2325} else {
2326{
2327if (ANDQI (tmp_bytecount, 1)) {
2328 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2329}
2330if (ANDQI (tmp_bytecount, 2)) {
2331 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4))));
2332}
2333if (ANDQI (tmp_bytecount, 4)) {
2334 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8))));
2335}
2336 {
2337 DI opval = SLLDI (tmp_val, SUBSI (64, MULSI (8, tmp_bytecount)));
2338 SET_H_GR (FLD (f_dest), opval);
2339 written |= (1 << 7);
2340 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2341 }
2342}
2343}
2344}
2345}
cbb38b47 2346
1bbd6057 2347 abuf->written = written;
cbb38b47
BE
2348 return vpc;
2349#undef FLD
2350}
2351
2352/* ldlol: ldlo.l $rm, $disp6, $rd */
2353
2354static SEM_PC
2355SEM_FN_NAME (sh64_media,ldlol) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2356{
1bbd6057 2357#define FLD(f) abuf->fields.sfmt_ldhil.f
cbb38b47
BE
2358 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2359 int UNUSED written = 0;
2360 IADDR UNUSED pc = abuf->addr;
2361 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2362
1bbd6057
JR
2363{
2364 DI tmp_addr;
2365 QI tmp_bytecount;
2366 SI tmp_val;
2367 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
2368 tmp_bytecount = SUBSI (4, ANDDI (tmp_addr, 3));
2369 tmp_val = 0;
2370if (ANDQI (tmp_bytecount, 4)) {
2371 {
2372 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, tmp_addr));
2373 SET_H_GR (FLD (f_dest), opval);
2374 written |= (1 << 6);
2375 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2376 }
2377} else {
2378if (GET_H_ENDIAN ()) {
2379{
2380if (ANDQI (tmp_bytecount, 1)) {
2381 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2382}
2383if (ANDQI (tmp_bytecount, 2)) {
2384 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2))));
2385}
2386 {
2387 DI opval = EXTSIDI (SLLSI (tmp_val, SUBSI (32, MULSI (8, tmp_bytecount))));
2388 SET_H_GR (FLD (f_dest), opval);
2389 written |= (1 << 6);
2390 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2391 }
2392}
2393} else {
2394{
2395if (ANDQI (tmp_bytecount, 2)) {
2396 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2))));
2397}
2398if (ANDQI (tmp_bytecount, 1)) {
2399 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2400}
2401 {
2402 DI opval = EXTSIDI (tmp_val);
2403 SET_H_GR (FLD (f_dest), opval);
2404 written |= (1 << 6);
2405 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2406 }
2407}
2408}
2409}
2410}
cbb38b47 2411
1bbd6057 2412 abuf->written = written;
cbb38b47
BE
2413 return vpc;
2414#undef FLD
2415}
2416
2417/* ldloq: ldlo.q $rm, $disp6, $rd */
2418
2419static SEM_PC
2420SEM_FN_NAME (sh64_media,ldloq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2421{
1bbd6057 2422#define FLD(f) abuf->fields.sfmt_ldhil.f
cbb38b47
BE
2423 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2424 int UNUSED written = 0;
2425 IADDR UNUSED pc = abuf->addr;
2426 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2427
1bbd6057
JR
2428{
2429 DI tmp_addr;
2430 QI tmp_bytecount;
2431 DI tmp_val;
2432 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
2433 tmp_bytecount = SUBSI (8, ANDDI (tmp_addr, 7));
2434 tmp_val = 0;
2435if (ANDQI (tmp_bytecount, 8)) {
2436 {
2437 DI opval = GETMEMDI (current_cpu, pc, tmp_addr);
2438 SET_H_GR (FLD (f_dest), opval);
2439 written |= (1 << 7);
2440 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2441 }
2442} else {
2443if (GET_H_ENDIAN ()) {
2444{
2445if (ANDQI (tmp_bytecount, 1)) {
2446 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2447}
2448if (ANDQI (tmp_bytecount, 2)) {
2449 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2))));
2450}
2451if (ANDQI (tmp_bytecount, 4)) {
2452 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4))));
2453}
2454 {
2455 DI opval = SLLDI (tmp_val, SUBSI (64, MULSI (8, tmp_bytecount)));
2456 SET_H_GR (FLD (f_dest), opval);
2457 written |= (1 << 7);
2458 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2459 }
2460}
2461} else {
2462{
2463if (ANDQI (tmp_bytecount, 4)) {
2464 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4))));
2465}
2466if (ANDQI (tmp_bytecount, 2)) {
2467 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2))));
2468}
2469if (ANDQI (tmp_bytecount, 1)) {
2470 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr)));
2471}
2472 {
2473 DI opval = tmp_val;
2474 SET_H_GR (FLD (f_dest), opval);
2475 written |= (1 << 7);
2476 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
2477 }
2478}
2479}
2480}
2481}
cbb38b47 2482
1bbd6057 2483 abuf->written = written;
cbb38b47
BE
2484 return vpc;
2485#undef FLD
2486}
2487
2488/* ldxb: ldx.b $rm, $rn, $rd */
2489
2490static SEM_PC
2491SEM_FN_NAME (sh64_media,ldxb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2492{
2493#define FLD(f) abuf->fields.sfmt_add.f
2494 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2495 int UNUSED written = 0;
2496 IADDR UNUSED pc = abuf->addr;
2497 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2498
2499 {
2500 DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2501 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2502 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2503 }
2504
2505 return vpc;
2506#undef FLD
2507}
2508
2509/* ldxl: ldx.l $rm, $rn, $rd */
2510
2511static SEM_PC
2512SEM_FN_NAME (sh64_media,ldxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2513{
2514#define FLD(f) abuf->fields.sfmt_add.f
2515 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2516 int UNUSED written = 0;
2517 IADDR UNUSED pc = abuf->addr;
2518 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2519
2520 {
2521 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2522 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2523 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2524 }
2525
2526 return vpc;
2527#undef FLD
2528}
2529
2530/* ldxq: ldx.q $rm, $rn, $rd */
2531
2532static SEM_PC
2533SEM_FN_NAME (sh64_media,ldxq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2534{
2535#define FLD(f) abuf->fields.sfmt_add.f
2536 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2537 int UNUSED written = 0;
2538 IADDR UNUSED pc = abuf->addr;
2539 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2540
2541 {
2542 DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))));
2543 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2544 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2545 }
2546
2547 return vpc;
2548#undef FLD
2549}
2550
2551/* ldxub: ldx.ub $rm, $rn, $rd */
2552
2553static SEM_PC
2554SEM_FN_NAME (sh64_media,ldxub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2555{
2556#define FLD(f) abuf->fields.sfmt_add.f
2557 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2558 int UNUSED written = 0;
2559 IADDR UNUSED pc = abuf->addr;
2560 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2561
2562 {
2563 DI opval = ZEXTQIDI (GETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2564 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2565 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2566 }
2567
2568 return vpc;
2569#undef FLD
2570}
2571
2572/* ldxuw: ldx.uw $rm, $rn, $rd */
2573
2574static SEM_PC
2575SEM_FN_NAME (sh64_media,ldxuw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2576{
2577#define FLD(f) abuf->fields.sfmt_add.f
2578 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2579 int UNUSED written = 0;
2580 IADDR UNUSED pc = abuf->addr;
2581 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2582
2583 {
2584 DI opval = ZEXTHIDI (GETMEMUHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2585 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2586 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2587 }
2588
2589 return vpc;
2590#undef FLD
2591}
2592
2593/* ldxw: ldx.w $rm, $rn, $rd */
2594
2595static SEM_PC
2596SEM_FN_NAME (sh64_media,ldxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2597{
2598#define FLD(f) abuf->fields.sfmt_add.f
2599 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2600 int UNUSED written = 0;
2601 IADDR UNUSED pc = abuf->addr;
2602 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2603
2604 {
2605 DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))));
2606 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2607 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2608 }
2609
2610 return vpc;
2611#undef FLD
2612}
2613
2614/* mabsl: mabs.l $rm, $rd */
2615
2616static SEM_PC
2617SEM_FN_NAME (sh64_media,mabsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2618{
2619#define FLD(f) abuf->fields.sfmt_xori.f
2620 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2621 int UNUSED written = 0;
2622 IADDR UNUSED pc = abuf->addr;
2623 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2624
2625{
2626 SI tmp_result1;
2627 SI tmp_result0;
2628 tmp_result0 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1));
2629 tmp_result1 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0));
2630 {
2631 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2632 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2633 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2634 }
2635}
2636
2637 return vpc;
2638#undef FLD
2639}
2640
2641/* mabsw: mabs.w $rm, $rd */
2642
2643static SEM_PC
2644SEM_FN_NAME (sh64_media,mabsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2645{
2646#define FLD(f) abuf->fields.sfmt_xori.f
2647 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2648 int UNUSED written = 0;
2649 IADDR UNUSED pc = abuf->addr;
2650 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2651
2652{
2653 HI tmp_result3;
2654 HI tmp_result2;
2655 HI tmp_result1;
2656 HI tmp_result0;
2657 tmp_result0 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3));
2658 tmp_result1 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2));
2659 tmp_result2 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1));
2660 tmp_result3 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0));
2661 {
2662 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2663 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2664 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2665 }
2666}
2667
2668 return vpc;
2669#undef FLD
2670}
2671
2672/* maddl: madd.l $rm, $rn, $rd */
2673
2674static SEM_PC
2675SEM_FN_NAME (sh64_media,maddl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2676{
2677#define FLD(f) abuf->fields.sfmt_add.f
2678 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2679 int UNUSED written = 0;
2680 IADDR UNUSED pc = abuf->addr;
2681 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2682
2683{
2684 SI tmp_result1;
2685 SI tmp_result0;
2686 tmp_result0 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
2687 tmp_result1 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
2688 {
2689 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2690 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2691 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2692 }
2693}
2694
2695 return vpc;
2696#undef FLD
2697}
2698
2699/* maddw: madd.w $rm, $rn, $rd */
2700
2701static SEM_PC
2702SEM_FN_NAME (sh64_media,maddw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2703{
2704#define FLD(f) abuf->fields.sfmt_add.f
2705 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2706 int UNUSED written = 0;
2707 IADDR UNUSED pc = abuf->addr;
2708 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2709
2710{
2711 HI tmp_result3;
2712 HI tmp_result2;
2713 HI tmp_result1;
2714 HI tmp_result0;
2715 tmp_result0 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
2716 tmp_result1 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
2717 tmp_result2 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
2718 tmp_result3 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
2719 {
2720 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2721 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2722 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2723 }
2724}
2725
2726 return vpc;
2727#undef FLD
2728}
2729
2730/* maddsl: madds.l $rm, $rn, $rd */
2731
2732static SEM_PC
2733SEM_FN_NAME (sh64_media,maddsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2734{
2735#define FLD(f) abuf->fields.sfmt_add.f
2736 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2737 int UNUSED written = 0;
2738 IADDR UNUSED pc = abuf->addr;
2739 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2740
2741{
2742 SI tmp_result1;
2743 SI tmp_result0;
1bbd6057
JR
2744 tmp_result0 = ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
2745 tmp_result1 = ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
cbb38b47
BE
2746 {
2747 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2748 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2749 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2750 }
2751}
2752
2753 return vpc;
2754#undef FLD
2755}
2756
2757/* maddsub: madds.ub $rm, $rn, $rd */
2758
2759static SEM_PC
2760SEM_FN_NAME (sh64_media,maddsub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2761{
2762#define FLD(f) abuf->fields.sfmt_add.f
2763 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2764 int UNUSED written = 0;
2765 IADDR UNUSED pc = abuf->addr;
2766 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2767
2768{
2769 QI tmp_result7;
2770 QI tmp_result6;
2771 QI tmp_result5;
2772 QI tmp_result4;
2773 QI tmp_result3;
2774 QI tmp_result2;
2775 QI tmp_result1;
2776 QI tmp_result0;
1bbd6057
JR
2777 tmp_result0 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBQI (SLLQI (1, 8), 1)))));
2778 tmp_result1 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBQI (SLLQI (1, 8), 1)))));
2779 tmp_result2 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBQI (SLLQI (1, 8), 1)))));
2780 tmp_result3 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBQI (SLLQI (1, 8), 1)))));
2781 tmp_result4 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBQI (SLLQI (1, 8), 1)))));
2782 tmp_result5 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBQI (SLLQI (1, 8), 1)))));
2783 tmp_result6 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBQI (SLLQI (1, 8), 1)))));
2784 tmp_result7 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBQI (SLLQI (1, 8), 1)))));
cbb38b47
BE
2785 {
2786 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2787 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2788 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2789 }
2790}
2791
2792 return vpc;
2793#undef FLD
2794}
2795
2796/* maddsw: madds.w $rm, $rn, $rd */
2797
2798static SEM_PC
2799SEM_FN_NAME (sh64_media,maddsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2800{
2801#define FLD(f) abuf->fields.sfmt_add.f
2802 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2803 int UNUSED written = 0;
2804 IADDR UNUSED pc = abuf->addr;
2805 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2806
2807{
2808 HI tmp_result3;
2809 HI tmp_result2;
2810 HI tmp_result1;
2811 HI tmp_result0;
1bbd6057
JR
2812 tmp_result0 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2813 tmp_result1 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2814 tmp_result2 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
2815 tmp_result3 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
cbb38b47
BE
2816 {
2817 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2818 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2819 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2820 }
2821}
2822
2823 return vpc;
2824#undef FLD
2825}
2826
2827/* mcmpeqb: mcmpeq.b $rm, $rn, $rd */
2828
2829static SEM_PC
2830SEM_FN_NAME (sh64_media,mcmpeqb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2831{
2832#define FLD(f) abuf->fields.sfmt_add.f
2833 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2834 int UNUSED written = 0;
2835 IADDR UNUSED pc = abuf->addr;
2836 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2837
2838{
2839 QI tmp_result7;
2840 QI tmp_result6;
2841 QI tmp_result5;
2842 QI tmp_result4;
2843 QI tmp_result3;
2844 QI tmp_result2;
2845 QI tmp_result1;
2846 QI tmp_result0;
2847 tmp_result0 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0));
2848 tmp_result1 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0));
2849 tmp_result2 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0));
2850 tmp_result3 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0));
2851 tmp_result4 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0));
2852 tmp_result5 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0));
2853 tmp_result6 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0));
2854 tmp_result7 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0));
2855 {
2856 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2857 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2858 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2859 }
2860}
2861
2862 return vpc;
2863#undef FLD
2864}
2865
2866/* mcmpeql: mcmpeq.l $rm, $rn, $rd */
2867
2868static SEM_PC
2869SEM_FN_NAME (sh64_media,mcmpeql) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2870{
2871#define FLD(f) abuf->fields.sfmt_add.f
2872 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2873 int UNUSED written = 0;
2874 IADDR UNUSED pc = abuf->addr;
2875 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2876
2877{
2878 SI tmp_result1;
2879 SI tmp_result0;
2880 tmp_result0 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0));
2881 tmp_result1 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0));
2882 {
2883 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2884 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2885 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2886 }
2887}
2888
2889 return vpc;
2890#undef FLD
2891}
2892
2893/* mcmpeqw: mcmpeq.w $rm, $rn, $rd */
2894
2895static SEM_PC
2896SEM_FN_NAME (sh64_media,mcmpeqw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2897{
2898#define FLD(f) abuf->fields.sfmt_add.f
2899 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2900 int UNUSED written = 0;
2901 IADDR UNUSED pc = abuf->addr;
2902 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2903
2904{
2905 HI tmp_result3;
2906 HI tmp_result2;
2907 HI tmp_result1;
2908 HI tmp_result0;
2909 tmp_result0 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0));
2910 tmp_result1 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0));
2911 tmp_result2 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0));
2912 tmp_result3 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0));
2913 {
2914 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
2915 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2916 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2917 }
2918}
2919
2920 return vpc;
2921#undef FLD
2922}
2923
2924/* mcmpgtl: mcmpgt.l $rm, $rn, $rd */
2925
2926static SEM_PC
2927SEM_FN_NAME (sh64_media,mcmpgtl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2928{
2929#define FLD(f) abuf->fields.sfmt_add.f
2930 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2931 int UNUSED written = 0;
2932 IADDR UNUSED pc = abuf->addr;
2933 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2934
2935{
2936 SI tmp_result1;
2937 SI tmp_result0;
2938 tmp_result0 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0));
2939 tmp_result1 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0));
2940 {
2941 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
2942 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2943 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2944 }
2945}
2946
2947 return vpc;
2948#undef FLD
2949}
2950
2951/* mcmpgtub: mcmpgt.ub $rm, $rn, $rd */
2952
2953static SEM_PC
2954SEM_FN_NAME (sh64_media,mcmpgtub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2955{
2956#define FLD(f) abuf->fields.sfmt_add.f
2957 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2958 int UNUSED written = 0;
2959 IADDR UNUSED pc = abuf->addr;
2960 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2961
2962{
2963 QI tmp_result7;
2964 QI tmp_result6;
2965 QI tmp_result5;
2966 QI tmp_result4;
2967 QI tmp_result3;
2968 QI tmp_result2;
2969 QI tmp_result1;
2970 QI tmp_result0;
2971 tmp_result0 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0));
2972 tmp_result1 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0));
2973 tmp_result2 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0));
2974 tmp_result3 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0));
2975 tmp_result4 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0));
2976 tmp_result5 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0));
2977 tmp_result6 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0));
2978 tmp_result7 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0));
2979 {
2980 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
2981 SET_H_GR (FLD (f_dest), opval);
1bbd6057 2982 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
2983 }
2984}
2985
2986 return vpc;
2987#undef FLD
2988}
2989
2990/* mcmpgtw: mcmpgt.w $rm, $rn, $rd */
2991
2992static SEM_PC
2993SEM_FN_NAME (sh64_media,mcmpgtw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2994{
2995#define FLD(f) abuf->fields.sfmt_add.f
2996 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2997 int UNUSED written = 0;
2998 IADDR UNUSED pc = abuf->addr;
2999 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3000
3001{
3002 HI tmp_result3;
3003 HI tmp_result2;
3004 HI tmp_result1;
3005 HI tmp_result0;
3006 tmp_result0 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0));
3007 tmp_result1 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0));
3008 tmp_result2 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0));
3009 tmp_result3 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0));
3010 {
3011 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3012 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3013 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3014 }
3015}
3016
3017 return vpc;
3018#undef FLD
3019}
3020
3021/* mcmv: mcmv $rm, $rn, $rd */
3022
3023static SEM_PC
3024SEM_FN_NAME (sh64_media,mcmv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3025{
3026#define FLD(f) abuf->fields.sfmt_add.f
3027 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3028 int UNUSED written = 0;
3029 IADDR UNUSED pc = abuf->addr;
3030 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3031
3032 {
3033 DI opval = ORDI (ANDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), ANDDI (GET_H_GR (FLD (f_dest)), INVDI (GET_H_GR (FLD (f_right)))));
3034 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3035 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3036 }
3037
3038 return vpc;
3039#undef FLD
3040}
3041
3042/* mcnvslw: mcnvs.lw $rm, $rn, $rd */
3043
3044static SEM_PC
3045SEM_FN_NAME (sh64_media,mcnvslw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3046{
3047#define FLD(f) abuf->fields.sfmt_add.f
3048 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3049 int UNUSED written = 0;
3050 IADDR UNUSED pc = abuf->addr;
3051 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3052
3053{
3054 HI tmp_result3;
3055 HI tmp_result2;
3056 HI tmp_result1;
3057 HI tmp_result0;
1bbd6057
JR
3058 tmp_result0 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3059 tmp_result1 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3060 tmp_result2 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3061 tmp_result3 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
cbb38b47
BE
3062 {
3063 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3064 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3065 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3066 }
3067}
3068
3069 return vpc;
3070#undef FLD
3071}
3072
3073/* mcnvswb: mcnvs.wb $rm, $rn, $rd */
3074
3075static SEM_PC
3076SEM_FN_NAME (sh64_media,mcnvswb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3077{
3078#define FLD(f) abuf->fields.sfmt_add.f
3079 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3080 int UNUSED written = 0;
3081 IADDR UNUSED pc = abuf->addr;
3082 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3083
3084{
3085 QI tmp_result7;
3086 QI tmp_result6;
3087 QI tmp_result5;
3088 QI tmp_result4;
3089 QI tmp_result3;
3090 QI tmp_result2;
3091 QI tmp_result1;
3092 QI tmp_result0;
1bbd6057
JR
3093 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3094 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3095 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3096 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3097 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3098 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3099 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
3100 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1)))));
cbb38b47
BE
3101 {
3102 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
3103 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3104 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3105 }
3106}
3107
3108 return vpc;
3109#undef FLD
3110}
3111
3112/* mcnvswub: mcnvs.wub $rm, $rn, $rd */
3113
3114static SEM_PC
3115SEM_FN_NAME (sh64_media,mcnvswub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3116{
3117#define FLD(f) abuf->fields.sfmt_add.f
3118 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3119 int UNUSED written = 0;
3120 IADDR UNUSED pc = abuf->addr;
3121 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3122
3123{
3124 QI tmp_result7;
3125 QI tmp_result6;
3126 QI tmp_result5;
3127 QI tmp_result4;
3128 QI tmp_result3;
3129 QI tmp_result2;
3130 QI tmp_result1;
3131 QI tmp_result0;
1bbd6057
JR
3132 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
3133 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
3134 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
3135 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
3136 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, 8), 1)))));
3137 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, 8), 1)))));
3138 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, 8), 1)))));
3139 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, 8), 1)))));
cbb38b47
BE
3140 {
3141 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
3142 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3143 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3144 }
3145}
3146
3147 return vpc;
3148#undef FLD
3149}
3150
3151/* mextr1: mextr1 $rm, $rn, $rd */
3152
3153static SEM_PC
3154SEM_FN_NAME (sh64_media,mextr1) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3155{
3156#define FLD(f) abuf->fields.sfmt_add.f
3157 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3158 int UNUSED written = 0;
3159 IADDR UNUSED pc = abuf->addr;
3160 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3161
3162{
3163 QI tmp_count;
3164 DI tmp_mask;
3165 DI tmp_rhs;
1bbd6057 3166 tmp_count = MULQI (8, 1);
cbb38b47
BE
3167 tmp_mask = SLLDI (INVSI (0), tmp_count);
3168 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3169 tmp_count = MULQI (8, SUBQI (8, 1));
cbb38b47
BE
3170 tmp_mask = SRLDI (INVSI (0), tmp_count);
3171 {
3172 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3173 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3174 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3175 }
3176}
3177
3178 return vpc;
3179#undef FLD
3180}
3181
3182/* mextr2: mextr2 $rm, $rn, $rd */
3183
3184static SEM_PC
3185SEM_FN_NAME (sh64_media,mextr2) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3186{
3187#define FLD(f) abuf->fields.sfmt_add.f
3188 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3189 int UNUSED written = 0;
3190 IADDR UNUSED pc = abuf->addr;
3191 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3192
3193{
3194 QI tmp_count;
3195 DI tmp_mask;
3196 DI tmp_rhs;
1bbd6057 3197 tmp_count = MULQI (8, 2);
cbb38b47
BE
3198 tmp_mask = SLLDI (INVSI (0), tmp_count);
3199 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3200 tmp_count = MULQI (8, SUBQI (8, 2));
cbb38b47
BE
3201 tmp_mask = SRLDI (INVSI (0), tmp_count);
3202 {
3203 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3204 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3205 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3206 }
3207}
3208
3209 return vpc;
3210#undef FLD
3211}
3212
3213/* mextr3: mextr3 $rm, $rn, $rd */
3214
3215static SEM_PC
3216SEM_FN_NAME (sh64_media,mextr3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3217{
3218#define FLD(f) abuf->fields.sfmt_add.f
3219 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3220 int UNUSED written = 0;
3221 IADDR UNUSED pc = abuf->addr;
3222 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3223
3224{
3225 QI tmp_count;
3226 DI tmp_mask;
3227 DI tmp_rhs;
1bbd6057 3228 tmp_count = MULQI (8, 3);
cbb38b47
BE
3229 tmp_mask = SLLDI (INVSI (0), tmp_count);
3230 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3231 tmp_count = MULQI (8, SUBQI (8, 3));
cbb38b47
BE
3232 tmp_mask = SRLDI (INVSI (0), tmp_count);
3233 {
3234 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3235 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3236 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3237 }
3238}
3239
3240 return vpc;
3241#undef FLD
3242}
3243
3244/* mextr4: mextr4 $rm, $rn, $rd */
3245
3246static SEM_PC
3247SEM_FN_NAME (sh64_media,mextr4) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3248{
3249#define FLD(f) abuf->fields.sfmt_add.f
3250 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3251 int UNUSED written = 0;
3252 IADDR UNUSED pc = abuf->addr;
3253 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3254
3255{
3256 QI tmp_count;
3257 DI tmp_mask;
3258 DI tmp_rhs;
1bbd6057 3259 tmp_count = MULQI (8, 4);
cbb38b47
BE
3260 tmp_mask = SLLDI (INVSI (0), tmp_count);
3261 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3262 tmp_count = MULQI (8, SUBQI (8, 4));
cbb38b47
BE
3263 tmp_mask = SRLDI (INVSI (0), tmp_count);
3264 {
3265 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3266 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3267 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3268 }
3269}
3270
3271 return vpc;
3272#undef FLD
3273}
3274
3275/* mextr5: mextr5 $rm, $rn, $rd */
3276
3277static SEM_PC
3278SEM_FN_NAME (sh64_media,mextr5) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3279{
3280#define FLD(f) abuf->fields.sfmt_add.f
3281 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3282 int UNUSED written = 0;
3283 IADDR UNUSED pc = abuf->addr;
3284 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3285
3286{
3287 QI tmp_count;
3288 DI tmp_mask;
3289 DI tmp_rhs;
1bbd6057 3290 tmp_count = MULQI (8, 5);
cbb38b47
BE
3291 tmp_mask = SLLDI (INVSI (0), tmp_count);
3292 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3293 tmp_count = MULQI (8, SUBQI (8, 5));
cbb38b47
BE
3294 tmp_mask = SRLDI (INVSI (0), tmp_count);
3295 {
3296 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3297 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3298 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3299 }
3300}
3301
3302 return vpc;
3303#undef FLD
3304}
3305
3306/* mextr6: mextr6 $rm, $rn, $rd */
3307
3308static SEM_PC
3309SEM_FN_NAME (sh64_media,mextr6) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3310{
3311#define FLD(f) abuf->fields.sfmt_add.f
3312 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3313 int UNUSED written = 0;
3314 IADDR UNUSED pc = abuf->addr;
3315 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3316
3317{
3318 QI tmp_count;
3319 DI tmp_mask;
3320 DI tmp_rhs;
1bbd6057 3321 tmp_count = MULQI (8, 6);
cbb38b47
BE
3322 tmp_mask = SLLDI (INVSI (0), tmp_count);
3323 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3324 tmp_count = MULQI (8, SUBQI (8, 6));
cbb38b47
BE
3325 tmp_mask = SRLDI (INVSI (0), tmp_count);
3326 {
3327 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3328 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3329 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3330 }
3331}
3332
3333 return vpc;
3334#undef FLD
3335}
3336
3337/* mextr7: mextr7 $rm, $rn, $rd */
3338
3339static SEM_PC
3340SEM_FN_NAME (sh64_media,mextr7) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3341{
3342#define FLD(f) abuf->fields.sfmt_add.f
3343 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3344 int UNUSED written = 0;
3345 IADDR UNUSED pc = abuf->addr;
3346 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3347
3348{
3349 QI tmp_count;
3350 DI tmp_mask;
3351 DI tmp_rhs;
1bbd6057 3352 tmp_count = MULQI (8, 7);
cbb38b47
BE
3353 tmp_mask = SLLDI (INVSI (0), tmp_count);
3354 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count);
1bbd6057 3355 tmp_count = MULQI (8, SUBQI (8, 7));
cbb38b47
BE
3356 tmp_mask = SRLDI (INVSI (0), tmp_count);
3357 {
3358 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count));
3359 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3360 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3361 }
3362}
3363
3364 return vpc;
3365#undef FLD
3366}
3367
3368/* mmacfxwl: mmacfx.wl $rm, $rn, $rd */
3369
3370static SEM_PC
3371SEM_FN_NAME (sh64_media,mmacfxwl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3372{
3373#define FLD(f) abuf->fields.sfmt_add.f
3374 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3375 int UNUSED written = 0;
3376 IADDR UNUSED pc = abuf->addr;
3377 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3378
3379{
3380 SI tmp_temp;
3381 SI tmp_result1;
3382 SI tmp_result0;
1bbd6057
JR
3383 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
3384 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0);
3385 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3386 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3387 tmp_result0 = ((LTDI (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3388 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3389 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3390 tmp_result1 = ((LTDI (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
cbb38b47
BE
3391 {
3392 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3393 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3394 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3395 }
3396}
3397
3398 return vpc;
3399#undef FLD
3400}
3401
3402/* mmacnfx.wl: mmacnfx.wl $rm, $rn, $rd */
3403
3404static SEM_PC
3405SEM_FN_NAME (sh64_media,mmacnfx_wl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3406{
3407#define FLD(f) abuf->fields.sfmt_add.f
3408 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3409 int UNUSED written = 0;
3410 IADDR UNUSED pc = abuf->addr;
3411 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3412
3413{
3414 SI tmp_temp;
3415 SI tmp_result1;
3416 SI tmp_result0;
1bbd6057
JR
3417 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
3418 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0);
3419 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3420 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3421 tmp_result0 = ((LTDI (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3422 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3423 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3424 tmp_result1 = ((LTDI (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
cbb38b47
BE
3425 {
3426 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3427 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3428 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3429 }
3430}
3431
3432 return vpc;
3433#undef FLD
3434}
3435
3436/* mmull: mmul.l $rm, $rn, $rd */
3437
3438static SEM_PC
3439SEM_FN_NAME (sh64_media,mmull) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3440{
3441#define FLD(f) abuf->fields.sfmt_add.f
3442 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3443 int UNUSED written = 0;
3444 IADDR UNUSED pc = abuf->addr;
3445 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3446
3447{
3448 SI tmp_result1;
3449 SI tmp_result0;
3450 tmp_result0 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
3451 tmp_result1 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
3452 {
3453 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3454 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3455 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3456 }
3457}
3458
3459 return vpc;
3460#undef FLD
3461}
3462
3463/* mmulw: mmul.w $rm, $rn, $rd */
3464
3465static SEM_PC
3466SEM_FN_NAME (sh64_media,mmulw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3467{
3468#define FLD(f) abuf->fields.sfmt_add.f
3469 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3470 int UNUSED written = 0;
3471 IADDR UNUSED pc = abuf->addr;
3472 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3473
3474{
3475 HI tmp_result3;
3476 HI tmp_result2;
3477 HI tmp_result1;
3478 HI tmp_result0;
3479 tmp_result0 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
3480 tmp_result1 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
3481 tmp_result2 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
3482 tmp_result3 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
3483 {
3484 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3485 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3486 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3487 }
3488}
3489
3490 return vpc;
3491#undef FLD
3492}
3493
3494/* mmulfxl: mmulfx.l $rm, $rn, $rd */
3495
3496static SEM_PC
3497SEM_FN_NAME (sh64_media,mmulfxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3498{
3499#define FLD(f) abuf->fields.sfmt_add.f
3500 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3501 int UNUSED written = 0;
3502 IADDR UNUSED pc = abuf->addr;
3503 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3504
3505{
3506 DI tmp_temp;
3507 SI tmp_result0;
3508 SI tmp_result1;
cbb38b47 3509 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
1bbd6057
JR
3510 tmp_result0 = ((LTDI (SRADI (tmp_temp, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3511 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)));
3512 tmp_result1 = ((LTDI (SRADI (tmp_temp, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
cbb38b47
BE
3513 {
3514 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3515 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3516 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3517 }
3518}
3519
3520 return vpc;
3521#undef FLD
3522}
3523
3524/* mmulfxw: mmulfx.w $rm, $rn, $rd */
3525
3526static SEM_PC
3527SEM_FN_NAME (sh64_media,mmulfxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3528{
3529#define FLD(f) abuf->fields.sfmt_add.f
3530 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3531 int UNUSED written = 0;
3532 IADDR UNUSED pc = abuf->addr;
3533 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3534
3535{
3536 SI tmp_temp;
3537 HI tmp_result0;
3538 HI tmp_result1;
3539 HI tmp_result2;
3540 HI tmp_result3;
cbb38b47 3541 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
1bbd6057
JR
3542 tmp_result0 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3543 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3544 tmp_result1 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3545 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3546 tmp_result2 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3547 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3548 tmp_result3 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
cbb38b47
BE
3549 {
3550 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3551 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3552 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3553 }
3554}
3555
3556 return vpc;
3557#undef FLD
3558}
3559
3560/* mmulfxrpw: mmulfxrp.w $rm, $rn, $rd */
3561
3562static SEM_PC
3563SEM_FN_NAME (sh64_media,mmulfxrpw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3564{
3565#define FLD(f) abuf->fields.sfmt_add.f
3566 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3567 int UNUSED written = 0;
3568 IADDR UNUSED pc = abuf->addr;
3569 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3570
3571{
3572 SI tmp_temp;
3573 HI tmp_result0;
3574 HI tmp_result1;
3575 HI tmp_result2;
3576 HI tmp_result3;
3577 HI tmp_c;
3578 tmp_c = SLLSI (1, 14);
cbb38b47 3579 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
1bbd6057
JR
3580 tmp_result0 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3581 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
3582 tmp_result1 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3583 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3584 tmp_result2 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3585 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3586 tmp_result3 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
cbb38b47
BE
3587 {
3588 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3589 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3590 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3591 }
3592}
3593
3594 return vpc;
3595#undef FLD
3596}
3597
3598/* mmulhiwl: mmulhi.wl $rm, $rn, $rd */
3599
3600static SEM_PC
3601SEM_FN_NAME (sh64_media,mmulhiwl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3602{
3603#define FLD(f) abuf->fields.sfmt_add.f
3604 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3605 int UNUSED written = 0;
3606 IADDR UNUSED pc = abuf->addr;
3607 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3608
3609{
3610 SI tmp_result1;
3611 SI tmp_result0;
1bbd6057
JR
3612 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)));
3613 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
cbb38b47
BE
3614 {
3615 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3616 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3617 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3618 }
3619}
3620
3621 return vpc;
3622#undef FLD
3623}
3624
3625/* mmullowl: mmullo.wl $rm, $rn, $rd */
3626
3627static SEM_PC
3628SEM_FN_NAME (sh64_media,mmullowl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3629{
3630#define FLD(f) abuf->fields.sfmt_add.f
3631 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3632 int UNUSED written = 0;
3633 IADDR UNUSED pc = abuf->addr;
3634 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3635
3636{
3637 SI tmp_result1;
3638 SI tmp_result0;
1bbd6057
JR
3639 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)));
3640 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)));
cbb38b47
BE
3641 {
3642 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3643 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3644 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3645 }
3646}
3647
3648 return vpc;
3649#undef FLD
3650}
3651
3652/* mmulsumwq: mmulsum.wq $rm, $rn, $rd */
3653
3654static SEM_PC
3655SEM_FN_NAME (sh64_media,mmulsumwq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3656{
3657#define FLD(f) abuf->fields.sfmt_add.f
3658 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3659 int UNUSED written = 0;
3660 IADDR UNUSED pc = abuf->addr;
3661 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3662
3663{
3664 DI tmp_acc;
3665 tmp_acc = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)));
3666 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))));
3667 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))));
3668 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))));
3669 {
3670 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc);
3671 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3672 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3673 }
3674}
3675
3676 return vpc;
3677#undef FLD
3678}
3679
3680/* movi: movi $imm16, $rd */
3681
3682static SEM_PC
3683SEM_FN_NAME (sh64_media,movi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3684{
3685#define FLD(f) abuf->fields.sfmt_movi.f
3686 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3687 int UNUSED written = 0;
3688 IADDR UNUSED pc = abuf->addr;
3689 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3690
3691 {
3692 DI opval = EXTSIDI (FLD (f_imm16));
3693 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3694 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3695 }
3696
3697 return vpc;
3698#undef FLD
3699}
3700
3701/* mpermw: mperm.w $rm, $rn, $rd */
3702
3703static SEM_PC
3704SEM_FN_NAME (sh64_media,mpermw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3705{
3706#define FLD(f) abuf->fields.sfmt_add.f
3707 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3708 int UNUSED written = 0;
3709 IADDR UNUSED pc = abuf->addr;
3710 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3711
3712{
3713 QI tmp_control;
3714 HI tmp_result3;
3715 HI tmp_result2;
3716 HI tmp_result1;
3717 HI tmp_result0;
1bbd6057 3718 tmp_control = ANDQI (GET_H_GR (FLD (f_right)), 255);
cbb38b47
BE
3719 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (tmp_control, 3)));
3720 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 2), 3)));
3721 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 4), 3)));
3722 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 6), 3)));
3723 {
3724 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3725 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3726 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3727 }
3728}
3729
3730 return vpc;
3731#undef FLD
3732}
3733
3734/* msadubq: msad.ubq $rm, $rn, $rd */
3735
3736static SEM_PC
3737SEM_FN_NAME (sh64_media,msadubq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3738{
3739#define FLD(f) abuf->fields.sfmt_add.f
3740 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3741 int UNUSED written = 0;
3742 IADDR UNUSED pc = abuf->addr;
3743 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3744
3745{
3746 DI tmp_acc;
1bbd6057 3747 tmp_acc = ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)));
cbb38b47
BE
3748 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))));
3749 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))));
3750 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))));
3751 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))));
3752 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))));
3753 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))));
3754 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))));
3755 {
3756 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc);
3757 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3758 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3759 }
3760}
3761
3762 return vpc;
3763#undef FLD
3764}
3765
3766/* mshaldsl: mshalds.l $rm, $rn, $rd */
3767
3768static SEM_PC
3769SEM_FN_NAME (sh64_media,mshaldsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3770{
3771#define FLD(f) abuf->fields.sfmt_add.f
3772 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3773 int UNUSED written = 0;
3774 IADDR UNUSED pc = abuf->addr;
3775 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3776
3777{
3778 SI tmp_result1;
3779 SI tmp_result0;
1bbd6057
JR
3780 tmp_result0 = ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
3781 tmp_result1 = ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
cbb38b47
BE
3782 {
3783 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3784 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3785 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3786 }
3787}
3788
3789 return vpc;
3790#undef FLD
3791}
3792
3793/* mshaldsw: mshalds.w $rm, $rn, $rd */
3794
3795static SEM_PC
3796SEM_FN_NAME (sh64_media,mshaldsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3797{
3798#define FLD(f) abuf->fields.sfmt_add.f
3799 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3800 int UNUSED written = 0;
3801 IADDR UNUSED pc = abuf->addr;
3802 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3803
3804{
3805 HI tmp_result3;
3806 HI tmp_result2;
3807 HI tmp_result1;
3808 HI tmp_result0;
1bbd6057
JR
3809 tmp_result0 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3810 tmp_result1 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3811 tmp_result2 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
3812 tmp_result3 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
cbb38b47
BE
3813 {
3814 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3815 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3816 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3817 }
3818}
3819
3820 return vpc;
3821#undef FLD
3822}
3823
3824/* mshardl: mshard.l $rm, $rn, $rd */
3825
3826static SEM_PC
3827SEM_FN_NAME (sh64_media,mshardl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3828{
3829#define FLD(f) abuf->fields.sfmt_add.f
3830 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3831 int UNUSED written = 0;
3832 IADDR UNUSED pc = abuf->addr;
3833 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3834
3835{
3836 SI tmp_result1;
3837 SI tmp_result0;
3838 tmp_result0 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
3839 tmp_result1 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
3840 {
3841 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3842 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3843 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3844 }
3845}
3846
3847 return vpc;
3848#undef FLD
3849}
3850
3851/* mshardw: mshard.w $rm, $rn, $rd */
3852
3853static SEM_PC
3854SEM_FN_NAME (sh64_media,mshardw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3855{
3856#define FLD(f) abuf->fields.sfmt_add.f
3857 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3858 int UNUSED written = 0;
3859 IADDR UNUSED pc = abuf->addr;
3860 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3861
3862{
3863 HI tmp_result3;
3864 HI tmp_result2;
3865 HI tmp_result1;
3866 HI tmp_result0;
3867 tmp_result0 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
3868 tmp_result1 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
3869 tmp_result2 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
3870 tmp_result3 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
3871 {
3872 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3873 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3874 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3875 }
3876}
3877
3878 return vpc;
3879#undef FLD
3880}
3881
3882/* mshardsq: mshards.q $rm, $rn, $rd */
3883
3884static SEM_PC
3885SEM_FN_NAME (sh64_media,mshardsq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3886{
3887#define FLD(f) abuf->fields.sfmt_add.f
3888 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3889 int UNUSED written = 0;
3890 IADDR UNUSED pc = abuf->addr;
3891 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3892
3893 {
3894 DI opval = ((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGDI (SLLDI (1, SUBSI (16, 1)))) : (((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), SLLDI (1, SUBSI (16, 1)))) ? (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63))) : (SUBDI (SLLDI (1, SUBSI (16, 1)), 1)))));
3895 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3896 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3897 }
3898
3899 return vpc;
3900#undef FLD
3901}
3902
3903/* mshfhib: mshfhi.b $rm, $rn, $rd */
3904
3905static SEM_PC
3906SEM_FN_NAME (sh64_media,mshfhib) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3907{
3908#define FLD(f) abuf->fields.sfmt_add.f
3909 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3910 int UNUSED written = 0;
3911 IADDR UNUSED pc = abuf->addr;
3912 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3913
3914{
3915 QI tmp_result7;
3916 QI tmp_result6;
3917 QI tmp_result5;
3918 QI tmp_result4;
3919 QI tmp_result3;
3920 QI tmp_result2;
3921 QI tmp_result1;
3922 QI tmp_result0;
1bbd6057
JR
3923 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3);
3924 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3);
3925 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2);
3926 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2);
3927 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1);
3928 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1);
3929 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0);
3930 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0);
cbb38b47
BE
3931 {
3932 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
3933 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3934 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3935 }
3936}
3937
3938 return vpc;
3939#undef FLD
3940}
3941
3942/* mshfhil: mshfhi.l $rm, $rn, $rd */
3943
3944static SEM_PC
3945SEM_FN_NAME (sh64_media,mshfhil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3946{
3947#define FLD(f) abuf->fields.sfmt_add.f
3948 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3949 int UNUSED written = 0;
3950 IADDR UNUSED pc = abuf->addr;
3951 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3952
3953{
3954 SI tmp_result1;
3955 SI tmp_result0;
1bbd6057
JR
3956 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 0);
3957 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 0);
cbb38b47
BE
3958 {
3959 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
3960 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3961 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3962 }
3963}
3964
3965 return vpc;
3966#undef FLD
3967}
3968
3969/* mshfhiw: mshfhi.w $rm, $rn, $rd */
3970
3971static SEM_PC
3972SEM_FN_NAME (sh64_media,mshfhiw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
3973{
3974#define FLD(f) abuf->fields.sfmt_add.f
3975 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3976 int UNUSED written = 0;
3977 IADDR UNUSED pc = abuf->addr;
3978 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3979
3980{
3981 HI tmp_result3;
3982 HI tmp_result2;
3983 HI tmp_result1;
3984 HI tmp_result0;
1bbd6057
JR
3985 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1);
3986 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1);
3987 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0);
3988 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0);
cbb38b47
BE
3989 {
3990 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
3991 SET_H_GR (FLD (f_dest), opval);
1bbd6057 3992 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
3993 }
3994}
3995
3996 return vpc;
3997#undef FLD
3998}
3999
4000/* mshflob: mshflo.b $rm, $rn, $rd */
4001
4002static SEM_PC
4003SEM_FN_NAME (sh64_media,mshflob) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4004{
4005#define FLD(f) abuf->fields.sfmt_add.f
4006 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4007 int UNUSED written = 0;
4008 IADDR UNUSED pc = abuf->addr;
4009 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4010
4011{
4012 QI tmp_result7;
4013 QI tmp_result6;
4014 QI tmp_result5;
4015 QI tmp_result4;
4016 QI tmp_result3;
4017 QI tmp_result2;
4018 QI tmp_result1;
4019 QI tmp_result0;
1bbd6057
JR
4020 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7);
4021 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7);
4022 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6);
4023 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6);
4024 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5);
4025 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5);
4026 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4);
4027 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4);
cbb38b47
BE
4028 {
4029 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
4030 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4031 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4032 }
4033}
4034
4035 return vpc;
4036#undef FLD
4037}
4038
4039/* mshflol: mshflo.l $rm, $rn, $rd */
4040
4041static SEM_PC
4042SEM_FN_NAME (sh64_media,mshflol) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4043{
4044#define FLD(f) abuf->fields.sfmt_add.f
4045 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4046 int UNUSED written = 0;
4047 IADDR UNUSED pc = abuf->addr;
4048 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4049
4050{
4051 SI tmp_result1;
4052 SI tmp_result0;
1bbd6057
JR
4053 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 1);
4054 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 1);
cbb38b47
BE
4055 {
4056 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4057 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4058 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4059 }
4060}
4061
4062 return vpc;
4063#undef FLD
4064}
4065
4066/* mshflow: mshflo.w $rm, $rn, $rd */
4067
4068static SEM_PC
4069SEM_FN_NAME (sh64_media,mshflow) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4070{
4071#define FLD(f) abuf->fields.sfmt_add.f
4072 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4073 int UNUSED written = 0;
4074 IADDR UNUSED pc = abuf->addr;
4075 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4076
4077{
4078 HI tmp_result3;
4079 HI tmp_result2;
4080 HI tmp_result1;
4081 HI tmp_result0;
1bbd6057
JR
4082 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3);
4083 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3);
4084 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2);
4085 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2);
cbb38b47
BE
4086 {
4087 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4088 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4089 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4090 }
4091}
4092
4093 return vpc;
4094#undef FLD
4095}
4096
4097/* mshlldl: mshlld.l $rm, $rn, $rd */
4098
4099static SEM_PC
4100SEM_FN_NAME (sh64_media,mshlldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4101{
4102#define FLD(f) abuf->fields.sfmt_add.f
4103 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4104 int UNUSED written = 0;
4105 IADDR UNUSED pc = abuf->addr;
4106 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4107
4108{
4109 SI tmp_result1;
4110 SI tmp_result0;
4111 tmp_result0 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
4112 tmp_result1 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
4113 {
4114 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4115 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4116 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4117 }
4118}
4119
4120 return vpc;
4121#undef FLD
4122}
4123
4124/* mshlldw: mshlld.w $rm, $rn, $rd */
4125
4126static SEM_PC
4127SEM_FN_NAME (sh64_media,mshlldw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4128{
4129#define FLD(f) abuf->fields.sfmt_add.f
4130 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4131 int UNUSED written = 0;
4132 IADDR UNUSED pc = abuf->addr;
4133 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4134
4135{
4136 HI tmp_result3;
4137 HI tmp_result2;
4138 HI tmp_result1;
4139 HI tmp_result0;
4140 tmp_result0 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
4141 tmp_result1 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
4142 tmp_result2 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
4143 tmp_result3 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
4144 {
4145 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4146 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4147 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4148 }
4149}
4150
4151 return vpc;
4152#undef FLD
4153}
4154
4155/* mshlrdl: mshlrd.l $rm, $rn, $rd */
4156
4157static SEM_PC
4158SEM_FN_NAME (sh64_media,mshlrdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4159{
4160#define FLD(f) abuf->fields.sfmt_add.f
4161 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4162 int UNUSED written = 0;
4163 IADDR UNUSED pc = abuf->addr;
4164 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4165
4166{
4167 SI tmp_result1;
4168 SI tmp_result0;
4169 tmp_result0 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31));
4170 tmp_result1 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31));
4171 {
4172 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4173 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4174 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4175 }
4176}
4177
4178 return vpc;
4179#undef FLD
4180}
4181
4182/* mshlrdw: mshlrd.w $rm, $rn, $rd */
4183
4184static SEM_PC
4185SEM_FN_NAME (sh64_media,mshlrdw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4186{
4187#define FLD(f) abuf->fields.sfmt_add.f
4188 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4189 int UNUSED written = 0;
4190 IADDR UNUSED pc = abuf->addr;
4191 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4192
4193{
4194 HI tmp_result3;
4195 HI tmp_result2;
4196 HI tmp_result1;
4197 HI tmp_result0;
4198 tmp_result0 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15));
4199 tmp_result1 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15));
4200 tmp_result2 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15));
4201 tmp_result3 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15));
4202 {
4203 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4204 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4205 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4206 }
4207}
4208
4209 return vpc;
4210#undef FLD
4211}
4212
4213/* msubl: msub.l $rm, $rn, $rd */
4214
4215static SEM_PC
4216SEM_FN_NAME (sh64_media,msubl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4217{
4218#define FLD(f) abuf->fields.sfmt_add.f
4219 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4220 int UNUSED written = 0;
4221 IADDR UNUSED pc = abuf->addr;
4222 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4223
4224{
4225 SI tmp_result1;
4226 SI tmp_result0;
4227 tmp_result0 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1));
4228 tmp_result1 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0));
4229 {
4230 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4231 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4232 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4233 }
4234}
4235
4236 return vpc;
4237#undef FLD
4238}
4239
4240/* msubw: msub.w $rm, $rn, $rd */
4241
4242static SEM_PC
4243SEM_FN_NAME (sh64_media,msubw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4244{
4245#define FLD(f) abuf->fields.sfmt_add.f
4246 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4247 int UNUSED written = 0;
4248 IADDR UNUSED pc = abuf->addr;
4249 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4250
4251{
4252 HI tmp_result3;
4253 HI tmp_result2;
4254 HI tmp_result1;
4255 HI tmp_result0;
4256 tmp_result0 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3));
4257 tmp_result1 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2));
4258 tmp_result2 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1));
4259 tmp_result3 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0));
4260 {
4261 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0))));
4262 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4263 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4264 }
4265}
4266
4267 return vpc;
4268#undef FLD
4269}
4270
4271/* msubsl: msubs.l $rm, $rn, $rd */
4272
4273static SEM_PC
4274SEM_FN_NAME (sh64_media,msubsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4275{
4276#define FLD(f) abuf->fields.sfmt_add.f
4277 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4278 int UNUSED written = 0;
4279 IADDR UNUSED pc = abuf->addr;
4280 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4281
4282{
4283 SI tmp_result1;
4284 SI tmp_result0;
1bbd6057
JR
4285 tmp_result0 = ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
4286 tmp_result1 = ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1)))));
cbb38b47
BE
4287 {
4288 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0));
4289 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4290 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4291 }
4292}
4293
4294 return vpc;
4295#undef FLD
4296}
4297
4298/* msubsub: msubs.ub $rm, $rn, $rd */
4299
4300static SEM_PC
4301SEM_FN_NAME (sh64_media,msubsub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4302{
4303#define FLD(f) abuf->fields.sfmt_add.f
4304 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4305 int UNUSED written = 0;
4306 IADDR UNUSED pc = abuf->addr;
4307 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4308
4309{
4310 QI tmp_result7;
4311 QI tmp_result6;
4312 QI tmp_result5;
4313 QI tmp_result4;
4314 QI tmp_result3;
4315 QI tmp_result2;
4316 QI tmp_result1;
4317 QI tmp_result0;
1bbd6057
JR
4318 tmp_result0 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBQI (SLLQI (1, 8), 1)))));
4319 tmp_result1 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBQI (SLLQI (1, 8), 1)))));
4320 tmp_result2 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBQI (SLLQI (1, 8), 1)))));
4321 tmp_result3 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBQI (SLLQI (1, 8), 1)))));
4322 tmp_result4 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBQI (SLLQI (1, 8), 1)))));
4323 tmp_result5 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBQI (SLLQI (1, 8), 1)))));
4324 tmp_result6 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBQI (SLLQI (1, 8), 1)))));
4325 tmp_result7 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBQI (SLLQI (1, 8), 1)))));
cbb38b47
BE
4326 {
4327 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
4328 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4329 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4330 }
4331}
4332
4333 return vpc;
4334#undef FLD
4335}
4336
4337/* msubsw: msubs.w $rm, $rn, $rd */
4338
4339static SEM_PC
4340SEM_FN_NAME (sh64_media,msubsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4341{
4342#define FLD(f) abuf->fields.sfmt_add.f
4343 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4344 int UNUSED written = 0;
4345 IADDR UNUSED pc = abuf->addr;
4346 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4347
4348{
4349 QI tmp_result7;
4350 QI tmp_result6;
4351 QI tmp_result5;
4352 QI tmp_result4;
4353 QI tmp_result3;
4354 QI tmp_result2;
4355 QI tmp_result1;
4356 QI tmp_result0;
1bbd6057
JR
4357 tmp_result0 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4358 tmp_result1 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4359 tmp_result2 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4360 tmp_result3 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4361 tmp_result4 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4362 tmp_result5 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4363 tmp_result6 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
4364 tmp_result7 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1)))));
cbb38b47
BE
4365 {
4366 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0))))))));
4367 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4368 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4369 }
4370}
4371
4372 return vpc;
4373#undef FLD
4374}
4375
4376/* mulsl: muls.l $rm, $rn, $rd */
4377
4378static SEM_PC
4379SEM_FN_NAME (sh64_media,mulsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4380{
4381#define FLD(f) abuf->fields.sfmt_add.f
4382 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4383 int UNUSED written = 0;
4384 IADDR UNUSED pc = abuf->addr;
4385 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4386
4387 {
4388 DI opval = MULDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
4389 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4390 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4391 }
4392
4393 return vpc;
4394#undef FLD
4395}
4396
4397/* mulul: mulu.l $rm, $rn, $rd */
4398
4399static SEM_PC
4400SEM_FN_NAME (sh64_media,mulul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4401{
4402#define FLD(f) abuf->fields.sfmt_add.f
4403 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4404 int UNUSED written = 0;
4405 IADDR UNUSED pc = abuf->addr;
4406 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4407
4408 {
4409 DI opval = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
4410 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4411 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4412 }
4413
4414 return vpc;
4415#undef FLD
4416}
4417
4418/* nop: nop */
4419
4420static SEM_PC
4421SEM_FN_NAME (sh64_media,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4422{
4423#define FLD(f) abuf->fields.fmt_empty.f
4424 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4425 int UNUSED written = 0;
4426 IADDR UNUSED pc = abuf->addr;
4427 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4428
4429((void) 0); /*nop*/
4430
4431 return vpc;
4432#undef FLD
4433}
4434
4435/* nsb: nsb $rm, $rd */
4436
4437static SEM_PC
4438SEM_FN_NAME (sh64_media,nsb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4439{
4440#define FLD(f) abuf->fields.sfmt_xori.f
4441 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4442 int UNUSED written = 0;
4443 IADDR UNUSED pc = abuf->addr;
4444 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4445
4446 {
4447 DI opval = sh64_nsb (current_cpu, GET_H_GR (FLD (f_left)));
4448 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4449 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4450 }
4451
4452 return vpc;
4453#undef FLD
4454}
4455
4456/* ocbi: ocbi $rm, $disp6x32 */
4457
4458static SEM_PC
4459SEM_FN_NAME (sh64_media,ocbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4460{
4461#define FLD(f) abuf->fields.fmt_empty.f
4462 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4463 int UNUSED written = 0;
4464 IADDR UNUSED pc = abuf->addr;
4465 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4466
4467((void) 0); /*nop*/
4468
4469 return vpc;
4470#undef FLD
4471}
4472
4473/* ocbp: ocbp $rm, $disp6x32 */
4474
4475static SEM_PC
4476SEM_FN_NAME (sh64_media,ocbp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4477{
4478#define FLD(f) abuf->fields.fmt_empty.f
4479 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4480 int UNUSED written = 0;
4481 IADDR UNUSED pc = abuf->addr;
4482 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4483
4484((void) 0); /*nop*/
4485
4486 return vpc;
4487#undef FLD
4488}
4489
4490/* ocbwb: ocbwb $rm, $disp6x32 */
4491
4492static SEM_PC
4493SEM_FN_NAME (sh64_media,ocbwb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4494{
4495#define FLD(f) abuf->fields.fmt_empty.f
4496 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4497 int UNUSED written = 0;
4498 IADDR UNUSED pc = abuf->addr;
4499 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4500
4501((void) 0); /*nop*/
4502
4503 return vpc;
4504#undef FLD
4505}
4506
4507/* or: or $rm, $rn, $rd */
4508
4509static SEM_PC
4510SEM_FN_NAME (sh64_media,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4511{
4512#define FLD(f) abuf->fields.sfmt_add.f
4513 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4514 int UNUSED written = 0;
4515 IADDR UNUSED pc = abuf->addr;
4516 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4517
4518 {
4519 DI opval = ORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
4520 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4521 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4522 }
4523
4524 return vpc;
4525#undef FLD
4526}
4527
4528/* ori: ori $rm, $imm10, $rd */
4529
4530static SEM_PC
4531SEM_FN_NAME (sh64_media,ori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4532{
4533#define FLD(f) abuf->fields.sfmt_ori.f
4534 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4535 int UNUSED written = 0;
4536 IADDR UNUSED pc = abuf->addr;
4537 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4538
4539 {
4540 DI opval = ORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm10)));
4541 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4542 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4543 }
4544
4545 return vpc;
4546#undef FLD
4547}
4548
4549/* prefi: prefi $rm, $disp6x32 */
4550
4551static SEM_PC
4552SEM_FN_NAME (sh64_media,prefi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4553{
4554#define FLD(f) abuf->fields.fmt_empty.f
4555 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4556 int UNUSED written = 0;
4557 IADDR UNUSED pc = abuf->addr;
4558 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4559
4560((void) 0); /*nop*/
4561
4562 return vpc;
4563#undef FLD
4564}
4565
4566/* pta: pta$likely $disp16, $tra */
4567
4568static SEM_PC
4569SEM_FN_NAME (sh64_media,pta) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4570{
4571#define FLD(f) abuf->fields.sfmt_pta.f
4572 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4573 int UNUSED written = 0;
4574 IADDR UNUSED pc = abuf->addr;
4575 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4576
4577 {
4578 DI opval = ADDSI (FLD (f_disp16), 1);
4579 CPU (h_tr[FLD (f_tra)]) = opval;
1bbd6057 4580 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
cbb38b47
BE
4581 }
4582
4583 return vpc;
4584#undef FLD
4585}
4586
4587/* ptabs: ptabs$likely $rn, $tra */
4588
4589static SEM_PC
4590SEM_FN_NAME (sh64_media,ptabs) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4591{
4592#define FLD(f) abuf->fields.sfmt_beq.f
4593 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4594 int UNUSED written = 0;
4595 IADDR UNUSED pc = abuf->addr;
4596 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4597
4598 {
4599 DI opval = GET_H_GR (FLD (f_right));
4600 CPU (h_tr[FLD (f_tra)]) = opval;
1bbd6057 4601 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
cbb38b47
BE
4602 }
4603
4604 return vpc;
4605#undef FLD
4606}
4607
4608/* ptb: ptb$likely $disp16, $tra */
4609
4610static SEM_PC
4611SEM_FN_NAME (sh64_media,ptb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4612{
4613#define FLD(f) abuf->fields.sfmt_pta.f
4614 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4615 int UNUSED written = 0;
4616 IADDR UNUSED pc = abuf->addr;
4617 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4618
4619 {
4620 DI opval = FLD (f_disp16);
4621 CPU (h_tr[FLD (f_tra)]) = opval;
1bbd6057 4622 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
cbb38b47
BE
4623 }
4624
4625 return vpc;
4626#undef FLD
4627}
4628
4629/* ptrel: ptrel$likely $rn, $tra */
4630
4631static SEM_PC
4632SEM_FN_NAME (sh64_media,ptrel) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4633{
4634#define FLD(f) abuf->fields.sfmt_beq.f
4635 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4636 int UNUSED written = 0;
4637 IADDR UNUSED pc = abuf->addr;
4638 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4639
4640 {
4641 DI opval = ADDDI (pc, GET_H_GR (FLD (f_right)));
4642 CPU (h_tr[FLD (f_tra)]) = opval;
1bbd6057 4643 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval);
cbb38b47
BE
4644 }
4645
4646 return vpc;
4647#undef FLD
4648}
4649
4650/* putcfg: putcfg $rm, $disp6, $rd */
4651
4652static SEM_PC
4653SEM_FN_NAME (sh64_media,putcfg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4654{
4655#define FLD(f) abuf->fields.fmt_empty.f
4656 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4657 int UNUSED written = 0;
4658 IADDR UNUSED pc = abuf->addr;
4659 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4660
4661((void) 0); /*nop*/
4662
4663 return vpc;
4664#undef FLD
4665}
4666
4667/* putcon: putcon $rm, $crj */
4668
4669static SEM_PC
4670SEM_FN_NAME (sh64_media,putcon) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4671{
4672#define FLD(f) abuf->fields.sfmt_xori.f
4673 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4674 int UNUSED written = 0;
4675 IADDR UNUSED pc = abuf->addr;
4676 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4677
4678 {
4679 DI opval = GET_H_GR (FLD (f_left));
4680 SET_H_CR (FLD (f_dest), opval);
1bbd6057 4681 TRACE_RESULT (current_cpu, abuf, "cr", 'D', opval);
cbb38b47
BE
4682 }
4683
4684 return vpc;
4685#undef FLD
4686}
4687
4688/* rte: rte */
4689
4690static SEM_PC
4691SEM_FN_NAME (sh64_media,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4692{
4693#define FLD(f) abuf->fields.fmt_empty.f
4694 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4695 int UNUSED written = 0;
4696 IADDR UNUSED pc = abuf->addr;
4697 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4698
4699((void) 0); /*nop*/
4700
4701 return vpc;
4702#undef FLD
4703}
4704
4705/* shard: shard $rm, $rn, $rd */
4706
4707static SEM_PC
4708SEM_FN_NAME (sh64_media,shard) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4709{
4710#define FLD(f) abuf->fields.sfmt_add.f
4711 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4712 int UNUSED written = 0;
4713 IADDR UNUSED pc = abuf->addr;
4714 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4715
4716 {
4717 DI opval = SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4718 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4719 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4720 }
4721
4722 return vpc;
4723#undef FLD
4724}
4725
4726/* shardl: shard.l $rm, $rn, $rd */
4727
4728static SEM_PC
4729SEM_FN_NAME (sh64_media,shardl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4730{
4731#define FLD(f) abuf->fields.sfmt_add.f
4732 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4733 int UNUSED written = 0;
4734 IADDR UNUSED pc = abuf->addr;
4735 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4736
4737 {
4738 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4739 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4740 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4741 }
4742
4743 return vpc;
4744#undef FLD
4745}
4746
4747/* shari: shari $rm, $uimm6, $rd */
4748
4749static SEM_PC
4750SEM_FN_NAME (sh64_media,shari) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4751{
4752#define FLD(f) abuf->fields.sfmt_shari.f
4753 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4754 int UNUSED written = 0;
4755 IADDR UNUSED pc = abuf->addr;
4756 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4757
4758 {
4759 DI opval = SRADI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4760 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4761 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4762 }
4763
4764 return vpc;
4765#undef FLD
4766}
4767
4768/* sharil: shari.l $rm, $uimm6, $rd */
4769
4770static SEM_PC
4771SEM_FN_NAME (sh64_media,sharil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4772{
4773#define FLD(f) abuf->fields.sfmt_shari.f
4774 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4775 int UNUSED written = 0;
4776 IADDR UNUSED pc = abuf->addr;
4777 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4778
4779 {
4780 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4781 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4782 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4783 }
4784
4785 return vpc;
4786#undef FLD
4787}
4788
4789/* shlld: shlld $rm, $rn, $rd */
4790
4791static SEM_PC
4792SEM_FN_NAME (sh64_media,shlld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4793{
4794#define FLD(f) abuf->fields.sfmt_add.f
4795 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4796 int UNUSED written = 0;
4797 IADDR UNUSED pc = abuf->addr;
4798 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4799
4800 {
4801 DI opval = SLLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4802 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4803 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4804 }
4805
4806 return vpc;
4807#undef FLD
4808}
4809
4810/* shlldl: shlld.l $rm, $rn, $rd */
4811
4812static SEM_PC
4813SEM_FN_NAME (sh64_media,shlldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4814{
4815#define FLD(f) abuf->fields.sfmt_add.f
4816 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4817 int UNUSED written = 0;
4818 IADDR UNUSED pc = abuf->addr;
4819 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4820
4821 {
4822 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4823 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4824 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4825 }
4826
4827 return vpc;
4828#undef FLD
4829}
4830
4831/* shlli: shlli $rm, $uimm6, $rd */
4832
4833static SEM_PC
4834SEM_FN_NAME (sh64_media,shlli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4835{
4836#define FLD(f) abuf->fields.sfmt_shari.f
4837 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4838 int UNUSED written = 0;
4839 IADDR UNUSED pc = abuf->addr;
4840 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4841
4842 {
4843 DI opval = SLLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4844 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4845 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4846 }
4847
4848 return vpc;
4849#undef FLD
4850}
4851
4852/* shllil: shlli.l $rm, $uimm6, $rd */
4853
4854static SEM_PC
4855SEM_FN_NAME (sh64_media,shllil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4856{
4857#define FLD(f) abuf->fields.sfmt_shari.f
4858 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4859 int UNUSED written = 0;
4860 IADDR UNUSED pc = abuf->addr;
4861 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4862
4863 {
4864 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4865 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4866 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4867 }
4868
4869 return vpc;
4870#undef FLD
4871}
4872
4873/* shlrd: shlrd $rm, $rn, $rd */
4874
4875static SEM_PC
4876SEM_FN_NAME (sh64_media,shlrd) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4877{
4878#define FLD(f) abuf->fields.sfmt_add.f
4879 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4880 int UNUSED written = 0;
4881 IADDR UNUSED pc = abuf->addr;
4882 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4883
4884 {
4885 DI opval = SRLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63));
4886 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4887 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4888 }
4889
4890 return vpc;
4891#undef FLD
4892}
4893
4894/* shlrdl: shlrd.l $rm, $rn, $rd */
4895
4896static SEM_PC
4897SEM_FN_NAME (sh64_media,shlrdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4898{
4899#define FLD(f) abuf->fields.sfmt_add.f
4900 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4901 int UNUSED written = 0;
4902 IADDR UNUSED pc = abuf->addr;
4903 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4904
4905 {
4906 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63)));
4907 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4908 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4909 }
4910
4911 return vpc;
4912#undef FLD
4913}
4914
4915/* shlri: shlri $rm, $uimm6, $rd */
4916
4917static SEM_PC
4918SEM_FN_NAME (sh64_media,shlri) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4919{
4920#define FLD(f) abuf->fields.sfmt_shari.f
4921 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4922 int UNUSED written = 0;
4923 IADDR UNUSED pc = abuf->addr;
4924 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4925
4926 {
4927 DI opval = SRLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6));
4928 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4929 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4930 }
4931
4932 return vpc;
4933#undef FLD
4934}
4935
4936/* shlril: shlri.l $rm, $uimm6, $rd */
4937
4938static SEM_PC
4939SEM_FN_NAME (sh64_media,shlril) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4940{
4941#define FLD(f) abuf->fields.sfmt_shari.f
4942 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4943 int UNUSED written = 0;
4944 IADDR UNUSED pc = abuf->addr;
4945 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4946
4947 {
4948 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63)));
4949 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4950 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4951 }
4952
4953 return vpc;
4954#undef FLD
4955}
4956
4957/* shori: shori $uimm16, $rd */
4958
4959static SEM_PC
4960SEM_FN_NAME (sh64_media,shori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4961{
4962#define FLD(f) abuf->fields.sfmt_shori.f
4963 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4964 int UNUSED written = 0;
4965 IADDR UNUSED pc = abuf->addr;
4966 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4967
4968 {
4969 DI opval = ORDI (SLLDI (GET_H_GR (FLD (f_dest)), 16), ZEXTSIDI (FLD (f_uimm16)));
4970 SET_H_GR (FLD (f_dest), opval);
1bbd6057 4971 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
4972 }
4973
4974 return vpc;
4975#undef FLD
4976}
4977
4978/* sleep: sleep */
4979
4980static SEM_PC
4981SEM_FN_NAME (sh64_media,sleep) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4982{
4983#define FLD(f) abuf->fields.fmt_empty.f
4984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4985 int UNUSED written = 0;
4986 IADDR UNUSED pc = abuf->addr;
4987 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
4988
4989((void) 0); /*nop*/
4990
4991 return vpc;
4992#undef FLD
4993}
4994
4995/* stb: st.b $rm, $disp10, $rd */
4996
4997static SEM_PC
4998SEM_FN_NAME (sh64_media,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
4999{
5000#define FLD(f) abuf->fields.sfmt_addi.f
5001 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5002 int UNUSED written = 0;
5003 IADDR UNUSED pc = abuf->addr;
5004 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5005
5006 {
5007 UQI opval = ANDQI (GET_H_GR (FLD (f_dest)), 255);
5008 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))), opval);
5009 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5010 }
5011
5012 return vpc;
5013#undef FLD
5014}
5015
5016/* stl: st.l $rm, $disp10x4, $rd */
5017
5018static SEM_PC
5019SEM_FN_NAME (sh64_media,stl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5020{
5021#define FLD(f) abuf->fields.sfmt_flds.f
5022 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5023 int UNUSED written = 0;
5024 IADDR UNUSED pc = abuf->addr;
5025 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5026
5027 {
5028 SI opval = ANDSI (GET_H_GR (FLD (f_dest)), 0xffffffff);
5029 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4))), opval);
5030 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5031 }
5032
5033 return vpc;
5034#undef FLD
5035}
5036
5037/* stq: st.q $rm, $disp10x8, $rd */
5038
5039static SEM_PC
5040SEM_FN_NAME (sh64_media,stq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5041{
5042#define FLD(f) abuf->fields.sfmt_fldd.f
5043 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5044 int UNUSED written = 0;
5045 IADDR UNUSED pc = abuf->addr;
5046 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5047
5048 {
5049 DI opval = GET_H_GR (FLD (f_dest));
5050 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8))), opval);
5051 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5052 }
5053
5054 return vpc;
5055#undef FLD
5056}
5057
5058/* stw: st.w $rm, $disp10x2, $rd */
5059
5060static SEM_PC
5061SEM_FN_NAME (sh64_media,stw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5062{
5063#define FLD(f) abuf->fields.sfmt_lduw.f
5064 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5065 int UNUSED written = 0;
5066 IADDR UNUSED pc = abuf->addr;
5067 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5068
5069 {
5070 HI opval = ANDHI (GET_H_GR (FLD (f_dest)), 65535);
5071 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))), opval);
5072 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5073 }
5074
5075 return vpc;
5076#undef FLD
5077}
5078
5079/* sthil: sthi.l $rm, $disp6, $rd */
5080
5081static SEM_PC
5082SEM_FN_NAME (sh64_media,sthil) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5083{
1bbd6057 5084#define FLD(f) abuf->fields.sfmt_ldhil.f
cbb38b47
BE
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{
5091 DI tmp_addr;
5092 QI tmp_bytecount;
5093 DI tmp_val;
5094 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
5095 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1);
1bbd6057
JR
5096if (ANDQI (tmp_bytecount, 4)) {
5097 {
5098 SI opval = GET_H_GR (FLD (f_dest));
5099 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
5100 written |= (1 << 5);
5101 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5102 }
5103} else {
cbb38b47 5104if (GET_H_ENDIAN ()) {
1bbd6057 5105{
cbb38b47 5106 tmp_val = GET_H_GR (FLD (f_dest));
1bbd6057 5107if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5108{
5109 {
5110 UQI opval = ANDQI (tmp_val, 255);
5111 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5112 written |= (1 << 6);
cbb38b47
BE
5113 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5114 }
5115 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5116}
5117}
1bbd6057 5118if (ANDQI (tmp_bytecount, 2)) {
cbb38b47
BE
5119{
5120 {
1bbd6057
JR
5121 HI opval = ANDHI (tmp_val, 65535);
5122 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
cbb38b47
BE
5123 written |= (1 << 4);
5124 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5125 }
1bbd6057
JR
5126 tmp_val = SRLDI (tmp_val, 16);
5127}
cbb38b47
BE
5128}
5129}
1bbd6057
JR
5130} else {
5131{
5132 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount)));
5133if (ANDQI (tmp_bytecount, 2)) {
cbb38b47
BE
5134{
5135 {
1bbd6057
JR
5136 HI opval = ANDHI (tmp_val, 65535);
5137 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
cbb38b47
BE
5138 written |= (1 << 4);
5139 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5140 }
1bbd6057 5141 tmp_val = SRLDI (tmp_val, 16);
cbb38b47
BE
5142}
5143}
1bbd6057 5144if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5145{
5146 {
5147 UQI opval = ANDQI (tmp_val, 255);
5148 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5149 written |= (1 << 6);
cbb38b47
BE
5150 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5151 }
5152 tmp_val = SRLDI (tmp_val, 8);
1bbd6057
JR
5153}
5154}
5155}
cbb38b47
BE
5156}
5157}
5158}
5159
5160 abuf->written = written;
5161 return vpc;
5162#undef FLD
5163}
5164
5165/* sthiq: sthi.q $rm, $disp6, $rd */
5166
5167static SEM_PC
5168SEM_FN_NAME (sh64_media,sthiq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5169{
1bbd6057 5170#define FLD(f) abuf->fields.sfmt_ldhil.f
cbb38b47
BE
5171 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5172 int UNUSED written = 0;
5173 IADDR UNUSED pc = abuf->addr;
5174 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5175
5176{
5177 DI tmp_addr;
5178 QI tmp_bytecount;
5179 DI tmp_val;
5180 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
5181 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1);
1bbd6057
JR
5182if (ANDQI (tmp_bytecount, 8)) {
5183 {
5184 DI opval = GET_H_GR (FLD (f_dest));
5185 SETMEMDI (current_cpu, pc, ANDDI (tmp_addr, -8), opval);
5186 written |= (1 << 4);
5187 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5188 }
5189} else {
cbb38b47 5190if (GET_H_ENDIAN ()) {
1bbd6057 5191{
cbb38b47 5192 tmp_val = GET_H_GR (FLD (f_dest));
1bbd6057 5193if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5194{
5195 {
5196 UQI opval = ANDQI (tmp_val, 255);
5197 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5198 written |= (1 << 7);
cbb38b47
BE
5199 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5200 }
5201 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5202}
5203}
1bbd6057 5204if (ANDQI (tmp_bytecount, 2)) {
cbb38b47
BE
5205{
5206 {
1bbd6057
JR
5207 HI opval = ANDHI (tmp_val, 65535);
5208 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
5209 written |= (1 << 5);
cbb38b47
BE
5210 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5211 }
1bbd6057 5212 tmp_val = SRLDI (tmp_val, 16);
cbb38b47
BE
5213}
5214}
1bbd6057 5215if (ANDQI (tmp_bytecount, 4)) {
cbb38b47
BE
5216{
5217 {
1bbd6057
JR
5218 SI opval = ANDSI (tmp_val, 0xffffffff);
5219 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8), opval);
5220 written |= (1 << 6);
cbb38b47
BE
5221 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5222 }
1bbd6057
JR
5223 tmp_val = SRLDI (tmp_val, 32);
5224}
5225}
5226}
5227} else {
5228{
5229 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount)));
5230if (ANDQI (tmp_bytecount, 4)) {
5231{
5232 {
5233 SI opval = ANDSI (tmp_val, 0xffffffff);
5234 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8), opval);
5235 written |= (1 << 6);
5236 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5237 }
5238 tmp_val = SRLDI (tmp_val, 32);
5239}
5240}
5241if (ANDQI (tmp_bytecount, 2)) {
5242{
5243 {
5244 HI opval = ANDHI (tmp_val, 65535);
5245 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval);
5246 written |= (1 << 5);
5247 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5248 }
5249 tmp_val = SRLDI (tmp_val, 16);
cbb38b47
BE
5250}
5251}
1bbd6057 5252if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5253{
5254 {
5255 UQI opval = ANDQI (tmp_val, 255);
5256 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5257 written |= (1 << 7);
cbb38b47
BE
5258 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5259 }
5260 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5261}
5262}
1bbd6057
JR
5263}
5264}
5265}
5266}
5267
5268 abuf->written = written;
5269 return vpc;
5270#undef FLD
5271}
5272
5273/* stlol: stlo.l $rm, $disp6, $rd */
5274
5275static SEM_PC
5276SEM_FN_NAME (sh64_media,stlol) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
cbb38b47 5277{
1bbd6057
JR
5278#define FLD(f) abuf->fields.sfmt_ldhil.f
5279 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5280 int UNUSED written = 0;
5281 IADDR UNUSED pc = abuf->addr;
5282 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5283
5284{
5285 DI tmp_addr;
5286 QI tmp_bytecount;
5287 DI tmp_val;
5288 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
5289 tmp_bytecount = SUBSI (4, ANDDI (tmp_addr, 3));
5290if (ANDQI (tmp_bytecount, 4)) {
cbb38b47 5291 {
1bbd6057
JR
5292 USI opval = GET_H_GR (FLD (f_dest));
5293 SETMEMUSI (current_cpu, pc, tmp_addr, opval);
5294 written |= (1 << 6);
5295 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5296 }
5297} else {
5298if (GET_H_ENDIAN ()) {
5299{
5300 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount)));
5301if (ANDQI (tmp_bytecount, 2)) {
5302{
5303 {
5304 UHI opval = ANDHI (tmp_val, 65535);
5305 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
cbb38b47
BE
5306 written |= (1 << 4);
5307 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5308 }
1bbd6057 5309 tmp_val = SRLDI (tmp_val, 16);
cbb38b47
BE
5310}
5311}
1bbd6057 5312if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5313{
5314 {
5315 UQI opval = ANDQI (tmp_val, 255);
5316 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5317 written |= (1 << 5);
cbb38b47
BE
5318 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5319 }
5320 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5321}
5322}
1bbd6057
JR
5323}
5324} else {
5325{
5326 tmp_val = GET_H_GR (FLD (f_dest));
5327if (ANDQI (tmp_bytecount, 1)) {
cbb38b47
BE
5328{
5329 {
5330 UQI opval = ANDQI (tmp_val, 255);
5331 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
1bbd6057 5332 written |= (1 << 5);
cbb38b47
BE
5333 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5334 }
5335 tmp_val = SRLDI (tmp_val, 8);
cbb38b47
BE
5336}
5337}
1bbd6057 5338if (ANDQI (tmp_bytecount, 2)) {
cbb38b47
BE
5339{
5340 {
1bbd6057
JR
5341 UHI opval = ANDHI (tmp_val, 65535);
5342 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
cbb38b47
BE
5343 written |= (1 << 4);
5344 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5345 }
1bbd6057
JR
5346 tmp_val = SRLDI (tmp_val, 16);
5347}
5348}
cbb38b47
BE
5349}
5350}
5351}
cbb38b47
BE
5352}
5353
1bbd6057 5354 abuf->written = written;
cbb38b47
BE
5355 return vpc;
5356#undef FLD
5357}
5358
5359/* stloq: stlo.q $rm, $disp6, $rd */
5360
5361static SEM_PC
5362SEM_FN_NAME (sh64_media,stloq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5363{
1bbd6057 5364#define FLD(f) abuf->fields.sfmt_ldhil.f
cbb38b47
BE
5365 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5366 int UNUSED written = 0;
5367 IADDR UNUSED pc = abuf->addr;
5368 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5369
1bbd6057
JR
5370{
5371 DI tmp_addr;
5372 QI tmp_bytecount;
5373 DI tmp_val;
5374 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6));
5375 tmp_bytecount = SUBSI (8, ANDDI (tmp_addr, 7));
5376if (ANDQI (tmp_bytecount, 8)) {
5377 {
5378 UDI opval = GET_H_GR (FLD (f_dest));
5379 SETMEMUDI (current_cpu, pc, tmp_addr, opval);
5380 written |= (1 << 4);
5381 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5382 }
5383} else {
5384if (GET_H_ENDIAN ()) {
5385{
5386 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount)));
5387if (ANDQI (tmp_bytecount, 4)) {
5388{
5389 {
5390 USI opval = ANDSI (tmp_val, 0xffffffff);
5391 SETMEMUSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4), opval);
5392 written |= (1 << 7);
5393 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5394 }
5395 tmp_val = SRLDI (tmp_val, 32);
5396}
5397}
5398if (ANDQI (tmp_bytecount, 2)) {
5399{
5400 {
5401 UHI opval = ANDHI (tmp_val, 65535);
5402 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
5403 written |= (1 << 5);
5404 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5405 }
5406 tmp_val = SRLDI (tmp_val, 16);
5407}
5408}
5409if (ANDQI (tmp_bytecount, 1)) {
5410{
5411 {
5412 UQI opval = ANDQI (tmp_val, 255);
5413 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5414 written |= (1 << 6);
5415 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5416 }
5417 tmp_val = SRLDI (tmp_val, 8);
5418}
5419}
5420}
5421} else {
5422{
5423 tmp_val = GET_H_GR (FLD (f_dest));
5424if (ANDQI (tmp_bytecount, 1)) {
5425{
5426 {
5427 UQI opval = ANDQI (tmp_val, 255);
5428 SETMEMUQI (current_cpu, pc, tmp_addr, opval);
5429 written |= (1 << 6);
5430 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5431 }
5432 tmp_val = SRLDI (tmp_val, 8);
5433}
5434}
5435if (ANDQI (tmp_bytecount, 2)) {
5436{
5437 {
5438 UHI opval = ANDHI (tmp_val, 65535);
5439 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval);
5440 written |= (1 << 5);
5441 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5442 }
5443 tmp_val = SRLDI (tmp_val, 16);
5444}
5445}
5446if (ANDQI (tmp_bytecount, 4)) {
5447{
5448 {
5449 USI opval = ANDSI (tmp_val, 0xffffffff);
5450 SETMEMUSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4), opval);
5451 written |= (1 << 7);
5452 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5453 }
5454 tmp_val = SRLDI (tmp_val, 32);
5455}
5456}
5457}
5458}
5459}
5460}
cbb38b47 5461
1bbd6057 5462 abuf->written = written;
cbb38b47
BE
5463 return vpc;
5464#undef FLD
5465}
5466
5467/* stxb: stx.b $rm, $rn, $rd */
5468
5469static SEM_PC
5470SEM_FN_NAME (sh64_media,stxb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5471{
5472#define FLD(f) abuf->fields.sfmt_add.f
5473 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5474 int UNUSED written = 0;
5475 IADDR UNUSED pc = abuf->addr;
5476 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5477
5478 {
5479 UQI opval = SUBWORDDIQI (GET_H_GR (FLD (f_dest)), 7);
5480 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5481 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5482 }
5483
5484 return vpc;
5485#undef FLD
5486}
5487
5488/* stxl: stx.l $rm, $rn, $rd */
5489
5490static SEM_PC
5491SEM_FN_NAME (sh64_media,stxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5492{
5493#define FLD(f) abuf->fields.sfmt_add.f
5494 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5495 int UNUSED written = 0;
5496 IADDR UNUSED pc = abuf->addr;
5497 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5498
5499 {
5500 SI opval = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1);
5501 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5502 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5503 }
5504
5505 return vpc;
5506#undef FLD
5507}
5508
5509/* stxq: stx.q $rm, $rn, $rd */
5510
5511static SEM_PC
5512SEM_FN_NAME (sh64_media,stxq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5513{
5514#define FLD(f) abuf->fields.sfmt_add.f
5515 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5516 int UNUSED written = 0;
5517 IADDR UNUSED pc = abuf->addr;
5518 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5519
5520 {
5521 DI opval = GET_H_GR (FLD (f_dest));
5522 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5523 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5524 }
5525
5526 return vpc;
5527#undef FLD
5528}
5529
5530/* stxw: stx.w $rm, $rn, $rd */
5531
5532static SEM_PC
5533SEM_FN_NAME (sh64_media,stxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5534{
5535#define FLD(f) abuf->fields.sfmt_add.f
5536 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5537 int UNUSED written = 0;
5538 IADDR UNUSED pc = abuf->addr;
5539 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5540
5541 {
5542 HI opval = SUBWORDDIHI (GET_H_GR (FLD (f_dest)), 3);
5543 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval);
5544 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5545 }
5546
5547 return vpc;
5548#undef FLD
5549}
5550
5551/* sub: sub $rm, $rn, $rd */
5552
5553static SEM_PC
5554SEM_FN_NAME (sh64_media,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5555{
5556#define FLD(f) abuf->fields.sfmt_add.f
5557 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5558 int UNUSED written = 0;
5559 IADDR UNUSED pc = abuf->addr;
5560 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5561
5562 {
5563 DI opval = SUBDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5564 SET_H_GR (FLD (f_dest), opval);
1bbd6057 5565 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
5566 }
5567
5568 return vpc;
5569#undef FLD
5570}
5571
5572/* subl: sub.l $rm, $rn, $rd */
5573
5574static SEM_PC
5575SEM_FN_NAME (sh64_media,subl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5576{
5577#define FLD(f) abuf->fields.sfmt_add.f
5578 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5579 int UNUSED written = 0;
5580 IADDR UNUSED pc = abuf->addr;
5581 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5582
5583 {
5584 DI opval = EXTSIDI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)));
5585 SET_H_GR (FLD (f_dest), opval);
1bbd6057 5586 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
5587 }
5588
5589 return vpc;
5590#undef FLD
5591}
5592
5593/* swapq: swap.q $rm, $rn, $rd */
5594
5595static SEM_PC
5596SEM_FN_NAME (sh64_media,swapq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5597{
5598#define FLD(f) abuf->fields.sfmt_add.f
5599 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5600 int UNUSED written = 0;
5601 IADDR UNUSED pc = abuf->addr;
5602 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5603
5604{
5605 DI tmp_addr;
5606 DI tmp_temp;
5607 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5608 tmp_temp = GETMEMDI (current_cpu, pc, tmp_addr);
5609 {
5610 DI opval = GET_H_GR (FLD (f_dest));
5611 SETMEMDI (current_cpu, pc, tmp_addr, opval);
5612 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval);
5613 }
5614 {
5615 DI opval = tmp_temp;
5616 SET_H_GR (FLD (f_dest), opval);
1bbd6057 5617 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
5618 }
5619}
5620
5621 return vpc;
5622#undef FLD
5623}
5624
5625/* synci: synci */
5626
5627static SEM_PC
5628SEM_FN_NAME (sh64_media,synci) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5629{
5630#define FLD(f) abuf->fields.fmt_empty.f
5631 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5632 int UNUSED written = 0;
5633 IADDR UNUSED pc = abuf->addr;
5634 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5635
5636((void) 0); /*nop*/
5637
5638 return vpc;
5639#undef FLD
5640}
5641
5642/* synco: synco */
5643
5644static SEM_PC
5645SEM_FN_NAME (sh64_media,synco) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5646{
5647#define FLD(f) abuf->fields.fmt_empty.f
5648 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5649 int UNUSED written = 0;
5650 IADDR UNUSED pc = abuf->addr;
5651 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5652
5653((void) 0); /*nop*/
5654
5655 return vpc;
5656#undef FLD
5657}
5658
5659/* trapa: trapa $rm */
5660
5661static SEM_PC
5662SEM_FN_NAME (sh64_media,trapa) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5663{
5664#define FLD(f) abuf->fields.sfmt_xori.f
5665 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5666 int UNUSED written = 0;
5667 IADDR UNUSED pc = abuf->addr;
5668 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5669
5670sh64_trapa (current_cpu, GET_H_GR (FLD (f_left)), pc);
5671
5672 return vpc;
5673#undef FLD
5674}
5675
5676/* xor: xor $rm, $rn, $rd */
5677
5678static SEM_PC
5679SEM_FN_NAME (sh64_media,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5680{
5681#define FLD(f) abuf->fields.sfmt_add.f
5682 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5683 int UNUSED written = 0;
5684 IADDR UNUSED pc = abuf->addr;
5685 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5686
5687 {
5688 DI opval = XORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)));
5689 SET_H_GR (FLD (f_dest), opval);
1bbd6057 5690 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
5691 }
5692
5693 return vpc;
5694#undef FLD
5695}
5696
5697/* xori: xori $rm, $imm6, $rd */
5698
5699static SEM_PC
5700SEM_FN_NAME (sh64_media,xori) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
5701{
5702#define FLD(f) abuf->fields.sfmt_xori.f
5703 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5704 int UNUSED written = 0;
5705 IADDR UNUSED pc = abuf->addr;
5706 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5707
5708 {
5709 DI opval = XORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)));
5710 SET_H_GR (FLD (f_dest), opval);
1bbd6057 5711 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval);
cbb38b47
BE
5712 }
5713
5714 return vpc;
5715#undef FLD
5716}
5717
5718/* Table of all semantic fns. */
5719
5720static const struct sem_fn_desc sem_fns[] = {
5721 { SH64_MEDIA_INSN_X_INVALID, SEM_FN_NAME (sh64_media,x_invalid) },
5722 { SH64_MEDIA_INSN_X_AFTER, SEM_FN_NAME (sh64_media,x_after) },
5723 { SH64_MEDIA_INSN_X_BEFORE, SEM_FN_NAME (sh64_media,x_before) },
5724 { SH64_MEDIA_INSN_X_CTI_CHAIN, SEM_FN_NAME (sh64_media,x_cti_chain) },
5725 { SH64_MEDIA_INSN_X_CHAIN, SEM_FN_NAME (sh64_media,x_chain) },
5726 { SH64_MEDIA_INSN_X_BEGIN, SEM_FN_NAME (sh64_media,x_begin) },
5727 { SH64_MEDIA_INSN_ADD, SEM_FN_NAME (sh64_media,add) },
5728 { SH64_MEDIA_INSN_ADDL, SEM_FN_NAME (sh64_media,addl) },
5729 { SH64_MEDIA_INSN_ADDI, SEM_FN_NAME (sh64_media,addi) },
5730 { SH64_MEDIA_INSN_ADDIL, SEM_FN_NAME (sh64_media,addil) },
5731 { SH64_MEDIA_INSN_ADDZL, SEM_FN_NAME (sh64_media,addzl) },
5732 { SH64_MEDIA_INSN_ALLOCO, SEM_FN_NAME (sh64_media,alloco) },
5733 { SH64_MEDIA_INSN_AND, SEM_FN_NAME (sh64_media,and) },
5734 { SH64_MEDIA_INSN_ANDC, SEM_FN_NAME (sh64_media,andc) },
5735 { SH64_MEDIA_INSN_ANDI, SEM_FN_NAME (sh64_media,andi) },
5736 { SH64_MEDIA_INSN_BEQ, SEM_FN_NAME (sh64_media,beq) },
5737 { SH64_MEDIA_INSN_BEQI, SEM_FN_NAME (sh64_media,beqi) },
5738 { SH64_MEDIA_INSN_BGE, SEM_FN_NAME (sh64_media,bge) },
5739 { SH64_MEDIA_INSN_BGEU, SEM_FN_NAME (sh64_media,bgeu) },
5740 { SH64_MEDIA_INSN_BGT, SEM_FN_NAME (sh64_media,bgt) },
5741 { SH64_MEDIA_INSN_BGTU, SEM_FN_NAME (sh64_media,bgtu) },
5742 { SH64_MEDIA_INSN_BLINK, SEM_FN_NAME (sh64_media,blink) },
5743 { SH64_MEDIA_INSN_BNE, SEM_FN_NAME (sh64_media,bne) },
5744 { SH64_MEDIA_INSN_BNEI, SEM_FN_NAME (sh64_media,bnei) },
5745 { SH64_MEDIA_INSN_BRK, SEM_FN_NAME (sh64_media,brk) },
5746 { SH64_MEDIA_INSN_BYTEREV, SEM_FN_NAME (sh64_media,byterev) },
5747 { SH64_MEDIA_INSN_CMPEQ, SEM_FN_NAME (sh64_media,cmpeq) },
5748 { SH64_MEDIA_INSN_CMPGT, SEM_FN_NAME (sh64_media,cmpgt) },
5749 { SH64_MEDIA_INSN_CMPGTU, SEM_FN_NAME (sh64_media,cmpgtu) },
5750 { SH64_MEDIA_INSN_CMVEQ, SEM_FN_NAME (sh64_media,cmveq) },
5751 { SH64_MEDIA_INSN_CMVNE, SEM_FN_NAME (sh64_media,cmvne) },
5752 { SH64_MEDIA_INSN_FABSD, SEM_FN_NAME (sh64_media,fabsd) },
5753 { SH64_MEDIA_INSN_FABSS, SEM_FN_NAME (sh64_media,fabss) },
5754 { SH64_MEDIA_INSN_FADDD, SEM_FN_NAME (sh64_media,faddd) },
5755 { SH64_MEDIA_INSN_FADDS, SEM_FN_NAME (sh64_media,fadds) },
5756 { SH64_MEDIA_INSN_FCMPEQD, SEM_FN_NAME (sh64_media,fcmpeqd) },
5757 { SH64_MEDIA_INSN_FCMPEQS, SEM_FN_NAME (sh64_media,fcmpeqs) },
5758 { SH64_MEDIA_INSN_FCMPGED, SEM_FN_NAME (sh64_media,fcmpged) },
5759 { SH64_MEDIA_INSN_FCMPGES, SEM_FN_NAME (sh64_media,fcmpges) },
5760 { SH64_MEDIA_INSN_FCMPGTD, SEM_FN_NAME (sh64_media,fcmpgtd) },
5761 { SH64_MEDIA_INSN_FCMPGTS, SEM_FN_NAME (sh64_media,fcmpgts) },
5762 { SH64_MEDIA_INSN_FCMPUND, SEM_FN_NAME (sh64_media,fcmpund) },
5763 { SH64_MEDIA_INSN_FCMPUNS, SEM_FN_NAME (sh64_media,fcmpuns) },
5764 { SH64_MEDIA_INSN_FCNVDS, SEM_FN_NAME (sh64_media,fcnvds) },
5765 { SH64_MEDIA_INSN_FCNVSD, SEM_FN_NAME (sh64_media,fcnvsd) },
5766 { SH64_MEDIA_INSN_FDIVD, SEM_FN_NAME (sh64_media,fdivd) },
5767 { SH64_MEDIA_INSN_FDIVS, SEM_FN_NAME (sh64_media,fdivs) },
5768 { SH64_MEDIA_INSN_FGETSCR, SEM_FN_NAME (sh64_media,fgetscr) },
5769 { SH64_MEDIA_INSN_FIPRS, SEM_FN_NAME (sh64_media,fiprs) },
5770 { SH64_MEDIA_INSN_FLDD, SEM_FN_NAME (sh64_media,fldd) },
5771 { SH64_MEDIA_INSN_FLDP, SEM_FN_NAME (sh64_media,fldp) },
5772 { SH64_MEDIA_INSN_FLDS, SEM_FN_NAME (sh64_media,flds) },
5773 { SH64_MEDIA_INSN_FLDXD, SEM_FN_NAME (sh64_media,fldxd) },
5774 { SH64_MEDIA_INSN_FLDXP, SEM_FN_NAME (sh64_media,fldxp) },
5775 { SH64_MEDIA_INSN_FLDXS, SEM_FN_NAME (sh64_media,fldxs) },
5776 { SH64_MEDIA_INSN_FLOATLD, SEM_FN_NAME (sh64_media,floatld) },
5777 { SH64_MEDIA_INSN_FLOATLS, SEM_FN_NAME (sh64_media,floatls) },
5778 { SH64_MEDIA_INSN_FLOATQD, SEM_FN_NAME (sh64_media,floatqd) },
5779 { SH64_MEDIA_INSN_FLOATQS, SEM_FN_NAME (sh64_media,floatqs) },
5780 { SH64_MEDIA_INSN_FMACS, SEM_FN_NAME (sh64_media,fmacs) },
5781 { SH64_MEDIA_INSN_FMOVD, SEM_FN_NAME (sh64_media,fmovd) },
5782 { SH64_MEDIA_INSN_FMOVDQ, SEM_FN_NAME (sh64_media,fmovdq) },
5783 { SH64_MEDIA_INSN_FMOVLS, SEM_FN_NAME (sh64_media,fmovls) },
5784 { SH64_MEDIA_INSN_FMOVQD, SEM_FN_NAME (sh64_media,fmovqd) },
5785 { SH64_MEDIA_INSN_FMOVS, SEM_FN_NAME (sh64_media,fmovs) },
5786 { SH64_MEDIA_INSN_FMOVSL, SEM_FN_NAME (sh64_media,fmovsl) },
5787 { SH64_MEDIA_INSN_FMULD, SEM_FN_NAME (sh64_media,fmuld) },
5788 { SH64_MEDIA_INSN_FMULS, SEM_FN_NAME (sh64_media,fmuls) },
5789 { SH64_MEDIA_INSN_FNEGD, SEM_FN_NAME (sh64_media,fnegd) },
5790 { SH64_MEDIA_INSN_FNEGS, SEM_FN_NAME (sh64_media,fnegs) },
5791 { SH64_MEDIA_INSN_FPUTSCR, SEM_FN_NAME (sh64_media,fputscr) },
5792 { SH64_MEDIA_INSN_FSQRTD, SEM_FN_NAME (sh64_media,fsqrtd) },
5793 { SH64_MEDIA_INSN_FSQRTS, SEM_FN_NAME (sh64_media,fsqrts) },
5794 { SH64_MEDIA_INSN_FSTD, SEM_FN_NAME (sh64_media,fstd) },
5795 { SH64_MEDIA_INSN_FSTP, SEM_FN_NAME (sh64_media,fstp) },
5796 { SH64_MEDIA_INSN_FSTS, SEM_FN_NAME (sh64_media,fsts) },
5797 { SH64_MEDIA_INSN_FSTXD, SEM_FN_NAME (sh64_media,fstxd) },
5798 { SH64_MEDIA_INSN_FSTXP, SEM_FN_NAME (sh64_media,fstxp) },
5799 { SH64_MEDIA_INSN_FSTXS, SEM_FN_NAME (sh64_media,fstxs) },
5800 { SH64_MEDIA_INSN_FSUBD, SEM_FN_NAME (sh64_media,fsubd) },
5801 { SH64_MEDIA_INSN_FSUBS, SEM_FN_NAME (sh64_media,fsubs) },
5802 { SH64_MEDIA_INSN_FTRCDL, SEM_FN_NAME (sh64_media,ftrcdl) },
5803 { SH64_MEDIA_INSN_FTRCSL, SEM_FN_NAME (sh64_media,ftrcsl) },
5804 { SH64_MEDIA_INSN_FTRCDQ, SEM_FN_NAME (sh64_media,ftrcdq) },
5805 { SH64_MEDIA_INSN_FTRCSQ, SEM_FN_NAME (sh64_media,ftrcsq) },
5806 { SH64_MEDIA_INSN_FTRVS, SEM_FN_NAME (sh64_media,ftrvs) },
5807 { SH64_MEDIA_INSN_GETCFG, SEM_FN_NAME (sh64_media,getcfg) },
5808 { SH64_MEDIA_INSN_GETCON, SEM_FN_NAME (sh64_media,getcon) },
5809 { SH64_MEDIA_INSN_GETTR, SEM_FN_NAME (sh64_media,gettr) },
5810 { SH64_MEDIA_INSN_ICBI, SEM_FN_NAME (sh64_media,icbi) },
5811 { SH64_MEDIA_INSN_LDB, SEM_FN_NAME (sh64_media,ldb) },
5812 { SH64_MEDIA_INSN_LDL, SEM_FN_NAME (sh64_media,ldl) },
5813 { SH64_MEDIA_INSN_LDQ, SEM_FN_NAME (sh64_media,ldq) },
5814 { SH64_MEDIA_INSN_LDUB, SEM_FN_NAME (sh64_media,ldub) },
5815 { SH64_MEDIA_INSN_LDUW, SEM_FN_NAME (sh64_media,lduw) },
5816 { SH64_MEDIA_INSN_LDW, SEM_FN_NAME (sh64_media,ldw) },
5817 { SH64_MEDIA_INSN_LDHIL, SEM_FN_NAME (sh64_media,ldhil) },
5818 { SH64_MEDIA_INSN_LDHIQ, SEM_FN_NAME (sh64_media,ldhiq) },
5819 { SH64_MEDIA_INSN_LDLOL, SEM_FN_NAME (sh64_media,ldlol) },
5820 { SH64_MEDIA_INSN_LDLOQ, SEM_FN_NAME (sh64_media,ldloq) },
5821 { SH64_MEDIA_INSN_LDXB, SEM_FN_NAME (sh64_media,ldxb) },
5822 { SH64_MEDIA_INSN_LDXL, SEM_FN_NAME (sh64_media,ldxl) },
5823 { SH64_MEDIA_INSN_LDXQ, SEM_FN_NAME (sh64_media,ldxq) },
5824 { SH64_MEDIA_INSN_LDXUB, SEM_FN_NAME (sh64_media,ldxub) },
5825 { SH64_MEDIA_INSN_LDXUW, SEM_FN_NAME (sh64_media,ldxuw) },
5826 { SH64_MEDIA_INSN_LDXW, SEM_FN_NAME (sh64_media,ldxw) },
5827 { SH64_MEDIA_INSN_MABSL, SEM_FN_NAME (sh64_media,mabsl) },
5828 { SH64_MEDIA_INSN_MABSW, SEM_FN_NAME (sh64_media,mabsw) },
5829 { SH64_MEDIA_INSN_MADDL, SEM_FN_NAME (sh64_media,maddl) },
5830 { SH64_MEDIA_INSN_MADDW, SEM_FN_NAME (sh64_media,maddw) },
5831 { SH64_MEDIA_INSN_MADDSL, SEM_FN_NAME (sh64_media,maddsl) },
5832 { SH64_MEDIA_INSN_MADDSUB, SEM_FN_NAME (sh64_media,maddsub) },
5833 { SH64_MEDIA_INSN_MADDSW, SEM_FN_NAME (sh64_media,maddsw) },
5834 { SH64_MEDIA_INSN_MCMPEQB, SEM_FN_NAME (sh64_media,mcmpeqb) },
5835 { SH64_MEDIA_INSN_MCMPEQL, SEM_FN_NAME (sh64_media,mcmpeql) },
5836 { SH64_MEDIA_INSN_MCMPEQW, SEM_FN_NAME (sh64_media,mcmpeqw) },
5837 { SH64_MEDIA_INSN_MCMPGTL, SEM_FN_NAME (sh64_media,mcmpgtl) },
5838 { SH64_MEDIA_INSN_MCMPGTUB, SEM_FN_NAME (sh64_media,mcmpgtub) },
5839 { SH64_MEDIA_INSN_MCMPGTW, SEM_FN_NAME (sh64_media,mcmpgtw) },
5840 { SH64_MEDIA_INSN_MCMV, SEM_FN_NAME (sh64_media,mcmv) },
5841 { SH64_MEDIA_INSN_MCNVSLW, SEM_FN_NAME (sh64_media,mcnvslw) },
5842 { SH64_MEDIA_INSN_MCNVSWB, SEM_FN_NAME (sh64_media,mcnvswb) },
5843 { SH64_MEDIA_INSN_MCNVSWUB, SEM_FN_NAME (sh64_media,mcnvswub) },
5844 { SH64_MEDIA_INSN_MEXTR1, SEM_FN_NAME (sh64_media,mextr1) },
5845 { SH64_MEDIA_INSN_MEXTR2, SEM_FN_NAME (sh64_media,mextr2) },
5846 { SH64_MEDIA_INSN_MEXTR3, SEM_FN_NAME (sh64_media,mextr3) },
5847 { SH64_MEDIA_INSN_MEXTR4, SEM_FN_NAME (sh64_media,mextr4) },
5848 { SH64_MEDIA_INSN_MEXTR5, SEM_FN_NAME (sh64_media,mextr5) },
5849 { SH64_MEDIA_INSN_MEXTR6, SEM_FN_NAME (sh64_media,mextr6) },
5850 { SH64_MEDIA_INSN_MEXTR7, SEM_FN_NAME (sh64_media,mextr7) },
5851 { SH64_MEDIA_INSN_MMACFXWL, SEM_FN_NAME (sh64_media,mmacfxwl) },
5852 { SH64_MEDIA_INSN_MMACNFX_WL, SEM_FN_NAME (sh64_media,mmacnfx_wl) },
5853 { SH64_MEDIA_INSN_MMULL, SEM_FN_NAME (sh64_media,mmull) },
5854 { SH64_MEDIA_INSN_MMULW, SEM_FN_NAME (sh64_media,mmulw) },
5855 { SH64_MEDIA_INSN_MMULFXL, SEM_FN_NAME (sh64_media,mmulfxl) },
5856 { SH64_MEDIA_INSN_MMULFXW, SEM_FN_NAME (sh64_media,mmulfxw) },
5857 { SH64_MEDIA_INSN_MMULFXRPW, SEM_FN_NAME (sh64_media,mmulfxrpw) },
5858 { SH64_MEDIA_INSN_MMULHIWL, SEM_FN_NAME (sh64_media,mmulhiwl) },
5859 { SH64_MEDIA_INSN_MMULLOWL, SEM_FN_NAME (sh64_media,mmullowl) },
5860 { SH64_MEDIA_INSN_MMULSUMWQ, SEM_FN_NAME (sh64_media,mmulsumwq) },
5861 { SH64_MEDIA_INSN_MOVI, SEM_FN_NAME (sh64_media,movi) },
5862 { SH64_MEDIA_INSN_MPERMW, SEM_FN_NAME (sh64_media,mpermw) },
5863 { SH64_MEDIA_INSN_MSADUBQ, SEM_FN_NAME (sh64_media,msadubq) },
5864 { SH64_MEDIA_INSN_MSHALDSL, SEM_FN_NAME (sh64_media,mshaldsl) },
5865 { SH64_MEDIA_INSN_MSHALDSW, SEM_FN_NAME (sh64_media,mshaldsw) },
5866 { SH64_MEDIA_INSN_MSHARDL, SEM_FN_NAME (sh64_media,mshardl) },
5867 { SH64_MEDIA_INSN_MSHARDW, SEM_FN_NAME (sh64_media,mshardw) },
5868 { SH64_MEDIA_INSN_MSHARDSQ, SEM_FN_NAME (sh64_media,mshardsq) },
5869 { SH64_MEDIA_INSN_MSHFHIB, SEM_FN_NAME (sh64_media,mshfhib) },
5870 { SH64_MEDIA_INSN_MSHFHIL, SEM_FN_NAME (sh64_media,mshfhil) },
5871 { SH64_MEDIA_INSN_MSHFHIW, SEM_FN_NAME (sh64_media,mshfhiw) },
5872 { SH64_MEDIA_INSN_MSHFLOB, SEM_FN_NAME (sh64_media,mshflob) },
5873 { SH64_MEDIA_INSN_MSHFLOL, SEM_FN_NAME (sh64_media,mshflol) },
5874 { SH64_MEDIA_INSN_MSHFLOW, SEM_FN_NAME (sh64_media,mshflow) },
5875 { SH64_MEDIA_INSN_MSHLLDL, SEM_FN_NAME (sh64_media,mshlldl) },
5876 { SH64_MEDIA_INSN_MSHLLDW, SEM_FN_NAME (sh64_media,mshlldw) },
5877 { SH64_MEDIA_INSN_MSHLRDL, SEM_FN_NAME (sh64_media,mshlrdl) },
5878 { SH64_MEDIA_INSN_MSHLRDW, SEM_FN_NAME (sh64_media,mshlrdw) },
5879 { SH64_MEDIA_INSN_MSUBL, SEM_FN_NAME (sh64_media,msubl) },
5880 { SH64_MEDIA_INSN_MSUBW, SEM_FN_NAME (sh64_media,msubw) },
5881 { SH64_MEDIA_INSN_MSUBSL, SEM_FN_NAME (sh64_media,msubsl) },
5882 { SH64_MEDIA_INSN_MSUBSUB, SEM_FN_NAME (sh64_media,msubsub) },
5883 { SH64_MEDIA_INSN_MSUBSW, SEM_FN_NAME (sh64_media,msubsw) },
5884 { SH64_MEDIA_INSN_MULSL, SEM_FN_NAME (sh64_media,mulsl) },
5885 { SH64_MEDIA_INSN_MULUL, SEM_FN_NAME (sh64_media,mulul) },
5886 { SH64_MEDIA_INSN_NOP, SEM_FN_NAME (sh64_media,nop) },
5887 { SH64_MEDIA_INSN_NSB, SEM_FN_NAME (sh64_media,nsb) },
5888 { SH64_MEDIA_INSN_OCBI, SEM_FN_NAME (sh64_media,ocbi) },
5889 { SH64_MEDIA_INSN_OCBP, SEM_FN_NAME (sh64_media,ocbp) },
5890 { SH64_MEDIA_INSN_OCBWB, SEM_FN_NAME (sh64_media,ocbwb) },
5891 { SH64_MEDIA_INSN_OR, SEM_FN_NAME (sh64_media,or) },
5892 { SH64_MEDIA_INSN_ORI, SEM_FN_NAME (sh64_media,ori) },
5893 { SH64_MEDIA_INSN_PREFI, SEM_FN_NAME (sh64_media,prefi) },
5894 { SH64_MEDIA_INSN_PTA, SEM_FN_NAME (sh64_media,pta) },
5895 { SH64_MEDIA_INSN_PTABS, SEM_FN_NAME (sh64_media,ptabs) },
5896 { SH64_MEDIA_INSN_PTB, SEM_FN_NAME (sh64_media,ptb) },
5897 { SH64_MEDIA_INSN_PTREL, SEM_FN_NAME (sh64_media,ptrel) },
5898 { SH64_MEDIA_INSN_PUTCFG, SEM_FN_NAME (sh64_media,putcfg) },
5899 { SH64_MEDIA_INSN_PUTCON, SEM_FN_NAME (sh64_media,putcon) },
5900 { SH64_MEDIA_INSN_RTE, SEM_FN_NAME (sh64_media,rte) },
5901 { SH64_MEDIA_INSN_SHARD, SEM_FN_NAME (sh64_media,shard) },
5902 { SH64_MEDIA_INSN_SHARDL, SEM_FN_NAME (sh64_media,shardl) },
5903 { SH64_MEDIA_INSN_SHARI, SEM_FN_NAME (sh64_media,shari) },
5904 { SH64_MEDIA_INSN_SHARIL, SEM_FN_NAME (sh64_media,sharil) },
5905 { SH64_MEDIA_INSN_SHLLD, SEM_FN_NAME (sh64_media,shlld) },
5906 { SH64_MEDIA_INSN_SHLLDL, SEM_FN_NAME (sh64_media,shlldl) },
5907 { SH64_MEDIA_INSN_SHLLI, SEM_FN_NAME (sh64_media,shlli) },
5908 { SH64_MEDIA_INSN_SHLLIL, SEM_FN_NAME (sh64_media,shllil) },
5909 { SH64_MEDIA_INSN_SHLRD, SEM_FN_NAME (sh64_media,shlrd) },
5910 { SH64_MEDIA_INSN_SHLRDL, SEM_FN_NAME (sh64_media,shlrdl) },
5911 { SH64_MEDIA_INSN_SHLRI, SEM_FN_NAME (sh64_media,shlri) },
5912 { SH64_MEDIA_INSN_SHLRIL, SEM_FN_NAME (sh64_media,shlril) },
5913 { SH64_MEDIA_INSN_SHORI, SEM_FN_NAME (sh64_media,shori) },
5914 { SH64_MEDIA_INSN_SLEEP, SEM_FN_NAME (sh64_media,sleep) },
5915 { SH64_MEDIA_INSN_STB, SEM_FN_NAME (sh64_media,stb) },
5916 { SH64_MEDIA_INSN_STL, SEM_FN_NAME (sh64_media,stl) },
5917 { SH64_MEDIA_INSN_STQ, SEM_FN_NAME (sh64_media,stq) },
5918 { SH64_MEDIA_INSN_STW, SEM_FN_NAME (sh64_media,stw) },
5919 { SH64_MEDIA_INSN_STHIL, SEM_FN_NAME (sh64_media,sthil) },
5920 { SH64_MEDIA_INSN_STHIQ, SEM_FN_NAME (sh64_media,sthiq) },
5921 { SH64_MEDIA_INSN_STLOL, SEM_FN_NAME (sh64_media,stlol) },
5922 { SH64_MEDIA_INSN_STLOQ, SEM_FN_NAME (sh64_media,stloq) },
5923 { SH64_MEDIA_INSN_STXB, SEM_FN_NAME (sh64_media,stxb) },
5924 { SH64_MEDIA_INSN_STXL, SEM_FN_NAME (sh64_media,stxl) },
5925 { SH64_MEDIA_INSN_STXQ, SEM_FN_NAME (sh64_media,stxq) },
5926 { SH64_MEDIA_INSN_STXW, SEM_FN_NAME (sh64_media,stxw) },
5927 { SH64_MEDIA_INSN_SUB, SEM_FN_NAME (sh64_media,sub) },
5928 { SH64_MEDIA_INSN_SUBL, SEM_FN_NAME (sh64_media,subl) },
5929 { SH64_MEDIA_INSN_SWAPQ, SEM_FN_NAME (sh64_media,swapq) },
5930 { SH64_MEDIA_INSN_SYNCI, SEM_FN_NAME (sh64_media,synci) },
5931 { SH64_MEDIA_INSN_SYNCO, SEM_FN_NAME (sh64_media,synco) },
5932 { SH64_MEDIA_INSN_TRAPA, SEM_FN_NAME (sh64_media,trapa) },
5933 { SH64_MEDIA_INSN_XOR, SEM_FN_NAME (sh64_media,xor) },
5934 { SH64_MEDIA_INSN_XORI, SEM_FN_NAME (sh64_media,xori) },
5935 { 0, 0 }
5936};
5937
5938/* Add the semantic fns to IDESC_TABLE. */
5939
5940void
5941SEM_FN_NAME (sh64_media,init_idesc_table) (SIM_CPU *current_cpu)
5942{
5943 IDESC *idesc_table = CPU_IDESC (current_cpu);
5944 const struct sem_fn_desc *sf;
5945 int mach_num = MACH_NUM (CPU_MACH (current_cpu));
5946
5947 for (sf = &sem_fns[0]; sf->fn != 0; ++sf)
5948 {
5949 const CGEN_INSN *insn = idesc_table[sf->index].idata;
5950 int valid_p = (CGEN_INSN_VIRTUAL_P (insn)
5951 || CGEN_INSN_MACH_HAS_P (insn, mach_num));
5952#if FAST_P
5953 if (valid_p)
5954 idesc_table[sf->index].sem_fast = sf->fn;
5955 else
5956 idesc_table[sf->index].sem_fast = SEM_FN_NAME (sh64_media,x_invalid);
5957#else
5958 if (valid_p)
5959 idesc_table[sf->index].sem_full = sf->fn;
5960 else
5961 idesc_table[sf->index].sem_full = SEM_FN_NAME (sh64_media,x_invalid);
5962#endif
5963 }
5964}
5965
This page took 0.455066 seconds and 4 git commands to generate.