* Makefile.in (M32R_OBJS): Add cpu.o.
[deliverable/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 divh: divh $dr,$sr. */
954 CIA
955 SEM_FN_NAME (m32r,divh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
956 {
957 #define FLD(f) abuf->fields.fmt_18_div.f
958 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
959 CIA new_pc = SEM_NEXT_PC (sem_arg);
960
961 if (NESI (* FLD (f_r2), 0)) {
962 * FLD (f_r1) = DIVSI (EXTHISI (TRUNCSIHI (* FLD (f_r1))), * FLD (f_r2));
963 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
964 }
965
966 #if WITH_PROFILE_MODEL_P
967 if (PROFILE_MODEL_P (current_cpu))
968 {
969 m32r_model_mark_get_h_gr (current_cpu, abuf);
970 m32r_model_mark_set_h_gr (current_cpu, abuf);
971 m32r_model_profile_insn (current_cpu, abuf);
972 }
973 #endif
974
975 return new_pc;
976 #undef FLD
977 }
978
979 /* Perform jl: jl $sr. */
980 CIA
981 SEM_FN_NAME (m32r,jl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
982 {
983 #define FLD(f) abuf->fields.fmt_19_jl.f
984 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
985 CIA new_pc = SEM_NEXT_PC (sem_arg);
986 int taken_p = 0;
987
988 do {
989 SI temp1;SI temp0;
990 temp0 = ADDSI (ANDSI (CPU (h_pc), -4), 4);
991 temp1 = * FLD (f_r2);
992 CPU (h_gr[14]) = temp0;
993 TRACE_RESULT (current_cpu, "h-gr-14", 'x', CPU (h_gr[14]));
994 BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, temp1));
995 taken_p = 1;
996 } while (0);
997
998 #if WITH_PROFILE_MODEL_P
999 if (PROFILE_MODEL_P (current_cpu))
1000 {
1001 m32r_model_mark_get_h_gr (current_cpu, abuf);
1002 m32r_model_mark_set_h_gr (current_cpu, abuf);
1003 m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
1004 }
1005 #endif
1006
1007 return new_pc;
1008 #undef FLD
1009 }
1010
1011 /* Perform jmp: jmp $sr. */
1012 CIA
1013 SEM_FN_NAME (m32r,jmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1014 {
1015 #define FLD(f) abuf->fields.fmt_20_jmp.f
1016 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1017 CIA new_pc = SEM_NEXT_PC (sem_arg);
1018 int taken_p = 0;
1019
1020 BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, * FLD (f_r2)));
1021 taken_p = 1;
1022
1023 #if WITH_PROFILE_MODEL_P
1024 if (PROFILE_MODEL_P (current_cpu))
1025 {
1026 m32r_model_mark_get_h_gr (current_cpu, abuf);
1027 m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
1028 }
1029 #endif
1030
1031 return new_pc;
1032 #undef FLD
1033 }
1034
1035 /* Perform ld: ld $dr,@$sr. */
1036 CIA
1037 SEM_FN_NAME (m32r,ld) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1038 {
1039 #define FLD(f) abuf->fields.fmt_21_ld.f
1040 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1041 CIA new_pc = SEM_NEXT_PC (sem_arg);
1042
1043 * FLD (f_r1) = GETMEMSI (current_cpu, * FLD (f_r2));
1044 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1045
1046 #if WITH_PROFILE_MODEL_P
1047 if (PROFILE_MODEL_P (current_cpu))
1048 {
1049 m32r_model_mark_get_h_gr (current_cpu, abuf);
1050 m32r_model_mark_set_h_gr (current_cpu, abuf);
1051 m32r_model_profile_insn (current_cpu, abuf);
1052 }
1053 #endif
1054
1055 return new_pc;
1056 #undef FLD
1057 }
1058
1059 /* Perform ld-d: ld $dr,@($slo16,$sr). */
1060 CIA
1061 SEM_FN_NAME (m32r,ld_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1062 {
1063 #define FLD(f) abuf->fields.fmt_22_ld_d.f
1064 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1065 CIA new_pc = SEM_NEXT_PC (sem_arg);
1066
1067 * FLD (f_r1) = GETMEMSI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)));
1068 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1069
1070 #if WITH_PROFILE_MODEL_P
1071 if (PROFILE_MODEL_P (current_cpu))
1072 {
1073 m32r_model_mark_get_h_gr (current_cpu, abuf);
1074 m32r_model_mark_set_h_gr (current_cpu, abuf);
1075 m32r_model_profile_insn (current_cpu, abuf);
1076 }
1077 #endif
1078
1079 return new_pc;
1080 #undef FLD
1081 }
1082
1083 /* Perform ldb: ldb $dr,@$sr. */
1084 CIA
1085 SEM_FN_NAME (m32r,ldb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1086 {
1087 #define FLD(f) abuf->fields.fmt_23_ldb.f
1088 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1089 CIA new_pc = SEM_NEXT_PC (sem_arg);
1090
1091 * FLD (f_r1) = EXTQISI (GETMEMQI (current_cpu, * FLD (f_r2)));
1092 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1093
1094 #if WITH_PROFILE_MODEL_P
1095 if (PROFILE_MODEL_P (current_cpu))
1096 {
1097 m32r_model_mark_get_h_gr (current_cpu, abuf);
1098 m32r_model_mark_set_h_gr (current_cpu, abuf);
1099 m32r_model_profile_insn (current_cpu, abuf);
1100 }
1101 #endif
1102
1103 return new_pc;
1104 #undef FLD
1105 }
1106
1107 /* Perform ldb-d: ldb $dr,@($slo16,$sr). */
1108 CIA
1109 SEM_FN_NAME (m32r,ldb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1110 {
1111 #define FLD(f) abuf->fields.fmt_24_ldb_d.f
1112 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1113 CIA new_pc = SEM_NEXT_PC (sem_arg);
1114
1115 * FLD (f_r1) = EXTQISI (GETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1116 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1117
1118 #if WITH_PROFILE_MODEL_P
1119 if (PROFILE_MODEL_P (current_cpu))
1120 {
1121 m32r_model_mark_get_h_gr (current_cpu, abuf);
1122 m32r_model_mark_set_h_gr (current_cpu, abuf);
1123 m32r_model_profile_insn (current_cpu, abuf);
1124 }
1125 #endif
1126
1127 return new_pc;
1128 #undef FLD
1129 }
1130
1131 /* Perform ldh: ldh $dr,@$sr. */
1132 CIA
1133 SEM_FN_NAME (m32r,ldh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1134 {
1135 #define FLD(f) abuf->fields.fmt_25_ldh.f
1136 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1137 CIA new_pc = SEM_NEXT_PC (sem_arg);
1138
1139 * FLD (f_r1) = EXTHISI (GETMEMHI (current_cpu, * FLD (f_r2)));
1140 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1141
1142 #if WITH_PROFILE_MODEL_P
1143 if (PROFILE_MODEL_P (current_cpu))
1144 {
1145 m32r_model_mark_get_h_gr (current_cpu, abuf);
1146 m32r_model_mark_set_h_gr (current_cpu, abuf);
1147 m32r_model_profile_insn (current_cpu, abuf);
1148 }
1149 #endif
1150
1151 return new_pc;
1152 #undef FLD
1153 }
1154
1155 /* Perform ldh-d: ldh $dr,@($slo16,$sr). */
1156 CIA
1157 SEM_FN_NAME (m32r,ldh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1158 {
1159 #define FLD(f) abuf->fields.fmt_26_ldh_d.f
1160 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1161 CIA new_pc = SEM_NEXT_PC (sem_arg);
1162
1163 * FLD (f_r1) = EXTHISI (GETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1164 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1165
1166 #if WITH_PROFILE_MODEL_P
1167 if (PROFILE_MODEL_P (current_cpu))
1168 {
1169 m32r_model_mark_get_h_gr (current_cpu, abuf);
1170 m32r_model_mark_set_h_gr (current_cpu, abuf);
1171 m32r_model_profile_insn (current_cpu, abuf);
1172 }
1173 #endif
1174
1175 return new_pc;
1176 #undef FLD
1177 }
1178
1179 /* Perform ldub: ldub $dr,@$sr. */
1180 CIA
1181 SEM_FN_NAME (m32r,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1182 {
1183 #define FLD(f) abuf->fields.fmt_23_ldb.f
1184 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1185 CIA new_pc = SEM_NEXT_PC (sem_arg);
1186
1187 * FLD (f_r1) = ZEXTQISI (GETMEMQI (current_cpu, * FLD (f_r2)));
1188 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1189
1190 #if WITH_PROFILE_MODEL_P
1191 if (PROFILE_MODEL_P (current_cpu))
1192 {
1193 m32r_model_mark_get_h_gr (current_cpu, abuf);
1194 m32r_model_mark_set_h_gr (current_cpu, abuf);
1195 m32r_model_profile_insn (current_cpu, abuf);
1196 }
1197 #endif
1198
1199 return new_pc;
1200 #undef FLD
1201 }
1202
1203 /* Perform ldub-d: ldub $dr,@($slo16,$sr). */
1204 CIA
1205 SEM_FN_NAME (m32r,ldub_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1206 {
1207 #define FLD(f) abuf->fields.fmt_24_ldb_d.f
1208 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1209 CIA new_pc = SEM_NEXT_PC (sem_arg);
1210
1211 * FLD (f_r1) = ZEXTQISI (GETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1212 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1213
1214 #if WITH_PROFILE_MODEL_P
1215 if (PROFILE_MODEL_P (current_cpu))
1216 {
1217 m32r_model_mark_get_h_gr (current_cpu, abuf);
1218 m32r_model_mark_set_h_gr (current_cpu, abuf);
1219 m32r_model_profile_insn (current_cpu, abuf);
1220 }
1221 #endif
1222
1223 return new_pc;
1224 #undef FLD
1225 }
1226
1227 /* Perform lduh: lduh $dr,@$sr. */
1228 CIA
1229 SEM_FN_NAME (m32r,lduh) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1230 {
1231 #define FLD(f) abuf->fields.fmt_25_ldh.f
1232 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1233 CIA new_pc = SEM_NEXT_PC (sem_arg);
1234
1235 * FLD (f_r1) = ZEXTHISI (GETMEMHI (current_cpu, * FLD (f_r2)));
1236 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1237
1238 #if WITH_PROFILE_MODEL_P
1239 if (PROFILE_MODEL_P (current_cpu))
1240 {
1241 m32r_model_mark_get_h_gr (current_cpu, abuf);
1242 m32r_model_mark_set_h_gr (current_cpu, abuf);
1243 m32r_model_profile_insn (current_cpu, abuf);
1244 }
1245 #endif
1246
1247 return new_pc;
1248 #undef FLD
1249 }
1250
1251 /* Perform lduh-d: lduh $dr,@($slo16,$sr). */
1252 CIA
1253 SEM_FN_NAME (m32r,lduh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1254 {
1255 #define FLD(f) abuf->fields.fmt_26_ldh_d.f
1256 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1257 CIA new_pc = SEM_NEXT_PC (sem_arg);
1258
1259 * FLD (f_r1) = ZEXTHISI (GETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
1260 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1261
1262 #if WITH_PROFILE_MODEL_P
1263 if (PROFILE_MODEL_P (current_cpu))
1264 {
1265 m32r_model_mark_get_h_gr (current_cpu, abuf);
1266 m32r_model_mark_set_h_gr (current_cpu, abuf);
1267 m32r_model_profile_insn (current_cpu, abuf);
1268 }
1269 #endif
1270
1271 return new_pc;
1272 #undef FLD
1273 }
1274
1275 /* Perform ld-plus: ld $dr,@$sr+. */
1276 CIA
1277 SEM_FN_NAME (m32r,ld_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1278 {
1279 #define FLD(f) abuf->fields.fmt_21_ld.f
1280 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1281 CIA new_pc = SEM_NEXT_PC (sem_arg);
1282
1283 do {
1284 SI temp1;SI temp0;
1285 temp0 = GETMEMSI (current_cpu, * FLD (f_r2));
1286 temp1 = ADDSI (* FLD (f_r2), 4);
1287 * FLD (f_r1) = temp0;
1288 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1289 * FLD (f_r2) = temp1;
1290 TRACE_RESULT (current_cpu, "sr", 'x', * FLD (f_r2));
1291 } while (0);
1292
1293 #if WITH_PROFILE_MODEL_P
1294 if (PROFILE_MODEL_P (current_cpu))
1295 {
1296 m32r_model_mark_get_h_gr (current_cpu, abuf);
1297 m32r_model_mark_set_h_gr (current_cpu, abuf);
1298 m32r_model_profile_insn (current_cpu, abuf);
1299 }
1300 #endif
1301
1302 return new_pc;
1303 #undef FLD
1304 }
1305
1306 /* Perform ld24: ld24 $dr,#$uimm24. */
1307 CIA
1308 SEM_FN_NAME (m32r,ld24) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1309 {
1310 #define FLD(f) abuf->fields.fmt_27_ld24.f
1311 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1312 CIA new_pc = SEM_NEXT_PC (sem_arg);
1313
1314 * FLD (f_r1) = FLD (f_uimm24);
1315 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1316
1317 #if WITH_PROFILE_MODEL_P
1318 if (PROFILE_MODEL_P (current_cpu))
1319 {
1320 m32r_model_mark_set_h_gr (current_cpu, abuf);
1321 m32r_model_profile_insn (current_cpu, abuf);
1322 }
1323 #endif
1324
1325 return new_pc;
1326 #undef FLD
1327 }
1328
1329 /* Perform ldi8: ldi $dr,#$simm8. */
1330 CIA
1331 SEM_FN_NAME (m32r,ldi8) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1332 {
1333 #define FLD(f) abuf->fields.fmt_28_ldi8.f
1334 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1335 CIA new_pc = SEM_NEXT_PC (sem_arg);
1336
1337 * FLD (f_r1) = FLD (f_simm8);
1338 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1339
1340 #if WITH_PROFILE_MODEL_P
1341 if (PROFILE_MODEL_P (current_cpu))
1342 {
1343 m32r_model_mark_set_h_gr (current_cpu, abuf);
1344 m32r_model_profile_insn (current_cpu, abuf);
1345 }
1346 #endif
1347
1348 return new_pc;
1349 #undef FLD
1350 }
1351
1352 /* Perform ldi16: ldi $dr,$slo16. */
1353 CIA
1354 SEM_FN_NAME (m32r,ldi16) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1355 {
1356 #define FLD(f) abuf->fields.fmt_29_ldi16.f
1357 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1358 CIA new_pc = SEM_NEXT_PC (sem_arg);
1359
1360 * FLD (f_r1) = FLD (f_simm16);
1361 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1362
1363 #if WITH_PROFILE_MODEL_P
1364 if (PROFILE_MODEL_P (current_cpu))
1365 {
1366 m32r_model_mark_set_h_gr (current_cpu, abuf);
1367 m32r_model_profile_insn (current_cpu, abuf);
1368 }
1369 #endif
1370
1371 return new_pc;
1372 #undef FLD
1373 }
1374
1375 /* Perform lock: lock $dr,@$sr. */
1376 CIA
1377 SEM_FN_NAME (m32r,lock) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1378 {
1379 #define FLD(f) abuf->fields.fmt_0_add.f
1380 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1381 CIA new_pc = SEM_NEXT_PC (sem_arg);
1382
1383 do_lock (current_cpu, * FLD (f_r1), * FLD (f_r2));
1384
1385 #if WITH_PROFILE_MODEL_P
1386 if (PROFILE_MODEL_P (current_cpu))
1387 {
1388 m32r_model_mark_get_h_gr (current_cpu, abuf);
1389 m32r_model_mark_set_h_gr (current_cpu, abuf);
1390 m32r_model_profile_insn (current_cpu, abuf);
1391 }
1392 #endif
1393
1394 return new_pc;
1395 #undef FLD
1396 }
1397
1398 /* Perform machi: machi $src1,$src2. */
1399 CIA
1400 SEM_FN_NAME (m32r,machi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1401 {
1402 #define FLD(f) abuf->fields.fmt_30_machi.f
1403 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1404 CIA new_pc = SEM_NEXT_PC (sem_arg);
1405
1406 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);
1407 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1408
1409 #if WITH_PROFILE_MODEL_P
1410 if (PROFILE_MODEL_P (current_cpu))
1411 {
1412 m32r_model_mark_get_h_gr (current_cpu, abuf);
1413 m32r_model_profile_insn (current_cpu, abuf);
1414 }
1415 #endif
1416
1417 return new_pc;
1418 #undef FLD
1419 }
1420
1421 /* Perform maclo: maclo $src1,$src2. */
1422 CIA
1423 SEM_FN_NAME (m32r,maclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1424 {
1425 #define FLD(f) abuf->fields.fmt_30_machi.f
1426 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1427 CIA new_pc = SEM_NEXT_PC (sem_arg);
1428
1429 CPU (h_accum) = SRADI (SLLDI (ADDDI (CPU (h_accum), MULDI (EXTSIDI (SLLSI (* FLD (f_r1), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2))))), 8), 8);
1430 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1431
1432 #if WITH_PROFILE_MODEL_P
1433 if (PROFILE_MODEL_P (current_cpu))
1434 {
1435 m32r_model_mark_get_h_gr (current_cpu, abuf);
1436 m32r_model_profile_insn (current_cpu, abuf);
1437 }
1438 #endif
1439
1440 return new_pc;
1441 #undef FLD
1442 }
1443
1444 /* Perform macwhi: macwhi $src1,$src2. */
1445 CIA
1446 SEM_FN_NAME (m32r,macwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1447 {
1448 #define FLD(f) abuf->fields.fmt_30_machi.f
1449 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1450 CIA new_pc = SEM_NEXT_PC (sem_arg);
1451
1452 CPU (h_accum) = SRADI (SLLDI (ADDDI (CPU (h_accum), MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16))))), 8), 8);
1453 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1454
1455 #if WITH_PROFILE_MODEL_P
1456 if (PROFILE_MODEL_P (current_cpu))
1457 {
1458 m32r_model_mark_get_h_gr (current_cpu, abuf);
1459 m32r_model_profile_insn (current_cpu, abuf);
1460 }
1461 #endif
1462
1463 return new_pc;
1464 #undef FLD
1465 }
1466
1467 /* Perform macwlo: macwlo $src1,$src2. */
1468 CIA
1469 SEM_FN_NAME (m32r,macwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1470 {
1471 #define FLD(f) abuf->fields.fmt_30_machi.f
1472 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1473 CIA new_pc = SEM_NEXT_PC (sem_arg);
1474
1475 CPU (h_accum) = SRADI (SLLDI (ADDDI (CPU (h_accum), MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (* FLD (f_r2))))), 8), 8);
1476 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1477
1478 #if WITH_PROFILE_MODEL_P
1479 if (PROFILE_MODEL_P (current_cpu))
1480 {
1481 m32r_model_mark_get_h_gr (current_cpu, abuf);
1482 m32r_model_profile_insn (current_cpu, abuf);
1483 }
1484 #endif
1485
1486 return new_pc;
1487 #undef FLD
1488 }
1489
1490 /* Perform mul: mul $dr,$sr. */
1491 CIA
1492 SEM_FN_NAME (m32r,mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1493 {
1494 #define FLD(f) abuf->fields.fmt_0_add.f
1495 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1496 CIA new_pc = SEM_NEXT_PC (sem_arg);
1497
1498 * FLD (f_r1) = MULSI (* FLD (f_r1), * FLD (f_r2));
1499 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1500
1501 #if WITH_PROFILE_MODEL_P
1502 if (PROFILE_MODEL_P (current_cpu))
1503 {
1504 m32r_model_mark_get_h_gr (current_cpu, abuf);
1505 m32r_model_mark_set_h_gr (current_cpu, abuf);
1506 m32r_model_profile_insn (current_cpu, abuf);
1507 }
1508 #endif
1509
1510 return new_pc;
1511 #undef FLD
1512 }
1513
1514 /* Perform mulhi: mulhi $src1,$src2. */
1515 CIA
1516 SEM_FN_NAME (m32r,mulhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1517 {
1518 #define FLD(f) abuf->fields.fmt_15_cmp.f
1519 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1520 CIA new_pc = SEM_NEXT_PC (sem_arg);
1521
1522 CPU (h_accum) = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (f_r1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16)))), 16), 16);
1523 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1524
1525 #if WITH_PROFILE_MODEL_P
1526 if (PROFILE_MODEL_P (current_cpu))
1527 {
1528 m32r_model_mark_get_h_gr (current_cpu, abuf);
1529 m32r_model_profile_insn (current_cpu, abuf);
1530 }
1531 #endif
1532
1533 return new_pc;
1534 #undef FLD
1535 }
1536
1537 /* Perform mullo: mullo $src1,$src2. */
1538 CIA
1539 SEM_FN_NAME (m32r,mullo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1540 {
1541 #define FLD(f) abuf->fields.fmt_15_cmp.f
1542 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1543 CIA new_pc = SEM_NEXT_PC (sem_arg);
1544
1545 CPU (h_accum) = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (f_r1), 16)), EXTHIDI (TRUNCSIHI (* FLD (f_r2)))), 16), 16);
1546 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1547
1548 #if WITH_PROFILE_MODEL_P
1549 if (PROFILE_MODEL_P (current_cpu))
1550 {
1551 m32r_model_mark_get_h_gr (current_cpu, abuf);
1552 m32r_model_profile_insn (current_cpu, abuf);
1553 }
1554 #endif
1555
1556 return new_pc;
1557 #undef FLD
1558 }
1559
1560 /* Perform mulwhi: mulwhi $src1,$src2. */
1561 CIA
1562 SEM_FN_NAME (m32r,mulwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1563 {
1564 #define FLD(f) abuf->fields.fmt_15_cmp.f
1565 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1566 CIA new_pc = SEM_NEXT_PC (sem_arg);
1567
1568 CPU (h_accum) = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (f_r2), 16)))), 8), 8);
1569 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1570
1571 #if WITH_PROFILE_MODEL_P
1572 if (PROFILE_MODEL_P (current_cpu))
1573 {
1574 m32r_model_mark_get_h_gr (current_cpu, abuf);
1575 m32r_model_profile_insn (current_cpu, abuf);
1576 }
1577 #endif
1578
1579 return new_pc;
1580 #undef FLD
1581 }
1582
1583 /* Perform mulwlo: mulwlo $src1,$src2. */
1584 CIA
1585 SEM_FN_NAME (m32r,mulwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1586 {
1587 #define FLD(f) abuf->fields.fmt_15_cmp.f
1588 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1589 CIA new_pc = SEM_NEXT_PC (sem_arg);
1590
1591 CPU (h_accum) = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (f_r1)), EXTHIDI (TRUNCSIHI (* FLD (f_r2)))), 8), 8);
1592 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1593
1594 #if WITH_PROFILE_MODEL_P
1595 if (PROFILE_MODEL_P (current_cpu))
1596 {
1597 m32r_model_mark_get_h_gr (current_cpu, abuf);
1598 m32r_model_profile_insn (current_cpu, abuf);
1599 }
1600 #endif
1601
1602 return new_pc;
1603 #undef FLD
1604 }
1605
1606 /* Perform mv: mv $dr,$sr. */
1607 CIA
1608 SEM_FN_NAME (m32r,mv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1609 {
1610 #define FLD(f) abuf->fields.fmt_31_mv.f
1611 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1612 CIA new_pc = SEM_NEXT_PC (sem_arg);
1613
1614 * FLD (f_r1) = * FLD (f_r2);
1615 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1616
1617 #if WITH_PROFILE_MODEL_P
1618 if (PROFILE_MODEL_P (current_cpu))
1619 {
1620 m32r_model_mark_get_h_gr (current_cpu, abuf);
1621 m32r_model_mark_set_h_gr (current_cpu, abuf);
1622 m32r_model_profile_insn (current_cpu, abuf);
1623 }
1624 #endif
1625
1626 return new_pc;
1627 #undef FLD
1628 }
1629
1630 /* Perform mvfachi: mvfachi $dr. */
1631 CIA
1632 SEM_FN_NAME (m32r,mvfachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1633 {
1634 #define FLD(f) abuf->fields.fmt_32_mvfachi.f
1635 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1636 CIA new_pc = SEM_NEXT_PC (sem_arg);
1637
1638 * FLD (f_r1) = TRUNCDISI (SRADI (CPU (h_accum), 32));
1639 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1640
1641 #if WITH_PROFILE_MODEL_P
1642 if (PROFILE_MODEL_P (current_cpu))
1643 {
1644 m32r_model_mark_set_h_gr (current_cpu, abuf);
1645 m32r_model_profile_insn (current_cpu, abuf);
1646 }
1647 #endif
1648
1649 return new_pc;
1650 #undef FLD
1651 }
1652
1653 /* Perform mvfaclo: mvfaclo $dr. */
1654 CIA
1655 SEM_FN_NAME (m32r,mvfaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1656 {
1657 #define FLD(f) abuf->fields.fmt_32_mvfachi.f
1658 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1659 CIA new_pc = SEM_NEXT_PC (sem_arg);
1660
1661 * FLD (f_r1) = TRUNCDISI (CPU (h_accum));
1662 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1663
1664 #if WITH_PROFILE_MODEL_P
1665 if (PROFILE_MODEL_P (current_cpu))
1666 {
1667 m32r_model_mark_set_h_gr (current_cpu, abuf);
1668 m32r_model_profile_insn (current_cpu, abuf);
1669 }
1670 #endif
1671
1672 return new_pc;
1673 #undef FLD
1674 }
1675
1676 /* Perform mvfacmi: mvfacmi $dr. */
1677 CIA
1678 SEM_FN_NAME (m32r,mvfacmi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1679 {
1680 #define FLD(f) abuf->fields.fmt_32_mvfachi.f
1681 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1682 CIA new_pc = SEM_NEXT_PC (sem_arg);
1683
1684 * FLD (f_r1) = TRUNCDISI (SRADI (CPU (h_accum), 16));
1685 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1686
1687 #if WITH_PROFILE_MODEL_P
1688 if (PROFILE_MODEL_P (current_cpu))
1689 {
1690 m32r_model_mark_set_h_gr (current_cpu, abuf);
1691 m32r_model_profile_insn (current_cpu, abuf);
1692 }
1693 #endif
1694
1695 return new_pc;
1696 #undef FLD
1697 }
1698
1699 /* Perform mvfc: mvfc $dr,$scr. */
1700 CIA
1701 SEM_FN_NAME (m32r,mvfc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1702 {
1703 #define FLD(f) abuf->fields.fmt_33_mvfc.f
1704 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1705 CIA new_pc = SEM_NEXT_PC (sem_arg);
1706
1707 * FLD (f_r1) = m32r_h_cr_get (current_cpu, FLD (f_r2));
1708 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1709
1710 #if WITH_PROFILE_MODEL_P
1711 if (PROFILE_MODEL_P (current_cpu))
1712 {
1713 m32r_model_mark_set_h_gr (current_cpu, abuf);
1714 m32r_model_profile_insn (current_cpu, abuf);
1715 }
1716 #endif
1717
1718 return new_pc;
1719 #undef FLD
1720 }
1721
1722 /* Perform mvtachi: mvtachi $src1. */
1723 CIA
1724 SEM_FN_NAME (m32r,mvtachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1725 {
1726 #define FLD(f) abuf->fields.fmt_34_mvtachi.f
1727 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1728 CIA new_pc = SEM_NEXT_PC (sem_arg);
1729
1730 CPU (h_accum) = ORDI (ANDDI (CPU (h_accum), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (f_r1)), 32));
1731 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1732
1733 #if WITH_PROFILE_MODEL_P
1734 if (PROFILE_MODEL_P (current_cpu))
1735 {
1736 m32r_model_mark_get_h_gr (current_cpu, abuf);
1737 m32r_model_profile_insn (current_cpu, abuf);
1738 }
1739 #endif
1740
1741 return new_pc;
1742 #undef FLD
1743 }
1744
1745 /* Perform mvtaclo: mvtaclo $src1. */
1746 CIA
1747 SEM_FN_NAME (m32r,mvtaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1748 {
1749 #define FLD(f) abuf->fields.fmt_34_mvtachi.f
1750 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1751 CIA new_pc = SEM_NEXT_PC (sem_arg);
1752
1753 CPU (h_accum) = ORDI (ANDDI (CPU (h_accum), MAKEDI (0xffffffff, 0)), EXTSIDI (* FLD (f_r1)));
1754 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1755
1756 #if WITH_PROFILE_MODEL_P
1757 if (PROFILE_MODEL_P (current_cpu))
1758 {
1759 m32r_model_mark_get_h_gr (current_cpu, abuf);
1760 m32r_model_profile_insn (current_cpu, abuf);
1761 }
1762 #endif
1763
1764 return new_pc;
1765 #undef FLD
1766 }
1767
1768 /* Perform mvtc: mvtc $sr,$dcr. */
1769 CIA
1770 SEM_FN_NAME (m32r,mvtc) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1771 {
1772 #define FLD(f) abuf->fields.fmt_35_mvtc.f
1773 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1774 CIA new_pc = SEM_NEXT_PC (sem_arg);
1775
1776 m32r_h_cr_set (current_cpu, FLD (f_r1), * FLD (f_r2));
1777 TRACE_RESULT (current_cpu, "dcr", 'x', m32r_h_cr_get (current_cpu, FLD (f_r1)));
1778
1779 #if WITH_PROFILE_MODEL_P
1780 if (PROFILE_MODEL_P (current_cpu))
1781 {
1782 m32r_model_mark_get_h_gr (current_cpu, abuf);
1783 m32r_model_profile_insn (current_cpu, abuf);
1784 }
1785 #endif
1786
1787 return new_pc;
1788 #undef FLD
1789 }
1790
1791 /* Perform neg: neg $dr,$sr. */
1792 CIA
1793 SEM_FN_NAME (m32r,neg) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1794 {
1795 #define FLD(f) abuf->fields.fmt_31_mv.f
1796 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1797 CIA new_pc = SEM_NEXT_PC (sem_arg);
1798
1799 * FLD (f_r1) = NEGSI (* FLD (f_r2));
1800 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1801
1802 #if WITH_PROFILE_MODEL_P
1803 if (PROFILE_MODEL_P (current_cpu))
1804 {
1805 m32r_model_mark_get_h_gr (current_cpu, abuf);
1806 m32r_model_mark_set_h_gr (current_cpu, abuf);
1807 m32r_model_profile_insn (current_cpu, abuf);
1808 }
1809 #endif
1810
1811 return new_pc;
1812 #undef FLD
1813 }
1814
1815 /* Perform nop: nop. */
1816 CIA
1817 SEM_FN_NAME (m32r,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1818 {
1819 #define FLD(f) abuf->fields.fmt_36_nop.f
1820 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1821 CIA new_pc = SEM_NEXT_PC (sem_arg);
1822
1823 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
1824
1825 #if WITH_PROFILE_MODEL_P
1826 if (PROFILE_MODEL_P (current_cpu))
1827 {
1828 m32r_model_profile_insn (current_cpu, abuf);
1829 }
1830 #endif
1831
1832 return new_pc;
1833 #undef FLD
1834 }
1835
1836 /* Perform not: not $dr,$sr. */
1837 CIA
1838 SEM_FN_NAME (m32r,not) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1839 {
1840 #define FLD(f) abuf->fields.fmt_31_mv.f
1841 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1842 CIA new_pc = SEM_NEXT_PC (sem_arg);
1843
1844 * FLD (f_r1) = INVSI (* FLD (f_r2));
1845 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1846
1847 #if WITH_PROFILE_MODEL_P
1848 if (PROFILE_MODEL_P (current_cpu))
1849 {
1850 m32r_model_mark_get_h_gr (current_cpu, abuf);
1851 m32r_model_mark_set_h_gr (current_cpu, abuf);
1852 m32r_model_profile_insn (current_cpu, abuf);
1853 }
1854 #endif
1855
1856 return new_pc;
1857 #undef FLD
1858 }
1859
1860 /* Perform rac: rac. */
1861 CIA
1862 SEM_FN_NAME (m32r,rac) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1863 {
1864 #define FLD(f) abuf->fields.fmt_37_rac.f
1865 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1866 CIA new_pc = SEM_NEXT_PC (sem_arg);
1867
1868 do {
1869 DI tmp_tmp1;
1870 tmp_tmp1 = SLLDI (CPU (h_accum), 1);
1871 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
1872 CPU (h_accum) = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000)));
1873 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1874 } while (0);
1875
1876 #if WITH_PROFILE_MODEL_P
1877 if (PROFILE_MODEL_P (current_cpu))
1878 {
1879 m32r_model_profile_insn (current_cpu, abuf);
1880 }
1881 #endif
1882
1883 return new_pc;
1884 #undef FLD
1885 }
1886
1887 /* Perform rach: rach. */
1888 CIA
1889 SEM_FN_NAME (m32r,rach) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1890 {
1891 #define FLD(f) abuf->fields.fmt_37_rac.f
1892 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1893 CIA new_pc = SEM_NEXT_PC (sem_arg);
1894
1895 do {
1896 DI tmp_tmp1;
1897 tmp_tmp1 = ANDDI (CPU (h_accum), MAKEDI (16777215, 0xffffffff));
1898 if (ANDIFSI (GEDI (tmp_tmp1, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1, MAKEDI (8388607, 0xffffffff)))) {
1899 tmp_tmp1 = MAKEDI (16383, 0x80000000);
1900 } else {
1901 if (ANDIFSI (GEDI (tmp_tmp1, MAKEDI (8388608, 0)), LEDI (tmp_tmp1, MAKEDI (16760832, 0)))) {
1902 tmp_tmp1 = MAKEDI (16760832, 0);
1903 } else {
1904 tmp_tmp1 = ANDDI (ADDDI (CPU (h_accum), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000));
1905 }
1906 }
1907 tmp_tmp1 = SLLDI (tmp_tmp1, 1);
1908 CPU (h_accum) = SRADI (SLLDI (tmp_tmp1, 7), 7);
1909 TRACE_RESULT (current_cpu, "accum", 'D', CPU (h_accum));
1910 } while (0);
1911
1912 #if WITH_PROFILE_MODEL_P
1913 if (PROFILE_MODEL_P (current_cpu))
1914 {
1915 m32r_model_profile_insn (current_cpu, abuf);
1916 }
1917 #endif
1918
1919 return new_pc;
1920 #undef FLD
1921 }
1922
1923 /* Perform rte: rte. */
1924 CIA
1925 SEM_FN_NAME (m32r,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1926 {
1927 #define FLD(f) abuf->fields.fmt_38_rte.f
1928 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1929 CIA new_pc = SEM_NEXT_PC (sem_arg);
1930 int taken_p = 0;
1931
1932 do {
1933 CPU (h_sm) = CPU (h_bsm);
1934 TRACE_RESULT (current_cpu, "h-sm-0", 'x', CPU (h_sm));
1935 CPU (h_ie) = CPU (h_bie);
1936 TRACE_RESULT (current_cpu, "h-ie-0", 'x', CPU (h_ie));
1937 CPU (h_cond) = CPU (h_bcond);
1938 TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
1939 BRANCH_NEW_PC (current_cpu, new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, CPU (h_bpc)));
1940 taken_p = 1;
1941 TRACE_RESULT (current_cpu, "pc", 'x', CPU (h_pc));
1942 } while (0);
1943
1944 #if WITH_PROFILE_MODEL_P
1945 if (PROFILE_MODEL_P (current_cpu))
1946 {
1947 m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
1948 }
1949 #endif
1950
1951 return new_pc;
1952 #undef FLD
1953 }
1954
1955 /* Perform seth: seth $dr,#$hi16. */
1956 CIA
1957 SEM_FN_NAME (m32r,seth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1958 {
1959 #define FLD(f) abuf->fields.fmt_39_seth.f
1960 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1961 CIA new_pc = SEM_NEXT_PC (sem_arg);
1962
1963 * FLD (f_r1) = SLLSI (FLD (f_hi16), 16);
1964 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1965
1966 #if WITH_PROFILE_MODEL_P
1967 if (PROFILE_MODEL_P (current_cpu))
1968 {
1969 m32r_model_mark_set_h_gr (current_cpu, abuf);
1970 m32r_model_profile_insn (current_cpu, abuf);
1971 }
1972 #endif
1973
1974 return new_pc;
1975 #undef FLD
1976 }
1977
1978 /* Perform sll: sll $dr,$sr. */
1979 CIA
1980 SEM_FN_NAME (m32r,sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
1981 {
1982 #define FLD(f) abuf->fields.fmt_0_add.f
1983 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1984 CIA new_pc = SEM_NEXT_PC (sem_arg);
1985
1986 * FLD (f_r1) = SLLSI (* FLD (f_r1), ANDSI (* FLD (f_r2), 31));
1987 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
1988
1989 #if WITH_PROFILE_MODEL_P
1990 if (PROFILE_MODEL_P (current_cpu))
1991 {
1992 m32r_model_mark_get_h_gr (current_cpu, abuf);
1993 m32r_model_mark_set_h_gr (current_cpu, abuf);
1994 m32r_model_profile_insn (current_cpu, abuf);
1995 }
1996 #endif
1997
1998 return new_pc;
1999 #undef FLD
2000 }
2001
2002 /* Perform sll3: sll3 $dr,$sr,#$simm16. */
2003 CIA
2004 SEM_FN_NAME (m32r,sll3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2005 {
2006 #define FLD(f) abuf->fields.fmt_5_addv3.f
2007 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2008 CIA new_pc = SEM_NEXT_PC (sem_arg);
2009
2010 * FLD (f_r1) = SLLSI (* FLD (f_r2), ANDSI (FLD (f_simm16), 31));
2011 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2012
2013 #if WITH_PROFILE_MODEL_P
2014 if (PROFILE_MODEL_P (current_cpu))
2015 {
2016 m32r_model_mark_get_h_gr (current_cpu, abuf);
2017 m32r_model_mark_set_h_gr (current_cpu, abuf);
2018 m32r_model_profile_insn (current_cpu, abuf);
2019 }
2020 #endif
2021
2022 return new_pc;
2023 #undef FLD
2024 }
2025
2026 /* Perform slli: slli $dr,#$uimm5. */
2027 CIA
2028 SEM_FN_NAME (m32r,slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2029 {
2030 #define FLD(f) abuf->fields.fmt_40_slli.f
2031 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2032 CIA new_pc = SEM_NEXT_PC (sem_arg);
2033
2034 * FLD (f_r1) = SLLSI (* FLD (f_r1), FLD (f_uimm5));
2035 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2036
2037 #if WITH_PROFILE_MODEL_P
2038 if (PROFILE_MODEL_P (current_cpu))
2039 {
2040 m32r_model_mark_get_h_gr (current_cpu, abuf);
2041 m32r_model_mark_set_h_gr (current_cpu, abuf);
2042 m32r_model_profile_insn (current_cpu, abuf);
2043 }
2044 #endif
2045
2046 return new_pc;
2047 #undef FLD
2048 }
2049
2050 /* Perform sra: sra $dr,$sr. */
2051 CIA
2052 SEM_FN_NAME (m32r,sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2053 {
2054 #define FLD(f) abuf->fields.fmt_0_add.f
2055 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2056 CIA new_pc = SEM_NEXT_PC (sem_arg);
2057
2058 * FLD (f_r1) = SRASI (* FLD (f_r1), ANDSI (* FLD (f_r2), 31));
2059 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2060
2061 #if WITH_PROFILE_MODEL_P
2062 if (PROFILE_MODEL_P (current_cpu))
2063 {
2064 m32r_model_mark_get_h_gr (current_cpu, abuf);
2065 m32r_model_mark_set_h_gr (current_cpu, abuf);
2066 m32r_model_profile_insn (current_cpu, abuf);
2067 }
2068 #endif
2069
2070 return new_pc;
2071 #undef FLD
2072 }
2073
2074 /* Perform sra3: sra3 $dr,$sr,#$simm16. */
2075 CIA
2076 SEM_FN_NAME (m32r,sra3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2077 {
2078 #define FLD(f) abuf->fields.fmt_5_addv3.f
2079 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2080 CIA new_pc = SEM_NEXT_PC (sem_arg);
2081
2082 * FLD (f_r1) = SRASI (* FLD (f_r2), ANDSI (FLD (f_simm16), 31));
2083 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2084
2085 #if WITH_PROFILE_MODEL_P
2086 if (PROFILE_MODEL_P (current_cpu))
2087 {
2088 m32r_model_mark_get_h_gr (current_cpu, abuf);
2089 m32r_model_mark_set_h_gr (current_cpu, abuf);
2090 m32r_model_profile_insn (current_cpu, abuf);
2091 }
2092 #endif
2093
2094 return new_pc;
2095 #undef FLD
2096 }
2097
2098 /* Perform srai: srai $dr,#$uimm5. */
2099 CIA
2100 SEM_FN_NAME (m32r,srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2101 {
2102 #define FLD(f) abuf->fields.fmt_40_slli.f
2103 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2104 CIA new_pc = SEM_NEXT_PC (sem_arg);
2105
2106 * FLD (f_r1) = SRASI (* FLD (f_r1), FLD (f_uimm5));
2107 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2108
2109 #if WITH_PROFILE_MODEL_P
2110 if (PROFILE_MODEL_P (current_cpu))
2111 {
2112 m32r_model_mark_get_h_gr (current_cpu, abuf);
2113 m32r_model_mark_set_h_gr (current_cpu, abuf);
2114 m32r_model_profile_insn (current_cpu, abuf);
2115 }
2116 #endif
2117
2118 return new_pc;
2119 #undef FLD
2120 }
2121
2122 /* Perform srl: srl $dr,$sr. */
2123 CIA
2124 SEM_FN_NAME (m32r,srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2125 {
2126 #define FLD(f) abuf->fields.fmt_0_add.f
2127 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2128 CIA new_pc = SEM_NEXT_PC (sem_arg);
2129
2130 * FLD (f_r1) = SRLSI (* FLD (f_r1), ANDSI (* FLD (f_r2), 31));
2131 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2132
2133 #if WITH_PROFILE_MODEL_P
2134 if (PROFILE_MODEL_P (current_cpu))
2135 {
2136 m32r_model_mark_get_h_gr (current_cpu, abuf);
2137 m32r_model_mark_set_h_gr (current_cpu, abuf);
2138 m32r_model_profile_insn (current_cpu, abuf);
2139 }
2140 #endif
2141
2142 return new_pc;
2143 #undef FLD
2144 }
2145
2146 /* Perform srl3: srl3 $dr,$sr,#$simm16. */
2147 CIA
2148 SEM_FN_NAME (m32r,srl3) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2149 {
2150 #define FLD(f) abuf->fields.fmt_5_addv3.f
2151 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2152 CIA new_pc = SEM_NEXT_PC (sem_arg);
2153
2154 * FLD (f_r1) = SRLSI (* FLD (f_r2), ANDSI (FLD (f_simm16), 31));
2155 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2156
2157 #if WITH_PROFILE_MODEL_P
2158 if (PROFILE_MODEL_P (current_cpu))
2159 {
2160 m32r_model_mark_get_h_gr (current_cpu, abuf);
2161 m32r_model_mark_set_h_gr (current_cpu, abuf);
2162 m32r_model_profile_insn (current_cpu, abuf);
2163 }
2164 #endif
2165
2166 return new_pc;
2167 #undef FLD
2168 }
2169
2170 /* Perform srli: srli $dr,#$uimm5. */
2171 CIA
2172 SEM_FN_NAME (m32r,srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2173 {
2174 #define FLD(f) abuf->fields.fmt_40_slli.f
2175 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2176 CIA new_pc = SEM_NEXT_PC (sem_arg);
2177
2178 * FLD (f_r1) = SRLSI (* FLD (f_r1), FLD (f_uimm5));
2179 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2180
2181 #if WITH_PROFILE_MODEL_P
2182 if (PROFILE_MODEL_P (current_cpu))
2183 {
2184 m32r_model_mark_get_h_gr (current_cpu, abuf);
2185 m32r_model_mark_set_h_gr (current_cpu, abuf);
2186 m32r_model_profile_insn (current_cpu, abuf);
2187 }
2188 #endif
2189
2190 return new_pc;
2191 #undef FLD
2192 }
2193
2194 /* Perform st: st $src1,@$src2. */
2195 CIA
2196 SEM_FN_NAME (m32r,st) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2197 {
2198 #define FLD(f) abuf->fields.fmt_15_cmp.f
2199 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2200 CIA new_pc = SEM_NEXT_PC (sem_arg);
2201
2202 SETMEMSI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2203 TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMSI (current_cpu, * FLD (f_r2)));
2204
2205 #if WITH_PROFILE_MODEL_P
2206 if (PROFILE_MODEL_P (current_cpu))
2207 {
2208 m32r_model_mark_get_h_gr (current_cpu, abuf);
2209 m32r_model_profile_insn (current_cpu, abuf);
2210 }
2211 #endif
2212
2213 return new_pc;
2214 #undef FLD
2215 }
2216
2217 /* Perform st-d: st $src1,@($slo16,$src2). */
2218 CIA
2219 SEM_FN_NAME (m32r,st_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2220 {
2221 #define FLD(f) abuf->fields.fmt_41_st_d.f
2222 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2223 CIA new_pc = SEM_NEXT_PC (sem_arg);
2224
2225 SETMEMSI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)), * FLD (f_r1));
2226 TRACE_RESULT (current_cpu, "h-memory-add-WI-src2-slo16", 'x', GETMEMSI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
2227
2228 #if WITH_PROFILE_MODEL_P
2229 if (PROFILE_MODEL_P (current_cpu))
2230 {
2231 m32r_model_mark_get_h_gr (current_cpu, abuf);
2232 m32r_model_profile_insn (current_cpu, abuf);
2233 }
2234 #endif
2235
2236 return new_pc;
2237 #undef FLD
2238 }
2239
2240 /* Perform stb: stb $src1,@$src2. */
2241 CIA
2242 SEM_FN_NAME (m32r,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2243 {
2244 #define FLD(f) abuf->fields.fmt_15_cmp.f
2245 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2246 CIA new_pc = SEM_NEXT_PC (sem_arg);
2247
2248 SETMEMQI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2249 TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMQI (current_cpu, * FLD (f_r2)));
2250
2251 #if WITH_PROFILE_MODEL_P
2252 if (PROFILE_MODEL_P (current_cpu))
2253 {
2254 m32r_model_mark_get_h_gr (current_cpu, abuf);
2255 m32r_model_profile_insn (current_cpu, abuf);
2256 }
2257 #endif
2258
2259 return new_pc;
2260 #undef FLD
2261 }
2262
2263 /* Perform stb-d: stb $src1,@($slo16,$src2). */
2264 CIA
2265 SEM_FN_NAME (m32r,stb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2266 {
2267 #define FLD(f) abuf->fields.fmt_41_st_d.f
2268 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2269 CIA new_pc = SEM_NEXT_PC (sem_arg);
2270
2271 SETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)), * FLD (f_r1));
2272 TRACE_RESULT (current_cpu, "h-memory-add-WI-src2-slo16", 'x', GETMEMQI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
2273
2274 #if WITH_PROFILE_MODEL_P
2275 if (PROFILE_MODEL_P (current_cpu))
2276 {
2277 m32r_model_mark_get_h_gr (current_cpu, abuf);
2278 m32r_model_profile_insn (current_cpu, abuf);
2279 }
2280 #endif
2281
2282 return new_pc;
2283 #undef FLD
2284 }
2285
2286 /* Perform sth: sth $src1,@$src2. */
2287 CIA
2288 SEM_FN_NAME (m32r,sth) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2289 {
2290 #define FLD(f) abuf->fields.fmt_15_cmp.f
2291 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2292 CIA new_pc = SEM_NEXT_PC (sem_arg);
2293
2294 SETMEMHI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2295 TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMHI (current_cpu, * FLD (f_r2)));
2296
2297 #if WITH_PROFILE_MODEL_P
2298 if (PROFILE_MODEL_P (current_cpu))
2299 {
2300 m32r_model_mark_get_h_gr (current_cpu, abuf);
2301 m32r_model_profile_insn (current_cpu, abuf);
2302 }
2303 #endif
2304
2305 return new_pc;
2306 #undef FLD
2307 }
2308
2309 /* Perform sth-d: sth $src1,@($slo16,$src2). */
2310 CIA
2311 SEM_FN_NAME (m32r,sth_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2312 {
2313 #define FLD(f) abuf->fields.fmt_41_st_d.f
2314 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2315 CIA new_pc = SEM_NEXT_PC (sem_arg);
2316
2317 SETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16)), * FLD (f_r1));
2318 TRACE_RESULT (current_cpu, "h-memory-add-WI-src2-slo16", 'x', GETMEMHI (current_cpu, ADDSI (* FLD (f_r2), FLD (f_simm16))));
2319
2320 #if WITH_PROFILE_MODEL_P
2321 if (PROFILE_MODEL_P (current_cpu))
2322 {
2323 m32r_model_mark_get_h_gr (current_cpu, abuf);
2324 m32r_model_profile_insn (current_cpu, abuf);
2325 }
2326 #endif
2327
2328 return new_pc;
2329 #undef FLD
2330 }
2331
2332 /* Perform st-plus: st $src1,@+$src2. */
2333 CIA
2334 SEM_FN_NAME (m32r,st_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2335 {
2336 #define FLD(f) abuf->fields.fmt_15_cmp.f
2337 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2338 CIA new_pc = SEM_NEXT_PC (sem_arg);
2339
2340 do {
2341 * FLD (f_r2) = ADDSI (* FLD (f_r2), 4);
2342 TRACE_RESULT (current_cpu, "src2", 'x', * FLD (f_r2));
2343 SETMEMSI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2344 TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMSI (current_cpu, * FLD (f_r2)));
2345 } while (0);
2346
2347 #if WITH_PROFILE_MODEL_P
2348 if (PROFILE_MODEL_P (current_cpu))
2349 {
2350 m32r_model_mark_get_h_gr (current_cpu, abuf);
2351 m32r_model_profile_insn (current_cpu, abuf);
2352 }
2353 #endif
2354
2355 return new_pc;
2356 #undef FLD
2357 }
2358
2359 /* Perform st-minus: st $src1,@-$src2. */
2360 CIA
2361 SEM_FN_NAME (m32r,st_minus) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2362 {
2363 #define FLD(f) abuf->fields.fmt_15_cmp.f
2364 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2365 CIA new_pc = SEM_NEXT_PC (sem_arg);
2366
2367 do {
2368 * FLD (f_r2) = SUBSI (* FLD (f_r2), 4);
2369 TRACE_RESULT (current_cpu, "src2", 'x', * FLD (f_r2));
2370 SETMEMSI (current_cpu, * FLD (f_r2), * FLD (f_r1));
2371 TRACE_RESULT (current_cpu, "h-memory-src2", 'x', GETMEMSI (current_cpu, * FLD (f_r2)));
2372 } while (0);
2373
2374 #if WITH_PROFILE_MODEL_P
2375 if (PROFILE_MODEL_P (current_cpu))
2376 {
2377 m32r_model_mark_get_h_gr (current_cpu, abuf);
2378 m32r_model_profile_insn (current_cpu, abuf);
2379 }
2380 #endif
2381
2382 return new_pc;
2383 #undef FLD
2384 }
2385
2386 /* Perform sub: sub $dr,$sr. */
2387 CIA
2388 SEM_FN_NAME (m32r,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2389 {
2390 #define FLD(f) abuf->fields.fmt_0_add.f
2391 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2392 CIA new_pc = SEM_NEXT_PC (sem_arg);
2393
2394 * FLD (f_r1) = SUBSI (* FLD (f_r1), * FLD (f_r2));
2395 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2396
2397 #if WITH_PROFILE_MODEL_P
2398 if (PROFILE_MODEL_P (current_cpu))
2399 {
2400 m32r_model_mark_get_h_gr (current_cpu, abuf);
2401 m32r_model_mark_set_h_gr (current_cpu, abuf);
2402 m32r_model_profile_insn (current_cpu, abuf);
2403 }
2404 #endif
2405
2406 return new_pc;
2407 #undef FLD
2408 }
2409
2410 /* Perform subv: subv $dr,$sr. */
2411 CIA
2412 SEM_FN_NAME (m32r,subv) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2413 {
2414 #define FLD(f) abuf->fields.fmt_0_add.f
2415 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2416 CIA new_pc = SEM_NEXT_PC (sem_arg);
2417
2418 do {
2419 BI temp1;SI temp0;
2420 temp0 = SUBSI (* FLD (f_r1), * FLD (f_r2));
2421 temp1 = SUBOFSI (* FLD (f_r1), * FLD (f_r2), 0);
2422 * FLD (f_r1) = temp0;
2423 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2424 CPU (h_cond) = temp1;
2425 TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
2426 } while (0);
2427
2428 #if WITH_PROFILE_MODEL_P
2429 if (PROFILE_MODEL_P (current_cpu))
2430 {
2431 m32r_model_mark_get_h_gr (current_cpu, abuf);
2432 m32r_model_mark_set_h_gr (current_cpu, abuf);
2433 m32r_model_profile_insn (current_cpu, abuf);
2434 }
2435 #endif
2436
2437 return new_pc;
2438 #undef FLD
2439 }
2440
2441 /* Perform subx: subx $dr,$sr. */
2442 CIA
2443 SEM_FN_NAME (m32r,subx) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2444 {
2445 #define FLD(f) abuf->fields.fmt_6_addx.f
2446 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2447 CIA new_pc = SEM_NEXT_PC (sem_arg);
2448
2449 do {
2450 BI temp1;SI temp0;
2451 temp0 = SUBCSI (* FLD (f_r1), * FLD (f_r2), CPU (h_cond));
2452 temp1 = SUBCFSI (* FLD (f_r1), * FLD (f_r2), CPU (h_cond));
2453 * FLD (f_r1) = temp0;
2454 TRACE_RESULT (current_cpu, "dr", 'x', * FLD (f_r1));
2455 CPU (h_cond) = temp1;
2456 TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
2457 } while (0);
2458
2459 #if WITH_PROFILE_MODEL_P
2460 if (PROFILE_MODEL_P (current_cpu))
2461 {
2462 m32r_model_mark_get_h_gr (current_cpu, abuf);
2463 m32r_model_mark_set_h_gr (current_cpu, abuf);
2464 m32r_model_profile_insn (current_cpu, abuf);
2465 }
2466 #endif
2467
2468 return new_pc;
2469 #undef FLD
2470 }
2471
2472 /* Perform trap: trap #$uimm4. */
2473 CIA
2474 SEM_FN_NAME (m32r,trap) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2475 {
2476 #define FLD(f) abuf->fields.fmt_42_trap.f
2477 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2478 CIA new_pc = SEM_NEXT_PC (sem_arg);
2479 int taken_p = 0;
2480
2481 do_trap (current_cpu, FLD (f_uimm4));
2482
2483 #if WITH_PROFILE_MODEL_P
2484 if (PROFILE_MODEL_P (current_cpu))
2485 {
2486 m32r_model_profile_cti_insn (current_cpu, abuf, taken_p);
2487 }
2488 #endif
2489
2490 return new_pc;
2491 #undef FLD
2492 }
2493
2494 /* Perform unlock: unlock $src1,@$src2. */
2495 CIA
2496 SEM_FN_NAME (m32r,unlock) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2497 {
2498 #define FLD(f) abuf->fields.fmt_15_cmp.f
2499 ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2500 CIA new_pc = SEM_NEXT_PC (sem_arg);
2501
2502 do_unlock (current_cpu, * FLD (f_r1), * FLD (f_r2));
2503
2504 #if WITH_PROFILE_MODEL_P
2505 if (PROFILE_MODEL_P (current_cpu))
2506 {
2507 m32r_model_mark_get_h_gr (current_cpu, abuf);
2508 m32r_model_profile_insn (current_cpu, abuf);
2509 }
2510 #endif
2511
2512 return new_pc;
2513 #undef FLD
2514 }
2515
2516 CIA
2517 SEM_FN_NAME (m32r,illegal) (SIM_CPU *current_cpu, SEM_ARG sem_arg)
2518 {
2519 sim_engine_illegal_insn (current_cpu, NULL_CIA /*FIXME*/);
2520 return 0;
2521 }
2522
2523 #endif /* ! defined (SCACHE_P) || (defined (SCACHE_P) && WITH_SCACHE) */
This page took 0.081014 seconds and 4 git commands to generate.