This commit was generated by cvs2svn to track changes on a CVS vendor
[deliverable/binutils-gdb.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
This page took 0.318642 seconds and 4 git commands to generate.