* Makefile.in (m32r.o): Depend on cpu.h
[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_0_add.f
43   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
44   CIA new_pc = SEM_NEXT_PC (sem_arg);
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,#$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_1_add3.f
67   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
68   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_0_add.f
91   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
92   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_2_and3.f
115   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
116   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_0_add.f
139   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
140   CIA new_pc = SEM_NEXT_PC (sem_arg);
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,#$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_3_or3.f
163   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
164   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_0_add.f
187   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
188   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_2_and3.f
211   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
212   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_4_addi.f
235   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
236   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_0_add.f
259   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
260   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_5_addv3.f
290   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
291   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_6_addx.f
321   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
322   CIA new_pc = SEM_NEXT_PC (sem_arg);
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_7_bc8.f
352   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
353   CIA new_pc = SEM_NEXT_PC (sem_arg);
354   int taken_p = 0;
355
356 if (CPU (h_cond)) {
357   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp8)));
358   taken_p = 1;
359 }
360
361 #if WITH_PROFILE_MODEL_P
362   if (PROFILE_MODEL_P (current_cpu))
363     {
364       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
365     }
366 #endif
367
368   return new_pc;
369 #undef FLD
370 }
371
372 /* Perform bc24: bc $disp24.  */
373 CIA
374 SEM_FN_NAME (m32r,bc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
375 {
376 #define FLD(f) abuf->fields.fmt_8_bc24.f
377   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
378   CIA new_pc = SEM_NEXT_PC (sem_arg);
379   int taken_p = 0;
380
381 if (CPU (h_cond)) {
382   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp24)));
383   taken_p = 1;
384 }
385
386 #if WITH_PROFILE_MODEL_P
387   if (PROFILE_MODEL_P (current_cpu))
388     {
389       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
390     }
391 #endif
392
393   return new_pc;
394 #undef FLD
395 }
396
397 /* Perform beq: beq $src1,$src2,$disp16.  */
398 CIA
399 SEM_FN_NAME (m32r,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
400 {
401 #define FLD(f) abuf->fields.fmt_9_beq.f
402   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
403   CIA new_pc = SEM_NEXT_PC (sem_arg);
404   int taken_p = 0;
405
406 if (EQSI (* FLD (f_r1), * FLD (f_r2))) {
407   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
408   taken_p = 1;
409 }
410
411 #if WITH_PROFILE_MODEL_P
412   if (PROFILE_MODEL_P (current_cpu))
413     {
414       m32r_model_mark_get_h_gr (current_cpu, abuf);
415       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
416     }
417 #endif
418
419   return new_pc;
420 #undef FLD
421 }
422
423 /* Perform beqz: beqz $src2,$disp16.  */
424 CIA
425 SEM_FN_NAME (m32r,beqz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
426 {
427 #define FLD(f) abuf->fields.fmt_10_beqz.f
428   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
429   CIA new_pc = SEM_NEXT_PC (sem_arg);
430   int taken_p = 0;
431
432 if (EQSI (* FLD (f_r2), 0)) {
433   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
434   taken_p = 1;
435 }
436
437 #if WITH_PROFILE_MODEL_P
438   if (PROFILE_MODEL_P (current_cpu))
439     {
440       m32r_model_mark_get_h_gr (current_cpu, abuf);
441       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
442     }
443 #endif
444
445   return new_pc;
446 #undef FLD
447 }
448
449 /* Perform bgez: bgez $src2,$disp16.  */
450 CIA
451 SEM_FN_NAME (m32r,bgez) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
452 {
453 #define FLD(f) abuf->fields.fmt_10_beqz.f
454   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
455   CIA new_pc = SEM_NEXT_PC (sem_arg);
456   int taken_p = 0;
457
458 if (GESI (* FLD (f_r2), 0)) {
459   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
460   taken_p = 1;
461 }
462
463 #if WITH_PROFILE_MODEL_P
464   if (PROFILE_MODEL_P (current_cpu))
465     {
466       m32r_model_mark_get_h_gr (current_cpu, abuf);
467       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
468     }
469 #endif
470
471   return new_pc;
472 #undef FLD
473 }
474
475 /* Perform bgtz: bgtz $src2,$disp16.  */
476 CIA
477 SEM_FN_NAME (m32r,bgtz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
478 {
479 #define FLD(f) abuf->fields.fmt_10_beqz.f
480   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
481   CIA new_pc = SEM_NEXT_PC (sem_arg);
482   int taken_p = 0;
483
484 if (GTSI (* FLD (f_r2), 0)) {
485   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
486   taken_p = 1;
487 }
488
489 #if WITH_PROFILE_MODEL_P
490   if (PROFILE_MODEL_P (current_cpu))
491     {
492       m32r_model_mark_get_h_gr (current_cpu, abuf);
493       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
494     }
495 #endif
496
497   return new_pc;
498 #undef FLD
499 }
500
501 /* Perform blez: blez $src2,$disp16.  */
502 CIA
503 SEM_FN_NAME (m32r,blez) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
504 {
505 #define FLD(f) abuf->fields.fmt_10_beqz.f
506   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
507   CIA new_pc = SEM_NEXT_PC (sem_arg);
508   int taken_p = 0;
509
510 if (LESI (* FLD (f_r2), 0)) {
511   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
512   taken_p = 1;
513 }
514
515 #if WITH_PROFILE_MODEL_P
516   if (PROFILE_MODEL_P (current_cpu))
517     {
518       m32r_model_mark_get_h_gr (current_cpu, abuf);
519       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
520     }
521 #endif
522
523   return new_pc;
524 #undef FLD
525 }
526
527 /* Perform bltz: bltz $src2,$disp16.  */
528 CIA
529 SEM_FN_NAME (m32r,bltz) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
530 {
531 #define FLD(f) abuf->fields.fmt_10_beqz.f
532   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
533   CIA new_pc = SEM_NEXT_PC (sem_arg);
534   int taken_p = 0;
535
536 if (LTSI (* FLD (f_r2), 0)) {
537   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
538   taken_p = 1;
539 }
540
541 #if WITH_PROFILE_MODEL_P
542   if (PROFILE_MODEL_P (current_cpu))
543     {
544       m32r_model_mark_get_h_gr (current_cpu, abuf);
545       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
546     }
547 #endif
548
549   return new_pc;
550 #undef FLD
551 }
552
553 /* Perform bnez: bnez $src2,$disp16.  */
554 CIA
555 SEM_FN_NAME (m32r,bnez) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
556 {
557 #define FLD(f) abuf->fields.fmt_10_beqz.f
558   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
559   CIA new_pc = SEM_NEXT_PC (sem_arg);
560   int taken_p = 0;
561
562 if (NESI (* FLD (f_r2), 0)) {
563   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
564   taken_p = 1;
565 }
566
567 #if WITH_PROFILE_MODEL_P
568   if (PROFILE_MODEL_P (current_cpu))
569     {
570       m32r_model_mark_get_h_gr (current_cpu, abuf);
571       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
572     }
573 #endif
574
575   return new_pc;
576 #undef FLD
577 }
578
579 /* Perform bl8: bl $disp8.  */
580 CIA
581 SEM_FN_NAME (m32r,bl8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
582 {
583 #define FLD(f) abuf->fields.fmt_11_bl8.f
584   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
585   CIA new_pc = SEM_NEXT_PC (sem_arg);
586   int taken_p = 0;
587
588 do {
589   CPU (h_gr[14]) = ADDSI (ANDSI (CPU (h_pc), -4), 4);
590   TRACE_RESULT (current_cpu, "h-gr-14", 'x', CPU (h_gr[14]));
591   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp8)));
592   taken_p = 1;
593 } while (0);
594
595 #if WITH_PROFILE_MODEL_P
596   if (PROFILE_MODEL_P (current_cpu))
597     {
598       m32r_model_mark_set_h_gr (current_cpu, abuf);
599       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
600     }
601 #endif
602
603   return new_pc;
604 #undef FLD
605 }
606
607 /* Perform bl24: bl $disp24.  */
608 CIA
609 SEM_FN_NAME (m32r,bl24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
610 {
611 #define FLD(f) abuf->fields.fmt_12_bl24.f
612   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
613   CIA new_pc = SEM_NEXT_PC (sem_arg);
614   int taken_p = 0;
615
616 do {
617   CPU (h_gr[14]) = ADDSI (CPU (h_pc), 4);
618   TRACE_RESULT (current_cpu, "h-gr-14", 'x', CPU (h_gr[14]));
619   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp24)));
620   taken_p = 1;
621 } while (0);
622
623 #if WITH_PROFILE_MODEL_P
624   if (PROFILE_MODEL_P (current_cpu))
625     {
626       m32r_model_mark_set_h_gr (current_cpu, abuf);
627       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
628     }
629 #endif
630
631   return new_pc;
632 #undef FLD
633 }
634
635 /* Perform bnc8: bnc $disp8.  */
636 CIA
637 SEM_FN_NAME (m32r,bnc8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
638 {
639 #define FLD(f) abuf->fields.fmt_7_bc8.f
640   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
641   CIA new_pc = SEM_NEXT_PC (sem_arg);
642   int taken_p = 0;
643
644 if (NOTBI (CPU (h_cond))) {
645   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp8)));
646   taken_p = 1;
647 }
648
649 #if WITH_PROFILE_MODEL_P
650   if (PROFILE_MODEL_P (current_cpu))
651     {
652       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
653     }
654 #endif
655
656   return new_pc;
657 #undef FLD
658 }
659
660 /* Perform bnc24: bnc $disp24.  */
661 CIA
662 SEM_FN_NAME (m32r,bnc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
663 {
664 #define FLD(f) abuf->fields.fmt_8_bc24.f
665   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
666   CIA new_pc = SEM_NEXT_PC (sem_arg);
667   int taken_p = 0;
668
669 if (NOTBI (CPU (h_cond))) {
670   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp24)));
671   taken_p = 1;
672 }
673
674 #if WITH_PROFILE_MODEL_P
675   if (PROFILE_MODEL_P (current_cpu))
676     {
677       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
678     }
679 #endif
680
681   return new_pc;
682 #undef FLD
683 }
684
685 /* Perform bne: bne $src1,$src2,$disp16.  */
686 CIA
687 SEM_FN_NAME (m32r,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
688 {
689 #define FLD(f) abuf->fields.fmt_9_beq.f
690   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
691   CIA new_pc = SEM_NEXT_PC (sem_arg);
692   int taken_p = 0;
693
694 if (NESI (* FLD (f_r1), * FLD (f_r2))) {
695   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp16)));
696   taken_p = 1;
697 }
698
699 #if WITH_PROFILE_MODEL_P
700   if (PROFILE_MODEL_P (current_cpu))
701     {
702       m32r_model_mark_get_h_gr (current_cpu, abuf);
703       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
704     }
705 #endif
706
707   return new_pc;
708 #undef FLD
709 }
710
711 /* Perform bra8: bra $disp8.  */
712 CIA
713 SEM_FN_NAME (m32r,bra8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
714 {
715 #define FLD(f) abuf->fields.fmt_13_bra8.f
716   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
717   CIA new_pc = SEM_NEXT_PC (sem_arg);
718   int taken_p = 0;
719
720   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp8)));
721   taken_p = 1;
722
723 #if WITH_PROFILE_MODEL_P
724   if (PROFILE_MODEL_P (current_cpu))
725     {
726       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
727     }
728 #endif
729
730   return new_pc;
731 #undef FLD
732 }
733
734 /* Perform bra24: bra $disp24.  */
735 CIA
736 SEM_FN_NAME (m32r,bra24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
737 {
738 #define FLD(f) abuf->fields.fmt_14_bra24.f
739   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
740   CIA new_pc = SEM_NEXT_PC (sem_arg);
741   int taken_p = 0;
742
743   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, FLD (f_disp24)));
744   taken_p = 1;
745
746 #if WITH_PROFILE_MODEL_P
747   if (PROFILE_MODEL_P (current_cpu))
748     {
749       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
750     }
751 #endif
752
753   return new_pc;
754 #undef FLD
755 }
756
757 /* Perform cmp: cmp $src1,$src2.  */
758 CIA
759 SEM_FN_NAME (m32r,cmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
760 {
761 #define FLD(f) abuf->fields.fmt_15_cmp.f
762   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
763   CIA new_pc = SEM_NEXT_PC (sem_arg);
764
765   CPU (h_cond) = LTSI (* FLD (f_r1), * FLD (f_r2));
766   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
767
768 #if WITH_PROFILE_MODEL_P
769   if (PROFILE_MODEL_P (current_cpu))
770     {
771       m32r_model_mark_get_h_gr (current_cpu, abuf);
772       m32r_model_profile_insn (current_cpu, abuf);
773     }
774 #endif
775
776   return new_pc;
777 #undef FLD
778 }
779
780 /* Perform cmpi: cmpi $src2,#$simm16.  */
781 CIA
782 SEM_FN_NAME (m32r,cmpi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
783 {
784 #define FLD(f) abuf->fields.fmt_16_cmpi.f
785   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
786   CIA new_pc = SEM_NEXT_PC (sem_arg);
787
788   CPU (h_cond) = LTSI (* FLD (f_r2), FLD (f_simm16));
789   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
790
791 #if WITH_PROFILE_MODEL_P
792   if (PROFILE_MODEL_P (current_cpu))
793     {
794       m32r_model_mark_get_h_gr (current_cpu, abuf);
795       m32r_model_profile_insn (current_cpu, abuf);
796     }
797 #endif
798
799   return new_pc;
800 #undef FLD
801 }
802
803 /* Perform cmpu: cmpu $src1,$src2.  */
804 CIA
805 SEM_FN_NAME (m32r,cmpu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
806 {
807 #define FLD(f) abuf->fields.fmt_15_cmp.f
808   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
809   CIA new_pc = SEM_NEXT_PC (sem_arg);
810
811   CPU (h_cond) = LTUSI (* FLD (f_r1), * FLD (f_r2));
812   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
813
814 #if WITH_PROFILE_MODEL_P
815   if (PROFILE_MODEL_P (current_cpu))
816     {
817       m32r_model_mark_get_h_gr (current_cpu, abuf);
818       m32r_model_profile_insn (current_cpu, abuf);
819     }
820 #endif
821
822   return new_pc;
823 #undef FLD
824 }
825
826 /* Perform cmpui: cmpui $src2,#$uimm16.  */
827 CIA
828 SEM_FN_NAME (m32r,cmpui) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
829 {
830 #define FLD(f) abuf->fields.fmt_17_cmpui.f
831   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
832   CIA new_pc = SEM_NEXT_PC (sem_arg);
833
834   CPU (h_cond) = LTUSI (* FLD (f_r2), FLD (f_uimm16));
835   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
836
837 #if WITH_PROFILE_MODEL_P
838   if (PROFILE_MODEL_P (current_cpu))
839     {
840       m32r_model_mark_get_h_gr (current_cpu, abuf);
841       m32r_model_profile_insn (current_cpu, abuf);
842     }
843 #endif
844
845   return new_pc;
846 #undef FLD
847 }
848
849 /* Perform div: div $dr,$sr.  */
850 CIA
851 SEM_FN_NAME (m32r,div) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
852 {
853 #define FLD(f) abuf->fields.fmt_18_div.f
854   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
855   CIA new_pc = SEM_NEXT_PC (sem_arg);
856
857 if (NESI (* FLD (f_r2), 0)) {
858 * FLD (f_r1) = DIVSI (* FLD (f_r1), * FLD (f_r2));
859   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
860 }
861
862 #if WITH_PROFILE_MODEL_P
863   if (PROFILE_MODEL_P (current_cpu))
864     {
865       m32r_model_mark_get_h_gr (current_cpu, abuf);
866       m32r_model_mark_set_h_gr (current_cpu, abuf);
867       m32r_model_profile_insn (current_cpu, abuf);
868     }
869 #endif
870
871   return new_pc;
872 #undef FLD
873 }
874
875 /* Perform divu: divu $dr,$sr.  */
876 CIA
877 SEM_FN_NAME (m32r,divu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
878 {
879 #define FLD(f) abuf->fields.fmt_18_div.f
880   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
881   CIA new_pc = SEM_NEXT_PC (sem_arg);
882
883 if (NESI (* FLD (f_r2), 0)) {
884 * FLD (f_r1) = UDIVSI (* FLD (f_r1), * FLD (f_r2));
885   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
886 }
887
888 #if WITH_PROFILE_MODEL_P
889   if (PROFILE_MODEL_P (current_cpu))
890     {
891       m32r_model_mark_get_h_gr (current_cpu, abuf);
892       m32r_model_mark_set_h_gr (current_cpu, abuf);
893       m32r_model_profile_insn (current_cpu, abuf);
894     }
895 #endif
896
897   return new_pc;
898 #undef FLD
899 }
900
901 /* Perform rem: rem $dr,$sr.  */
902 CIA
903 SEM_FN_NAME (m32r,rem) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
904 {
905 #define FLD(f) abuf->fields.fmt_18_div.f
906   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
907   CIA new_pc = SEM_NEXT_PC (sem_arg);
908
909 if (NESI (* FLD (f_r2), 0)) {
910 * FLD (f_r1) = MODSI (* FLD (f_r1), * FLD (f_r2));
911   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
912 }
913
914 #if WITH_PROFILE_MODEL_P
915   if (PROFILE_MODEL_P (current_cpu))
916     {
917       m32r_model_mark_get_h_gr (current_cpu, abuf);
918       m32r_model_mark_set_h_gr (current_cpu, abuf);
919       m32r_model_profile_insn (current_cpu, abuf);
920     }
921 #endif
922
923   return new_pc;
924 #undef FLD
925 }
926
927 /* Perform remu: remu $dr,$sr.  */
928 CIA
929 SEM_FN_NAME (m32r,remu) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
930 {
931 #define FLD(f) abuf->fields.fmt_18_div.f
932   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
933   CIA new_pc = SEM_NEXT_PC (sem_arg);
934
935 if (NESI (* FLD (f_r2), 0)) {
936 * FLD (f_r1) = UMODSI (* FLD (f_r1), * FLD (f_r2));
937   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
938 }
939
940 #if WITH_PROFILE_MODEL_P
941   if (PROFILE_MODEL_P (current_cpu))
942     {
943       m32r_model_mark_get_h_gr (current_cpu, abuf);
944       m32r_model_mark_set_h_gr (current_cpu, abuf);
945       m32r_model_profile_insn (current_cpu, abuf);
946     }
947 #endif
948
949   return new_pc;
950 #undef FLD
951 }
952
953 /* Perform jl: jl $sr.  */
954 CIA
955 SEM_FN_NAME (m32r,jl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
956 {
957 #define FLD(f) abuf->fields.fmt_19_jl.f
958   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
959   CIA new_pc = SEM_NEXT_PC (sem_arg);
960   int taken_p = 0;
961
962 do {
963   USI temp1;SI temp0;
964   temp0 = ADDSI (ANDSI (CPU (h_pc), -4), 4);
965   temp1 = * FLD (f_r2);
966   CPU (h_gr[14]) = temp0;
967   TRACE_RESULT (current_cpu, "h-gr-14", 'x', CPU (h_gr[14]));
968   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, temp1));
969   taken_p = 1;
970 } while (0);
971
972 #if WITH_PROFILE_MODEL_P
973   if (PROFILE_MODEL_P (current_cpu))
974     {
975       m32r_model_mark_get_h_gr (current_cpu, abuf);
976       m32r_model_mark_set_h_gr (current_cpu, abuf);
977       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
978     }
979 #endif
980
981   return new_pc;
982 #undef FLD
983 }
984
985 /* Perform jmp: jmp $sr.  */
986 CIA
987 SEM_FN_NAME (m32r,jmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
988 {
989 #define FLD(f) abuf->fields.fmt_20_jmp.f
990   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
991   CIA new_pc = SEM_NEXT_PC (sem_arg);
992   int taken_p = 0;
993
994   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, * FLD (f_r2)));
995   taken_p = 1;
996
997 #if WITH_PROFILE_MODEL_P
998   if (PROFILE_MODEL_P (current_cpu))
999     {
1000       m32r_model_mark_get_h_gr (current_cpu, abuf);
1001       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
1002     }
1003 #endif
1004
1005   return new_pc;
1006 #undef FLD
1007 }
1008
1009 /* Perform ld: ld $dr,@$sr.  */
1010 CIA
1011 SEM_FN_NAME (m32r,ld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1012 {
1013 #define FLD(f) abuf->fields.fmt_21_ld.f
1014   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1015   CIA new_pc = SEM_NEXT_PC (sem_arg);
1016
1017 * FLD (f_r1) = GETMEMSI (current_cpu, * FLD (f_r2));
1018   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1019
1020 #if WITH_PROFILE_MODEL_P
1021   if (PROFILE_MODEL_P (current_cpu))
1022     {
1023       m32r_model_mark_get_h_gr (current_cpu, abuf);
1024       m32r_model_mark_set_h_gr (current_cpu, abuf);
1025       m32r_model_profile_insn (current_cpu, abuf);
1026     }
1027 #endif
1028
1029   return new_pc;
1030 #undef FLD
1031 }
1032
1033 /* Perform ld-d: ld $dr,@($slo16,$sr).  */
1034 CIA
1035 SEM_FN_NAME (m32r,ld_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1036 {
1037 #define FLD(f) abuf->fields.fmt_22_ld_d.f
1038   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1039   CIA new_pc = SEM_NEXT_PC (sem_arg);
1040
1041 * FLD (f_r1) = GETMEMSI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)));
1042   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1043
1044 #if WITH_PROFILE_MODEL_P
1045   if (PROFILE_MODEL_P (current_cpu))
1046     {
1047       m32r_model_mark_get_h_gr (current_cpu, abuf);
1048       m32r_model_mark_set_h_gr (current_cpu, abuf);
1049       m32r_model_profile_insn (current_cpu, abuf);
1050     }
1051 #endif
1052
1053   return new_pc;
1054 #undef FLD
1055 }
1056
1057 /* Perform ldb: ldb $dr,@$sr.  */
1058 CIA
1059 SEM_FN_NAME (m32r,ldb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1060 {
1061 #define FLD(f) abuf->fields.fmt_23_ldb.f
1062   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1063   CIA new_pc = SEM_NEXT_PC (sem_arg);
1064
1065 * FLD (f_r1) = EXTQISI (GETMEMQI (current_cpu, * FLD (f_r2)));
1066   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1067
1068 #if WITH_PROFILE_MODEL_P
1069   if (PROFILE_MODEL_P (current_cpu))
1070     {
1071       m32r_model_mark_get_h_gr (current_cpu, abuf);
1072       m32r_model_mark_set_h_gr (current_cpu, abuf);
1073       m32r_model_profile_insn (current_cpu, abuf);
1074     }
1075 #endif
1076
1077   return new_pc;
1078 #undef FLD
1079 }
1080
1081 /* Perform ldb-d: ldb $dr,@($slo16,$sr).  */
1082 CIA
1083 SEM_FN_NAME (m32r,ldb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1084 {
1085 #define FLD(f) abuf->fields.fmt_24_ldb_d.f
1086   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1087   CIA new_pc = SEM_NEXT_PC (sem_arg);
1088
1089 * FLD (f_r1) = EXTQISI (GETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1090   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1091
1092 #if WITH_PROFILE_MODEL_P
1093   if (PROFILE_MODEL_P (current_cpu))
1094     {
1095       m32r_model_mark_get_h_gr (current_cpu, abuf);
1096       m32r_model_mark_set_h_gr (current_cpu, abuf);
1097       m32r_model_profile_insn (current_cpu, abuf);
1098     }
1099 #endif
1100
1101   return new_pc;
1102 #undef FLD
1103 }
1104
1105 /* Perform ldh: ldh $dr,@$sr.  */
1106 CIA
1107 SEM_FN_NAME (m32r,ldh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1108 {
1109 #define FLD(f) abuf->fields.fmt_25_ldh.f
1110   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1111   CIA new_pc = SEM_NEXT_PC (sem_arg);
1112
1113 * FLD (f_r1) = EXTHISI (GETMEMHI (current_cpu, * FLD (f_r2)));
1114   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1115
1116 #if WITH_PROFILE_MODEL_P
1117   if (PROFILE_MODEL_P (current_cpu))
1118     {
1119       m32r_model_mark_get_h_gr (current_cpu, abuf);
1120       m32r_model_mark_set_h_gr (current_cpu, abuf);
1121       m32r_model_profile_insn (current_cpu, abuf);
1122     }
1123 #endif
1124
1125   return new_pc;
1126 #undef FLD
1127 }
1128
1129 /* Perform ldh-d: ldh $dr,@($slo16,$sr).  */
1130 CIA
1131 SEM_FN_NAME (m32r,ldh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1132 {
1133 #define FLD(f) abuf->fields.fmt_26_ldh_d.f
1134   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1135   CIA new_pc = SEM_NEXT_PC (sem_arg);
1136
1137 * FLD (f_r1) = EXTHISI (GETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1138   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1139
1140 #if WITH_PROFILE_MODEL_P
1141   if (PROFILE_MODEL_P (current_cpu))
1142     {
1143       m32r_model_mark_get_h_gr (current_cpu, abuf);
1144       m32r_model_mark_set_h_gr (current_cpu, abuf);
1145       m32r_model_profile_insn (current_cpu, abuf);
1146     }
1147 #endif
1148
1149   return new_pc;
1150 #undef FLD
1151 }
1152
1153 /* Perform ldub: ldub $dr,@$sr.  */
1154 CIA
1155 SEM_FN_NAME (m32r,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1156 {
1157 #define FLD(f) abuf->fields.fmt_23_ldb.f
1158   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1159   CIA new_pc = SEM_NEXT_PC (sem_arg);
1160
1161 * FLD (f_r1) = ZEXTQISI (GETMEMQI (current_cpu, * FLD (f_r2)));
1162   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1163
1164 #if WITH_PROFILE_MODEL_P
1165   if (PROFILE_MODEL_P (current_cpu))
1166     {
1167       m32r_model_mark_get_h_gr (current_cpu, abuf);
1168       m32r_model_mark_set_h_gr (current_cpu, abuf);
1169       m32r_model_profile_insn (current_cpu, abuf);
1170     }
1171 #endif
1172
1173   return new_pc;
1174 #undef FLD
1175 }
1176
1177 /* Perform ldub-d: ldub $dr,@($slo16,$sr).  */
1178 CIA
1179 SEM_FN_NAME (m32r,ldub_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1180 {
1181 #define FLD(f) abuf->fields.fmt_24_ldb_d.f
1182   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1183   CIA new_pc = SEM_NEXT_PC (sem_arg);
1184
1185 * FLD (f_r1) = ZEXTQISI (GETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1186   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1187
1188 #if WITH_PROFILE_MODEL_P
1189   if (PROFILE_MODEL_P (current_cpu))
1190     {
1191       m32r_model_mark_get_h_gr (current_cpu, abuf);
1192       m32r_model_mark_set_h_gr (current_cpu, abuf);
1193       m32r_model_profile_insn (current_cpu, abuf);
1194     }
1195 #endif
1196
1197   return new_pc;
1198 #undef FLD
1199 }
1200
1201 /* Perform lduh: lduh $dr,@$sr.  */
1202 CIA
1203 SEM_FN_NAME (m32r,lduh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1204 {
1205 #define FLD(f) abuf->fields.fmt_25_ldh.f
1206   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1207   CIA new_pc = SEM_NEXT_PC (sem_arg);
1208
1209 * FLD (f_r1) = ZEXTHISI (GETMEMHI (current_cpu, * FLD (f_r2)));
1210   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1211
1212 #if WITH_PROFILE_MODEL_P
1213   if (PROFILE_MODEL_P (current_cpu))
1214     {
1215       m32r_model_mark_get_h_gr (current_cpu, abuf);
1216       m32r_model_mark_set_h_gr (current_cpu, abuf);
1217       m32r_model_profile_insn (current_cpu, abuf);
1218     }
1219 #endif
1220
1221   return new_pc;
1222 #undef FLD
1223 }
1224
1225 /* Perform lduh-d: lduh $dr,@($slo16,$sr).  */
1226 CIA
1227 SEM_FN_NAME (m32r,lduh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1228 {
1229 #define FLD(f) abuf->fields.fmt_26_ldh_d.f
1230   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1231   CIA new_pc = SEM_NEXT_PC (sem_arg);
1232
1233 * FLD (f_r1) = ZEXTHISI (GETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1234   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1235
1236 #if WITH_PROFILE_MODEL_P
1237   if (PROFILE_MODEL_P (current_cpu))
1238     {
1239       m32r_model_mark_get_h_gr (current_cpu, abuf);
1240       m32r_model_mark_set_h_gr (current_cpu, abuf);
1241       m32r_model_profile_insn (current_cpu, abuf);
1242     }
1243 #endif
1244
1245   return new_pc;
1246 #undef FLD
1247 }
1248
1249 /* Perform ld-plus: ld $dr,@$sr+.  */
1250 CIA
1251 SEM_FN_NAME (m32r,ld_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1252 {
1253 #define FLD(f) abuf->fields.fmt_21_ld.f
1254   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1255   CIA new_pc = SEM_NEXT_PC (sem_arg);
1256
1257 do {
1258   SI temp1;SI temp0;
1259   temp0 = GETMEMSI (current_cpu, * FLD (f_r2));
1260   temp1 = ADDSI (* FLD (f_r2), 4);
1261 * FLD (f_r1) = temp0;
1262   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1263 * FLD (f_r2) = temp1;
1264   TRACE_RESULT (current_cpu, "sr", 'x', * FLD (f_r2));
1265 } while (0);
1266
1267 #if WITH_PROFILE_MODEL_P
1268   if (PROFILE_MODEL_P (current_cpu))
1269     {
1270       m32r_model_mark_get_h_gr (current_cpu, abuf);
1271       m32r_model_mark_set_h_gr (current_cpu, abuf);
1272       m32r_model_profile_insn (current_cpu, abuf);
1273     }
1274 #endif
1275
1276   return new_pc;
1277 #undef FLD
1278 }
1279
1280 /* Perform ld24: ld24 $dr,#$uimm24.  */
1281 CIA
1282 SEM_FN_NAME (m32r,ld24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1283 {
1284 #define FLD(f) abuf->fields.fmt_27_ld24.f
1285   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1286   CIA new_pc = SEM_NEXT_PC (sem_arg);
1287
1288 * FLD (f_r1) = FLD (f_uimm24);
1289   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1290
1291 #if WITH_PROFILE_MODEL_P
1292   if (PROFILE_MODEL_P (current_cpu))
1293     {
1294       m32r_model_mark_set_h_gr (current_cpu, abuf);
1295       m32r_model_profile_insn (current_cpu, abuf);
1296     }
1297 #endif
1298
1299   return new_pc;
1300 #undef FLD
1301 }
1302
1303 /* Perform ldi8: ldi $dr,#$simm8.  */
1304 CIA
1305 SEM_FN_NAME (m32r,ldi8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1306 {
1307 #define FLD(f) abuf->fields.fmt_28_ldi8.f
1308   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1309   CIA new_pc = SEM_NEXT_PC (sem_arg);
1310
1311 * FLD (f_r1) = FLD (f_simm8);
1312   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1313
1314 #if WITH_PROFILE_MODEL_P
1315   if (PROFILE_MODEL_P (current_cpu))
1316     {
1317       m32r_model_mark_set_h_gr (current_cpu, abuf);
1318       m32r_model_profile_insn (current_cpu, abuf);
1319     }
1320 #endif
1321
1322   return new_pc;
1323 #undef FLD
1324 }
1325
1326 /* Perform ldi16: ldi $dr,$slo16.  */
1327 CIA
1328 SEM_FN_NAME (m32r,ldi16) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1329 {
1330 #define FLD(f) abuf->fields.fmt_29_ldi16.f
1331   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1332   CIA new_pc = SEM_NEXT_PC (sem_arg);
1333
1334 * FLD (f_r1) = FLD (f_simm16);
1335   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1336
1337 #if WITH_PROFILE_MODEL_P
1338   if (PROFILE_MODEL_P (current_cpu))
1339     {
1340       m32r_model_mark_set_h_gr (current_cpu, abuf);
1341       m32r_model_profile_insn (current_cpu, abuf);
1342     }
1343 #endif
1344
1345   return new_pc;
1346 #undef FLD
1347 }
1348
1349 /* Perform lock: lock $dr,@$sr.  */
1350 CIA
1351 SEM_FN_NAME (m32r,lock) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1352 {
1353 #define FLD(f) abuf->fields.fmt_0_add.f
1354   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1355   CIA new_pc = SEM_NEXT_PC (sem_arg);
1356
1357 do_lock (current_cpu, * FLD (f_r1), * FLD (f_r2));
1358
1359 #if WITH_PROFILE_MODEL_P
1360   if (PROFILE_MODEL_P (current_cpu))
1361     {
1362       m32r_model_mark_get_h_gr (current_cpu, abuf);
1363       m32r_model_mark_set_h_gr (current_cpu, abuf);
1364       m32r_model_profile_insn (current_cpu, abuf);
1365     }
1366 #endif
1367
1368   return new_pc;
1369 #undef FLD
1370 }
1371
1372 /* Perform machi: machi $src1,$src2.  */
1373 CIA
1374 SEM_FN_NAME (m32r,machi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1375 {
1376 #define FLD(f) abuf->fields.fmt_30_machi.f
1377   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1378   CIA new_pc = SEM_NEXT_PC (sem_arg);
1379
1380   CPU (h_accum) = SRADI (SLLDI (ADDDI (CPU (h_accum), MULDI (EXTSIDI (ANDSI (* FLD (f_r1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16))))), 8), 8);
1381   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1382
1383 #if WITH_PROFILE_MODEL_P
1384   if (PROFILE_MODEL_P (current_cpu))
1385     {
1386       m32r_model_mark_get_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 maclo: maclo $src1,$src2.  */
1396 CIA
1397 SEM_FN_NAME (m32r,maclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1398 {
1399 #define FLD(f) abuf->fields.fmt_30_machi.f
1400   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1401   CIA new_pc = SEM_NEXT_PC (sem_arg);
1402
1403   CPU (h_accum) = SRADI (SLLDI (ADDDI (CPU (h_accum), MULDI (EXTSIDI (SLLSI (* FLD (f_r1), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2))))), 8), 8);
1404   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
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 macwhi: macwhi $src1,$src2.  */
1419 CIA
1420 SEM_FN_NAME (m32r,macwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1421 {
1422 #define FLD(f) abuf->fields.fmt_30_machi.f
1423   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1424   CIA new_pc = SEM_NEXT_PC (sem_arg);
1425
1426   CPU (h_accum) = SRADI (SLLDI (ADDDI (CPU (h_accum), MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16))))), 8), 8);
1427   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
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 macwlo: macwlo $src1,$src2.  */
1442 CIA
1443 SEM_FN_NAME (m32r,macwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1444 {
1445 #define FLD(f) abuf->fields.fmt_30_machi.f
1446   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1447   CIA new_pc = SEM_NEXT_PC (sem_arg);
1448
1449   CPU (h_accum) = SRADI (SLLDI (ADDDI (CPU (h_accum), MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (* FLD (f_r2))))), 8), 8);
1450   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
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 mul: mul $dr,$sr.  */
1465 CIA
1466 SEM_FN_NAME (m32r,mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1467 {
1468 #define FLD(f) abuf->fields.fmt_0_add.f
1469   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1470   CIA new_pc = SEM_NEXT_PC (sem_arg);
1471
1472 * FLD (f_r1) = MULSI (* FLD (f_r1), * FLD (f_r2));
1473   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
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_mark_set_h_gr (current_cpu, abuf);
1480       m32r_model_profile_insn (current_cpu, abuf);
1481     }
1482 #endif
1483
1484   return new_pc;
1485 #undef FLD
1486 }
1487
1488 /* Perform mulhi: mulhi $src1,$src2.  */
1489 CIA
1490 SEM_FN_NAME (m32r,mulhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1491 {
1492 #define FLD(f) abuf->fields.fmt_15_cmp.f
1493   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1494   CIA new_pc = SEM_NEXT_PC (sem_arg);
1495
1496   CPU (h_accum) = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (f_r1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16)))), 16), 16);
1497   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1498
1499 #if WITH_PROFILE_MODEL_P
1500   if (PROFILE_MODEL_P (current_cpu))
1501     {
1502       m32r_model_mark_get_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 mullo: mullo $src1,$src2.  */
1512 CIA
1513 SEM_FN_NAME (m32r,mullo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1514 {
1515 #define FLD(f) abuf->fields.fmt_15_cmp.f
1516   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1517   CIA new_pc = SEM_NEXT_PC (sem_arg);
1518
1519   CPU (h_accum) = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (f_r1), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2)))), 16), 16);
1520   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
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 mulwhi: mulwhi $src1,$src2.  */
1535 CIA
1536 SEM_FN_NAME (m32r,mulwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1537 {
1538 #define FLD(f) abuf->fields.fmt_15_cmp.f
1539   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1540   CIA new_pc = SEM_NEXT_PC (sem_arg);
1541
1542   CPU (h_accum) = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16)))), 8), 8);
1543   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
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 mulwlo: mulwlo $src1,$src2.  */
1558 CIA
1559 SEM_FN_NAME (m32r,mulwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1560 {
1561 #define FLD(f) abuf->fields.fmt_15_cmp.f
1562   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1563   CIA new_pc = SEM_NEXT_PC (sem_arg);
1564
1565   CPU (h_accum) = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (* FLD (f_r2)))), 8), 8);
1566   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
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 mv: mv $dr,$sr.  */
1581 CIA
1582 SEM_FN_NAME (m32r,mv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1583 {
1584 #define FLD(f) abuf->fields.fmt_31_mv.f
1585   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1586   CIA new_pc = SEM_NEXT_PC (sem_arg);
1587
1588 * FLD (f_r1) = * FLD (f_r2);
1589   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
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_mark_set_h_gr (current_cpu, abuf);
1596       m32r_model_profile_insn (current_cpu, abuf);
1597     }
1598 #endif
1599
1600   return new_pc;
1601 #undef FLD
1602 }
1603
1604 /* Perform mvfachi: mvfachi $dr.  */
1605 CIA
1606 SEM_FN_NAME (m32r,mvfachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1607 {
1608 #define FLD(f) abuf->fields.fmt_32_mvfachi.f
1609   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1610   CIA new_pc = SEM_NEXT_PC (sem_arg);
1611
1612 * FLD (f_r1) = TRUNCDISI (SRADI (CPU (h_accum), 32));
1613   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1614
1615 #if WITH_PROFILE_MODEL_P
1616   if (PROFILE_MODEL_P (current_cpu))
1617     {
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 mvfaclo: mvfaclo $dr.  */
1628 CIA
1629 SEM_FN_NAME (m32r,mvfaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1630 {
1631 #define FLD(f) abuf->fields.fmt_32_mvfachi.f
1632   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1633   CIA new_pc = SEM_NEXT_PC (sem_arg);
1634
1635 * FLD (f_r1) = TRUNCDISI (CPU (h_accum));
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 mvfacmi: mvfacmi $dr.  */
1651 CIA
1652 SEM_FN_NAME (m32r,mvfacmi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1653 {
1654 #define FLD(f) abuf->fields.fmt_32_mvfachi.f
1655   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1656   CIA new_pc = SEM_NEXT_PC (sem_arg);
1657
1658 * FLD (f_r1) = TRUNCDISI (SRADI (CPU (h_accum), 16));
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 mvfc: mvfc $dr,$scr.  */
1674 CIA
1675 SEM_FN_NAME (m32r,mvfc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1676 {
1677 #define FLD(f) abuf->fields.fmt_33_mvfc.f
1678   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1679   CIA new_pc = SEM_NEXT_PC (sem_arg);
1680
1681 * FLD (f_r1) = m32r_h_cr_get (current_cpu, FLD (f_r2));
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 mvtachi: mvtachi $src1.  */
1697 CIA
1698 SEM_FN_NAME (m32r,mvtachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1699 {
1700 #define FLD(f) abuf->fields.fmt_34_mvtachi.f
1701   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1702   CIA new_pc = SEM_NEXT_PC (sem_arg);
1703
1704   CPU (h_accum) = ORDI (ANDDI (CPU (h_accum), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (f_r1)), 32));
1705   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1706
1707 #if WITH_PROFILE_MODEL_P
1708   if (PROFILE_MODEL_P (current_cpu))
1709     {
1710       m32r_model_mark_get_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 mvtaclo: mvtaclo $src1.  */
1720 CIA
1721 SEM_FN_NAME (m32r,mvtaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1722 {
1723 #define FLD(f) abuf->fields.fmt_34_mvtachi.f
1724   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1725   CIA new_pc = SEM_NEXT_PC (sem_arg);
1726
1727   CPU (h_accum) = ORDI (ANDDI (CPU (h_accum), MAKEDI (0xffffffff, 0)), EXTSIDI (* FLD (f_r1)));
1728   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
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 mvtc: mvtc $sr,$dcr.  */
1743 CIA
1744 SEM_FN_NAME (m32r,mvtc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1745 {
1746 #define FLD(f) abuf->fields.fmt_35_mvtc.f
1747   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1748   CIA new_pc = SEM_NEXT_PC (sem_arg);
1749
1750 m32r_h_cr_set (current_cpu, FLD (f_r1), * FLD (f_r2));
1751   TRACE_RESULT (current_cpu, "dcr", 'x', m32r_h_cr_get (current_cpu, FLD (f_r1)));
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 neg: neg $dr,$sr.  */
1766 CIA
1767 SEM_FN_NAME (m32r,neg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1768 {
1769 #define FLD(f) abuf->fields.fmt_31_mv.f
1770   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1771   CIA new_pc = SEM_NEXT_PC (sem_arg);
1772
1773 * FLD (f_r1) = NEGSI (* FLD (f_r2));
1774   TRACE_RESULT (current_cpu, "dr", 'x', * 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_mark_set_h_gr (current_cpu, abuf);
1781       m32r_model_profile_insn (current_cpu, abuf);
1782     }
1783 #endif
1784
1785   return new_pc;
1786 #undef FLD
1787 }
1788
1789 /* Perform nop: nop.  */
1790 CIA
1791 SEM_FN_NAME (m32r,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1792 {
1793 #define FLD(f) abuf->fields.fmt_36_nop.f
1794   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1795   CIA new_pc = SEM_NEXT_PC (sem_arg);
1796
1797 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
1798
1799 #if WITH_PROFILE_MODEL_P
1800   if (PROFILE_MODEL_P (current_cpu))
1801     {
1802       m32r_model_profile_insn (current_cpu, abuf);
1803     }
1804 #endif
1805
1806   return new_pc;
1807 #undef FLD
1808 }
1809
1810 /* Perform not: not $dr,$sr.  */
1811 CIA
1812 SEM_FN_NAME (m32r,not) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1813 {
1814 #define FLD(f) abuf->fields.fmt_31_mv.f
1815   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1816   CIA new_pc = SEM_NEXT_PC (sem_arg);
1817
1818 * FLD (f_r1) = INVSI (* FLD (f_r2));
1819   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1820
1821 #if WITH_PROFILE_MODEL_P
1822   if (PROFILE_MODEL_P (current_cpu))
1823     {
1824       m32r_model_mark_get_h_gr (current_cpu, abuf);
1825       m32r_model_mark_set_h_gr (current_cpu, abuf);
1826       m32r_model_profile_insn (current_cpu, abuf);
1827     }
1828 #endif
1829
1830   return new_pc;
1831 #undef FLD
1832 }
1833
1834 /* Perform rac: rac.  */
1835 CIA
1836 SEM_FN_NAME (m32r,rac) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1837 {
1838 #define FLD(f) abuf->fields.fmt_37_rac.f
1839   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1840   CIA new_pc = SEM_NEXT_PC (sem_arg);
1841
1842 do {
1843   DI tmp_tmp1;
1844   tmp_tmp1 = ANDDI (CPU (h_accum), MAKEDI (16777215, 0xffffffff));
1845 if (ANDIFSI (GEDI (tmp_tmp1, MAKEDI (16383, 0xffff8000)), LEDI (tmp_tmp1, MAKEDI (8388607, 0xffffffff)))) {
1846   tmp_tmp1 = MAKEDI (16383, 0xffff8000);
1847 } else {
1848 if (ANDIFSI (GEDI (tmp_tmp1, MAKEDI (8388608, 0)), LEDI (tmp_tmp1, MAKEDI (16760832, 0)))) {
1849   tmp_tmp1 = MAKEDI (16760832, 0);
1850 } else {
1851   tmp_tmp1 = ANDDI (ADDDI (CPU (h_accum), MAKEDI (0, 16384)), MAKEDI (16777215, 0xffff8000));
1852 }
1853 }
1854   tmp_tmp1 = SLLDI (tmp_tmp1, 1);
1855   CPU (h_accum) = SRADI (SLLDI (tmp_tmp1, 7), 7);
1856   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1857 } while (0);
1858
1859 #if WITH_PROFILE_MODEL_P
1860   if (PROFILE_MODEL_P (current_cpu))
1861     {
1862       m32r_model_profile_insn (current_cpu, abuf);
1863     }
1864 #endif
1865
1866   return new_pc;
1867 #undef FLD
1868 }
1869
1870 /* Perform rach: rach.  */
1871 CIA
1872 SEM_FN_NAME (m32r,rach) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1873 {
1874 #define FLD(f) abuf->fields.fmt_37_rac.f
1875   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1876   CIA new_pc = SEM_NEXT_PC (sem_arg);
1877
1878 do {
1879   DI tmp_tmp1;
1880   tmp_tmp1 = ANDDI (CPU (h_accum), MAKEDI (16777215, 0xffffffff));
1881 if (ANDIFSI (GEDI (tmp_tmp1, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1, MAKEDI (8388607, 0xffffffff)))) {
1882   tmp_tmp1 = MAKEDI (16383, 0x80000000);
1883 } else {
1884 if (ANDIFSI (GEDI (tmp_tmp1, MAKEDI (8388608, 0)), LEDI (tmp_tmp1, MAKEDI (16760832, 0)))) {
1885   tmp_tmp1 = MAKEDI (16760832, 0);
1886 } else {
1887   tmp_tmp1 = ANDDI (ADDDI (CPU (h_accum), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000));
1888 }
1889 }
1890   tmp_tmp1 = SLLDI (tmp_tmp1, 1);
1891   CPU (h_accum) = SRADI (SLLDI (tmp_tmp1, 7), 7);
1892   TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1893 } while (0);
1894
1895 #if WITH_PROFILE_MODEL_P
1896   if (PROFILE_MODEL_P (current_cpu))
1897     {
1898       m32r_model_profile_insn (current_cpu, abuf);
1899     }
1900 #endif
1901
1902   return new_pc;
1903 #undef FLD
1904 }
1905
1906 /* Perform rte: rte.  */
1907 CIA
1908 SEM_FN_NAME (m32r,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1909 {
1910 #define FLD(f) abuf->fields.fmt_38_rte.f
1911   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1912   CIA new_pc = SEM_NEXT_PC (sem_arg);
1913   int taken_p = 0;
1914
1915 do {
1916   CPU (h_sm) = CPU (h_bsm);
1917   TRACE_RESULT (current_cpu, "h-sm-0", 'x', CPU (h_sm));
1918   CPU (h_ie) = CPU (h_bie);
1919   TRACE_RESULT (current_cpu, "h-ie-0", 'x', CPU (h_ie));
1920   CPU (h_cond) = CPU (h_bcond);
1921   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
1922   BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, CPU (h_bpc)));
1923   taken_p = 1;
1924   TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
1925 } while (0);
1926
1927 #if WITH_PROFILE_MODEL_P
1928   if (PROFILE_MODEL_P (current_cpu))
1929     {
1930       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
1931     }
1932 #endif
1933
1934   return new_pc;
1935 #undef FLD
1936 }
1937
1938 /* Perform seth: seth $dr,#$hi16.  */
1939 CIA
1940 SEM_FN_NAME (m32r,seth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1941 {
1942 #define FLD(f) abuf->fields.fmt_39_seth.f
1943   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1944   CIA new_pc = SEM_NEXT_PC (sem_arg);
1945
1946 * FLD (f_r1) = SLLSI (FLD (f_hi16), 16);
1947   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1948
1949 #if WITH_PROFILE_MODEL_P
1950   if (PROFILE_MODEL_P (current_cpu))
1951     {
1952       m32r_model_mark_set_h_gr (current_cpu, abuf);
1953       m32r_model_profile_insn (current_cpu, abuf);
1954     }
1955 #endif
1956
1957   return new_pc;
1958 #undef FLD
1959 }
1960
1961 /* Perform sll: sll $dr,$sr.  */
1962 CIA
1963 SEM_FN_NAME (m32r,sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1964 {
1965 #define FLD(f) abuf->fields.fmt_0_add.f
1966   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1967   CIA new_pc = SEM_NEXT_PC (sem_arg);
1968
1969 * FLD (f_r1) = SLLSI (* FLD (f_r1), ANDSI (* FLD (f_r2), 31));
1970   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1971
1972 #if WITH_PROFILE_MODEL_P
1973   if (PROFILE_MODEL_P (current_cpu))
1974     {
1975       m32r_model_mark_get_h_gr (current_cpu, abuf);
1976       m32r_model_mark_set_h_gr (current_cpu, abuf);
1977       m32r_model_profile_insn (current_cpu, abuf);
1978     }
1979 #endif
1980
1981   return new_pc;
1982 #undef FLD
1983 }
1984
1985 /* Perform sll3: sll3 $dr,$sr,#$simm16.  */
1986 CIA
1987 SEM_FN_NAME (m32r,sll3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1988 {
1989 #define FLD(f) abuf->fields.fmt_5_addv3.f
1990   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1991   CIA new_pc = SEM_NEXT_PC (sem_arg);
1992
1993 * FLD (f_r1) = SLLSI (* FLD (f_r2), ANDSI (FLD (f_simm16), 31));
1994   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1995
1996 #if WITH_PROFILE_MODEL_P
1997   if (PROFILE_MODEL_P (current_cpu))
1998     {
1999       m32r_model_mark_get_h_gr (current_cpu, abuf);
2000       m32r_model_mark_set_h_gr (current_cpu, abuf);
2001       m32r_model_profile_insn (current_cpu, abuf);
2002     }
2003 #endif
2004
2005   return new_pc;
2006 #undef FLD
2007 }
2008
2009 /* Perform slli: slli $dr,#$uimm5.  */
2010 CIA
2011 SEM_FN_NAME (m32r,slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2012 {
2013 #define FLD(f) abuf->fields.fmt_40_slli.f
2014   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2015   CIA new_pc = SEM_NEXT_PC (sem_arg);
2016
2017 * FLD (f_r1) = SLLSI (* FLD (f_r1), FLD (f_uimm5));
2018   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2019
2020 #if WITH_PROFILE_MODEL_P
2021   if (PROFILE_MODEL_P (current_cpu))
2022     {
2023       m32r_model_mark_get_h_gr (current_cpu, abuf);
2024       m32r_model_mark_set_h_gr (current_cpu, abuf);
2025       m32r_model_profile_insn (current_cpu, abuf);
2026     }
2027 #endif
2028
2029   return new_pc;
2030 #undef FLD
2031 }
2032
2033 /* Perform sra: sra $dr,$sr.  */
2034 CIA
2035 SEM_FN_NAME (m32r,sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2036 {
2037 #define FLD(f) abuf->fields.fmt_0_add.f
2038   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2039   CIA new_pc = SEM_NEXT_PC (sem_arg);
2040
2041 * FLD (f_r1) = SRASI (* FLD (f_r1), ANDSI (* FLD (f_r2), 31));
2042   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2043
2044 #if WITH_PROFILE_MODEL_P
2045   if (PROFILE_MODEL_P (current_cpu))
2046     {
2047       m32r_model_mark_get_h_gr (current_cpu, abuf);
2048       m32r_model_mark_set_h_gr (current_cpu, abuf);
2049       m32r_model_profile_insn (current_cpu, abuf);
2050     }
2051 #endif
2052
2053   return new_pc;
2054 #undef FLD
2055 }
2056
2057 /* Perform sra3: sra3 $dr,$sr,#$simm16.  */
2058 CIA
2059 SEM_FN_NAME (m32r,sra3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2060 {
2061 #define FLD(f) abuf->fields.fmt_5_addv3.f
2062   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2063   CIA new_pc = SEM_NEXT_PC (sem_arg);
2064
2065 * FLD (f_r1) = SRASI (* FLD (f_r2), ANDSI (FLD (f_simm16), 31));
2066   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2067
2068 #if WITH_PROFILE_MODEL_P
2069   if (PROFILE_MODEL_P (current_cpu))
2070     {
2071       m32r_model_mark_get_h_gr (current_cpu, abuf);
2072       m32r_model_mark_set_h_gr (current_cpu, abuf);
2073       m32r_model_profile_insn (current_cpu, abuf);
2074     }
2075 #endif
2076
2077   return new_pc;
2078 #undef FLD
2079 }
2080
2081 /* Perform srai: srai $dr,#$uimm5.  */
2082 CIA
2083 SEM_FN_NAME (m32r,srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2084 {
2085 #define FLD(f) abuf->fields.fmt_40_slli.f
2086   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2087   CIA new_pc = SEM_NEXT_PC (sem_arg);
2088
2089 * FLD (f_r1) = SRASI (* FLD (f_r1), FLD (f_uimm5));
2090   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2091
2092 #if WITH_PROFILE_MODEL_P
2093   if (PROFILE_MODEL_P (current_cpu))
2094     {
2095       m32r_model_mark_get_h_gr (current_cpu, abuf);
2096       m32r_model_mark_set_h_gr (current_cpu, abuf);
2097       m32r_model_profile_insn (current_cpu, abuf);
2098     }
2099 #endif
2100
2101   return new_pc;
2102 #undef FLD
2103 }
2104
2105 /* Perform srl: srl $dr,$sr.  */
2106 CIA
2107 SEM_FN_NAME (m32r,srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2108 {
2109 #define FLD(f) abuf->fields.fmt_0_add.f
2110   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2111   CIA new_pc = SEM_NEXT_PC (sem_arg);
2112
2113 * FLD (f_r1) = SRLSI (* FLD (f_r1), ANDSI (* FLD (f_r2), 31));
2114   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2115
2116 #if WITH_PROFILE_MODEL_P
2117   if (PROFILE_MODEL_P (current_cpu))
2118     {
2119       m32r_model_mark_get_h_gr (current_cpu, abuf);
2120       m32r_model_mark_set_h_gr (current_cpu, abuf);
2121       m32r_model_profile_insn (current_cpu, abuf);
2122     }
2123 #endif
2124
2125   return new_pc;
2126 #undef FLD
2127 }
2128
2129 /* Perform srl3: srl3 $dr,$sr,#$simm16.  */
2130 CIA
2131 SEM_FN_NAME (m32r,srl3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2132 {
2133 #define FLD(f) abuf->fields.fmt_5_addv3.f
2134   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2135   CIA new_pc = SEM_NEXT_PC (sem_arg);
2136
2137 * FLD (f_r1) = SRLSI (* FLD (f_r2), ANDSI (FLD (f_simm16), 31));
2138   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2139
2140 #if WITH_PROFILE_MODEL_P
2141   if (PROFILE_MODEL_P (current_cpu))
2142     {
2143       m32r_model_mark_get_h_gr (current_cpu, abuf);
2144       m32r_model_mark_set_h_gr (current_cpu, abuf);
2145       m32r_model_profile_insn (current_cpu, abuf);
2146     }
2147 #endif
2148
2149   return new_pc;
2150 #undef FLD
2151 }
2152
2153 /* Perform srli: srli $dr,#$uimm5.  */
2154 CIA
2155 SEM_FN_NAME (m32r,srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2156 {
2157 #define FLD(f) abuf->fields.fmt_40_slli.f
2158   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2159   CIA new_pc = SEM_NEXT_PC (sem_arg);
2160
2161 * FLD (f_r1) = SRLSI (* FLD (f_r1), FLD (f_uimm5));
2162   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2163
2164 #if WITH_PROFILE_MODEL_P
2165   if (PROFILE_MODEL_P (current_cpu))
2166     {
2167       m32r_model_mark_get_h_gr (current_cpu, abuf);
2168       m32r_model_mark_set_h_gr (current_cpu, abuf);
2169       m32r_model_profile_insn (current_cpu, abuf);
2170     }
2171 #endif
2172
2173   return new_pc;
2174 #undef FLD
2175 }
2176
2177 /* Perform st: st $src1,@$src2.  */
2178 CIA
2179 SEM_FN_NAME (m32r,st) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2180 {
2181 #define FLD(f) abuf->fields.fmt_15_cmp.f
2182   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2183   CIA new_pc = SEM_NEXT_PC (sem_arg);
2184
2185 SETMEMSI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2186   TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMSI (current_cpu, * FLD (f_r2)));
2187
2188 #if WITH_PROFILE_MODEL_P
2189   if (PROFILE_MODEL_P (current_cpu))
2190     {
2191       m32r_model_mark_get_h_gr (current_cpu, abuf);
2192       m32r_model_profile_insn (current_cpu, abuf);
2193     }
2194 #endif
2195
2196   return new_pc;
2197 #undef FLD
2198 }
2199
2200 /* Perform st-d: st $src1,@($slo16,$src2).  */
2201 CIA
2202 SEM_FN_NAME (m32r,st_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2203 {
2204 #define FLD(f) abuf->fields.fmt_41_st_d.f
2205   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2206   CIA new_pc = SEM_NEXT_PC (sem_arg);
2207
2208 SETMEMSI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)), * FLD (f_r1));
2209   TRACE_RESULT (current_cpu, "h-memory-add-WI-src2-slo16", 'x', GETMEMSI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
2210
2211 #if WITH_PROFILE_MODEL_P
2212   if (PROFILE_MODEL_P (current_cpu))
2213     {
2214       m32r_model_mark_get_h_gr (current_cpu, abuf);
2215       m32r_model_profile_insn (current_cpu, abuf);
2216     }
2217 #endif
2218
2219   return new_pc;
2220 #undef FLD
2221 }
2222
2223 /* Perform stb: stb $src1,@$src2.  */
2224 CIA
2225 SEM_FN_NAME (m32r,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2226 {
2227 #define FLD(f) abuf->fields.fmt_15_cmp.f
2228   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2229   CIA new_pc = SEM_NEXT_PC (sem_arg);
2230
2231 SETMEMQI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2232   TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMQI (current_cpu, * FLD (f_r2)));
2233
2234 #if WITH_PROFILE_MODEL_P
2235   if (PROFILE_MODEL_P (current_cpu))
2236     {
2237       m32r_model_mark_get_h_gr (current_cpu, abuf);
2238       m32r_model_profile_insn (current_cpu, abuf);
2239     }
2240 #endif
2241
2242   return new_pc;
2243 #undef FLD
2244 }
2245
2246 /* Perform stb-d: stb $src1,@($slo16,$src2).  */
2247 CIA
2248 SEM_FN_NAME (m32r,stb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2249 {
2250 #define FLD(f) abuf->fields.fmt_41_st_d.f
2251   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2252   CIA new_pc = SEM_NEXT_PC (sem_arg);
2253
2254 SETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)), * FLD (f_r1));
2255   TRACE_RESULT (current_cpu, "h-memory-add-WI-src2-slo16", 'x', GETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
2256
2257 #if WITH_PROFILE_MODEL_P
2258   if (PROFILE_MODEL_P (current_cpu))
2259     {
2260       m32r_model_mark_get_h_gr (current_cpu, abuf);
2261       m32r_model_profile_insn (current_cpu, abuf);
2262     }
2263 #endif
2264
2265   return new_pc;
2266 #undef FLD
2267 }
2268
2269 /* Perform sth: sth $src1,@$src2.  */
2270 CIA
2271 SEM_FN_NAME (m32r,sth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2272 {
2273 #define FLD(f) abuf->fields.fmt_15_cmp.f
2274   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2275   CIA new_pc = SEM_NEXT_PC (sem_arg);
2276
2277 SETMEMHI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2278   TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMHI (current_cpu, * FLD (f_r2)));
2279
2280 #if WITH_PROFILE_MODEL_P
2281   if (PROFILE_MODEL_P (current_cpu))
2282     {
2283       m32r_model_mark_get_h_gr (current_cpu, abuf);
2284       m32r_model_profile_insn (current_cpu, abuf);
2285     }
2286 #endif
2287
2288   return new_pc;
2289 #undef FLD
2290 }
2291
2292 /* Perform sth-d: sth $src1,@($slo16,$src2).  */
2293 CIA
2294 SEM_FN_NAME (m32r,sth_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2295 {
2296 #define FLD(f) abuf->fields.fmt_41_st_d.f
2297   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2298   CIA new_pc = SEM_NEXT_PC (sem_arg);
2299
2300 SETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)), * FLD (f_r1));
2301   TRACE_RESULT (current_cpu, "h-memory-add-WI-src2-slo16", 'x', GETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
2302
2303 #if WITH_PROFILE_MODEL_P
2304   if (PROFILE_MODEL_P (current_cpu))
2305     {
2306       m32r_model_mark_get_h_gr (current_cpu, abuf);
2307       m32r_model_profile_insn (current_cpu, abuf);
2308     }
2309 #endif
2310
2311   return new_pc;
2312 #undef FLD
2313 }
2314
2315 /* Perform st-plus: st $src1,@+$src2.  */
2316 CIA
2317 SEM_FN_NAME (m32r,st_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2318 {
2319 #define FLD(f) abuf->fields.fmt_15_cmp.f
2320   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2321   CIA new_pc = SEM_NEXT_PC (sem_arg);
2322
2323 do {
2324 * FLD (f_r2) = ADDSI (* FLD (f_r2), 4);
2325   TRACE_RESULT (current_cpu, "src2", 'x', * FLD (f_r2));
2326 SETMEMSI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2327   TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMSI (current_cpu, * FLD (f_r2)));
2328 } while (0);
2329
2330 #if WITH_PROFILE_MODEL_P
2331   if (PROFILE_MODEL_P (current_cpu))
2332     {
2333       m32r_model_mark_get_h_gr (current_cpu, abuf);
2334       m32r_model_profile_insn (current_cpu, abuf);
2335     }
2336 #endif
2337
2338   return new_pc;
2339 #undef FLD
2340 }
2341
2342 /* Perform st-minus: st $src1,@-$src2.  */
2343 CIA
2344 SEM_FN_NAME (m32r,st_minus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2345 {
2346 #define FLD(f) abuf->fields.fmt_15_cmp.f
2347   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2348   CIA new_pc = SEM_NEXT_PC (sem_arg);
2349
2350 do {
2351 * FLD (f_r2) = SUBSI (* FLD (f_r2), 4);
2352   TRACE_RESULT (current_cpu, "src2", 'x', * FLD (f_r2));
2353 SETMEMSI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2354   TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMSI (current_cpu, * FLD (f_r2)));
2355 } while (0);
2356
2357 #if WITH_PROFILE_MODEL_P
2358   if (PROFILE_MODEL_P (current_cpu))
2359     {
2360       m32r_model_mark_get_h_gr (current_cpu, abuf);
2361       m32r_model_profile_insn (current_cpu, abuf);
2362     }
2363 #endif
2364
2365   return new_pc;
2366 #undef FLD
2367 }
2368
2369 /* Perform sub: sub $dr,$sr.  */
2370 CIA
2371 SEM_FN_NAME (m32r,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2372 {
2373 #define FLD(f) abuf->fields.fmt_0_add.f
2374   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2375   CIA new_pc = SEM_NEXT_PC (sem_arg);
2376
2377 * FLD (f_r1) = SUBSI (* FLD (f_r1), * FLD (f_r2));
2378   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2379
2380 #if WITH_PROFILE_MODEL_P
2381   if (PROFILE_MODEL_P (current_cpu))
2382     {
2383       m32r_model_mark_get_h_gr (current_cpu, abuf);
2384       m32r_model_mark_set_h_gr (current_cpu, abuf);
2385       m32r_model_profile_insn (current_cpu, abuf);
2386     }
2387 #endif
2388
2389   return new_pc;
2390 #undef FLD
2391 }
2392
2393 /* Perform subv: subv $dr,$sr.  */
2394 CIA
2395 SEM_FN_NAME (m32r,subv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2396 {
2397 #define FLD(f) abuf->fields.fmt_0_add.f
2398   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2399   CIA new_pc = SEM_NEXT_PC (sem_arg);
2400
2401 do {
2402   BI temp1;SI temp0;
2403   temp0 = SUBSI (* FLD (f_r1), * FLD (f_r2));
2404   temp1 = SUBOFSI (* FLD (f_r1), * FLD (f_r2), 0);
2405 * FLD (f_r1) = temp0;
2406   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2407   CPU (h_cond) = temp1;
2408   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
2409 } while (0);
2410
2411 #if WITH_PROFILE_MODEL_P
2412   if (PROFILE_MODEL_P (current_cpu))
2413     {
2414       m32r_model_mark_get_h_gr (current_cpu, abuf);
2415       m32r_model_mark_set_h_gr (current_cpu, abuf);
2416       m32r_model_profile_insn (current_cpu, abuf);
2417     }
2418 #endif
2419
2420   return new_pc;
2421 #undef FLD
2422 }
2423
2424 /* Perform subx: subx $dr,$sr.  */
2425 CIA
2426 SEM_FN_NAME (m32r,subx) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2427 {
2428 #define FLD(f) abuf->fields.fmt_6_addx.f
2429   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2430   CIA new_pc = SEM_NEXT_PC (sem_arg);
2431
2432 do {
2433   BI temp1;SI temp0;
2434   temp0 = SUBCSI (* FLD (f_r1), * FLD (f_r2), CPU (h_cond));
2435   temp1 = SUBCFSI (* FLD (f_r1), * FLD (f_r2), CPU (h_cond));
2436 * FLD (f_r1) = temp0;
2437   TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2438   CPU (h_cond) = temp1;
2439   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
2440 } while (0);
2441
2442 #if WITH_PROFILE_MODEL_P
2443   if (PROFILE_MODEL_P (current_cpu))
2444     {
2445       m32r_model_mark_get_h_gr (current_cpu, abuf);
2446       m32r_model_mark_set_h_gr (current_cpu, abuf);
2447       m32r_model_profile_insn (current_cpu, abuf);
2448     }
2449 #endif
2450
2451   return new_pc;
2452 #undef FLD
2453 }
2454
2455 /* Perform trap: trap #$uimm4.  */
2456 CIA
2457 SEM_FN_NAME (m32r,trap) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2458 {
2459 #define FLD(f) abuf->fields.fmt_42_trap.f
2460   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2461   CIA new_pc = SEM_NEXT_PC (sem_arg);
2462   int taken_p = 0;
2463
2464 do_trap (current_cpu, FLD (f_uimm4));
2465
2466 #if WITH_PROFILE_MODEL_P
2467   if (PROFILE_MODEL_P (current_cpu))
2468     {
2469       m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
2470     }
2471 #endif
2472
2473   return new_pc;
2474 #undef FLD
2475 }
2476
2477 /* Perform unlock: unlock $src1,@$src2.  */
2478 CIA
2479 SEM_FN_NAME (m32r,unlock) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2480 {
2481 #define FLD(f) abuf->fields.fmt_15_cmp.f
2482   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2483   CIA new_pc = SEM_NEXT_PC (sem_arg);
2484
2485 do_unlock (current_cpu, * FLD (f_r1), * FLD (f_r2));
2486
2487 #if WITH_PROFILE_MODEL_P
2488   if (PROFILE_MODEL_P (current_cpu))
2489     {
2490       m32r_model_mark_get_h_gr (current_cpu, abuf);
2491       m32r_model_profile_insn (current_cpu, abuf);
2492     }
2493 #endif
2494
2495   return new_pc;
2496 #undef FLD
2497 }
2498
2499 /* FIXME: Add "no return" attribute to illegal insn handlers.
2500    They all call longjmp.  */
2501
2502 PCADDR
2503 SEM_FN_NAME (m32r,illegal) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2504 {
2505   sim_engine_illegal_insn (current_cpu, NULL_CIA /*FIXME*/);
2506   return 0;
2507 }
2508
2509 #endif /* ! defined (SCACHE_P) || (defined (SCACHE_P) && WITH_SCACHE) */