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