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