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