* cpu.c,sem.c,sem-switch.c: Regenerate. From
[external/binutils.git] / sim / m32r / sem.c
1 /* Simulator instruction semantics for m32r.
2
3 This file is machine generated with CGEN.
4
5 Copyright (C) 1996, 1997, 1998 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
26 #define WANT_CPU_M32R
27
28 #include "sim-main.h"
29 #include "cgen-mem.h"
30 #include "cgen-ops.h"
31 #include "cpu-sim.h"
32
33 #if ! defined (SCACHE_P) || (defined (SCACHE_P) && WITH_SCACHE)
34
35 #undef GET_ATTR
36 #define GET_ATTR(cpu, num, attr) CGEN_INSN_ATTR (abuf->opcode, CGEN_INSN_##attr)
37
38 /* Perform add: add $dr,$sr.  */
39 CIA
40 SEM_FN_NAME (m32r,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
41 {
42 #define FLD(f) abuf->fields.fmt_add.f
43   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
44   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
45
46 * FLD (f_r1) = ADDSI (* FLD (f_r1), * FLD (f_r2));
47   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
48
49 #if WITH_PROFILE_MODEL_P
50   if (PROFILE_MODEL_P (current_cpu))
51     {
52       m32r_model_mark_get_h_gr (current_cpu, abuf);
53       m32r_model_mark_set_h_gr (current_cpu, abuf);
54       m32r_model_profile_insn (current_cpu, abuf);
55     }
56 #endif
57
58   return new_pc;
59 #undef FLD
60 }
61
62 /* Perform add3: add3 $dr,$sr,$hash$slo16.  */
63 CIA
64 SEM_FN_NAME (m32r,add3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
65 {
66 #define FLD(f) abuf->fields.fmt_add3.f
67   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
68   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
69
70 * FLD (f_r1) = ADDSI (* FLD (f_r2), FLD (f_simm16));
71   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
72
73 #if WITH_PROFILE_MODEL_P
74   if (PROFILE_MODEL_P (current_cpu))
75     {
76       m32r_model_mark_get_h_gr (current_cpu, abuf);
77       m32r_model_mark_set_h_gr (current_cpu, abuf);
78       m32r_model_profile_insn (current_cpu, abuf);
79     }
80 #endif
81
82   return new_pc;
83 #undef FLD
84 }
85
86 /* Perform and: and $dr,$sr.  */
87 CIA
88 SEM_FN_NAME (m32r,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
89 {
90 #define FLD(f) abuf->fields.fmt_add.f
91   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
92   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
93
94 * FLD (f_r1) = ANDSI (* FLD (f_r1), * FLD (f_r2));
95   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
96
97 #if WITH_PROFILE_MODEL_P
98   if (PROFILE_MODEL_P (current_cpu))
99     {
100       m32r_model_mark_get_h_gr (current_cpu, abuf);
101       m32r_model_mark_set_h_gr (current_cpu, abuf);
102       m32r_model_profile_insn (current_cpu, abuf);
103     }
104 #endif
105
106   return new_pc;
107 #undef FLD
108 }
109
110 /* Perform and3: and3 $dr,$sr,$uimm16.  */
111 CIA
112 SEM_FN_NAME (m32r,and3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
113 {
114 #define FLD(f) abuf->fields.fmt_and3.f
115   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
116   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
117
118 * FLD (f_r1) = ANDSI (* FLD (f_r2), FLD (f_uimm16));
119   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
120
121 #if WITH_PROFILE_MODEL_P
122   if (PROFILE_MODEL_P (current_cpu))
123     {
124       m32r_model_mark_get_h_gr (current_cpu, abuf);
125       m32r_model_mark_set_h_gr (current_cpu, abuf);
126       m32r_model_profile_insn (current_cpu, abuf);
127     }
128 #endif
129
130   return new_pc;
131 #undef FLD
132 }
133
134 /* Perform or: or $dr,$sr.  */
135 CIA
136 SEM_FN_NAME (m32r,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
137 {
138 #define FLD(f) abuf->fields.fmt_add.f
139   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
140   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
141
142 * FLD (f_r1) = ORSI (* FLD (f_r1), * FLD (f_r2));
143   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
144
145 #if WITH_PROFILE_MODEL_P
146   if (PROFILE_MODEL_P (current_cpu))
147     {
148       m32r_model_mark_get_h_gr (current_cpu, abuf);
149       m32r_model_mark_set_h_gr (current_cpu, abuf);
150       m32r_model_profile_insn (current_cpu, abuf);
151     }
152 #endif
153
154   return new_pc;
155 #undef FLD
156 }
157
158 /* Perform or3: or3 $dr,$sr,$hash$ulo16.  */
159 CIA
160 SEM_FN_NAME (m32r,or3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
161 {
162 #define FLD(f) abuf->fields.fmt_or3.f
163   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
164   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
165
166 * FLD (f_r1) = ORSI (* FLD (f_r2), FLD (f_uimm16));
167   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
168
169 #if WITH_PROFILE_MODEL_P
170   if (PROFILE_MODEL_P (current_cpu))
171     {
172       m32r_model_mark_get_h_gr (current_cpu, abuf);
173       m32r_model_mark_set_h_gr (current_cpu, abuf);
174       m32r_model_profile_insn (current_cpu, abuf);
175     }
176 #endif
177
178   return new_pc;
179 #undef FLD
180 }
181
182 /* Perform xor: xor $dr,$sr.  */
183 CIA
184 SEM_FN_NAME (m32r,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
185 {
186 #define FLD(f) abuf->fields.fmt_add.f
187   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
188   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
189
190 * FLD (f_r1) = XORSI (* FLD (f_r1), * FLD (f_r2));
191   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
192
193 #if WITH_PROFILE_MODEL_P
194   if (PROFILE_MODEL_P (current_cpu))
195     {
196       m32r_model_mark_get_h_gr (current_cpu, abuf);
197       m32r_model_mark_set_h_gr (current_cpu, abuf);
198       m32r_model_profile_insn (current_cpu, abuf);
199     }
200 #endif
201
202   return new_pc;
203 #undef FLD
204 }
205
206 /* Perform xor3: xor3 $dr,$sr,$uimm16.  */
207 CIA
208 SEM_FN_NAME (m32r,xor3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
209 {
210 #define FLD(f) abuf->fields.fmt_and3.f
211   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
212   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
213
214 * FLD (f_r1) = XORSI (* FLD (f_r2), FLD (f_uimm16));
215   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
216
217 #if WITH_PROFILE_MODEL_P
218   if (PROFILE_MODEL_P (current_cpu))
219     {
220       m32r_model_mark_get_h_gr (current_cpu, abuf);
221       m32r_model_mark_set_h_gr (current_cpu, abuf);
222       m32r_model_profile_insn (current_cpu, abuf);
223     }
224 #endif
225
226   return new_pc;
227 #undef FLD
228 }
229
230 /* Perform addi: addi $dr,$simm8.  */
231 CIA
232 SEM_FN_NAME (m32r,addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
233 {
234 #define FLD(f) abuf->fields.fmt_addi.f
235   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
236   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
237
238 * FLD (f_r1) = ADDSI (* FLD (f_r1), FLD (f_simm8));
239   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
240
241 #if WITH_PROFILE_MODEL_P
242   if (PROFILE_MODEL_P (current_cpu))
243     {
244       m32r_model_mark_get_h_gr (current_cpu, abuf);
245       m32r_model_mark_set_h_gr (current_cpu, abuf);
246       m32r_model_profile_insn (current_cpu, abuf);
247     }
248 #endif
249
250   return new_pc;
251 #undef FLD
252 }
253
254 /* Perform addv: addv $dr,$sr.  */
255 CIA
256 SEM_FN_NAME (m32r,addv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
257 {
258 #define FLD(f) abuf->fields.fmt_addv.f
259   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
260   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
261
262 do {
263   BI temp1;SI temp0;
264   temp0 = ADDSI (* FLD (f_r1), * FLD (f_r2));
265   temp1 = ADDOFSI (* FLD (f_r1), * FLD (f_r2), 0);
266 * FLD (f_r1) = temp0;
267   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
268   CPU (h_cond) = temp1;
269   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
270 } while (0);
271
272 #if WITH_PROFILE_MODEL_P
273   if (PROFILE_MODEL_P (current_cpu))
274     {
275       m32r_model_mark_get_h_gr (current_cpu, abuf);
276       m32r_model_mark_set_h_gr (current_cpu, abuf);
277       m32r_model_profile_insn (current_cpu, abuf);
278     }
279 #endif
280
281   return new_pc;
282 #undef FLD
283 }
284
285 /* Perform addv3: addv3 $dr,$sr,$simm16.  */
286 CIA
287 SEM_FN_NAME (m32r,addv3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
288 {
289 #define FLD(f) abuf->fields.fmt_addv3.f
290   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
291   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
292
293 do {
294   BI temp1;SI temp0;
295   temp0 = ADDSI (* FLD (f_r2), FLD (f_simm16));
296   temp1 = ADDOFSI (* FLD (f_r2), FLD (f_simm16), 0);
297 * FLD (f_r1) = temp0;
298   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
299   CPU (h_cond) = temp1;
300   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
301 } while (0);
302
303 #if WITH_PROFILE_MODEL_P
304   if (PROFILE_MODEL_P (current_cpu))
305     {
306       m32r_model_mark_get_h_gr (current_cpu, abuf);
307       m32r_model_mark_set_h_gr (current_cpu, abuf);
308       m32r_model_profile_insn (current_cpu, abuf);
309     }
310 #endif
311
312   return new_pc;
313 #undef FLD
314 }
315
316 /* Perform addx: addx $dr,$sr.  */
317 CIA
318 SEM_FN_NAME (m32r,addx) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
319 {
320 #define FLD(f) abuf->fields.fmt_addx.f
321   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
322   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
323
324 do {
325   BI temp1;SI temp0;
326   temp0 = ADDCSI (* FLD (f_r1), * FLD (f_r2), CPU (h_cond));
327   temp1 = ADDCFSI (* FLD (f_r1), * FLD (f_r2), CPU (h_cond));
328 * FLD (f_r1) = temp0;
329   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
330   CPU (h_cond) = temp1;
331   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
332 } while (0);
333
334 #if WITH_PROFILE_MODEL_P
335   if (PROFILE_MODEL_P (current_cpu))
336     {
337       m32r_model_mark_get_h_gr (current_cpu, abuf);
338       m32r_model_mark_set_h_gr (current_cpu, abuf);
339       m32r_model_profile_insn (current_cpu, abuf);
340     }
341 #endif
342
343   return new_pc;
344 #undef FLD
345 }
346
347 /* Perform bc8: bc $disp8.  */
348 CIA
349 SEM_FN_NAME (m32r,bc8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
350 {
351 #define FLD(f) abuf->fields.fmt_bc8.f
352   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
353   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
354   int taken_p = 0;
355
356 if (CPU (h_cond)) {
357   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp8)));
358   taken_p = 1;
359   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
360 }
361
362 #if WITH_PROFILE_MODEL_P
363   if (PROFILE_MODEL_P (current_cpu))
364     {
365       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
366     }
367 #endif
368
369   return new_pc;
370 #undef FLD
371 }
372
373 /* Perform bc24: bc $disp24.  */
374 CIA
375 SEM_FN_NAME (m32r,bc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
376 {
377 #define FLD(f) abuf->fields.fmt_bc24.f
378   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
379   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
380   int taken_p = 0;
381
382 if (CPU (h_cond)) {
383   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp24)));
384   taken_p = 1;
385   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
386 }
387
388 #if WITH_PROFILE_MODEL_P
389   if (PROFILE_MODEL_P (current_cpu))
390     {
391       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
392     }
393 #endif
394
395   return new_pc;
396 #undef FLD
397 }
398
399 /* Perform beq: beq $src1,$src2,$disp16.  */
400 CIA
401 SEM_FN_NAME (m32r,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
402 {
403 #define FLD(f) abuf->fields.fmt_beq.f
404   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
405   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
406   int taken_p = 0;
407
408 if (EQSI (* FLD (f_r1), * FLD (f_r2))) {
409   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
410   taken_p = 1;
411   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
412 }
413
414 #if WITH_PROFILE_MODEL_P
415   if (PROFILE_MODEL_P (current_cpu))
416     {
417       m32r_model_mark_get_h_gr (current_cpu, abuf);
418       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
419     }
420 #endif
421
422   return new_pc;
423 #undef FLD
424 }
425
426 /* Perform beqz: beqz $src2,$disp16.  */
427 CIA
428 SEM_FN_NAME (m32r,beqz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
429 {
430 #define FLD(f) abuf->fields.fmt_beqz.f
431   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
432   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
433   int taken_p = 0;
434
435 if (EQSI (* FLD (f_r2), 0)) {
436   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
437   taken_p = 1;
438   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
439 }
440
441 #if WITH_PROFILE_MODEL_P
442   if (PROFILE_MODEL_P (current_cpu))
443     {
444       m32r_model_mark_get_h_gr (current_cpu, abuf);
445       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
446     }
447 #endif
448
449   return new_pc;
450 #undef FLD
451 }
452
453 /* Perform bgez: bgez $src2,$disp16.  */
454 CIA
455 SEM_FN_NAME (m32r,bgez) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
456 {
457 #define FLD(f) abuf->fields.fmt_beqz.f
458   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
459   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
460   int taken_p = 0;
461
462 if (GESI (* FLD (f_r2), 0)) {
463   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
464   taken_p = 1;
465   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
466 }
467
468 #if WITH_PROFILE_MODEL_P
469   if (PROFILE_MODEL_P (current_cpu))
470     {
471       m32r_model_mark_get_h_gr (current_cpu, abuf);
472       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
473     }
474 #endif
475
476   return new_pc;
477 #undef FLD
478 }
479
480 /* Perform bgtz: bgtz $src2,$disp16.  */
481 CIA
482 SEM_FN_NAME (m32r,bgtz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
483 {
484 #define FLD(f) abuf->fields.fmt_beqz.f
485   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
486   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
487   int taken_p = 0;
488
489 if (GTSI (* FLD (f_r2), 0)) {
490   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
491   taken_p = 1;
492   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
493 }
494
495 #if WITH_PROFILE_MODEL_P
496   if (PROFILE_MODEL_P (current_cpu))
497     {
498       m32r_model_mark_get_h_gr (current_cpu, abuf);
499       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
500     }
501 #endif
502
503   return new_pc;
504 #undef FLD
505 }
506
507 /* Perform blez: blez $src2,$disp16.  */
508 CIA
509 SEM_FN_NAME (m32r,blez) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
510 {
511 #define FLD(f) abuf->fields.fmt_beqz.f
512   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
513   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
514   int taken_p = 0;
515
516 if (LESI (* FLD (f_r2), 0)) {
517   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
518   taken_p = 1;
519   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
520 }
521
522 #if WITH_PROFILE_MODEL_P
523   if (PROFILE_MODEL_P (current_cpu))
524     {
525       m32r_model_mark_get_h_gr (current_cpu, abuf);
526       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
527     }
528 #endif
529
530   return new_pc;
531 #undef FLD
532 }
533
534 /* Perform bltz: bltz $src2,$disp16.  */
535 CIA
536 SEM_FN_NAME (m32r,bltz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
537 {
538 #define FLD(f) abuf->fields.fmt_beqz.f
539   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
540   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
541   int taken_p = 0;
542
543 if (LTSI (* FLD (f_r2), 0)) {
544   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
545   taken_p = 1;
546   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
547 }
548
549 #if WITH_PROFILE_MODEL_P
550   if (PROFILE_MODEL_P (current_cpu))
551     {
552       m32r_model_mark_get_h_gr (current_cpu, abuf);
553       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
554     }
555 #endif
556
557   return new_pc;
558 #undef FLD
559 }
560
561 /* Perform bnez: bnez $src2,$disp16.  */
562 CIA
563 SEM_FN_NAME (m32r,bnez) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
564 {
565 #define FLD(f) abuf->fields.fmt_beqz.f
566   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
567   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
568   int taken_p = 0;
569
570 if (NESI (* FLD (f_r2), 0)) {
571   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
572   taken_p = 1;
573   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
574 }
575
576 #if WITH_PROFILE_MODEL_P
577   if (PROFILE_MODEL_P (current_cpu))
578     {
579       m32r_model_mark_get_h_gr (current_cpu, abuf);
580       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
581     }
582 #endif
583
584   return new_pc;
585 #undef FLD
586 }
587
588 /* Perform bl8: bl $disp8.  */
589 CIA
590 SEM_FN_NAME (m32r,bl8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
591 {
592 #define FLD(f) abuf->fields.fmt_bl8.f
593   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
594   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
595   int taken_p = 0;
596
597 do {
598   CPU (h_gr[14]) = ADDSI (ANDSI (CPU (h_pc), -4), 4);
599   TRACE_RESULT (current_cpu, "h-gr-14", 'x', CPU (h_gr[14]));
600   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp8)));
601   taken_p = 1;
602   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
603 } while (0);
604
605 #if WITH_PROFILE_MODEL_P
606   if (PROFILE_MODEL_P (current_cpu))
607     {
608       m32r_model_mark_set_h_gr (current_cpu, abuf);
609       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
610     }
611 #endif
612
613   return new_pc;
614 #undef FLD
615 }
616
617 /* Perform bl24: bl $disp24.  */
618 CIA
619 SEM_FN_NAME (m32r,bl24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
620 {
621 #define FLD(f) abuf->fields.fmt_bl24.f
622   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
623   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
624   int taken_p = 0;
625
626 do {
627   CPU (h_gr[14]) = ADDSI (CPU (h_pc), 4);
628   TRACE_RESULT (current_cpu, "h-gr-14", 'x', CPU (h_gr[14]));
629   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp24)));
630   taken_p = 1;
631   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
632 } while (0);
633
634 #if WITH_PROFILE_MODEL_P
635   if (PROFILE_MODEL_P (current_cpu))
636     {
637       m32r_model_mark_set_h_gr (current_cpu, abuf);
638       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
639     }
640 #endif
641
642   return new_pc;
643 #undef FLD
644 }
645
646 /* Perform bnc8: bnc $disp8.  */
647 CIA
648 SEM_FN_NAME (m32r,bnc8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
649 {
650 #define FLD(f) abuf->fields.fmt_bc8.f
651   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
652   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
653   int taken_p = 0;
654
655 if (NOTBI (CPU (h_cond))) {
656   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp8)));
657   taken_p = 1;
658   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
659 }
660
661 #if WITH_PROFILE_MODEL_P
662   if (PROFILE_MODEL_P (current_cpu))
663     {
664       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
665     }
666 #endif
667
668   return new_pc;
669 #undef FLD
670 }
671
672 /* Perform bnc24: bnc $disp24.  */
673 CIA
674 SEM_FN_NAME (m32r,bnc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
675 {
676 #define FLD(f) abuf->fields.fmt_bc24.f
677   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
678   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
679   int taken_p = 0;
680
681 if (NOTBI (CPU (h_cond))) {
682   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp24)));
683   taken_p = 1;
684   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
685 }
686
687 #if WITH_PROFILE_MODEL_P
688   if (PROFILE_MODEL_P (current_cpu))
689     {
690       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
691     }
692 #endif
693
694   return new_pc;
695 #undef FLD
696 }
697
698 /* Perform bne: bne $src1,$src2,$disp16.  */
699 CIA
700 SEM_FN_NAME (m32r,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
701 {
702 #define FLD(f) abuf->fields.fmt_beq.f
703   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
704   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
705   int taken_p = 0;
706
707 if (NESI (* FLD (f_r1), * FLD (f_r2))) {
708   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
709   taken_p = 1;
710   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
711 }
712
713 #if WITH_PROFILE_MODEL_P
714   if (PROFILE_MODEL_P (current_cpu))
715     {
716       m32r_model_mark_get_h_gr (current_cpu, abuf);
717       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
718     }
719 #endif
720
721   return new_pc;
722 #undef FLD
723 }
724
725 /* Perform bra8: bra $disp8.  */
726 CIA
727 SEM_FN_NAME (m32r,bra8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
728 {
729 #define FLD(f) abuf->fields.fmt_bra8.f
730   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
731   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
732   int taken_p = 0;
733
734   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp8)));
735   taken_p = 1;
736   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
737
738 #if WITH_PROFILE_MODEL_P
739   if (PROFILE_MODEL_P (current_cpu))
740     {
741       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
742     }
743 #endif
744
745   return new_pc;
746 #undef FLD
747 }
748
749 /* Perform bra24: bra $disp24.  */
750 CIA
751 SEM_FN_NAME (m32r,bra24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
752 {
753 #define FLD(f) abuf->fields.fmt_bra24.f
754   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
755   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
756   int taken_p = 0;
757
758   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp24)));
759   taken_p = 1;
760   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
761
762 #if WITH_PROFILE_MODEL_P
763   if (PROFILE_MODEL_P (current_cpu))
764     {
765       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
766     }
767 #endif
768
769   return new_pc;
770 #undef FLD
771 }
772
773 /* Perform cmp: cmp $src1,$src2.  */
774 CIA
775 SEM_FN_NAME (m32r,cmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
776 {
777 #define FLD(f) abuf->fields.fmt_cmp.f
778   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
779   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
780
781   CPU (h_cond) = LTSI (* FLD (f_r1), * FLD (f_r2));
782   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
783
784 #if WITH_PROFILE_MODEL_P
785   if (PROFILE_MODEL_P (current_cpu))
786     {
787       m32r_model_mark_get_h_gr (current_cpu, abuf);
788       m32r_model_profile_insn (current_cpu, abuf);
789     }
790 #endif
791
792   return new_pc;
793 #undef FLD
794 }
795
796 /* Perform cmpi: cmpi $src2,$simm16.  */
797 CIA
798 SEM_FN_NAME (m32r,cmpi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
799 {
800 #define FLD(f) abuf->fields.fmt_cmpi.f
801   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
802   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
803
804   CPU (h_cond) = LTSI (* FLD (f_r2), FLD (f_simm16));
805   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
806
807 #if WITH_PROFILE_MODEL_P
808   if (PROFILE_MODEL_P (current_cpu))
809     {
810       m32r_model_mark_get_h_gr (current_cpu, abuf);
811       m32r_model_profile_insn (current_cpu, abuf);
812     }
813 #endif
814
815   return new_pc;
816 #undef FLD
817 }
818
819 /* Perform cmpu: cmpu $src1,$src2.  */
820 CIA
821 SEM_FN_NAME (m32r,cmpu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
822 {
823 #define FLD(f) abuf->fields.fmt_cmp.f
824   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
825   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
826
827   CPU (h_cond) = LTUSI (* FLD (f_r1), * FLD (f_r2));
828   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
829
830 #if WITH_PROFILE_MODEL_P
831   if (PROFILE_MODEL_P (current_cpu))
832     {
833       m32r_model_mark_get_h_gr (current_cpu, abuf);
834       m32r_model_profile_insn (current_cpu, abuf);
835     }
836 #endif
837
838   return new_pc;
839 #undef FLD
840 }
841
842 /* Perform cmpui: cmpui $src2,$simm16.  */
843 CIA
844 SEM_FN_NAME (m32r,cmpui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
845 {
846 #define FLD(f) abuf->fields.fmt_cmpi.f
847   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
848   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
849
850   CPU (h_cond) = LTUSI (* FLD (f_r2), FLD (f_simm16));
851   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
852
853 #if WITH_PROFILE_MODEL_P
854   if (PROFILE_MODEL_P (current_cpu))
855     {
856       m32r_model_mark_get_h_gr (current_cpu, abuf);
857       m32r_model_profile_insn (current_cpu, abuf);
858     }
859 #endif
860
861   return new_pc;
862 #undef FLD
863 }
864
865 /* Perform div: div $dr,$sr.  */
866 CIA
867 SEM_FN_NAME (m32r,div) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
868 {
869 #define FLD(f) abuf->fields.fmt_div.f
870   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
871   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
872
873 if (NESI (* FLD (f_r2), 0)) {
874 * FLD (f_r1) = DIVSI (* FLD (f_r1), * FLD (f_r2));
875   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
876 }
877
878 #if WITH_PROFILE_MODEL_P
879   if (PROFILE_MODEL_P (current_cpu))
880     {
881       m32r_model_mark_get_h_gr (current_cpu, abuf);
882       m32r_model_mark_set_h_gr (current_cpu, abuf);
883       m32r_model_profile_insn (current_cpu, abuf);
884     }
885 #endif
886
887   return new_pc;
888 #undef FLD
889 }
890
891 /* Perform divu: divu $dr,$sr.  */
892 CIA
893 SEM_FN_NAME (m32r,divu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
894 {
895 #define FLD(f) abuf->fields.fmt_div.f
896   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
897   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
898
899 if (NESI (* FLD (f_r2), 0)) {
900 * FLD (f_r1) = UDIVSI (* FLD (f_r1), * FLD (f_r2));
901   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
902 }
903
904 #if WITH_PROFILE_MODEL_P
905   if (PROFILE_MODEL_P (current_cpu))
906     {
907       m32r_model_mark_get_h_gr (current_cpu, abuf);
908       m32r_model_mark_set_h_gr (current_cpu, abuf);
909       m32r_model_profile_insn (current_cpu, abuf);
910     }
911 #endif
912
913   return new_pc;
914 #undef FLD
915 }
916
917 /* Perform rem: rem $dr,$sr.  */
918 CIA
919 SEM_FN_NAME (m32r,rem) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
920 {
921 #define FLD(f) abuf->fields.fmt_div.f
922   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
923   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
924
925 if (NESI (* FLD (f_r2), 0)) {
926 * FLD (f_r1) = MODSI (* FLD (f_r1), * FLD (f_r2));
927   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
928 }
929
930 #if WITH_PROFILE_MODEL_P
931   if (PROFILE_MODEL_P (current_cpu))
932     {
933       m32r_model_mark_get_h_gr (current_cpu, abuf);
934       m32r_model_mark_set_h_gr (current_cpu, abuf);
935       m32r_model_profile_insn (current_cpu, abuf);
936     }
937 #endif
938
939   return new_pc;
940 #undef FLD
941 }
942
943 /* Perform remu: remu $dr,$sr.  */
944 CIA
945 SEM_FN_NAME (m32r,remu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
946 {
947 #define FLD(f) abuf->fields.fmt_div.f
948   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
949   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
950
951 if (NESI (* FLD (f_r2), 0)) {
952 * FLD (f_r1) = UMODSI (* FLD (f_r1), * FLD (f_r2));
953   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
954 }
955
956 #if WITH_PROFILE_MODEL_P
957   if (PROFILE_MODEL_P (current_cpu))
958     {
959       m32r_model_mark_get_h_gr (current_cpu, abuf);
960       m32r_model_mark_set_h_gr (current_cpu, abuf);
961       m32r_model_profile_insn (current_cpu, abuf);
962     }
963 #endif
964
965   return new_pc;
966 #undef FLD
967 }
968
969 /* Perform jl: jl $sr.  */
970 CIA
971 SEM_FN_NAME (m32r,jl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
972 {
973 #define FLD(f) abuf->fields.fmt_jl.f
974   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
975   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
976   int taken_p = 0;
977
978 do {
979   SI temp1;SI temp0;
980   temp0 = ADDSI (ANDSI (CPU (h_pc), -4), 4);
981   temp1 = * FLD (f_r2);
982   CPU (h_gr[14]) = temp0;
983   TRACE_RESULT (current_cpu, "h-gr-14", 'x', CPU (h_gr[14]));
984   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, temp1));
985   taken_p = 1;
986   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
987 } while (0);
988
989 #if WITH_PROFILE_MODEL_P
990   if (PROFILE_MODEL_P (current_cpu))
991     {
992       m32r_model_mark_get_h_gr (current_cpu, abuf);
993       m32r_model_mark_set_h_gr (current_cpu, abuf);
994       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
995     }
996 #endif
997
998   return new_pc;
999 #undef FLD
1000 }
1001
1002 /* Perform jmp: jmp $sr.  */
1003 CIA
1004 SEM_FN_NAME (m32r,jmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1005 {
1006 #define FLD(f) abuf->fields.fmt_jmp.f
1007   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1008   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1009   int taken_p = 0;
1010
1011   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, * FLD (f_r2)));
1012   taken_p = 1;
1013   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
1014
1015 #if WITH_PROFILE_MODEL_P
1016   if (PROFILE_MODEL_P (current_cpu))
1017     {
1018       m32r_model_mark_get_h_gr (current_cpu, abuf);
1019       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
1020     }
1021 #endif
1022
1023   return new_pc;
1024 #undef FLD
1025 }
1026
1027 /* Perform ld: ld $dr,@$sr.  */
1028 CIA
1029 SEM_FN_NAME (m32r,ld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1030 {
1031 #define FLD(f) abuf->fields.fmt_ld.f
1032   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1033   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1034
1035 * FLD (f_r1) = GETMEMSI (current_cpu, * FLD (f_r2));
1036   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1037
1038 #if WITH_PROFILE_MODEL_P
1039   if (PROFILE_MODEL_P (current_cpu))
1040     {
1041       m32r_model_mark_get_h_gr (current_cpu, abuf);
1042       m32r_model_mark_set_h_gr (current_cpu, abuf);
1043       m32r_model_profile_insn (current_cpu, abuf);
1044     }
1045 #endif
1046
1047   return new_pc;
1048 #undef FLD
1049 }
1050
1051 /* Perform ld-d: ld $dr,@($slo16,$sr).  */
1052 CIA
1053 SEM_FN_NAME (m32r,ld_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1054 {
1055 #define FLD(f) abuf->fields.fmt_ld_d.f
1056   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1057   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1058
1059 * FLD (f_r1) = GETMEMSI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)));
1060   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1061
1062 #if WITH_PROFILE_MODEL_P
1063   if (PROFILE_MODEL_P (current_cpu))
1064     {
1065       m32r_model_mark_get_h_gr (current_cpu, abuf);
1066       m32r_model_mark_set_h_gr (current_cpu, abuf);
1067       m32r_model_profile_insn (current_cpu, abuf);
1068     }
1069 #endif
1070
1071   return new_pc;
1072 #undef FLD
1073 }
1074
1075 /* Perform ldb: ldb $dr,@$sr.  */
1076 CIA
1077 SEM_FN_NAME (m32r,ldb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1078 {
1079 #define FLD(f) abuf->fields.fmt_ldb.f
1080   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1081   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1082
1083 * FLD (f_r1) = EXTQISI (GETMEMQI (current_cpu, * FLD (f_r2)));
1084   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1085
1086 #if WITH_PROFILE_MODEL_P
1087   if (PROFILE_MODEL_P (current_cpu))
1088     {
1089       m32r_model_mark_get_h_gr (current_cpu, abuf);
1090       m32r_model_mark_set_h_gr (current_cpu, abuf);
1091       m32r_model_profile_insn (current_cpu, abuf);
1092     }
1093 #endif
1094
1095   return new_pc;
1096 #undef FLD
1097 }
1098
1099 /* Perform ldb-d: ldb $dr,@($slo16,$sr).  */
1100 CIA
1101 SEM_FN_NAME (m32r,ldb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1102 {
1103 #define FLD(f) abuf->fields.fmt_ldb_d.f
1104   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1105   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1106
1107 * FLD (f_r1) = EXTQISI (GETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1108   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1109
1110 #if WITH_PROFILE_MODEL_P
1111   if (PROFILE_MODEL_P (current_cpu))
1112     {
1113       m32r_model_mark_get_h_gr (current_cpu, abuf);
1114       m32r_model_mark_set_h_gr (current_cpu, abuf);
1115       m32r_model_profile_insn (current_cpu, abuf);
1116     }
1117 #endif
1118
1119   return new_pc;
1120 #undef FLD
1121 }
1122
1123 /* Perform ldh: ldh $dr,@$sr.  */
1124 CIA
1125 SEM_FN_NAME (m32r,ldh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1126 {
1127 #define FLD(f) abuf->fields.fmt_ldh.f
1128   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1129   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1130
1131 * FLD (f_r1) = EXTHISI (GETMEMHI (current_cpu, * FLD (f_r2)));
1132   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1133
1134 #if WITH_PROFILE_MODEL_P
1135   if (PROFILE_MODEL_P (current_cpu))
1136     {
1137       m32r_model_mark_get_h_gr (current_cpu, abuf);
1138       m32r_model_mark_set_h_gr (current_cpu, abuf);
1139       m32r_model_profile_insn (current_cpu, abuf);
1140     }
1141 #endif
1142
1143   return new_pc;
1144 #undef FLD
1145 }
1146
1147 /* Perform ldh-d: ldh $dr,@($slo16,$sr).  */
1148 CIA
1149 SEM_FN_NAME (m32r,ldh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1150 {
1151 #define FLD(f) abuf->fields.fmt_ldh_d.f
1152   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1153   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1154
1155 * FLD (f_r1) = EXTHISI (GETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1156   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1157
1158 #if WITH_PROFILE_MODEL_P
1159   if (PROFILE_MODEL_P (current_cpu))
1160     {
1161       m32r_model_mark_get_h_gr (current_cpu, abuf);
1162       m32r_model_mark_set_h_gr (current_cpu, abuf);
1163       m32r_model_profile_insn (current_cpu, abuf);
1164     }
1165 #endif
1166
1167   return new_pc;
1168 #undef FLD
1169 }
1170
1171 /* Perform ldub: ldub $dr,@$sr.  */
1172 CIA
1173 SEM_FN_NAME (m32r,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1174 {
1175 #define FLD(f) abuf->fields.fmt_ldb.f
1176   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1177   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1178
1179 * FLD (f_r1) = ZEXTQISI (GETMEMQI (current_cpu, * FLD (f_r2)));
1180   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1181
1182 #if WITH_PROFILE_MODEL_P
1183   if (PROFILE_MODEL_P (current_cpu))
1184     {
1185       m32r_model_mark_get_h_gr (current_cpu, abuf);
1186       m32r_model_mark_set_h_gr (current_cpu, abuf);
1187       m32r_model_profile_insn (current_cpu, abuf);
1188     }
1189 #endif
1190
1191   return new_pc;
1192 #undef FLD
1193 }
1194
1195 /* Perform ldub-d: ldub $dr,@($slo16,$sr).  */
1196 CIA
1197 SEM_FN_NAME (m32r,ldub_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1198 {
1199 #define FLD(f) abuf->fields.fmt_ldb_d.f
1200   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1201   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1202
1203 * FLD (f_r1) = ZEXTQISI (GETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1204   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1205
1206 #if WITH_PROFILE_MODEL_P
1207   if (PROFILE_MODEL_P (current_cpu))
1208     {
1209       m32r_model_mark_get_h_gr (current_cpu, abuf);
1210       m32r_model_mark_set_h_gr (current_cpu, abuf);
1211       m32r_model_profile_insn (current_cpu, abuf);
1212     }
1213 #endif
1214
1215   return new_pc;
1216 #undef FLD
1217 }
1218
1219 /* Perform lduh: lduh $dr,@$sr.  */
1220 CIA
1221 SEM_FN_NAME (m32r,lduh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1222 {
1223 #define FLD(f) abuf->fields.fmt_ldh.f
1224   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1225   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1226
1227 * FLD (f_r1) = ZEXTHISI (GETMEMHI (current_cpu, * FLD (f_r2)));
1228   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1229
1230 #if WITH_PROFILE_MODEL_P
1231   if (PROFILE_MODEL_P (current_cpu))
1232     {
1233       m32r_model_mark_get_h_gr (current_cpu, abuf);
1234       m32r_model_mark_set_h_gr (current_cpu, abuf);
1235       m32r_model_profile_insn (current_cpu, abuf);
1236     }
1237 #endif
1238
1239   return new_pc;
1240 #undef FLD
1241 }
1242
1243 /* Perform lduh-d: lduh $dr,@($slo16,$sr).  */
1244 CIA
1245 SEM_FN_NAME (m32r,lduh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1246 {
1247 #define FLD(f) abuf->fields.fmt_ldh_d.f
1248   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1249   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1250
1251 * FLD (f_r1) = ZEXTHISI (GETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1252   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1253
1254 #if WITH_PROFILE_MODEL_P
1255   if (PROFILE_MODEL_P (current_cpu))
1256     {
1257       m32r_model_mark_get_h_gr (current_cpu, abuf);
1258       m32r_model_mark_set_h_gr (current_cpu, abuf);
1259       m32r_model_profile_insn (current_cpu, abuf);
1260     }
1261 #endif
1262
1263   return new_pc;
1264 #undef FLD
1265 }
1266
1267 /* Perform ld-plus: ld $dr,@$sr+.  */
1268 CIA
1269 SEM_FN_NAME (m32r,ld_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1270 {
1271 #define FLD(f) abuf->fields.fmt_ld_plus.f
1272   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1273   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1274
1275 do {
1276   SI temp1;SI temp0;
1277   temp0 = GETMEMSI (current_cpu, * FLD (f_r2));
1278   temp1 = ADDSI (* FLD (f_r2), 4);
1279 * FLD (f_r1) = temp0;
1280   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1281 * FLD (f_r2) = temp1;
1282   TRACE_RESULT (current_cpu, "sr", 'x', * FLD (f_r2));
1283 } while (0);
1284
1285 #if WITH_PROFILE_MODEL_P
1286   if (PROFILE_MODEL_P (current_cpu))
1287     {
1288       m32r_model_mark_get_h_gr (current_cpu, abuf);
1289       m32r_model_mark_set_h_gr (current_cpu, abuf);
1290       m32r_model_profile_insn (current_cpu, abuf);
1291     }
1292 #endif
1293
1294   return new_pc;
1295 #undef FLD
1296 }
1297
1298 /* Perform ld24: ld24 $dr,$uimm24.  */
1299 CIA
1300 SEM_FN_NAME (m32r,ld24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1301 {
1302 #define FLD(f) abuf->fields.fmt_ld24.f
1303   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1304   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1305
1306 * FLD (f_r1) = FLD (f_uimm24);
1307   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1308
1309 #if WITH_PROFILE_MODEL_P
1310   if (PROFILE_MODEL_P (current_cpu))
1311     {
1312       m32r_model_mark_set_h_gr (current_cpu, abuf);
1313       m32r_model_profile_insn (current_cpu, abuf);
1314     }
1315 #endif
1316
1317   return new_pc;
1318 #undef FLD
1319 }
1320
1321 /* Perform ldi8: ldi $dr,$simm8.  */
1322 CIA
1323 SEM_FN_NAME (m32r,ldi8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1324 {
1325 #define FLD(f) abuf->fields.fmt_ldi8.f
1326   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1327   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1328
1329 * FLD (f_r1) = FLD (f_simm8);
1330   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1331
1332 #if WITH_PROFILE_MODEL_P
1333   if (PROFILE_MODEL_P (current_cpu))
1334     {
1335       m32r_model_mark_set_h_gr (current_cpu, abuf);
1336       m32r_model_profile_insn (current_cpu, abuf);
1337     }
1338 #endif
1339
1340   return new_pc;
1341 #undef FLD
1342 }
1343
1344 /* Perform ldi16: ldi $dr,$hash$slo16.  */
1345 CIA
1346 SEM_FN_NAME (m32r,ldi16) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1347 {
1348 #define FLD(f) abuf->fields.fmt_ldi16.f
1349   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1350   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1351
1352 * FLD (f_r1) = FLD (f_simm16);
1353   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1354
1355 #if WITH_PROFILE_MODEL_P
1356   if (PROFILE_MODEL_P (current_cpu))
1357     {
1358       m32r_model_mark_set_h_gr (current_cpu, abuf);
1359       m32r_model_profile_insn (current_cpu, abuf);
1360     }
1361 #endif
1362
1363   return new_pc;
1364 #undef FLD
1365 }
1366
1367 /* Perform lock: lock $dr,@$sr.  */
1368 CIA
1369 SEM_FN_NAME (m32r,lock) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1370 {
1371 #define FLD(f) abuf->fields.fmt_lock.f
1372   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1373   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1374
1375 do {
1376   CPU (h_lock) = 1;
1377   TRACE_RESULT (current_cpu, "h-lock-0", 'x', CPU (h_lock));
1378 * FLD (f_r1) = GETMEMSI (current_cpu, * FLD (f_r2));
1379   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1380 } while (0);
1381
1382 #if WITH_PROFILE_MODEL_P
1383   if (PROFILE_MODEL_P (current_cpu))
1384     {
1385       m32r_model_mark_get_h_gr (current_cpu, abuf);
1386       m32r_model_mark_set_h_gr (current_cpu, abuf);
1387       m32r_model_profile_insn (current_cpu, abuf);
1388     }
1389 #endif
1390
1391   return new_pc;
1392 #undef FLD
1393 }
1394
1395 /* Perform machi: machi $src1,$src2.  */
1396 CIA
1397 SEM_FN_NAME (m32r,machi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1398 {
1399 #define FLD(f) abuf->fields.fmt_machi.f
1400   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1401   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1402
1403 m32r_h_accum_set (current_cpu, SRADI (SLLDI (ADDDI (m32r_h_accum_get (current_cpu), MULDI (EXTSIDI (ANDSI (* FLD (f_r1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16))))), 8), 8));
1404   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1405
1406 #if WITH_PROFILE_MODEL_P
1407   if (PROFILE_MODEL_P (current_cpu))
1408     {
1409       m32r_model_mark_get_h_gr (current_cpu, abuf);
1410       m32r_model_profile_insn (current_cpu, abuf);
1411     }
1412 #endif
1413
1414   return new_pc;
1415 #undef FLD
1416 }
1417
1418 /* Perform maclo: maclo $src1,$src2.  */
1419 CIA
1420 SEM_FN_NAME (m32r,maclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1421 {
1422 #define FLD(f) abuf->fields.fmt_machi.f
1423   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1424   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1425
1426 m32r_h_accum_set (current_cpu, SRADI (SLLDI (ADDDI (m32r_h_accum_get (current_cpu), MULDI (EXTSIDI (SLLSI (* FLD (f_r1), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2))))), 8), 8));
1427   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1428
1429 #if WITH_PROFILE_MODEL_P
1430   if (PROFILE_MODEL_P (current_cpu))
1431     {
1432       m32r_model_mark_get_h_gr (current_cpu, abuf);
1433       m32r_model_profile_insn (current_cpu, abuf);
1434     }
1435 #endif
1436
1437   return new_pc;
1438 #undef FLD
1439 }
1440
1441 /* Perform macwhi: macwhi $src1,$src2.  */
1442 CIA
1443 SEM_FN_NAME (m32r,macwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1444 {
1445 #define FLD(f) abuf->fields.fmt_machi.f
1446   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1447   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1448
1449 m32r_h_accum_set (current_cpu, SRADI (SLLDI (ADDDI (m32r_h_accum_get (current_cpu), MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16))))), 8), 8));
1450   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1451
1452 #if WITH_PROFILE_MODEL_P
1453   if (PROFILE_MODEL_P (current_cpu))
1454     {
1455       m32r_model_mark_get_h_gr (current_cpu, abuf);
1456       m32r_model_profile_insn (current_cpu, abuf);
1457     }
1458 #endif
1459
1460   return new_pc;
1461 #undef FLD
1462 }
1463
1464 /* Perform macwlo: macwlo $src1,$src2.  */
1465 CIA
1466 SEM_FN_NAME (m32r,macwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1467 {
1468 #define FLD(f) abuf->fields.fmt_machi.f
1469   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1470   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1471
1472 m32r_h_accum_set (current_cpu, SRADI (SLLDI (ADDDI (m32r_h_accum_get (current_cpu), MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (* FLD (f_r2))))), 8), 8));
1473   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1474
1475 #if WITH_PROFILE_MODEL_P
1476   if (PROFILE_MODEL_P (current_cpu))
1477     {
1478       m32r_model_mark_get_h_gr (current_cpu, abuf);
1479       m32r_model_profile_insn (current_cpu, abuf);
1480     }
1481 #endif
1482
1483   return new_pc;
1484 #undef FLD
1485 }
1486
1487 /* Perform mul: mul $dr,$sr.  */
1488 CIA
1489 SEM_FN_NAME (m32r,mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1490 {
1491 #define FLD(f) abuf->fields.fmt_add.f
1492   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1493   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1494
1495 * FLD (f_r1) = MULSI (* FLD (f_r1), * FLD (f_r2));
1496   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1497
1498 #if WITH_PROFILE_MODEL_P
1499   if (PROFILE_MODEL_P (current_cpu))
1500     {
1501       m32r_model_mark_get_h_gr (current_cpu, abuf);
1502       m32r_model_mark_set_h_gr (current_cpu, abuf);
1503       m32r_model_profile_insn (current_cpu, abuf);
1504     }
1505 #endif
1506
1507   return new_pc;
1508 #undef FLD
1509 }
1510
1511 /* Perform mulhi: mulhi $src1,$src2.  */
1512 CIA
1513 SEM_FN_NAME (m32r,mulhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1514 {
1515 #define FLD(f) abuf->fields.fmt_mulhi.f
1516   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1517   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1518
1519 m32r_h_accum_set (current_cpu, SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (f_r1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16)))), 16), 16));
1520   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1521
1522 #if WITH_PROFILE_MODEL_P
1523   if (PROFILE_MODEL_P (current_cpu))
1524     {
1525       m32r_model_mark_get_h_gr (current_cpu, abuf);
1526       m32r_model_profile_insn (current_cpu, abuf);
1527     }
1528 #endif
1529
1530   return new_pc;
1531 #undef FLD
1532 }
1533
1534 /* Perform mullo: mullo $src1,$src2.  */
1535 CIA
1536 SEM_FN_NAME (m32r,mullo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1537 {
1538 #define FLD(f) abuf->fields.fmt_mulhi.f
1539   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1540   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1541
1542 m32r_h_accum_set (current_cpu, SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (f_r1), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2)))), 16), 16));
1543   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1544
1545 #if WITH_PROFILE_MODEL_P
1546   if (PROFILE_MODEL_P (current_cpu))
1547     {
1548       m32r_model_mark_get_h_gr (current_cpu, abuf);
1549       m32r_model_profile_insn (current_cpu, abuf);
1550     }
1551 #endif
1552
1553   return new_pc;
1554 #undef FLD
1555 }
1556
1557 /* Perform mulwhi: mulwhi $src1,$src2.  */
1558 CIA
1559 SEM_FN_NAME (m32r,mulwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1560 {
1561 #define FLD(f) abuf->fields.fmt_mulhi.f
1562   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1563   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1564
1565 m32r_h_accum_set (current_cpu, SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16)))), 8), 8));
1566   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1567
1568 #if WITH_PROFILE_MODEL_P
1569   if (PROFILE_MODEL_P (current_cpu))
1570     {
1571       m32r_model_mark_get_h_gr (current_cpu, abuf);
1572       m32r_model_profile_insn (current_cpu, abuf);
1573     }
1574 #endif
1575
1576   return new_pc;
1577 #undef FLD
1578 }
1579
1580 /* Perform mulwlo: mulwlo $src1,$src2.  */
1581 CIA
1582 SEM_FN_NAME (m32r,mulwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1583 {
1584 #define FLD(f) abuf->fields.fmt_mulhi.f
1585   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1586   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1587
1588 m32r_h_accum_set (current_cpu, SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (* FLD (f_r2)))), 8), 8));
1589   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1590
1591 #if WITH_PROFILE_MODEL_P
1592   if (PROFILE_MODEL_P (current_cpu))
1593     {
1594       m32r_model_mark_get_h_gr (current_cpu, abuf);
1595       m32r_model_profile_insn (current_cpu, abuf);
1596     }
1597 #endif
1598
1599   return new_pc;
1600 #undef FLD
1601 }
1602
1603 /* Perform mv: mv $dr,$sr.  */
1604 CIA
1605 SEM_FN_NAME (m32r,mv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1606 {
1607 #define FLD(f) abuf->fields.fmt_mv.f
1608   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1609   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1610
1611 * FLD (f_r1) = * FLD (f_r2);
1612   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1613
1614 #if WITH_PROFILE_MODEL_P
1615   if (PROFILE_MODEL_P (current_cpu))
1616     {
1617       m32r_model_mark_get_h_gr (current_cpu, abuf);
1618       m32r_model_mark_set_h_gr (current_cpu, abuf);
1619       m32r_model_profile_insn (current_cpu, abuf);
1620     }
1621 #endif
1622
1623   return new_pc;
1624 #undef FLD
1625 }
1626
1627 /* Perform mvfachi: mvfachi $dr.  */
1628 CIA
1629 SEM_FN_NAME (m32r,mvfachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1630 {
1631 #define FLD(f) abuf->fields.fmt_mvfachi.f
1632   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1633   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1634
1635 * FLD (f_r1) = TRUNCDISI (SRADI (m32r_h_accum_get (current_cpu), 32));
1636   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1637
1638 #if WITH_PROFILE_MODEL_P
1639   if (PROFILE_MODEL_P (current_cpu))
1640     {
1641       m32r_model_mark_set_h_gr (current_cpu, abuf);
1642       m32r_model_profile_insn (current_cpu, abuf);
1643     }
1644 #endif
1645
1646   return new_pc;
1647 #undef FLD
1648 }
1649
1650 /* Perform mvfaclo: mvfaclo $dr.  */
1651 CIA
1652 SEM_FN_NAME (m32r,mvfaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1653 {
1654 #define FLD(f) abuf->fields.fmt_mvfachi.f
1655   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1656   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1657
1658 * FLD (f_r1) = TRUNCDISI (m32r_h_accum_get (current_cpu));
1659   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1660
1661 #if WITH_PROFILE_MODEL_P
1662   if (PROFILE_MODEL_P (current_cpu))
1663     {
1664       m32r_model_mark_set_h_gr (current_cpu, abuf);
1665       m32r_model_profile_insn (current_cpu, abuf);
1666     }
1667 #endif
1668
1669   return new_pc;
1670 #undef FLD
1671 }
1672
1673 /* Perform mvfacmi: mvfacmi $dr.  */
1674 CIA
1675 SEM_FN_NAME (m32r,mvfacmi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1676 {
1677 #define FLD(f) abuf->fields.fmt_mvfachi.f
1678   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1679   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1680
1681 * FLD (f_r1) = TRUNCDISI (SRADI (m32r_h_accum_get (current_cpu), 16));
1682   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1683
1684 #if WITH_PROFILE_MODEL_P
1685   if (PROFILE_MODEL_P (current_cpu))
1686     {
1687       m32r_model_mark_set_h_gr (current_cpu, abuf);
1688       m32r_model_profile_insn (current_cpu, abuf);
1689     }
1690 #endif
1691
1692   return new_pc;
1693 #undef FLD
1694 }
1695
1696 /* Perform mvfc: mvfc $dr,$scr.  */
1697 CIA
1698 SEM_FN_NAME (m32r,mvfc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1699 {
1700 #define FLD(f) abuf->fields.fmt_mvfc.f
1701   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1702   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1703
1704 * FLD (f_r1) = m32r_h_cr_get (current_cpu, FLD (f_r2));
1705   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1706
1707 #if WITH_PROFILE_MODEL_P
1708   if (PROFILE_MODEL_P (current_cpu))
1709     {
1710       m32r_model_mark_set_h_gr (current_cpu, abuf);
1711       m32r_model_profile_insn (current_cpu, abuf);
1712     }
1713 #endif
1714
1715   return new_pc;
1716 #undef FLD
1717 }
1718
1719 /* Perform mvtachi: mvtachi $src1.  */
1720 CIA
1721 SEM_FN_NAME (m32r,mvtachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1722 {
1723 #define FLD(f) abuf->fields.fmt_mvtachi.f
1724   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1725   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1726
1727 m32r_h_accum_set (current_cpu, ORDI (ANDDI (m32r_h_accum_get (current_cpu), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (f_r1)), 32)));
1728   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1729
1730 #if WITH_PROFILE_MODEL_P
1731   if (PROFILE_MODEL_P (current_cpu))
1732     {
1733       m32r_model_mark_get_h_gr (current_cpu, abuf);
1734       m32r_model_profile_insn (current_cpu, abuf);
1735     }
1736 #endif
1737
1738   return new_pc;
1739 #undef FLD
1740 }
1741
1742 /* Perform mvtaclo: mvtaclo $src1.  */
1743 CIA
1744 SEM_FN_NAME (m32r,mvtaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1745 {
1746 #define FLD(f) abuf->fields.fmt_mvtachi.f
1747   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1748   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1749
1750 m32r_h_accum_set (current_cpu, ORDI (ANDDI (m32r_h_accum_get (current_cpu), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (f_r1))));
1751   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1752
1753 #if WITH_PROFILE_MODEL_P
1754   if (PROFILE_MODEL_P (current_cpu))
1755     {
1756       m32r_model_mark_get_h_gr (current_cpu, abuf);
1757       m32r_model_profile_insn (current_cpu, abuf);
1758     }
1759 #endif
1760
1761   return new_pc;
1762 #undef FLD
1763 }
1764
1765 /* Perform mvtc: mvtc $sr,$dcr.  */
1766 CIA
1767 SEM_FN_NAME (m32r,mvtc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1768 {
1769 #define FLD(f) abuf->fields.fmt_mvtc.f
1770   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1771   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1772
1773 m32r_h_cr_set (current_cpu, FLD (f_r1), * FLD (f_r2));
1774   TRACE_RESULT (current_cpu, "dcr", 'x', m32r_h_cr_get (current_cpu, FLD (f_r1)));
1775
1776 #if WITH_PROFILE_MODEL_P
1777   if (PROFILE_MODEL_P (current_cpu))
1778     {
1779       m32r_model_mark_get_h_gr (current_cpu, abuf);
1780       m32r_model_profile_insn (current_cpu, abuf);
1781     }
1782 #endif
1783
1784   return new_pc;
1785 #undef FLD
1786 }
1787
1788 /* Perform neg: neg $dr,$sr.  */
1789 CIA
1790 SEM_FN_NAME (m32r,neg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1791 {
1792 #define FLD(f) abuf->fields.fmt_mv.f
1793   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1794   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1795
1796 * FLD (f_r1) = NEGSI (* FLD (f_r2));
1797   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1798
1799 #if WITH_PROFILE_MODEL_P
1800   if (PROFILE_MODEL_P (current_cpu))
1801     {
1802       m32r_model_mark_get_h_gr (current_cpu, abuf);
1803       m32r_model_mark_set_h_gr (current_cpu, abuf);
1804       m32r_model_profile_insn (current_cpu, abuf);
1805     }
1806 #endif
1807
1808   return new_pc;
1809 #undef FLD
1810 }
1811
1812 /* Perform nop: nop.  */
1813 CIA
1814 SEM_FN_NAME (m32r,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1815 {
1816 #define FLD(f) abuf->fields.fmt_nop.f
1817   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1818   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1819
1820 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
1821
1822 #if WITH_PROFILE_MODEL_P
1823   if (PROFILE_MODEL_P (current_cpu))
1824     {
1825       m32r_model_profile_insn (current_cpu, abuf);
1826     }
1827 #endif
1828
1829   return new_pc;
1830 #undef FLD
1831 }
1832
1833 /* Perform not: not $dr,$sr.  */
1834 CIA
1835 SEM_FN_NAME (m32r,not) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1836 {
1837 #define FLD(f) abuf->fields.fmt_mv.f
1838   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1839   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1840
1841 * FLD (f_r1) = INVSI (* FLD (f_r2));
1842   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1843
1844 #if WITH_PROFILE_MODEL_P
1845   if (PROFILE_MODEL_P (current_cpu))
1846     {
1847       m32r_model_mark_get_h_gr (current_cpu, abuf);
1848       m32r_model_mark_set_h_gr (current_cpu, abuf);
1849       m32r_model_profile_insn (current_cpu, abuf);
1850     }
1851 #endif
1852
1853   return new_pc;
1854 #undef FLD
1855 }
1856
1857 /* Perform rac: rac.  */
1858 CIA
1859 SEM_FN_NAME (m32r,rac) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1860 {
1861 #define FLD(f) abuf->fields.fmt_rac.f
1862   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1863   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1864
1865 do {
1866   DI tmp_tmp1;
1867   tmp_tmp1 = SLLDI (m32r_h_accum_get (current_cpu), 1);
1868   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
1869 m32r_h_accum_set (current_cpu, (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000))));
1870   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1871 } while (0);
1872
1873 #if WITH_PROFILE_MODEL_P
1874   if (PROFILE_MODEL_P (current_cpu))
1875     {
1876       m32r_model_profile_insn (current_cpu, abuf);
1877     }
1878 #endif
1879
1880   return new_pc;
1881 #undef FLD
1882 }
1883
1884 /* Perform rach: rach.  */
1885 CIA
1886 SEM_FN_NAME (m32r,rach) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1887 {
1888 #define FLD(f) abuf->fields.fmt_rac.f
1889   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1890   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1891
1892 do {
1893   DI tmp_tmp1;
1894   tmp_tmp1 = ANDDI (m32r_h_accum_get (current_cpu), MAKEDI (16777215, 0xffffffff));
1895 if (ANDIFSI (GEDI (tmp_tmp1, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1, MAKEDI (8388607, 0xffffffff)))) {
1896   tmp_tmp1 = MAKEDI (16383, 0x80000000);
1897 } else {
1898 if (ANDIFSI (GEDI (tmp_tmp1, MAKEDI (8388608, 0)), LEDI (tmp_tmp1, MAKEDI (16760832, 0)))) {
1899   tmp_tmp1 = MAKEDI (16760832, 0);
1900 } else {
1901   tmp_tmp1 = ANDDI (ADDDI (m32r_h_accum_get (current_cpu), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000));
1902 }
1903 }
1904   tmp_tmp1 = SLLDI (tmp_tmp1, 1);
1905 m32r_h_accum_set (current_cpu, SRADI (SLLDI (tmp_tmp1, 7), 7));
1906   TRACE_RESULT (current_cpu, "accum", 'D', m32r_h_accum_get (current_cpu));
1907 } while (0);
1908
1909 #if WITH_PROFILE_MODEL_P
1910   if (PROFILE_MODEL_P (current_cpu))
1911     {
1912       m32r_model_profile_insn (current_cpu, abuf);
1913     }
1914 #endif
1915
1916   return new_pc;
1917 #undef FLD
1918 }
1919
1920 /* Perform rte: rte.  */
1921 CIA
1922 SEM_FN_NAME (m32r,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1923 {
1924 #define FLD(f) abuf->fields.fmt_rte.f
1925   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1926   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1927   int taken_p = 0;
1928
1929 do {
1930   CPU (h_sm) = CPU (h_bsm);
1931   TRACE_RESULT (current_cpu, "h-sm-0", 'x', CPU (h_sm));
1932   CPU (h_ie) = CPU (h_bie);
1933   TRACE_RESULT (current_cpu, "h-ie-0", 'x', CPU (h_ie));
1934   CPU (h_cond) = CPU (h_bcond);
1935   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
1936   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, ANDSI (CPU (h_bpc), -4)));
1937   taken_p = 1;
1938   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
1939 } while (0);
1940
1941 #if WITH_PROFILE_MODEL_P
1942   if (PROFILE_MODEL_P (current_cpu))
1943     {
1944       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
1945     }
1946 #endif
1947
1948   return new_pc;
1949 #undef FLD
1950 }
1951
1952 /* Perform seth: seth $dr,$hash$hi16.  */
1953 CIA
1954 SEM_FN_NAME (m32r,seth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1955 {
1956 #define FLD(f) abuf->fields.fmt_seth.f
1957   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1958   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1959
1960 * FLD (f_r1) = SLLSI (FLD (f_hi16), 16);
1961   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1962
1963 #if WITH_PROFILE_MODEL_P
1964   if (PROFILE_MODEL_P (current_cpu))
1965     {
1966       m32r_model_mark_set_h_gr (current_cpu, abuf);
1967       m32r_model_profile_insn (current_cpu, abuf);
1968     }
1969 #endif
1970
1971   return new_pc;
1972 #undef FLD
1973 }
1974
1975 /* Perform sll: sll $dr,$sr.  */
1976 CIA
1977 SEM_FN_NAME (m32r,sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1978 {
1979 #define FLD(f) abuf->fields.fmt_add.f
1980   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1981   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1982
1983 * FLD (f_r1) = SLLSI (* FLD (f_r1), ANDSI (* FLD (f_r2), 31));
1984   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1985
1986 #if WITH_PROFILE_MODEL_P
1987   if (PROFILE_MODEL_P (current_cpu))
1988     {
1989       m32r_model_mark_get_h_gr (current_cpu, abuf);
1990       m32r_model_mark_set_h_gr (current_cpu, abuf);
1991       m32r_model_profile_insn (current_cpu, abuf);
1992     }
1993 #endif
1994
1995   return new_pc;
1996 #undef FLD
1997 }
1998
1999 /* Perform sll3: sll3 $dr,$sr,$simm16.  */
2000 CIA
2001 SEM_FN_NAME (m32r,sll3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2002 {
2003 #define FLD(f) abuf->fields.fmt_sll3.f
2004   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2005   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2006
2007 * FLD (f_r1) = SLLSI (* FLD (f_r2), ANDSI (FLD (f_simm16), 31));
2008   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2009
2010 #if WITH_PROFILE_MODEL_P
2011   if (PROFILE_MODEL_P (current_cpu))
2012     {
2013       m32r_model_mark_get_h_gr (current_cpu, abuf);
2014       m32r_model_mark_set_h_gr (current_cpu, abuf);
2015       m32r_model_profile_insn (current_cpu, abuf);
2016     }
2017 #endif
2018
2019   return new_pc;
2020 #undef FLD
2021 }
2022
2023 /* Perform slli: slli $dr,$uimm5.  */
2024 CIA
2025 SEM_FN_NAME (m32r,slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2026 {
2027 #define FLD(f) abuf->fields.fmt_slli.f
2028   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2029   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2030
2031 * FLD (f_r1) = SLLSI (* FLD (f_r1), FLD (f_uimm5));
2032   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2033
2034 #if WITH_PROFILE_MODEL_P
2035   if (PROFILE_MODEL_P (current_cpu))
2036     {
2037       m32r_model_mark_get_h_gr (current_cpu, abuf);
2038       m32r_model_mark_set_h_gr (current_cpu, abuf);
2039       m32r_model_profile_insn (current_cpu, abuf);
2040     }
2041 #endif
2042
2043   return new_pc;
2044 #undef FLD
2045 }
2046
2047 /* Perform sra: sra $dr,$sr.  */
2048 CIA
2049 SEM_FN_NAME (m32r,sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2050 {
2051 #define FLD(f) abuf->fields.fmt_add.f
2052   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2053   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2054
2055 * FLD (f_r1) = SRASI (* FLD (f_r1), ANDSI (* FLD (f_r2), 31));
2056   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2057
2058 #if WITH_PROFILE_MODEL_P
2059   if (PROFILE_MODEL_P (current_cpu))
2060     {
2061       m32r_model_mark_get_h_gr (current_cpu, abuf);
2062       m32r_model_mark_set_h_gr (current_cpu, abuf);
2063       m32r_model_profile_insn (current_cpu, abuf);
2064     }
2065 #endif
2066
2067   return new_pc;
2068 #undef FLD
2069 }
2070
2071 /* Perform sra3: sra3 $dr,$sr,$simm16.  */
2072 CIA
2073 SEM_FN_NAME (m32r,sra3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2074 {
2075 #define FLD(f) abuf->fields.fmt_sll3.f
2076   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2077   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2078
2079 * FLD (f_r1) = SRASI (* FLD (f_r2), ANDSI (FLD (f_simm16), 31));
2080   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2081
2082 #if WITH_PROFILE_MODEL_P
2083   if (PROFILE_MODEL_P (current_cpu))
2084     {
2085       m32r_model_mark_get_h_gr (current_cpu, abuf);
2086       m32r_model_mark_set_h_gr (current_cpu, abuf);
2087       m32r_model_profile_insn (current_cpu, abuf);
2088     }
2089 #endif
2090
2091   return new_pc;
2092 #undef FLD
2093 }
2094
2095 /* Perform srai: srai $dr,$uimm5.  */
2096 CIA
2097 SEM_FN_NAME (m32r,srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2098 {
2099 #define FLD(f) abuf->fields.fmt_slli.f
2100   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2101   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2102
2103 * FLD (f_r1) = SRASI (* FLD (f_r1), FLD (f_uimm5));
2104   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2105
2106 #if WITH_PROFILE_MODEL_P
2107   if (PROFILE_MODEL_P (current_cpu))
2108     {
2109       m32r_model_mark_get_h_gr (current_cpu, abuf);
2110       m32r_model_mark_set_h_gr (current_cpu, abuf);
2111       m32r_model_profile_insn (current_cpu, abuf);
2112     }
2113 #endif
2114
2115   return new_pc;
2116 #undef FLD
2117 }
2118
2119 /* Perform srl: srl $dr,$sr.  */
2120 CIA
2121 SEM_FN_NAME (m32r,srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2122 {
2123 #define FLD(f) abuf->fields.fmt_add.f
2124   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2125   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2126
2127 * FLD (f_r1) = SRLSI (* FLD (f_r1), ANDSI (* FLD (f_r2), 31));
2128   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2129
2130 #if WITH_PROFILE_MODEL_P
2131   if (PROFILE_MODEL_P (current_cpu))
2132     {
2133       m32r_model_mark_get_h_gr (current_cpu, abuf);
2134       m32r_model_mark_set_h_gr (current_cpu, abuf);
2135       m32r_model_profile_insn (current_cpu, abuf);
2136     }
2137 #endif
2138
2139   return new_pc;
2140 #undef FLD
2141 }
2142
2143 /* Perform srl3: srl3 $dr,$sr,$simm16.  */
2144 CIA
2145 SEM_FN_NAME (m32r,srl3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2146 {
2147 #define FLD(f) abuf->fields.fmt_sll3.f
2148   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2149   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2150
2151 * FLD (f_r1) = SRLSI (* FLD (f_r2), ANDSI (FLD (f_simm16), 31));
2152   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2153
2154 #if WITH_PROFILE_MODEL_P
2155   if (PROFILE_MODEL_P (current_cpu))
2156     {
2157       m32r_model_mark_get_h_gr (current_cpu, abuf);
2158       m32r_model_mark_set_h_gr (current_cpu, abuf);
2159       m32r_model_profile_insn (current_cpu, abuf);
2160     }
2161 #endif
2162
2163   return new_pc;
2164 #undef FLD
2165 }
2166
2167 /* Perform srli: srli $dr,$uimm5.  */
2168 CIA
2169 SEM_FN_NAME (m32r,srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2170 {
2171 #define FLD(f) abuf->fields.fmt_slli.f
2172   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2173   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2174
2175 * FLD (f_r1) = SRLSI (* FLD (f_r1), FLD (f_uimm5));
2176   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2177
2178 #if WITH_PROFILE_MODEL_P
2179   if (PROFILE_MODEL_P (current_cpu))
2180     {
2181       m32r_model_mark_get_h_gr (current_cpu, abuf);
2182       m32r_model_mark_set_h_gr (current_cpu, abuf);
2183       m32r_model_profile_insn (current_cpu, abuf);
2184     }
2185 #endif
2186
2187   return new_pc;
2188 #undef FLD
2189 }
2190
2191 /* Perform st: st $src1,@$src2.  */
2192 CIA
2193 SEM_FN_NAME (m32r,st) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2194 {
2195 #define FLD(f) abuf->fields.fmt_st.f
2196   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2197   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2198
2199 SETMEMSI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2200   TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMSI (current_cpu, * FLD (f_r2)));
2201
2202 #if WITH_PROFILE_MODEL_P
2203   if (PROFILE_MODEL_P (current_cpu))
2204     {
2205       m32r_model_mark_get_h_gr (current_cpu, abuf);
2206       m32r_model_profile_insn (current_cpu, abuf);
2207     }
2208 #endif
2209
2210   return new_pc;
2211 #undef FLD
2212 }
2213
2214 /* Perform st-d: st $src1,@($slo16,$src2).  */
2215 CIA
2216 SEM_FN_NAME (m32r,st_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2217 {
2218 #define FLD(f) abuf->fields.fmt_st_d.f
2219   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2220   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2221
2222 SETMEMSI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)), * FLD (f_r1));
2223   TRACE_RESULT (current_cpu, "h-memory-add-WI-src2-slo16", 'x', GETMEMSI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
2224
2225 #if WITH_PROFILE_MODEL_P
2226   if (PROFILE_MODEL_P (current_cpu))
2227     {
2228       m32r_model_mark_get_h_gr (current_cpu, abuf);
2229       m32r_model_profile_insn (current_cpu, abuf);
2230     }
2231 #endif
2232
2233   return new_pc;
2234 #undef FLD
2235 }
2236
2237 /* Perform stb: stb $src1,@$src2.  */
2238 CIA
2239 SEM_FN_NAME (m32r,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2240 {
2241 #define FLD(f) abuf->fields.fmt_stb.f
2242   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2243   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2244
2245 SETMEMQI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2246   TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMQI (current_cpu, * FLD (f_r2)));
2247
2248 #if WITH_PROFILE_MODEL_P
2249   if (PROFILE_MODEL_P (current_cpu))
2250     {
2251       m32r_model_mark_get_h_gr (current_cpu, abuf);
2252       m32r_model_profile_insn (current_cpu, abuf);
2253     }
2254 #endif
2255
2256   return new_pc;
2257 #undef FLD
2258 }
2259
2260 /* Perform stb-d: stb $src1,@($slo16,$src2).  */
2261 CIA
2262 SEM_FN_NAME (m32r,stb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2263 {
2264 #define FLD(f) abuf->fields.fmt_stb_d.f
2265   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2266   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2267
2268 SETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)), * FLD (f_r1));
2269   TRACE_RESULT (current_cpu, "h-memory-add-WI-src2-slo16", 'x', GETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
2270
2271 #if WITH_PROFILE_MODEL_P
2272   if (PROFILE_MODEL_P (current_cpu))
2273     {
2274       m32r_model_mark_get_h_gr (current_cpu, abuf);
2275       m32r_model_profile_insn (current_cpu, abuf);
2276     }
2277 #endif
2278
2279   return new_pc;
2280 #undef FLD
2281 }
2282
2283 /* Perform sth: sth $src1,@$src2.  */
2284 CIA
2285 SEM_FN_NAME (m32r,sth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2286 {
2287 #define FLD(f) abuf->fields.fmt_sth.f
2288   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2289   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2290
2291 SETMEMHI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2292   TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMHI (current_cpu, * FLD (f_r2)));
2293
2294 #if WITH_PROFILE_MODEL_P
2295   if (PROFILE_MODEL_P (current_cpu))
2296     {
2297       m32r_model_mark_get_h_gr (current_cpu, abuf);
2298       m32r_model_profile_insn (current_cpu, abuf);
2299     }
2300 #endif
2301
2302   return new_pc;
2303 #undef FLD
2304 }
2305
2306 /* Perform sth-d: sth $src1,@($slo16,$src2).  */
2307 CIA
2308 SEM_FN_NAME (m32r,sth_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2309 {
2310 #define FLD(f) abuf->fields.fmt_sth_d.f
2311   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2312   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2313
2314 SETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)), * FLD (f_r1));
2315   TRACE_RESULT (current_cpu, "h-memory-add-WI-src2-slo16", 'x', GETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
2316
2317 #if WITH_PROFILE_MODEL_P
2318   if (PROFILE_MODEL_P (current_cpu))
2319     {
2320       m32r_model_mark_get_h_gr (current_cpu, abuf);
2321       m32r_model_profile_insn (current_cpu, abuf);
2322     }
2323 #endif
2324
2325   return new_pc;
2326 #undef FLD
2327 }
2328
2329 /* Perform st-plus: st $src1,@+$src2.  */
2330 CIA
2331 SEM_FN_NAME (m32r,st_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2332 {
2333 #define FLD(f) abuf->fields.fmt_st_plus.f
2334   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2335   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2336
2337 do {
2338   SI tmp_new_src2;
2339   tmp_new_src2 = ADDSI (* FLD (f_r2), 4);
2340 SETMEMSI (current_cpu, tmp_new_src2, * FLD (f_r1));
2341   TRACE_RESULT (current_cpu, "h-memory-new-src2", 'x', GETMEMSI (current_cpu, tmp_new_src2));
2342 * FLD (f_r2) = tmp_new_src2;
2343   TRACE_RESULT (current_cpu, "src2", 'x', * FLD (f_r2));
2344 } while (0);
2345
2346 #if WITH_PROFILE_MODEL_P
2347   if (PROFILE_MODEL_P (current_cpu))
2348     {
2349       m32r_model_mark_get_h_gr (current_cpu, abuf);
2350       m32r_model_mark_set_h_gr (current_cpu, abuf);
2351       m32r_model_profile_insn (current_cpu, abuf);
2352     }
2353 #endif
2354
2355   return new_pc;
2356 #undef FLD
2357 }
2358
2359 /* Perform st-minus: st $src1,@-$src2.  */
2360 CIA
2361 SEM_FN_NAME (m32r,st_minus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2362 {
2363 #define FLD(f) abuf->fields.fmt_st_plus.f
2364   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2365   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2366
2367 do {
2368   SI tmp_new_src2;
2369   tmp_new_src2 = SUBSI (* FLD (f_r2), 4);
2370 SETMEMSI (current_cpu, tmp_new_src2, * FLD (f_r1));
2371   TRACE_RESULT (current_cpu, "h-memory-new-src2", 'x', GETMEMSI (current_cpu, tmp_new_src2));
2372 * FLD (f_r2) = tmp_new_src2;
2373   TRACE_RESULT (current_cpu, "src2", 'x', * FLD (f_r2));
2374 } while (0);
2375
2376 #if WITH_PROFILE_MODEL_P
2377   if (PROFILE_MODEL_P (current_cpu))
2378     {
2379       m32r_model_mark_get_h_gr (current_cpu, abuf);
2380       m32r_model_mark_set_h_gr (current_cpu, abuf);
2381       m32r_model_profile_insn (current_cpu, abuf);
2382     }
2383 #endif
2384
2385   return new_pc;
2386 #undef FLD
2387 }
2388
2389 /* Perform sub: sub $dr,$sr.  */
2390 CIA
2391 SEM_FN_NAME (m32r,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2392 {
2393 #define FLD(f) abuf->fields.fmt_add.f
2394   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2395   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2396
2397 * FLD (f_r1) = SUBSI (* FLD (f_r1), * FLD (f_r2));
2398   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2399
2400 #if WITH_PROFILE_MODEL_P
2401   if (PROFILE_MODEL_P (current_cpu))
2402     {
2403       m32r_model_mark_get_h_gr (current_cpu, abuf);
2404       m32r_model_mark_set_h_gr (current_cpu, abuf);
2405       m32r_model_profile_insn (current_cpu, abuf);
2406     }
2407 #endif
2408
2409   return new_pc;
2410 #undef FLD
2411 }
2412
2413 /* Perform subv: subv $dr,$sr.  */
2414 CIA
2415 SEM_FN_NAME (m32r,subv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2416 {
2417 #define FLD(f) abuf->fields.fmt_addv.f
2418   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2419   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2420
2421 do {
2422   BI temp1;SI temp0;
2423   temp0 = SUBSI (* FLD (f_r1), * FLD (f_r2));
2424   temp1 = SUBOFSI (* FLD (f_r1), * FLD (f_r2), 0);
2425 * FLD (f_r1) = temp0;
2426   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2427   CPU (h_cond) = temp1;
2428   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
2429 } while (0);
2430
2431 #if WITH_PROFILE_MODEL_P
2432   if (PROFILE_MODEL_P (current_cpu))
2433     {
2434       m32r_model_mark_get_h_gr (current_cpu, abuf);
2435       m32r_model_mark_set_h_gr (current_cpu, abuf);
2436       m32r_model_profile_insn (current_cpu, abuf);
2437     }
2438 #endif
2439
2440   return new_pc;
2441 #undef FLD
2442 }
2443
2444 /* Perform subx: subx $dr,$sr.  */
2445 CIA
2446 SEM_FN_NAME (m32r,subx) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2447 {
2448 #define FLD(f) abuf->fields.fmt_addx.f
2449   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2450   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2451
2452 do {
2453   BI temp1;SI temp0;
2454   temp0 = SUBCSI (* FLD (f_r1), * FLD (f_r2), CPU (h_cond));
2455   temp1 = SUBCFSI (* FLD (f_r1), * FLD (f_r2), CPU (h_cond));
2456 * FLD (f_r1) = temp0;
2457   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2458   CPU (h_cond) = temp1;
2459   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
2460 } while (0);
2461
2462 #if WITH_PROFILE_MODEL_P
2463   if (PROFILE_MODEL_P (current_cpu))
2464     {
2465       m32r_model_mark_get_h_gr (current_cpu, abuf);
2466       m32r_model_mark_set_h_gr (current_cpu, abuf);
2467       m32r_model_profile_insn (current_cpu, abuf);
2468     }
2469 #endif
2470
2471   return new_pc;
2472 #undef FLD
2473 }
2474
2475 /* Perform trap: trap $uimm4.  */
2476 CIA
2477 SEM_FN_NAME (m32r,trap) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2478 {
2479 #define FLD(f) abuf->fields.fmt_trap.f
2480   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2481   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2482   int taken_p = 0;
2483
2484 do {
2485 m32r_h_cr_set (current_cpu, 6, ADDSI (CPU (h_pc), 4));
2486   TRACE_RESULT (current_cpu, "h-cr-6", 'x', m32r_h_cr_get (current_cpu, 6));
2487 m32r_h_cr_set (current_cpu, 0, ANDSI (SLLSI (m32r_h_cr_get (current_cpu, 0), 8), 65408));
2488   TRACE_RESULT (current_cpu, "h-cr-0", 'x', m32r_h_cr_get (current_cpu, 0));
2489   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, do_trap (current_cpu, FLD (f_uimm4))));
2490   taken_p = 1;
2491   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
2492 } while (0);
2493
2494 #if WITH_PROFILE_MODEL_P
2495   if (PROFILE_MODEL_P (current_cpu))
2496     {
2497       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
2498     }
2499 #endif
2500
2501   return new_pc;
2502 #undef FLD
2503 }
2504
2505 /* Perform unlock: unlock $src1,@$src2.  */
2506 CIA
2507 SEM_FN_NAME (m32r,unlock) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2508 {
2509 #define FLD(f) abuf->fields.fmt_unlock.f
2510   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2511   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2512
2513 do {
2514 if (CPU (h_lock)) {
2515 SETMEMSI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2516   TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMSI (current_cpu, * FLD (f_r2)));
2517 }
2518   CPU (h_lock) = 0;
2519   TRACE_RESULT (current_cpu, "h-lock-0", 'x', CPU (h_lock));
2520 } while (0);
2521
2522 #if WITH_PROFILE_MODEL_P
2523   if (PROFILE_MODEL_P (current_cpu))
2524     {
2525       m32r_model_mark_get_h_gr (current_cpu, abuf);
2526       m32r_model_profile_insn (current_cpu, abuf);
2527     }
2528 #endif
2529
2530   return new_pc;
2531 #undef FLD
2532 }
2533
2534 CIA
2535 SEM_FN_NAME (m32r,illegal) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2536 {
2537   sim_engine_illegal_insn (current_cpu, NULL_CIA /*FIXME*/);
2538   return 0;
2539 }
2540
2541 #endif /* ! defined (SCACHE_P) || (defined (SCACHE_P) && WITH_SCACHE) */