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