* Makefile.in (m32r.o): Depend on cpu.h
[binutils-gdb.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) */