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