9579a32cc9ed833dfe56f779d2cc1ff052ba4b94
[external/binutils.git] / sim / m32r / semx.c
1 /* Simulator instruction semantics for m32rx.
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_M32RX
27
28 #include "sim-main.h"
29 #include "cgen-mem.h"
30 #include "cgen-ops.h"
31 #include "cpu-sim.h"
32
33 #if ! WITH_SCACHE
34
35 #undef GET_ATTR
36 #define GET_ATTR(cpu, num, attr) CGEN_INSN_ATTR (abuf->idesc->opcode, CGEN_INSN_##attr)
37
38 /* add: add $dr,$sr.  */
39
40 CIA
41 SEM_FN_NAME (m32rx,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
42 {
43   insn_t insn = SEM_INSN (sem_arg);
44 #define OPRND(f) par_exec->operands.fmt_add.f
45   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
46   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
47   EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
48   EXTRACT_FMT_ADD_CODE
49
50   CPU (h_gr[f_r1]) = ADDSI (OPRND (dr), OPRND (sr));
51   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
52
53   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
54
55 #if WITH_PROFILE_MODEL_P
56   if (PROFILE_MODEL_P (current_cpu))
57     {
58       m32rx_model_mark_get_h_gr (current_cpu, abuf);
59       m32rx_model_mark_set_h_gr (current_cpu, abuf);
60       m32rx_model_profile_insn (current_cpu, abuf);
61     }
62 #endif
63
64   return new_pc;
65 #undef OPRND
66 }
67
68 /* add3: add3 $dr,$sr,$hash$slo16.  */
69
70 CIA
71 SEM_FN_NAME (m32rx,add3) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
72 {
73   insn_t insn = SEM_INSN (sem_arg);
74 #define OPRND(f) par_exec->operands.fmt_add3.f
75   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
76   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
77   EXTRACT_FMT_ADD3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
78   EXTRACT_FMT_ADD3_CODE
79
80   CPU (h_gr[f_r1]) = ADDSI (OPRND (sr), OPRND (slo16));
81   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
82
83   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
84
85 #if WITH_PROFILE_MODEL_P
86   if (PROFILE_MODEL_P (current_cpu))
87     {
88       m32rx_model_mark_get_h_gr (current_cpu, abuf);
89       m32rx_model_mark_set_h_gr (current_cpu, abuf);
90       m32rx_model_profile_insn (current_cpu, abuf);
91     }
92 #endif
93
94   return new_pc;
95 #undef OPRND
96 }
97
98 /* and: and $dr,$sr.  */
99
100 CIA
101 SEM_FN_NAME (m32rx,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
102 {
103   insn_t insn = SEM_INSN (sem_arg);
104 #define OPRND(f) par_exec->operands.fmt_add.f
105   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
106   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
107   EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
108   EXTRACT_FMT_ADD_CODE
109
110   CPU (h_gr[f_r1]) = ANDSI (OPRND (dr), OPRND (sr));
111   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
112
113   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
114
115 #if WITH_PROFILE_MODEL_P
116   if (PROFILE_MODEL_P (current_cpu))
117     {
118       m32rx_model_mark_get_h_gr (current_cpu, abuf);
119       m32rx_model_mark_set_h_gr (current_cpu, abuf);
120       m32rx_model_profile_insn (current_cpu, abuf);
121     }
122 #endif
123
124   return new_pc;
125 #undef OPRND
126 }
127
128 /* and3: and3 $dr,$sr,$uimm16.  */
129
130 CIA
131 SEM_FN_NAME (m32rx,and3) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
132 {
133   insn_t insn = SEM_INSN (sem_arg);
134 #define OPRND(f) par_exec->operands.fmt_and3.f
135   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
136   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
137   EXTRACT_FMT_AND3_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
138   EXTRACT_FMT_AND3_CODE
139
140   CPU (h_gr[f_r1]) = ANDSI (OPRND (sr), OPRND (uimm16));
141   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
142
143   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
144
145 #if WITH_PROFILE_MODEL_P
146   if (PROFILE_MODEL_P (current_cpu))
147     {
148       m32rx_model_mark_get_h_gr (current_cpu, abuf);
149       m32rx_model_mark_set_h_gr (current_cpu, abuf);
150       m32rx_model_profile_insn (current_cpu, abuf);
151     }
152 #endif
153
154   return new_pc;
155 #undef OPRND
156 }
157
158 /* or: or $dr,$sr.  */
159
160 CIA
161 SEM_FN_NAME (m32rx,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
162 {
163   insn_t insn = SEM_INSN (sem_arg);
164 #define OPRND(f) par_exec->operands.fmt_add.f
165   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
166   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
167   EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
168   EXTRACT_FMT_ADD_CODE
169
170   CPU (h_gr[f_r1]) = ORSI (OPRND (dr), OPRND (sr));
171   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
172
173   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
174
175 #if WITH_PROFILE_MODEL_P
176   if (PROFILE_MODEL_P (current_cpu))
177     {
178       m32rx_model_mark_get_h_gr (current_cpu, abuf);
179       m32rx_model_mark_set_h_gr (current_cpu, abuf);
180       m32rx_model_profile_insn (current_cpu, abuf);
181     }
182 #endif
183
184   return new_pc;
185 #undef OPRND
186 }
187
188 /* or3: or3 $dr,$sr,$hash$ulo16.  */
189
190 CIA
191 SEM_FN_NAME (m32rx,or3) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
192 {
193   insn_t insn = SEM_INSN (sem_arg);
194 #define OPRND(f) par_exec->operands.fmt_or3.f
195   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
196   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
197   EXTRACT_FMT_OR3_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
198   EXTRACT_FMT_OR3_CODE
199
200   CPU (h_gr[f_r1]) = ORSI (OPRND (sr), OPRND (ulo16));
201   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
202
203   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
204
205 #if WITH_PROFILE_MODEL_P
206   if (PROFILE_MODEL_P (current_cpu))
207     {
208       m32rx_model_mark_get_h_gr (current_cpu, abuf);
209       m32rx_model_mark_set_h_gr (current_cpu, abuf);
210       m32rx_model_profile_insn (current_cpu, abuf);
211     }
212 #endif
213
214   return new_pc;
215 #undef OPRND
216 }
217
218 /* xor: xor $dr,$sr.  */
219
220 CIA
221 SEM_FN_NAME (m32rx,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
222 {
223   insn_t insn = SEM_INSN (sem_arg);
224 #define OPRND(f) par_exec->operands.fmt_add.f
225   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
226   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
227   EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
228   EXTRACT_FMT_ADD_CODE
229
230   CPU (h_gr[f_r1]) = XORSI (OPRND (dr), OPRND (sr));
231   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
232
233   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
234
235 #if WITH_PROFILE_MODEL_P
236   if (PROFILE_MODEL_P (current_cpu))
237     {
238       m32rx_model_mark_get_h_gr (current_cpu, abuf);
239       m32rx_model_mark_set_h_gr (current_cpu, abuf);
240       m32rx_model_profile_insn (current_cpu, abuf);
241     }
242 #endif
243
244   return new_pc;
245 #undef OPRND
246 }
247
248 /* xor3: xor3 $dr,$sr,$uimm16.  */
249
250 CIA
251 SEM_FN_NAME (m32rx,xor3) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
252 {
253   insn_t insn = SEM_INSN (sem_arg);
254 #define OPRND(f) par_exec->operands.fmt_and3.f
255   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
256   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
257   EXTRACT_FMT_AND3_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
258   EXTRACT_FMT_AND3_CODE
259
260   CPU (h_gr[f_r1]) = XORSI (OPRND (sr), OPRND (uimm16));
261   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
262
263   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
264
265 #if WITH_PROFILE_MODEL_P
266   if (PROFILE_MODEL_P (current_cpu))
267     {
268       m32rx_model_mark_get_h_gr (current_cpu, abuf);
269       m32rx_model_mark_set_h_gr (current_cpu, abuf);
270       m32rx_model_profile_insn (current_cpu, abuf);
271     }
272 #endif
273
274   return new_pc;
275 #undef OPRND
276 }
277
278 /* addi: addi $dr,$simm8.  */
279
280 CIA
281 SEM_FN_NAME (m32rx,addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
282 {
283   insn_t insn = SEM_INSN (sem_arg);
284 #define OPRND(f) par_exec->operands.fmt_addi.f
285   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
286   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
287   EXTRACT_FMT_ADDI_VARS /* f-op1 f-r1 f-simm8 */
288   EXTRACT_FMT_ADDI_CODE
289
290   CPU (h_gr[f_r1]) = ADDSI (OPRND (dr), OPRND (simm8));
291   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
292
293   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
294
295 #if WITH_PROFILE_MODEL_P
296   if (PROFILE_MODEL_P (current_cpu))
297     {
298       m32rx_model_mark_get_h_gr (current_cpu, abuf);
299       m32rx_model_mark_set_h_gr (current_cpu, abuf);
300       m32rx_model_profile_insn (current_cpu, abuf);
301     }
302 #endif
303
304   return new_pc;
305 #undef OPRND
306 }
307
308 /* addv: addv $dr,$sr.  */
309
310 CIA
311 SEM_FN_NAME (m32rx,addv) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
312 {
313   insn_t insn = SEM_INSN (sem_arg);
314 #define OPRND(f) par_exec->operands.fmt_addv.f
315   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
316   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
317   EXTRACT_FMT_ADDV_VARS /* f-op1 f-r1 f-op2 f-r2 */
318   EXTRACT_FMT_ADDV_CODE
319
320 do {
321   UBI temp1;SI temp0;
322   temp0 = ADDSI (OPRND (dr), OPRND (sr));
323   temp1 = ADDOFSI (OPRND (dr), OPRND (sr), 0);
324   CPU (h_gr[f_r1]) = temp0;
325   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
326   CPU (h_cond) = temp1;
327   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
328 } while (0);
329
330   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
331
332 #if WITH_PROFILE_MODEL_P
333   if (PROFILE_MODEL_P (current_cpu))
334     {
335       m32rx_model_mark_get_h_gr (current_cpu, abuf);
336       m32rx_model_mark_set_h_gr (current_cpu, abuf);
337       m32rx_model_profile_insn (current_cpu, abuf);
338     }
339 #endif
340
341   return new_pc;
342 #undef OPRND
343 }
344
345 /* addv3: addv3 $dr,$sr,$simm16.  */
346
347 CIA
348 SEM_FN_NAME (m32rx,addv3) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
349 {
350   insn_t insn = SEM_INSN (sem_arg);
351 #define OPRND(f) par_exec->operands.fmt_addv3.f
352   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
353   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
354   EXTRACT_FMT_ADDV3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
355   EXTRACT_FMT_ADDV3_CODE
356
357 do {
358   UBI temp1;SI temp0;
359   temp0 = ADDSI (OPRND (sr), OPRND (simm16));
360   temp1 = ADDOFSI (OPRND (sr), OPRND (simm16), 0);
361   CPU (h_gr[f_r1]) = temp0;
362   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
363   CPU (h_cond) = temp1;
364   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
365 } while (0);
366
367   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
368
369 #if WITH_PROFILE_MODEL_P
370   if (PROFILE_MODEL_P (current_cpu))
371     {
372       m32rx_model_mark_get_h_gr (current_cpu, abuf);
373       m32rx_model_mark_set_h_gr (current_cpu, abuf);
374       m32rx_model_profile_insn (current_cpu, abuf);
375     }
376 #endif
377
378   return new_pc;
379 #undef OPRND
380 }
381
382 /* addx: addx $dr,$sr.  */
383
384 CIA
385 SEM_FN_NAME (m32rx,addx) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
386 {
387   insn_t insn = SEM_INSN (sem_arg);
388 #define OPRND(f) par_exec->operands.fmt_addx.f
389   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
390   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
391   EXTRACT_FMT_ADDX_VARS /* f-op1 f-r1 f-op2 f-r2 */
392   EXTRACT_FMT_ADDX_CODE
393
394 do {
395   UBI temp1;SI temp0;
396   temp0 = ADDCSI (OPRND (dr), OPRND (sr), OPRND (condbit));
397   temp1 = ADDCFSI (OPRND (dr), OPRND (sr), OPRND (condbit));
398   CPU (h_gr[f_r1]) = temp0;
399   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
400   CPU (h_cond) = temp1;
401   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
402 } while (0);
403
404   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
405
406 #if WITH_PROFILE_MODEL_P
407   if (PROFILE_MODEL_P (current_cpu))
408     {
409       m32rx_model_mark_get_h_gr (current_cpu, abuf);
410       m32rx_model_mark_set_h_gr (current_cpu, abuf);
411       m32rx_model_profile_insn (current_cpu, abuf);
412     }
413 #endif
414
415   return new_pc;
416 #undef OPRND
417 }
418
419 /* bc8: bc.s $disp8.  */
420
421 CIA
422 SEM_FN_NAME (m32rx,bc8) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
423 {
424   insn_t insn = SEM_INSN (sem_arg);
425 #define OPRND(f) par_exec->operands.fmt_bc8.f
426   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
427   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
428   int taken_p = 0;
429   EXTRACT_FMT_BC8_VARS /* f-op1 f-r1 f-disp8 */
430   EXTRACT_FMT_BC8_CODE
431
432 if (OPRND (condbit)) {
433   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp8)));
434   taken_p = 1;
435   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
436 }
437
438   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
439
440 #if WITH_PROFILE_MODEL_P
441   if (PROFILE_MODEL_P (current_cpu))
442     {
443       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
444     }
445 #endif
446
447   return new_pc;
448 #undef OPRND
449 }
450
451 /* bc24: bc.l $disp24.  */
452
453 CIA
454 SEM_FN_NAME (m32rx,bc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
455 {
456   insn_t insn = SEM_INSN (sem_arg);
457 #define OPRND(f) par_exec->operands.fmt_bc24.f
458   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
459   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
460   int taken_p = 0;
461   EXTRACT_FMT_BC24_VARS /* f-op1 f-r1 f-disp24 */
462   EXTRACT_FMT_BC24_CODE
463
464 if (OPRND (condbit)) {
465   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp24)));
466   taken_p = 1;
467   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
468 }
469
470   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
471
472 #if WITH_PROFILE_MODEL_P
473   if (PROFILE_MODEL_P (current_cpu))
474     {
475       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
476     }
477 #endif
478
479   return new_pc;
480 #undef OPRND
481 }
482
483 /* beq: beq $src1,$src2,$disp16.  */
484
485 CIA
486 SEM_FN_NAME (m32rx,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
487 {
488   insn_t insn = SEM_INSN (sem_arg);
489 #define OPRND(f) par_exec->operands.fmt_beq.f
490   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
491   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
492   int taken_p = 0;
493   EXTRACT_FMT_BEQ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
494   EXTRACT_FMT_BEQ_CODE
495
496 if (EQSI (OPRND (src1), OPRND (src2))) {
497   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp16)));
498   taken_p = 1;
499   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
500 }
501
502   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
503
504 #if WITH_PROFILE_MODEL_P
505   if (PROFILE_MODEL_P (current_cpu))
506     {
507       m32rx_model_mark_get_h_gr (current_cpu, abuf);
508       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
509     }
510 #endif
511
512   return new_pc;
513 #undef OPRND
514 }
515
516 /* beqz: beqz $src2,$disp16.  */
517
518 CIA
519 SEM_FN_NAME (m32rx,beqz) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
520 {
521   insn_t insn = SEM_INSN (sem_arg);
522 #define OPRND(f) par_exec->operands.fmt_beqz.f
523   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
524   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
525   int taken_p = 0;
526   EXTRACT_FMT_BEQZ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
527   EXTRACT_FMT_BEQZ_CODE
528
529 if (EQSI (OPRND (src2), 0)) {
530   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp16)));
531   taken_p = 1;
532   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
533 }
534
535   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
536
537 #if WITH_PROFILE_MODEL_P
538   if (PROFILE_MODEL_P (current_cpu))
539     {
540       m32rx_model_mark_get_h_gr (current_cpu, abuf);
541       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
542     }
543 #endif
544
545   return new_pc;
546 #undef OPRND
547 }
548
549 /* bgez: bgez $src2,$disp16.  */
550
551 CIA
552 SEM_FN_NAME (m32rx,bgez) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
553 {
554   insn_t insn = SEM_INSN (sem_arg);
555 #define OPRND(f) par_exec->operands.fmt_beqz.f
556   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
557   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
558   int taken_p = 0;
559   EXTRACT_FMT_BEQZ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
560   EXTRACT_FMT_BEQZ_CODE
561
562 if (GESI (OPRND (src2), 0)) {
563   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp16)));
564   taken_p = 1;
565   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
566 }
567
568   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
569
570 #if WITH_PROFILE_MODEL_P
571   if (PROFILE_MODEL_P (current_cpu))
572     {
573       m32rx_model_mark_get_h_gr (current_cpu, abuf);
574       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
575     }
576 #endif
577
578   return new_pc;
579 #undef OPRND
580 }
581
582 /* bgtz: bgtz $src2,$disp16.  */
583
584 CIA
585 SEM_FN_NAME (m32rx,bgtz) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
586 {
587   insn_t insn = SEM_INSN (sem_arg);
588 #define OPRND(f) par_exec->operands.fmt_beqz.f
589   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
590   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
591   int taken_p = 0;
592   EXTRACT_FMT_BEQZ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
593   EXTRACT_FMT_BEQZ_CODE
594
595 if (GTSI (OPRND (src2), 0)) {
596   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp16)));
597   taken_p = 1;
598   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
599 }
600
601   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
602
603 #if WITH_PROFILE_MODEL_P
604   if (PROFILE_MODEL_P (current_cpu))
605     {
606       m32rx_model_mark_get_h_gr (current_cpu, abuf);
607       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
608     }
609 #endif
610
611   return new_pc;
612 #undef OPRND
613 }
614
615 /* blez: blez $src2,$disp16.  */
616
617 CIA
618 SEM_FN_NAME (m32rx,blez) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
619 {
620   insn_t insn = SEM_INSN (sem_arg);
621 #define OPRND(f) par_exec->operands.fmt_beqz.f
622   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
623   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
624   int taken_p = 0;
625   EXTRACT_FMT_BEQZ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
626   EXTRACT_FMT_BEQZ_CODE
627
628 if (LESI (OPRND (src2), 0)) {
629   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp16)));
630   taken_p = 1;
631   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
632 }
633
634   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
635
636 #if WITH_PROFILE_MODEL_P
637   if (PROFILE_MODEL_P (current_cpu))
638     {
639       m32rx_model_mark_get_h_gr (current_cpu, abuf);
640       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
641     }
642 #endif
643
644   return new_pc;
645 #undef OPRND
646 }
647
648 /* bltz: bltz $src2,$disp16.  */
649
650 CIA
651 SEM_FN_NAME (m32rx,bltz) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
652 {
653   insn_t insn = SEM_INSN (sem_arg);
654 #define OPRND(f) par_exec->operands.fmt_beqz.f
655   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
656   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
657   int taken_p = 0;
658   EXTRACT_FMT_BEQZ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
659   EXTRACT_FMT_BEQZ_CODE
660
661 if (LTSI (OPRND (src2), 0)) {
662   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp16)));
663   taken_p = 1;
664   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
665 }
666
667   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
668
669 #if WITH_PROFILE_MODEL_P
670   if (PROFILE_MODEL_P (current_cpu))
671     {
672       m32rx_model_mark_get_h_gr (current_cpu, abuf);
673       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
674     }
675 #endif
676
677   return new_pc;
678 #undef OPRND
679 }
680
681 /* bnez: bnez $src2,$disp16.  */
682
683 CIA
684 SEM_FN_NAME (m32rx,bnez) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
685 {
686   insn_t insn = SEM_INSN (sem_arg);
687 #define OPRND(f) par_exec->operands.fmt_beqz.f
688   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
689   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
690   int taken_p = 0;
691   EXTRACT_FMT_BEQZ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
692   EXTRACT_FMT_BEQZ_CODE
693
694 if (NESI (OPRND (src2), 0)) {
695   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp16)));
696   taken_p = 1;
697   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
698 }
699
700   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
701
702 #if WITH_PROFILE_MODEL_P
703   if (PROFILE_MODEL_P (current_cpu))
704     {
705       m32rx_model_mark_get_h_gr (current_cpu, abuf);
706       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
707     }
708 #endif
709
710   return new_pc;
711 #undef OPRND
712 }
713
714 /* bl8: bl.s $disp8.  */
715
716 CIA
717 SEM_FN_NAME (m32rx,bl8) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
718 {
719   insn_t insn = SEM_INSN (sem_arg);
720 #define OPRND(f) par_exec->operands.fmt_bl8.f
721   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
722   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
723   int taken_p = 0;
724   EXTRACT_FMT_BL8_VARS /* f-op1 f-r1 f-disp8 */
725   EXTRACT_FMT_BL8_CODE
726
727 do {
728   CPU (h_gr[14]) = ADDSI (ANDSI (OPRND (pc), -4), 4);
729   TRACE_RESULT (current_cpu, "gr-14", 'x', CPU (h_gr[14]));
730   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp8)));
731   taken_p = 1;
732   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
733 } while (0);
734
735   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
736
737 #if WITH_PROFILE_MODEL_P
738   if (PROFILE_MODEL_P (current_cpu))
739     {
740       m32rx_model_mark_set_h_gr (current_cpu, abuf);
741       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
742     }
743 #endif
744
745   return new_pc;
746 #undef OPRND
747 }
748
749 /* bl24: bl.l $disp24.  */
750
751 CIA
752 SEM_FN_NAME (m32rx,bl24) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
753 {
754   insn_t insn = SEM_INSN (sem_arg);
755 #define OPRND(f) par_exec->operands.fmt_bl24.f
756   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
757   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
758   int taken_p = 0;
759   EXTRACT_FMT_BL24_VARS /* f-op1 f-r1 f-disp24 */
760   EXTRACT_FMT_BL24_CODE
761
762 do {
763   CPU (h_gr[14]) = ADDSI (OPRND (pc), 4);
764   TRACE_RESULT (current_cpu, "gr-14", 'x', CPU (h_gr[14]));
765   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp24)));
766   taken_p = 1;
767   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
768 } while (0);
769
770   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
771
772 #if WITH_PROFILE_MODEL_P
773   if (PROFILE_MODEL_P (current_cpu))
774     {
775       m32rx_model_mark_set_h_gr (current_cpu, abuf);
776       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
777     }
778 #endif
779
780   return new_pc;
781 #undef OPRND
782 }
783
784 /* bcl8: bcl.s $disp8.  */
785
786 CIA
787 SEM_FN_NAME (m32rx,bcl8) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
788 {
789   insn_t insn = SEM_INSN (sem_arg);
790 #define OPRND(f) par_exec->operands.fmt_bcl8.f
791   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
792   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
793   int taken_p = 0;
794   EXTRACT_FMT_BCL8_VARS /* f-op1 f-r1 f-disp8 */
795   EXTRACT_FMT_BCL8_CODE
796
797 if (OPRND (condbit)) {
798 do {
799   CPU (h_gr[14]) = ADDSI (ANDSI (OPRND (pc), -4), 4);
800   TRACE_RESULT (current_cpu, "gr-14", 'x', CPU (h_gr[14]));
801   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp8)));
802   taken_p = 1;
803   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
804 } while (0);
805 }
806
807   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
808
809 #if WITH_PROFILE_MODEL_P
810   if (PROFILE_MODEL_P (current_cpu))
811     {
812       m32rx_model_mark_set_h_gr (current_cpu, abuf);
813       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
814     }
815 #endif
816
817   return new_pc;
818 #undef OPRND
819 }
820
821 /* bcl24: bcl.l $disp24.  */
822
823 CIA
824 SEM_FN_NAME (m32rx,bcl24) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
825 {
826   insn_t insn = SEM_INSN (sem_arg);
827 #define OPRND(f) par_exec->operands.fmt_bcl24.f
828   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
829   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
830   int taken_p = 0;
831   EXTRACT_FMT_BCL24_VARS /* f-op1 f-r1 f-disp24 */
832   EXTRACT_FMT_BCL24_CODE
833
834 if (OPRND (condbit)) {
835 do {
836   CPU (h_gr[14]) = ADDSI (OPRND (pc), 4);
837   TRACE_RESULT (current_cpu, "gr-14", 'x', CPU (h_gr[14]));
838   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp24)));
839   taken_p = 1;
840   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
841 } while (0);
842 }
843
844   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
845
846 #if WITH_PROFILE_MODEL_P
847   if (PROFILE_MODEL_P (current_cpu))
848     {
849       m32rx_model_mark_set_h_gr (current_cpu, abuf);
850       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
851     }
852 #endif
853
854   return new_pc;
855 #undef OPRND
856 }
857
858 /* bnc8: bnc.s $disp8.  */
859
860 CIA
861 SEM_FN_NAME (m32rx,bnc8) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
862 {
863   insn_t insn = SEM_INSN (sem_arg);
864 #define OPRND(f) par_exec->operands.fmt_bc8.f
865   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
866   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
867   int taken_p = 0;
868   EXTRACT_FMT_BC8_VARS /* f-op1 f-r1 f-disp8 */
869   EXTRACT_FMT_BC8_CODE
870
871 if (NOTBI (OPRND (condbit))) {
872   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp8)));
873   taken_p = 1;
874   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
875 }
876
877   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
878
879 #if WITH_PROFILE_MODEL_P
880   if (PROFILE_MODEL_P (current_cpu))
881     {
882       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
883     }
884 #endif
885
886   return new_pc;
887 #undef OPRND
888 }
889
890 /* bnc24: bnc.l $disp24.  */
891
892 CIA
893 SEM_FN_NAME (m32rx,bnc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
894 {
895   insn_t insn = SEM_INSN (sem_arg);
896 #define OPRND(f) par_exec->operands.fmt_bc24.f
897   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
898   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
899   int taken_p = 0;
900   EXTRACT_FMT_BC24_VARS /* f-op1 f-r1 f-disp24 */
901   EXTRACT_FMT_BC24_CODE
902
903 if (NOTBI (OPRND (condbit))) {
904   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp24)));
905   taken_p = 1;
906   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
907 }
908
909   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
910
911 #if WITH_PROFILE_MODEL_P
912   if (PROFILE_MODEL_P (current_cpu))
913     {
914       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
915     }
916 #endif
917
918   return new_pc;
919 #undef OPRND
920 }
921
922 /* bne: bne $src1,$src2,$disp16.  */
923
924 CIA
925 SEM_FN_NAME (m32rx,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
926 {
927   insn_t insn = SEM_INSN (sem_arg);
928 #define OPRND(f) par_exec->operands.fmt_beq.f
929   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
930   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
931   int taken_p = 0;
932   EXTRACT_FMT_BEQ_VARS /* f-op1 f-r1 f-op2 f-r2 f-disp16 */
933   EXTRACT_FMT_BEQ_CODE
934
935 if (NESI (OPRND (src1), OPRND (src2))) {
936   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp16)));
937   taken_p = 1;
938   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
939 }
940
941   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
942
943 #if WITH_PROFILE_MODEL_P
944   if (PROFILE_MODEL_P (current_cpu))
945     {
946       m32rx_model_mark_get_h_gr (current_cpu, abuf);
947       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
948     }
949 #endif
950
951   return new_pc;
952 #undef OPRND
953 }
954
955 /* bra8: bra.s $disp8.  */
956
957 CIA
958 SEM_FN_NAME (m32rx,bra8) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
959 {
960   insn_t insn = SEM_INSN (sem_arg);
961 #define OPRND(f) par_exec->operands.fmt_bra8.f
962   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
963   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
964   int taken_p = 0;
965   EXTRACT_FMT_BRA8_VARS /* f-op1 f-r1 f-disp8 */
966   EXTRACT_FMT_BRA8_CODE
967
968   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp8)));
969   taken_p = 1;
970   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
971
972   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
973
974 #if WITH_PROFILE_MODEL_P
975   if (PROFILE_MODEL_P (current_cpu))
976     {
977       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
978     }
979 #endif
980
981   return new_pc;
982 #undef OPRND
983 }
984
985 /* bra24: bra.l $disp24.  */
986
987 CIA
988 SEM_FN_NAME (m32rx,bra24) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
989 {
990   insn_t insn = SEM_INSN (sem_arg);
991 #define OPRND(f) par_exec->operands.fmt_bra24.f
992   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
993   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
994   int taken_p = 0;
995   EXTRACT_FMT_BRA24_VARS /* f-op1 f-r1 f-disp24 */
996   EXTRACT_FMT_BRA24_CODE
997
998   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp24)));
999   taken_p = 1;
1000   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
1001
1002   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1003
1004 #if WITH_PROFILE_MODEL_P
1005   if (PROFILE_MODEL_P (current_cpu))
1006     {
1007       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
1008     }
1009 #endif
1010
1011   return new_pc;
1012 #undef OPRND
1013 }
1014
1015 /* bncl8: bncl.s $disp8.  */
1016
1017 CIA
1018 SEM_FN_NAME (m32rx,bncl8) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1019 {
1020   insn_t insn = SEM_INSN (sem_arg);
1021 #define OPRND(f) par_exec->operands.fmt_bcl8.f
1022   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1023   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1024   int taken_p = 0;
1025   EXTRACT_FMT_BCL8_VARS /* f-op1 f-r1 f-disp8 */
1026   EXTRACT_FMT_BCL8_CODE
1027
1028 if (NOTBI (OPRND (condbit))) {
1029 do {
1030   CPU (h_gr[14]) = ADDSI (ANDSI (OPRND (pc), -4), 4);
1031   TRACE_RESULT (current_cpu, "gr-14", 'x', CPU (h_gr[14]));
1032   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp8)));
1033   taken_p = 1;
1034   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
1035 } while (0);
1036 }
1037
1038   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1039
1040 #if WITH_PROFILE_MODEL_P
1041   if (PROFILE_MODEL_P (current_cpu))
1042     {
1043       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1044       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
1045     }
1046 #endif
1047
1048   return new_pc;
1049 #undef OPRND
1050 }
1051
1052 /* bncl24: bncl.l $disp24.  */
1053
1054 CIA
1055 SEM_FN_NAME (m32rx,bncl24) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1056 {
1057   insn_t insn = SEM_INSN (sem_arg);
1058 #define OPRND(f) par_exec->operands.fmt_bcl24.f
1059   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1060   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1061   int taken_p = 0;
1062   EXTRACT_FMT_BCL24_VARS /* f-op1 f-r1 f-disp24 */
1063   EXTRACT_FMT_BCL24_CODE
1064
1065 if (NOTBI (OPRND (condbit))) {
1066 do {
1067   CPU (h_gr[14]) = ADDSI (OPRND (pc), 4);
1068   TRACE_RESULT (current_cpu, "gr-14", 'x', CPU (h_gr[14]));
1069   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_CACHE (sem_arg, OPRND (disp24)));
1070   taken_p = 1;
1071   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
1072 } while (0);
1073 }
1074
1075   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1076
1077 #if WITH_PROFILE_MODEL_P
1078   if (PROFILE_MODEL_P (current_cpu))
1079     {
1080       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1081       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
1082     }
1083 #endif
1084
1085   return new_pc;
1086 #undef OPRND
1087 }
1088
1089 /* cmp: cmp $src1,$src2.  */
1090
1091 CIA
1092 SEM_FN_NAME (m32rx,cmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1093 {
1094   insn_t insn = SEM_INSN (sem_arg);
1095 #define OPRND(f) par_exec->operands.fmt_cmp.f
1096   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1097   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1098   EXTRACT_FMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1099   EXTRACT_FMT_CMP_CODE
1100
1101   CPU (h_cond) = LTSI (OPRND (src1), OPRND (src2));
1102   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
1103
1104   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1105
1106 #if WITH_PROFILE_MODEL_P
1107   if (PROFILE_MODEL_P (current_cpu))
1108     {
1109       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1110       m32rx_model_profile_insn (current_cpu, abuf);
1111     }
1112 #endif
1113
1114   return new_pc;
1115 #undef OPRND
1116 }
1117
1118 /* cmpi: cmpi $src2,$simm16.  */
1119
1120 CIA
1121 SEM_FN_NAME (m32rx,cmpi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1122 {
1123   insn_t insn = SEM_INSN (sem_arg);
1124 #define OPRND(f) par_exec->operands.fmt_cmpi.f
1125   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1126   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1127   EXTRACT_FMT_CMPI_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1128   EXTRACT_FMT_CMPI_CODE
1129
1130   CPU (h_cond) = LTSI (OPRND (src2), OPRND (simm16));
1131   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
1132
1133   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1134
1135 #if WITH_PROFILE_MODEL_P
1136   if (PROFILE_MODEL_P (current_cpu))
1137     {
1138       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1139       m32rx_model_profile_insn (current_cpu, abuf);
1140     }
1141 #endif
1142
1143   return new_pc;
1144 #undef OPRND
1145 }
1146
1147 /* cmpu: cmpu $src1,$src2.  */
1148
1149 CIA
1150 SEM_FN_NAME (m32rx,cmpu) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1151 {
1152   insn_t insn = SEM_INSN (sem_arg);
1153 #define OPRND(f) par_exec->operands.fmt_cmp.f
1154   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1155   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1156   EXTRACT_FMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1157   EXTRACT_FMT_CMP_CODE
1158
1159   CPU (h_cond) = LTUSI (OPRND (src1), OPRND (src2));
1160   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
1161
1162   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1163
1164 #if WITH_PROFILE_MODEL_P
1165   if (PROFILE_MODEL_P (current_cpu))
1166     {
1167       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1168       m32rx_model_profile_insn (current_cpu, abuf);
1169     }
1170 #endif
1171
1172   return new_pc;
1173 #undef OPRND
1174 }
1175
1176 /* cmpui: cmpui $src2,$simm16.  */
1177
1178 CIA
1179 SEM_FN_NAME (m32rx,cmpui) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1180 {
1181   insn_t insn = SEM_INSN (sem_arg);
1182 #define OPRND(f) par_exec->operands.fmt_cmpi.f
1183   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1184   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1185   EXTRACT_FMT_CMPI_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1186   EXTRACT_FMT_CMPI_CODE
1187
1188   CPU (h_cond) = LTUSI (OPRND (src2), OPRND (simm16));
1189   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
1190
1191   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1192
1193 #if WITH_PROFILE_MODEL_P
1194   if (PROFILE_MODEL_P (current_cpu))
1195     {
1196       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1197       m32rx_model_profile_insn (current_cpu, abuf);
1198     }
1199 #endif
1200
1201   return new_pc;
1202 #undef OPRND
1203 }
1204
1205 /* cmpeq: cmpeq $src1,$src2.  */
1206
1207 CIA
1208 SEM_FN_NAME (m32rx,cmpeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1209 {
1210   insn_t insn = SEM_INSN (sem_arg);
1211 #define OPRND(f) par_exec->operands.fmt_cmp.f
1212   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1213   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1214   EXTRACT_FMT_CMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1215   EXTRACT_FMT_CMP_CODE
1216
1217   CPU (h_cond) = EQSI (OPRND (src1), OPRND (src2));
1218   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
1219
1220   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1221
1222 #if WITH_PROFILE_MODEL_P
1223   if (PROFILE_MODEL_P (current_cpu))
1224     {
1225       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1226       m32rx_model_profile_insn (current_cpu, abuf);
1227     }
1228 #endif
1229
1230   return new_pc;
1231 #undef OPRND
1232 }
1233
1234 /* cmpz: cmpz $src2.  */
1235
1236 CIA
1237 SEM_FN_NAME (m32rx,cmpz) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1238 {
1239   insn_t insn = SEM_INSN (sem_arg);
1240 #define OPRND(f) par_exec->operands.fmt_cmpz.f
1241   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1242   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1243   EXTRACT_FMT_CMPZ_VARS /* f-op1 f-r1 f-op2 f-r2 */
1244   EXTRACT_FMT_CMPZ_CODE
1245
1246   CPU (h_cond) = EQSI (OPRND (src2), 0);
1247   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
1248
1249   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1250
1251 #if WITH_PROFILE_MODEL_P
1252   if (PROFILE_MODEL_P (current_cpu))
1253     {
1254       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1255       m32rx_model_profile_insn (current_cpu, abuf);
1256     }
1257 #endif
1258
1259   return new_pc;
1260 #undef OPRND
1261 }
1262
1263 /* div: div $dr,$sr.  */
1264
1265 CIA
1266 SEM_FN_NAME (m32rx,div) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1267 {
1268   insn_t insn = SEM_INSN (sem_arg);
1269 #define OPRND(f) par_exec->operands.fmt_div.f
1270   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1271   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1272   EXTRACT_FMT_DIV_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1273   EXTRACT_FMT_DIV_CODE
1274
1275 if (NESI (OPRND (sr), 0)) {
1276   CPU (h_gr[f_r1]) = DIVSI (OPRND (dr), OPRND (sr));
1277   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1278 }
1279
1280   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1281
1282 #if WITH_PROFILE_MODEL_P
1283   if (PROFILE_MODEL_P (current_cpu))
1284     {
1285       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1286       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1287       m32rx_model_profile_insn (current_cpu, abuf);
1288     }
1289 #endif
1290
1291   return new_pc;
1292 #undef OPRND
1293 }
1294
1295 /* divu: divu $dr,$sr.  */
1296
1297 CIA
1298 SEM_FN_NAME (m32rx,divu) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1299 {
1300   insn_t insn = SEM_INSN (sem_arg);
1301 #define OPRND(f) par_exec->operands.fmt_div.f
1302   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1303   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1304   EXTRACT_FMT_DIV_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1305   EXTRACT_FMT_DIV_CODE
1306
1307 if (NESI (OPRND (sr), 0)) {
1308   CPU (h_gr[f_r1]) = UDIVSI (OPRND (dr), OPRND (sr));
1309   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1310 }
1311
1312   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1313
1314 #if WITH_PROFILE_MODEL_P
1315   if (PROFILE_MODEL_P (current_cpu))
1316     {
1317       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1318       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1319       m32rx_model_profile_insn (current_cpu, abuf);
1320     }
1321 #endif
1322
1323   return new_pc;
1324 #undef OPRND
1325 }
1326
1327 /* rem: rem $dr,$sr.  */
1328
1329 CIA
1330 SEM_FN_NAME (m32rx,rem) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1331 {
1332   insn_t insn = SEM_INSN (sem_arg);
1333 #define OPRND(f) par_exec->operands.fmt_div.f
1334   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1335   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1336   EXTRACT_FMT_DIV_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1337   EXTRACT_FMT_DIV_CODE
1338
1339 if (NESI (OPRND (sr), 0)) {
1340   CPU (h_gr[f_r1]) = MODSI (OPRND (dr), OPRND (sr));
1341   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1342 }
1343
1344   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1345
1346 #if WITH_PROFILE_MODEL_P
1347   if (PROFILE_MODEL_P (current_cpu))
1348     {
1349       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1350       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1351       m32rx_model_profile_insn (current_cpu, abuf);
1352     }
1353 #endif
1354
1355   return new_pc;
1356 #undef OPRND
1357 }
1358
1359 /* remu: remu $dr,$sr.  */
1360
1361 CIA
1362 SEM_FN_NAME (m32rx,remu) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1363 {
1364   insn_t insn = SEM_INSN (sem_arg);
1365 #define OPRND(f) par_exec->operands.fmt_div.f
1366   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1367   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1368   EXTRACT_FMT_DIV_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1369   EXTRACT_FMT_DIV_CODE
1370
1371 if (NESI (OPRND (sr), 0)) {
1372   CPU (h_gr[f_r1]) = UMODSI (OPRND (dr), OPRND (sr));
1373   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1374 }
1375
1376   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1377
1378 #if WITH_PROFILE_MODEL_P
1379   if (PROFILE_MODEL_P (current_cpu))
1380     {
1381       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1382       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1383       m32rx_model_profile_insn (current_cpu, abuf);
1384     }
1385 #endif
1386
1387   return new_pc;
1388 #undef OPRND
1389 }
1390
1391 /* divh: divh $dr,$sr.  */
1392
1393 CIA
1394 SEM_FN_NAME (m32rx,divh) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1395 {
1396   insn_t insn = SEM_INSN (sem_arg);
1397 #define OPRND(f) par_exec->operands.fmt_div.f
1398   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1399   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1400   EXTRACT_FMT_DIV_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1401   EXTRACT_FMT_DIV_CODE
1402
1403 if (NESI (OPRND (sr), 0)) {
1404   CPU (h_gr[f_r1]) = DIVSI (EXTHISI (TRUNCSIHI (OPRND (dr))), OPRND (sr));
1405   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1406 }
1407
1408   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1409
1410 #if WITH_PROFILE_MODEL_P
1411   if (PROFILE_MODEL_P (current_cpu))
1412     {
1413       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1414       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1415       m32rx_model_profile_insn (current_cpu, abuf);
1416     }
1417 #endif
1418
1419   return new_pc;
1420 #undef OPRND
1421 }
1422
1423 /* jc: jc $sr.  */
1424
1425 CIA
1426 SEM_FN_NAME (m32rx,jc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1427 {
1428   insn_t insn = SEM_INSN (sem_arg);
1429 #define OPRND(f) par_exec->operands.fmt_jc.f
1430   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1431   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1432   int taken_p = 0;
1433   EXTRACT_FMT_JC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1434   EXTRACT_FMT_JC_CODE
1435
1436 if (OPRND (condbit)) {
1437   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, ANDSI (OPRND (sr), -4)));
1438   taken_p = 1;
1439   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
1440 }
1441
1442   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1443
1444 #if WITH_PROFILE_MODEL_P
1445   if (PROFILE_MODEL_P (current_cpu))
1446     {
1447       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1448       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
1449     }
1450 #endif
1451
1452   return new_pc;
1453 #undef OPRND
1454 }
1455
1456 /* jnc: jnc $sr.  */
1457
1458 CIA
1459 SEM_FN_NAME (m32rx,jnc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1460 {
1461   insn_t insn = SEM_INSN (sem_arg);
1462 #define OPRND(f) par_exec->operands.fmt_jc.f
1463   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1464   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1465   int taken_p = 0;
1466   EXTRACT_FMT_JC_VARS /* f-op1 f-r1 f-op2 f-r2 */
1467   EXTRACT_FMT_JC_CODE
1468
1469 if (NOTBI (OPRND (condbit))) {
1470   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, ANDSI (OPRND (sr), -4)));
1471   taken_p = 1;
1472   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
1473 }
1474
1475   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1476
1477 #if WITH_PROFILE_MODEL_P
1478   if (PROFILE_MODEL_P (current_cpu))
1479     {
1480       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1481       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
1482     }
1483 #endif
1484
1485   return new_pc;
1486 #undef OPRND
1487 }
1488
1489 /* jl: jl $sr.  */
1490
1491 CIA
1492 SEM_FN_NAME (m32rx,jl) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1493 {
1494   insn_t insn = SEM_INSN (sem_arg);
1495 #define OPRND(f) par_exec->operands.fmt_jl.f
1496   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1497   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1498   int taken_p = 0;
1499   EXTRACT_FMT_JL_VARS /* f-op1 f-r1 f-op2 f-r2 */
1500   EXTRACT_FMT_JL_CODE
1501
1502 do {
1503   USI temp1;SI temp0;
1504   temp0 = ADDSI (ANDSI (OPRND (pc), -4), 4);
1505   temp1 = ANDSI (OPRND (sr), -4);
1506   CPU (h_gr[14]) = temp0;
1507   TRACE_RESULT (current_cpu, "gr-14", 'x', CPU (h_gr[14]));
1508   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, temp1));
1509   taken_p = 1;
1510   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
1511 } while (0);
1512
1513   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1514
1515 #if WITH_PROFILE_MODEL_P
1516   if (PROFILE_MODEL_P (current_cpu))
1517     {
1518       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1519       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1520       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
1521     }
1522 #endif
1523
1524   return new_pc;
1525 #undef OPRND
1526 }
1527
1528 /* jmp: jmp $sr.  */
1529
1530 CIA
1531 SEM_FN_NAME (m32rx,jmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1532 {
1533   insn_t insn = SEM_INSN (sem_arg);
1534 #define OPRND(f) par_exec->operands.fmt_jmp.f
1535   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1536   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1537   int taken_p = 0;
1538   EXTRACT_FMT_JMP_VARS /* f-op1 f-r1 f-op2 f-r2 */
1539   EXTRACT_FMT_JMP_CODE
1540
1541   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, ANDSI (OPRND (sr), -4)));
1542   taken_p = 1;
1543   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
1544
1545   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1546
1547 #if WITH_PROFILE_MODEL_P
1548   if (PROFILE_MODEL_P (current_cpu))
1549     {
1550       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1551       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
1552     }
1553 #endif
1554
1555   return new_pc;
1556 #undef OPRND
1557 }
1558
1559 /* ld: ld $dr,@$sr.  */
1560
1561 CIA
1562 SEM_FN_NAME (m32rx,ld) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1563 {
1564   insn_t insn = SEM_INSN (sem_arg);
1565 #define OPRND(f) par_exec->operands.fmt_ld.f
1566   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1567   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1568   EXTRACT_FMT_LD_VARS /* f-op1 f-r1 f-op2 f-r2 */
1569   EXTRACT_FMT_LD_CODE
1570
1571   CPU (h_gr[f_r1]) = OPRND (h_memory_sr);
1572   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1573
1574   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1575
1576 #if WITH_PROFILE_MODEL_P
1577   if (PROFILE_MODEL_P (current_cpu))
1578     {
1579       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1580       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1581       m32rx_model_profile_insn (current_cpu, abuf);
1582     }
1583 #endif
1584
1585   return new_pc;
1586 #undef OPRND
1587 }
1588
1589 /* ld-d: ld $dr,@($slo16,$sr).  */
1590
1591 CIA
1592 SEM_FN_NAME (m32rx,ld_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1593 {
1594   insn_t insn = SEM_INSN (sem_arg);
1595 #define OPRND(f) par_exec->operands.fmt_ld_d.f
1596   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1597   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1598   EXTRACT_FMT_LD_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1599   EXTRACT_FMT_LD_D_CODE
1600
1601   CPU (h_gr[f_r1]) = OPRND (h_memory_add__VM_sr_slo16);
1602   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1603
1604   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1605
1606 #if WITH_PROFILE_MODEL_P
1607   if (PROFILE_MODEL_P (current_cpu))
1608     {
1609       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1610       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1611       m32rx_model_profile_insn (current_cpu, abuf);
1612     }
1613 #endif
1614
1615   return new_pc;
1616 #undef OPRND
1617 }
1618
1619 /* ldb: ldb $dr,@$sr.  */
1620
1621 CIA
1622 SEM_FN_NAME (m32rx,ldb) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1623 {
1624   insn_t insn = SEM_INSN (sem_arg);
1625 #define OPRND(f) par_exec->operands.fmt_ldb.f
1626   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1627   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1628   EXTRACT_FMT_LDB_VARS /* f-op1 f-r1 f-op2 f-r2 */
1629   EXTRACT_FMT_LDB_CODE
1630
1631   CPU (h_gr[f_r1]) = EXTQISI (OPRND (h_memory_sr));
1632   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1633
1634   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1635
1636 #if WITH_PROFILE_MODEL_P
1637   if (PROFILE_MODEL_P (current_cpu))
1638     {
1639       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1640       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1641       m32rx_model_profile_insn (current_cpu, abuf);
1642     }
1643 #endif
1644
1645   return new_pc;
1646 #undef OPRND
1647 }
1648
1649 /* ldb-d: ldb $dr,@($slo16,$sr).  */
1650
1651 CIA
1652 SEM_FN_NAME (m32rx,ldb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1653 {
1654   insn_t insn = SEM_INSN (sem_arg);
1655 #define OPRND(f) par_exec->operands.fmt_ldb_d.f
1656   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1657   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1658   EXTRACT_FMT_LDB_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1659   EXTRACT_FMT_LDB_D_CODE
1660
1661   CPU (h_gr[f_r1]) = EXTQISI (OPRND (h_memory_add__VM_sr_slo16));
1662   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1663
1664   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1665
1666 #if WITH_PROFILE_MODEL_P
1667   if (PROFILE_MODEL_P (current_cpu))
1668     {
1669       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1670       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1671       m32rx_model_profile_insn (current_cpu, abuf);
1672     }
1673 #endif
1674
1675   return new_pc;
1676 #undef OPRND
1677 }
1678
1679 /* ldh: ldh $dr,@$sr.  */
1680
1681 CIA
1682 SEM_FN_NAME (m32rx,ldh) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1683 {
1684   insn_t insn = SEM_INSN (sem_arg);
1685 #define OPRND(f) par_exec->operands.fmt_ldh.f
1686   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1687   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1688   EXTRACT_FMT_LDH_VARS /* f-op1 f-r1 f-op2 f-r2 */
1689   EXTRACT_FMT_LDH_CODE
1690
1691   CPU (h_gr[f_r1]) = EXTHISI (OPRND (h_memory_sr));
1692   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1693
1694   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1695
1696 #if WITH_PROFILE_MODEL_P
1697   if (PROFILE_MODEL_P (current_cpu))
1698     {
1699       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1700       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1701       m32rx_model_profile_insn (current_cpu, abuf);
1702     }
1703 #endif
1704
1705   return new_pc;
1706 #undef OPRND
1707 }
1708
1709 /* ldh-d: ldh $dr,@($slo16,$sr).  */
1710
1711 CIA
1712 SEM_FN_NAME (m32rx,ldh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1713 {
1714   insn_t insn = SEM_INSN (sem_arg);
1715 #define OPRND(f) par_exec->operands.fmt_ldh_d.f
1716   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1717   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1718   EXTRACT_FMT_LDH_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1719   EXTRACT_FMT_LDH_D_CODE
1720
1721   CPU (h_gr[f_r1]) = EXTHISI (OPRND (h_memory_add__VM_sr_slo16));
1722   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1723
1724   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1725
1726 #if WITH_PROFILE_MODEL_P
1727   if (PROFILE_MODEL_P (current_cpu))
1728     {
1729       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1730       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1731       m32rx_model_profile_insn (current_cpu, abuf);
1732     }
1733 #endif
1734
1735   return new_pc;
1736 #undef OPRND
1737 }
1738
1739 /* ldub: ldub $dr,@$sr.  */
1740
1741 CIA
1742 SEM_FN_NAME (m32rx,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1743 {
1744   insn_t insn = SEM_INSN (sem_arg);
1745 #define OPRND(f) par_exec->operands.fmt_ldb.f
1746   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1747   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1748   EXTRACT_FMT_LDB_VARS /* f-op1 f-r1 f-op2 f-r2 */
1749   EXTRACT_FMT_LDB_CODE
1750
1751   CPU (h_gr[f_r1]) = ZEXTQISI (OPRND (h_memory_sr));
1752   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1753
1754   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1755
1756 #if WITH_PROFILE_MODEL_P
1757   if (PROFILE_MODEL_P (current_cpu))
1758     {
1759       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1760       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1761       m32rx_model_profile_insn (current_cpu, abuf);
1762     }
1763 #endif
1764
1765   return new_pc;
1766 #undef OPRND
1767 }
1768
1769 /* ldub-d: ldub $dr,@($slo16,$sr).  */
1770
1771 CIA
1772 SEM_FN_NAME (m32rx,ldub_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1773 {
1774   insn_t insn = SEM_INSN (sem_arg);
1775 #define OPRND(f) par_exec->operands.fmt_ldb_d.f
1776   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1777   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1778   EXTRACT_FMT_LDB_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1779   EXTRACT_FMT_LDB_D_CODE
1780
1781   CPU (h_gr[f_r1]) = ZEXTQISI (OPRND (h_memory_add__VM_sr_slo16));
1782   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1783
1784   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1785
1786 #if WITH_PROFILE_MODEL_P
1787   if (PROFILE_MODEL_P (current_cpu))
1788     {
1789       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1790       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1791       m32rx_model_profile_insn (current_cpu, abuf);
1792     }
1793 #endif
1794
1795   return new_pc;
1796 #undef OPRND
1797 }
1798
1799 /* lduh: lduh $dr,@$sr.  */
1800
1801 CIA
1802 SEM_FN_NAME (m32rx,lduh) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1803 {
1804   insn_t insn = SEM_INSN (sem_arg);
1805 #define OPRND(f) par_exec->operands.fmt_ldh.f
1806   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1807   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1808   EXTRACT_FMT_LDH_VARS /* f-op1 f-r1 f-op2 f-r2 */
1809   EXTRACT_FMT_LDH_CODE
1810
1811   CPU (h_gr[f_r1]) = ZEXTHISI (OPRND (h_memory_sr));
1812   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1813
1814   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1815
1816 #if WITH_PROFILE_MODEL_P
1817   if (PROFILE_MODEL_P (current_cpu))
1818     {
1819       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1820       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1821       m32rx_model_profile_insn (current_cpu, abuf);
1822     }
1823 #endif
1824
1825   return new_pc;
1826 #undef OPRND
1827 }
1828
1829 /* lduh-d: lduh $dr,@($slo16,$sr).  */
1830
1831 CIA
1832 SEM_FN_NAME (m32rx,lduh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1833 {
1834   insn_t insn = SEM_INSN (sem_arg);
1835 #define OPRND(f) par_exec->operands.fmt_ldh_d.f
1836   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1837   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1838   EXTRACT_FMT_LDH_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1839   EXTRACT_FMT_LDH_D_CODE
1840
1841   CPU (h_gr[f_r1]) = ZEXTHISI (OPRND (h_memory_add__VM_sr_slo16));
1842   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1843
1844   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1845
1846 #if WITH_PROFILE_MODEL_P
1847   if (PROFILE_MODEL_P (current_cpu))
1848     {
1849       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1850       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1851       m32rx_model_profile_insn (current_cpu, abuf);
1852     }
1853 #endif
1854
1855   return new_pc;
1856 #undef OPRND
1857 }
1858
1859 /* ld-plus: ld $dr,@$sr+.  */
1860
1861 CIA
1862 SEM_FN_NAME (m32rx,ld_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1863 {
1864   insn_t insn = SEM_INSN (sem_arg);
1865 #define OPRND(f) par_exec->operands.fmt_ld_plus.f
1866   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1867   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1868   EXTRACT_FMT_LD_PLUS_VARS /* f-op1 f-r1 f-op2 f-r2 */
1869   EXTRACT_FMT_LD_PLUS_CODE
1870
1871 do {
1872   SI temp1;SI temp0;
1873   temp0 = OPRND (h_memory_sr);
1874   temp1 = ADDSI (OPRND (sr), 4);
1875   CPU (h_gr[f_r1]) = temp0;
1876   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1877   CPU (h_gr[f_r2]) = temp1;
1878   TRACE_RESULT (current_cpu, "sr", 'x', CPU (h_gr[f_r2]));
1879 } while (0);
1880
1881   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1882
1883 #if WITH_PROFILE_MODEL_P
1884   if (PROFILE_MODEL_P (current_cpu))
1885     {
1886       m32rx_model_mark_get_h_gr (current_cpu, abuf);
1887       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1888       m32rx_model_profile_insn (current_cpu, abuf);
1889     }
1890 #endif
1891
1892   return new_pc;
1893 #undef OPRND
1894 }
1895
1896 /* ld24: ld24 $dr,$uimm24.  */
1897
1898 CIA
1899 SEM_FN_NAME (m32rx,ld24) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1900 {
1901   insn_t insn = SEM_INSN (sem_arg);
1902 #define OPRND(f) par_exec->operands.fmt_ld24.f
1903   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1904   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1905   EXTRACT_FMT_LD24_VARS /* f-op1 f-r1 f-uimm24 */
1906   EXTRACT_FMT_LD24_CODE
1907
1908   CPU (h_gr[f_r1]) = OPRND (uimm24);
1909   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1910
1911   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1912
1913 #if WITH_PROFILE_MODEL_P
1914   if (PROFILE_MODEL_P (current_cpu))
1915     {
1916       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1917       m32rx_model_profile_insn (current_cpu, abuf);
1918     }
1919 #endif
1920
1921   return new_pc;
1922 #undef OPRND
1923 }
1924
1925 /* ldi8: ldi8 $dr,$simm8.  */
1926
1927 CIA
1928 SEM_FN_NAME (m32rx,ldi8) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1929 {
1930   insn_t insn = SEM_INSN (sem_arg);
1931 #define OPRND(f) par_exec->operands.fmt_ldi8.f
1932   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1933   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1934   EXTRACT_FMT_LDI8_VARS /* f-op1 f-r1 f-simm8 */
1935   EXTRACT_FMT_LDI8_CODE
1936
1937   CPU (h_gr[f_r1]) = OPRND (simm8);
1938   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1939
1940   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1941
1942 #if WITH_PROFILE_MODEL_P
1943   if (PROFILE_MODEL_P (current_cpu))
1944     {
1945       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1946       m32rx_model_profile_insn (current_cpu, abuf);
1947     }
1948 #endif
1949
1950   return new_pc;
1951 #undef OPRND
1952 }
1953
1954 /* ldi16: ldi16 $dr,$hash$slo16.  */
1955
1956 CIA
1957 SEM_FN_NAME (m32rx,ldi16) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1958 {
1959   insn_t insn = SEM_INSN (sem_arg);
1960 #define OPRND(f) par_exec->operands.fmt_ldi16.f
1961   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1962   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
1963   EXTRACT_FMT_LDI16_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
1964   EXTRACT_FMT_LDI16_CODE
1965
1966   CPU (h_gr[f_r1]) = OPRND (slo16);
1967   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
1968
1969   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
1970
1971 #if WITH_PROFILE_MODEL_P
1972   if (PROFILE_MODEL_P (current_cpu))
1973     {
1974       m32rx_model_mark_set_h_gr (current_cpu, abuf);
1975       m32rx_model_profile_insn (current_cpu, abuf);
1976     }
1977 #endif
1978
1979   return new_pc;
1980 #undef OPRND
1981 }
1982
1983 /* lock: lock $dr,@$sr.  */
1984
1985 CIA
1986 SEM_FN_NAME (m32rx,lock) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
1987 {
1988   insn_t insn = SEM_INSN (sem_arg);
1989 #define OPRND(f) par_exec->operands.fmt_lock.f
1990   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1991   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
1992   EXTRACT_FMT_LOCK_VARS /* f-op1 f-r1 f-op2 f-r2 */
1993   EXTRACT_FMT_LOCK_CODE
1994
1995 do {
1996   CPU (h_lock) = 1;
1997   TRACE_RESULT (current_cpu, "lock-0", 'x', CPU (h_lock));
1998   CPU (h_gr[f_r1]) = OPRND (h_memory_sr);
1999   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2000 } while (0);
2001
2002   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2003
2004 #if WITH_PROFILE_MODEL_P
2005   if (PROFILE_MODEL_P (current_cpu))
2006     {
2007       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2008       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2009       m32rx_model_profile_insn (current_cpu, abuf);
2010     }
2011 #endif
2012
2013   return new_pc;
2014 #undef OPRND
2015 }
2016
2017 /* machi-a: machi $src1,$src2,$acc.  */
2018
2019 CIA
2020 SEM_FN_NAME (m32rx,machi_a) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2021 {
2022   insn_t insn = SEM_INSN (sem_arg);
2023 #define OPRND(f) par_exec->operands.fmt_machi_a.f
2024   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2025   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2026   EXTRACT_FMT_MACHI_A_VARS /* f-op1 f-r1 f-acc f-op23 f-r2 */
2027   EXTRACT_FMT_MACHI_A_CODE
2028
2029 m32rx_h_accums_set (current_cpu, f_acc, SRADI (SLLDI (ADDDI (OPRND (acc), MULDI (EXTSIDI (ANDSI (OPRND (src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2), 16))))), 8), 8));
2030   TRACE_RESULT (current_cpu, "acc", 'D', m32rx_h_accums_get (current_cpu, f_acc));
2031
2032   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2033
2034 #if WITH_PROFILE_MODEL_P
2035   if (PROFILE_MODEL_P (current_cpu))
2036     {
2037       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2038       m32rx_model_profile_insn (current_cpu, abuf);
2039     }
2040 #endif
2041
2042   return new_pc;
2043 #undef OPRND
2044 }
2045
2046 /* maclo-a: maclo $src1,$src2,$acc.  */
2047
2048 CIA
2049 SEM_FN_NAME (m32rx,maclo_a) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2050 {
2051   insn_t insn = SEM_INSN (sem_arg);
2052 #define OPRND(f) par_exec->operands.fmt_machi_a.f
2053   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2054   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2055   EXTRACT_FMT_MACHI_A_VARS /* f-op1 f-r1 f-acc f-op23 f-r2 */
2056   EXTRACT_FMT_MACHI_A_CODE
2057
2058 m32rx_h_accums_set (current_cpu, f_acc, SRADI (SLLDI (ADDDI (OPRND (acc), MULDI (EXTSIDI (SLLSI (OPRND (src1), 16)), EXTHIDI (TRUNCSIHI (OPRND (src2))))), 8), 8));
2059   TRACE_RESULT (current_cpu, "acc", 'D', m32rx_h_accums_get (current_cpu, f_acc));
2060
2061   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2062
2063 #if WITH_PROFILE_MODEL_P
2064   if (PROFILE_MODEL_P (current_cpu))
2065     {
2066       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2067       m32rx_model_profile_insn (current_cpu, abuf);
2068     }
2069 #endif
2070
2071   return new_pc;
2072 #undef OPRND
2073 }
2074
2075 /* macwhi: macwhi $src1,$src2.  */
2076
2077 CIA
2078 SEM_FN_NAME (m32rx,macwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2079 {
2080   insn_t insn = SEM_INSN (sem_arg);
2081 #define OPRND(f) par_exec->operands.fmt_macwhi.f
2082   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2083   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2084   EXTRACT_FMT_MACWHI_VARS /* f-op1 f-r1 f-op2 f-r2 */
2085   EXTRACT_FMT_MACWHI_CODE
2086
2087 m32rx_h_accum_set (current_cpu, SRADI (SLLDI (ADDDI (OPRND (accum), MULDI (EXTSIDI (OPRND (src1)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2), 16))))), 8), 8));
2088   TRACE_RESULT (current_cpu, "accum", 'D', m32rx_h_accum_get (current_cpu));
2089
2090   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2091
2092 #if WITH_PROFILE_MODEL_P
2093   if (PROFILE_MODEL_P (current_cpu))
2094     {
2095       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2096       m32rx_model_profile_insn (current_cpu, abuf);
2097     }
2098 #endif
2099
2100   return new_pc;
2101 #undef OPRND
2102 }
2103
2104 /* macwlo: macwlo $src1,$src2.  */
2105
2106 CIA
2107 SEM_FN_NAME (m32rx,macwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2108 {
2109   insn_t insn = SEM_INSN (sem_arg);
2110 #define OPRND(f) par_exec->operands.fmt_macwhi.f
2111   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2112   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2113   EXTRACT_FMT_MACWHI_VARS /* f-op1 f-r1 f-op2 f-r2 */
2114   EXTRACT_FMT_MACWHI_CODE
2115
2116 m32rx_h_accum_set (current_cpu, SRADI (SLLDI (ADDDI (OPRND (accum), MULDI (EXTSIDI (OPRND (src1)), EXTHIDI (TRUNCSIHI (OPRND (src2))))), 8), 8));
2117   TRACE_RESULT (current_cpu, "accum", 'D', m32rx_h_accum_get (current_cpu));
2118
2119   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2120
2121 #if WITH_PROFILE_MODEL_P
2122   if (PROFILE_MODEL_P (current_cpu))
2123     {
2124       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2125       m32rx_model_profile_insn (current_cpu, abuf);
2126     }
2127 #endif
2128
2129   return new_pc;
2130 #undef OPRND
2131 }
2132
2133 /* mul: mul $dr,$sr.  */
2134
2135 CIA
2136 SEM_FN_NAME (m32rx,mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2137 {
2138   insn_t insn = SEM_INSN (sem_arg);
2139 #define OPRND(f) par_exec->operands.fmt_add.f
2140   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2141   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2142   EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
2143   EXTRACT_FMT_ADD_CODE
2144
2145   CPU (h_gr[f_r1]) = MULSI (OPRND (dr), OPRND (sr));
2146   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2147
2148   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2149
2150 #if WITH_PROFILE_MODEL_P
2151   if (PROFILE_MODEL_P (current_cpu))
2152     {
2153       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2154       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2155       m32rx_model_profile_insn (current_cpu, abuf);
2156     }
2157 #endif
2158
2159   return new_pc;
2160 #undef OPRND
2161 }
2162
2163 /* mulhi-a: mulhi $src1,$src2,$acc.  */
2164
2165 CIA
2166 SEM_FN_NAME (m32rx,mulhi_a) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2167 {
2168   insn_t insn = SEM_INSN (sem_arg);
2169 #define OPRND(f) par_exec->operands.fmt_mulhi_a.f
2170   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2171   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2172   EXTRACT_FMT_MULHI_A_VARS /* f-op1 f-r1 f-acc f-op23 f-r2 */
2173   EXTRACT_FMT_MULHI_A_CODE
2174
2175 m32rx_h_accums_set (current_cpu, f_acc, SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (OPRND (src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2), 16)))), 16), 16));
2176   TRACE_RESULT (current_cpu, "acc", 'D', m32rx_h_accums_get (current_cpu, f_acc));
2177
2178   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2179
2180 #if WITH_PROFILE_MODEL_P
2181   if (PROFILE_MODEL_P (current_cpu))
2182     {
2183       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2184       m32rx_model_profile_insn (current_cpu, abuf);
2185     }
2186 #endif
2187
2188   return new_pc;
2189 #undef OPRND
2190 }
2191
2192 /* mullo-a: mullo $src1,$src2,$acc.  */
2193
2194 CIA
2195 SEM_FN_NAME (m32rx,mullo_a) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2196 {
2197   insn_t insn = SEM_INSN (sem_arg);
2198 #define OPRND(f) par_exec->operands.fmt_mulhi_a.f
2199   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2200   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2201   EXTRACT_FMT_MULHI_A_VARS /* f-op1 f-r1 f-acc f-op23 f-r2 */
2202   EXTRACT_FMT_MULHI_A_CODE
2203
2204 m32rx_h_accums_set (current_cpu, f_acc, SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (OPRND (src1), 16)), EXTHIDI (TRUNCSIHI (OPRND (src2)))), 16), 16));
2205   TRACE_RESULT (current_cpu, "acc", 'D', m32rx_h_accums_get (current_cpu, f_acc));
2206
2207   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2208
2209 #if WITH_PROFILE_MODEL_P
2210   if (PROFILE_MODEL_P (current_cpu))
2211     {
2212       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2213       m32rx_model_profile_insn (current_cpu, abuf);
2214     }
2215 #endif
2216
2217   return new_pc;
2218 #undef OPRND
2219 }
2220
2221 /* mulwhi: mulwhi $src1,$src2.  */
2222
2223 CIA
2224 SEM_FN_NAME (m32rx,mulwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2225 {
2226   insn_t insn = SEM_INSN (sem_arg);
2227 #define OPRND(f) par_exec->operands.fmt_mulwhi.f
2228   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2229   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2230   EXTRACT_FMT_MULWHI_VARS /* f-op1 f-r1 f-op2 f-r2 */
2231   EXTRACT_FMT_MULWHI_CODE
2232
2233 m32rx_h_accum_set (current_cpu, SRADI (SLLDI (MULDI (EXTSIDI (OPRND (src1)), EXTHIDI (TRUNCSIHI (SRASI (OPRND (src2), 16)))), 8), 8));
2234   TRACE_RESULT (current_cpu, "accum", 'D', m32rx_h_accum_get (current_cpu));
2235
2236   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2237
2238 #if WITH_PROFILE_MODEL_P
2239   if (PROFILE_MODEL_P (current_cpu))
2240     {
2241       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2242       m32rx_model_profile_insn (current_cpu, abuf);
2243     }
2244 #endif
2245
2246   return new_pc;
2247 #undef OPRND
2248 }
2249
2250 /* mulwlo: mulwlo $src1,$src2.  */
2251
2252 CIA
2253 SEM_FN_NAME (m32rx,mulwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2254 {
2255   insn_t insn = SEM_INSN (sem_arg);
2256 #define OPRND(f) par_exec->operands.fmt_mulwhi.f
2257   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2258   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2259   EXTRACT_FMT_MULWHI_VARS /* f-op1 f-r1 f-op2 f-r2 */
2260   EXTRACT_FMT_MULWHI_CODE
2261
2262 m32rx_h_accum_set (current_cpu, SRADI (SLLDI (MULDI (EXTSIDI (OPRND (src1)), EXTHIDI (TRUNCSIHI (OPRND (src2)))), 8), 8));
2263   TRACE_RESULT (current_cpu, "accum", 'D', m32rx_h_accum_get (current_cpu));
2264
2265   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2266
2267 #if WITH_PROFILE_MODEL_P
2268   if (PROFILE_MODEL_P (current_cpu))
2269     {
2270       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2271       m32rx_model_profile_insn (current_cpu, abuf);
2272     }
2273 #endif
2274
2275   return new_pc;
2276 #undef OPRND
2277 }
2278
2279 /* mv: mv $dr,$sr.  */
2280
2281 CIA
2282 SEM_FN_NAME (m32rx,mv) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2283 {
2284   insn_t insn = SEM_INSN (sem_arg);
2285 #define OPRND(f) par_exec->operands.fmt_mv.f
2286   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2287   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2288   EXTRACT_FMT_MV_VARS /* f-op1 f-r1 f-op2 f-r2 */
2289   EXTRACT_FMT_MV_CODE
2290
2291   CPU (h_gr[f_r1]) = OPRND (sr);
2292   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2293
2294   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2295
2296 #if WITH_PROFILE_MODEL_P
2297   if (PROFILE_MODEL_P (current_cpu))
2298     {
2299       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2300       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2301       m32rx_model_profile_insn (current_cpu, abuf);
2302     }
2303 #endif
2304
2305   return new_pc;
2306 #undef OPRND
2307 }
2308
2309 /* mvfachi-a: mvfachi $dr,$accs.  */
2310
2311 CIA
2312 SEM_FN_NAME (m32rx,mvfachi_a) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2313 {
2314   insn_t insn = SEM_INSN (sem_arg);
2315 #define OPRND(f) par_exec->operands.fmt_mvfachi_a.f
2316   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2317   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2318   EXTRACT_FMT_MVFACHI_A_VARS /* f-op1 f-r1 f-op2 f-accs f-op3 */
2319   EXTRACT_FMT_MVFACHI_A_CODE
2320
2321   CPU (h_gr[f_r1]) = TRUNCDISI (SRADI (OPRND (accs), 32));
2322   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2323
2324   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2325
2326 #if WITH_PROFILE_MODEL_P
2327   if (PROFILE_MODEL_P (current_cpu))
2328     {
2329       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2330       m32rx_model_profile_insn (current_cpu, abuf);
2331     }
2332 #endif
2333
2334   return new_pc;
2335 #undef OPRND
2336 }
2337
2338 /* mvfaclo-a: mvfaclo $dr,$accs.  */
2339
2340 CIA
2341 SEM_FN_NAME (m32rx,mvfaclo_a) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2342 {
2343   insn_t insn = SEM_INSN (sem_arg);
2344 #define OPRND(f) par_exec->operands.fmt_mvfachi_a.f
2345   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2346   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2347   EXTRACT_FMT_MVFACHI_A_VARS /* f-op1 f-r1 f-op2 f-accs f-op3 */
2348   EXTRACT_FMT_MVFACHI_A_CODE
2349
2350   CPU (h_gr[f_r1]) = TRUNCDISI (OPRND (accs));
2351   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2352
2353   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2354
2355 #if WITH_PROFILE_MODEL_P
2356   if (PROFILE_MODEL_P (current_cpu))
2357     {
2358       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2359       m32rx_model_profile_insn (current_cpu, abuf);
2360     }
2361 #endif
2362
2363   return new_pc;
2364 #undef OPRND
2365 }
2366
2367 /* mvfacmi-a: mvfacmi $dr,$accs.  */
2368
2369 CIA
2370 SEM_FN_NAME (m32rx,mvfacmi_a) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2371 {
2372   insn_t insn = SEM_INSN (sem_arg);
2373 #define OPRND(f) par_exec->operands.fmt_mvfachi_a.f
2374   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2375   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2376   EXTRACT_FMT_MVFACHI_A_VARS /* f-op1 f-r1 f-op2 f-accs f-op3 */
2377   EXTRACT_FMT_MVFACHI_A_CODE
2378
2379   CPU (h_gr[f_r1]) = TRUNCDISI (SRADI (OPRND (accs), 16));
2380   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2381
2382   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2383
2384 #if WITH_PROFILE_MODEL_P
2385   if (PROFILE_MODEL_P (current_cpu))
2386     {
2387       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2388       m32rx_model_profile_insn (current_cpu, abuf);
2389     }
2390 #endif
2391
2392   return new_pc;
2393 #undef OPRND
2394 }
2395
2396 /* mvfc: mvfc $dr,$scr.  */
2397
2398 CIA
2399 SEM_FN_NAME (m32rx,mvfc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2400 {
2401   insn_t insn = SEM_INSN (sem_arg);
2402 #define OPRND(f) par_exec->operands.fmt_mvfc.f
2403   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2404   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2405   EXTRACT_FMT_MVFC_VARS /* f-op1 f-r1 f-op2 f-r2 */
2406   EXTRACT_FMT_MVFC_CODE
2407
2408   CPU (h_gr[f_r1]) = OPRND (scr);
2409   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2410
2411   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2412
2413 #if WITH_PROFILE_MODEL_P
2414   if (PROFILE_MODEL_P (current_cpu))
2415     {
2416       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2417       m32rx_model_profile_insn (current_cpu, abuf);
2418     }
2419 #endif
2420
2421   return new_pc;
2422 #undef OPRND
2423 }
2424
2425 /* mvtachi-a: mvtachi $src1,$accs.  */
2426
2427 CIA
2428 SEM_FN_NAME (m32rx,mvtachi_a) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2429 {
2430   insn_t insn = SEM_INSN (sem_arg);
2431 #define OPRND(f) par_exec->operands.fmt_mvtachi_a.f
2432   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2433   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2434   EXTRACT_FMT_MVTACHI_A_VARS /* f-op1 f-r1 f-op2 f-accs f-op3 */
2435   EXTRACT_FMT_MVTACHI_A_CODE
2436
2437 m32rx_h_accums_set (current_cpu, f_accs, ORDI (ANDDI (OPRND (accs), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (OPRND (src1)), 32)));
2438   TRACE_RESULT (current_cpu, "accs", 'D', m32rx_h_accums_get (current_cpu, f_accs));
2439
2440   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2441
2442 #if WITH_PROFILE_MODEL_P
2443   if (PROFILE_MODEL_P (current_cpu))
2444     {
2445       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2446       m32rx_model_profile_insn (current_cpu, abuf);
2447     }
2448 #endif
2449
2450   return new_pc;
2451 #undef OPRND
2452 }
2453
2454 /* mvtaclo-a: mvtaclo $src1,$accs.  */
2455
2456 CIA
2457 SEM_FN_NAME (m32rx,mvtaclo_a) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2458 {
2459   insn_t insn = SEM_INSN (sem_arg);
2460 #define OPRND(f) par_exec->operands.fmt_mvtachi_a.f
2461   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2462   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2463   EXTRACT_FMT_MVTACHI_A_VARS /* f-op1 f-r1 f-op2 f-accs f-op3 */
2464   EXTRACT_FMT_MVTACHI_A_CODE
2465
2466 m32rx_h_accums_set (current_cpu, f_accs, ORDI (ANDDI (OPRND (accs), MAKEDI (0xffffffff, 0)), ZEXTSIDI (OPRND (src1))));
2467   TRACE_RESULT (current_cpu, "accs", 'D', m32rx_h_accums_get (current_cpu, f_accs));
2468
2469   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2470
2471 #if WITH_PROFILE_MODEL_P
2472   if (PROFILE_MODEL_P (current_cpu))
2473     {
2474       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2475       m32rx_model_profile_insn (current_cpu, abuf);
2476     }
2477 #endif
2478
2479   return new_pc;
2480 #undef OPRND
2481 }
2482
2483 /* mvtc: mvtc $sr,$dcr.  */
2484
2485 CIA
2486 SEM_FN_NAME (m32rx,mvtc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2487 {
2488   insn_t insn = SEM_INSN (sem_arg);
2489 #define OPRND(f) par_exec->operands.fmt_mvtc.f
2490   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2491   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2492   EXTRACT_FMT_MVTC_VARS /* f-op1 f-r1 f-op2 f-r2 */
2493   EXTRACT_FMT_MVTC_CODE
2494
2495 m32rx_h_cr_set (current_cpu, f_r1, OPRND (sr));
2496   TRACE_RESULT (current_cpu, "dcr", 'x', m32rx_h_cr_get (current_cpu, f_r1));
2497
2498   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2499
2500 #if WITH_PROFILE_MODEL_P
2501   if (PROFILE_MODEL_P (current_cpu))
2502     {
2503       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2504       m32rx_model_profile_insn (current_cpu, abuf);
2505     }
2506 #endif
2507
2508   return new_pc;
2509 #undef OPRND
2510 }
2511
2512 /* neg: neg $dr,$sr.  */
2513
2514 CIA
2515 SEM_FN_NAME (m32rx,neg) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2516 {
2517   insn_t insn = SEM_INSN (sem_arg);
2518 #define OPRND(f) par_exec->operands.fmt_mv.f
2519   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2520   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2521   EXTRACT_FMT_MV_VARS /* f-op1 f-r1 f-op2 f-r2 */
2522   EXTRACT_FMT_MV_CODE
2523
2524   CPU (h_gr[f_r1]) = NEGSI (OPRND (sr));
2525   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2526
2527   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2528
2529 #if WITH_PROFILE_MODEL_P
2530   if (PROFILE_MODEL_P (current_cpu))
2531     {
2532       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2533       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2534       m32rx_model_profile_insn (current_cpu, abuf);
2535     }
2536 #endif
2537
2538   return new_pc;
2539 #undef OPRND
2540 }
2541
2542 /* nop: nop.  */
2543
2544 CIA
2545 SEM_FN_NAME (m32rx,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2546 {
2547   insn_t insn = SEM_INSN (sem_arg);
2548 #define OPRND(f) par_exec->operands.fmt_nop.f
2549   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2550   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2551   EXTRACT_FMT_NOP_VARS /* f-op1 f-r1 f-op2 f-r2 */
2552   EXTRACT_FMT_NOP_CODE
2553
2554 PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
2555
2556   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2557
2558 #if WITH_PROFILE_MODEL_P
2559   if (PROFILE_MODEL_P (current_cpu))
2560     {
2561       m32rx_model_profile_insn (current_cpu, abuf);
2562     }
2563 #endif
2564
2565   return new_pc;
2566 #undef OPRND
2567 }
2568
2569 /* not: not $dr,$sr.  */
2570
2571 CIA
2572 SEM_FN_NAME (m32rx,not) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2573 {
2574   insn_t insn = SEM_INSN (sem_arg);
2575 #define OPRND(f) par_exec->operands.fmt_mv.f
2576   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2577   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2578   EXTRACT_FMT_MV_VARS /* f-op1 f-r1 f-op2 f-r2 */
2579   EXTRACT_FMT_MV_CODE
2580
2581   CPU (h_gr[f_r1]) = INVSI (OPRND (sr));
2582   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2583
2584   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2585
2586 #if WITH_PROFILE_MODEL_P
2587   if (PROFILE_MODEL_P (current_cpu))
2588     {
2589       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2590       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2591       m32rx_model_profile_insn (current_cpu, abuf);
2592     }
2593 #endif
2594
2595   return new_pc;
2596 #undef OPRND
2597 }
2598
2599 /* rac-dsi: rac $accd,$accs,$imm1.  */
2600
2601 CIA
2602 SEM_FN_NAME (m32rx,rac_dsi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2603 {
2604   insn_t insn = SEM_INSN (sem_arg);
2605 #define OPRND(f) par_exec->operands.fmt_rac_dsi.f
2606   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2607   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2608   EXTRACT_FMT_RAC_DSI_VARS /* f-op1 f-accd f-bits67 f-op2 f-accs f-bit14 f-imm1 */
2609   EXTRACT_FMT_RAC_DSI_CODE
2610
2611 do {
2612   DI tmp_tmp1;
2613   tmp_tmp1 = SLLDI (OPRND (accs), OPRND (imm1));
2614   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
2615 m32rx_h_accums_set (current_cpu, f_accd, (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000))));
2616   TRACE_RESULT (current_cpu, "accd", 'D', m32rx_h_accums_get (current_cpu, f_accd));
2617 } while (0);
2618
2619   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2620
2621 #if WITH_PROFILE_MODEL_P
2622   if (PROFILE_MODEL_P (current_cpu))
2623     {
2624       m32rx_model_profile_insn (current_cpu, abuf);
2625     }
2626 #endif
2627
2628   return new_pc;
2629 #undef OPRND
2630 }
2631
2632 /* rach-dsi: rach $accd,$accs,$imm1.  */
2633
2634 CIA
2635 SEM_FN_NAME (m32rx,rach_dsi) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2636 {
2637   insn_t insn = SEM_INSN (sem_arg);
2638 #define OPRND(f) par_exec->operands.fmt_rac_dsi.f
2639   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2640   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2641   EXTRACT_FMT_RAC_DSI_VARS /* f-op1 f-accd f-bits67 f-op2 f-accs f-bit14 f-imm1 */
2642   EXTRACT_FMT_RAC_DSI_CODE
2643
2644 do {
2645   DI tmp_tmp1;
2646   tmp_tmp1 = SLLDI (OPRND (accs), OPRND (imm1));
2647   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000));
2648 m32rx_h_accums_set (current_cpu, f_accd, (GTDI (tmp_tmp1, MAKEDI (32767, 0))) ? (MAKEDI (32767, 0)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0))));
2649   TRACE_RESULT (current_cpu, "accd", 'D', m32rx_h_accums_get (current_cpu, f_accd));
2650 } while (0);
2651
2652   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2653
2654 #if WITH_PROFILE_MODEL_P
2655   if (PROFILE_MODEL_P (current_cpu))
2656     {
2657       m32rx_model_profile_insn (current_cpu, abuf);
2658     }
2659 #endif
2660
2661   return new_pc;
2662 #undef OPRND
2663 }
2664
2665 /* rte: rte.  */
2666
2667 CIA
2668 SEM_FN_NAME (m32rx,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2669 {
2670   insn_t insn = SEM_INSN (sem_arg);
2671 #define OPRND(f) par_exec->operands.fmt_rte.f
2672   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2673   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2674   int taken_p = 0;
2675   EXTRACT_FMT_RTE_VARS /* f-op1 f-r1 f-op2 f-r2 */
2676   EXTRACT_FMT_RTE_CODE
2677
2678 do {
2679   CPU (h_sm) = OPRND (h_bsm_0);
2680   TRACE_RESULT (current_cpu, "sm-0", 'x', CPU (h_sm));
2681   CPU (h_ie) = OPRND (h_bie_0);
2682   TRACE_RESULT (current_cpu, "ie-0", 'x', CPU (h_ie));
2683   CPU (h_cond) = OPRND (h_bcond_0);
2684   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
2685   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, ANDSI (OPRND (h_bpc_0), -4)));
2686   taken_p = 1;
2687   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
2688 } while (0);
2689
2690   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2691
2692 #if WITH_PROFILE_MODEL_P
2693   if (PROFILE_MODEL_P (current_cpu))
2694     {
2695       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
2696     }
2697 #endif
2698
2699   return new_pc;
2700 #undef OPRND
2701 }
2702
2703 /* seth: seth $dr,$hash$hi16.  */
2704
2705 CIA
2706 SEM_FN_NAME (m32rx,seth) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2707 {
2708   insn_t insn = SEM_INSN (sem_arg);
2709 #define OPRND(f) par_exec->operands.fmt_seth.f
2710   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2711   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2712   EXTRACT_FMT_SETH_VARS /* f-op1 f-r1 f-op2 f-r2 f-hi16 */
2713   EXTRACT_FMT_SETH_CODE
2714
2715   CPU (h_gr[f_r1]) = SLLSI (OPRND (hi16), 16);
2716   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2717
2718   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2719
2720 #if WITH_PROFILE_MODEL_P
2721   if (PROFILE_MODEL_P (current_cpu))
2722     {
2723       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2724       m32rx_model_profile_insn (current_cpu, abuf);
2725     }
2726 #endif
2727
2728   return new_pc;
2729 #undef OPRND
2730 }
2731
2732 /* sll: sll $dr,$sr.  */
2733
2734 CIA
2735 SEM_FN_NAME (m32rx,sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2736 {
2737   insn_t insn = SEM_INSN (sem_arg);
2738 #define OPRND(f) par_exec->operands.fmt_add.f
2739   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2740   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2741   EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
2742   EXTRACT_FMT_ADD_CODE
2743
2744   CPU (h_gr[f_r1]) = SLLSI (OPRND (dr), ANDSI (OPRND (sr), 31));
2745   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2746
2747   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2748
2749 #if WITH_PROFILE_MODEL_P
2750   if (PROFILE_MODEL_P (current_cpu))
2751     {
2752       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2753       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2754       m32rx_model_profile_insn (current_cpu, abuf);
2755     }
2756 #endif
2757
2758   return new_pc;
2759 #undef OPRND
2760 }
2761
2762 /* sll3: sll3 $dr,$sr,$simm16.  */
2763
2764 CIA
2765 SEM_FN_NAME (m32rx,sll3) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2766 {
2767   insn_t insn = SEM_INSN (sem_arg);
2768 #define OPRND(f) par_exec->operands.fmt_sll3.f
2769   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2770   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2771   EXTRACT_FMT_SLL3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2772   EXTRACT_FMT_SLL3_CODE
2773
2774   CPU (h_gr[f_r1]) = SLLSI (OPRND (sr), ANDSI (OPRND (simm16), 31));
2775   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2776
2777   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2778
2779 #if WITH_PROFILE_MODEL_P
2780   if (PROFILE_MODEL_P (current_cpu))
2781     {
2782       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2783       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2784       m32rx_model_profile_insn (current_cpu, abuf);
2785     }
2786 #endif
2787
2788   return new_pc;
2789 #undef OPRND
2790 }
2791
2792 /* slli: slli $dr,$uimm5.  */
2793
2794 CIA
2795 SEM_FN_NAME (m32rx,slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2796 {
2797   insn_t insn = SEM_INSN (sem_arg);
2798 #define OPRND(f) par_exec->operands.fmt_slli.f
2799   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2800   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2801   EXTRACT_FMT_SLLI_VARS /* f-op1 f-r1 f-shift-op2 f-uimm5 */
2802   EXTRACT_FMT_SLLI_CODE
2803
2804   CPU (h_gr[f_r1]) = SLLSI (OPRND (dr), OPRND (uimm5));
2805   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2806
2807   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2808
2809 #if WITH_PROFILE_MODEL_P
2810   if (PROFILE_MODEL_P (current_cpu))
2811     {
2812       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2813       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2814       m32rx_model_profile_insn (current_cpu, abuf);
2815     }
2816 #endif
2817
2818   return new_pc;
2819 #undef OPRND
2820 }
2821
2822 /* sra: sra $dr,$sr.  */
2823
2824 CIA
2825 SEM_FN_NAME (m32rx,sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2826 {
2827   insn_t insn = SEM_INSN (sem_arg);
2828 #define OPRND(f) par_exec->operands.fmt_add.f
2829   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2830   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2831   EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
2832   EXTRACT_FMT_ADD_CODE
2833
2834   CPU (h_gr[f_r1]) = SRASI (OPRND (dr), ANDSI (OPRND (sr), 31));
2835   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2836
2837   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2838
2839 #if WITH_PROFILE_MODEL_P
2840   if (PROFILE_MODEL_P (current_cpu))
2841     {
2842       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2843       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2844       m32rx_model_profile_insn (current_cpu, abuf);
2845     }
2846 #endif
2847
2848   return new_pc;
2849 #undef OPRND
2850 }
2851
2852 /* sra3: sra3 $dr,$sr,$simm16.  */
2853
2854 CIA
2855 SEM_FN_NAME (m32rx,sra3) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2856 {
2857   insn_t insn = SEM_INSN (sem_arg);
2858 #define OPRND(f) par_exec->operands.fmt_sll3.f
2859   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2860   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2861   EXTRACT_FMT_SLL3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2862   EXTRACT_FMT_SLL3_CODE
2863
2864   CPU (h_gr[f_r1]) = SRASI (OPRND (sr), ANDSI (OPRND (simm16), 31));
2865   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2866
2867   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2868
2869 #if WITH_PROFILE_MODEL_P
2870   if (PROFILE_MODEL_P (current_cpu))
2871     {
2872       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2873       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2874       m32rx_model_profile_insn (current_cpu, abuf);
2875     }
2876 #endif
2877
2878   return new_pc;
2879 #undef OPRND
2880 }
2881
2882 /* srai: srai $dr,$uimm5.  */
2883
2884 CIA
2885 SEM_FN_NAME (m32rx,srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2886 {
2887   insn_t insn = SEM_INSN (sem_arg);
2888 #define OPRND(f) par_exec->operands.fmt_slli.f
2889   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2890   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2891   EXTRACT_FMT_SLLI_VARS /* f-op1 f-r1 f-shift-op2 f-uimm5 */
2892   EXTRACT_FMT_SLLI_CODE
2893
2894   CPU (h_gr[f_r1]) = SRASI (OPRND (dr), OPRND (uimm5));
2895   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2896
2897   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2898
2899 #if WITH_PROFILE_MODEL_P
2900   if (PROFILE_MODEL_P (current_cpu))
2901     {
2902       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2903       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2904       m32rx_model_profile_insn (current_cpu, abuf);
2905     }
2906 #endif
2907
2908   return new_pc;
2909 #undef OPRND
2910 }
2911
2912 /* srl: srl $dr,$sr.  */
2913
2914 CIA
2915 SEM_FN_NAME (m32rx,srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2916 {
2917   insn_t insn = SEM_INSN (sem_arg);
2918 #define OPRND(f) par_exec->operands.fmt_add.f
2919   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2920   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2921   EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
2922   EXTRACT_FMT_ADD_CODE
2923
2924   CPU (h_gr[f_r1]) = SRLSI (OPRND (dr), ANDSI (OPRND (sr), 31));
2925   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2926
2927   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2928
2929 #if WITH_PROFILE_MODEL_P
2930   if (PROFILE_MODEL_P (current_cpu))
2931     {
2932       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2933       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2934       m32rx_model_profile_insn (current_cpu, abuf);
2935     }
2936 #endif
2937
2938   return new_pc;
2939 #undef OPRND
2940 }
2941
2942 /* srl3: srl3 $dr,$sr,$simm16.  */
2943
2944 CIA
2945 SEM_FN_NAME (m32rx,srl3) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2946 {
2947   insn_t insn = SEM_INSN (sem_arg);
2948 #define OPRND(f) par_exec->operands.fmt_sll3.f
2949   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2950   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
2951   EXTRACT_FMT_SLL3_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
2952   EXTRACT_FMT_SLL3_CODE
2953
2954   CPU (h_gr[f_r1]) = SRLSI (OPRND (sr), ANDSI (OPRND (simm16), 31));
2955   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2956
2957   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2958
2959 #if WITH_PROFILE_MODEL_P
2960   if (PROFILE_MODEL_P (current_cpu))
2961     {
2962       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2963       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2964       m32rx_model_profile_insn (current_cpu, abuf);
2965     }
2966 #endif
2967
2968   return new_pc;
2969 #undef OPRND
2970 }
2971
2972 /* srli: srli $dr,$uimm5.  */
2973
2974 CIA
2975 SEM_FN_NAME (m32rx,srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
2976 {
2977   insn_t insn = SEM_INSN (sem_arg);
2978 #define OPRND(f) par_exec->operands.fmt_slli.f
2979   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2980   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
2981   EXTRACT_FMT_SLLI_VARS /* f-op1 f-r1 f-shift-op2 f-uimm5 */
2982   EXTRACT_FMT_SLLI_CODE
2983
2984   CPU (h_gr[f_r1]) = SRLSI (OPRND (dr), OPRND (uimm5));
2985   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
2986
2987   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
2988
2989 #if WITH_PROFILE_MODEL_P
2990   if (PROFILE_MODEL_P (current_cpu))
2991     {
2992       m32rx_model_mark_get_h_gr (current_cpu, abuf);
2993       m32rx_model_mark_set_h_gr (current_cpu, abuf);
2994       m32rx_model_profile_insn (current_cpu, abuf);
2995     }
2996 #endif
2997
2998   return new_pc;
2999 #undef OPRND
3000 }
3001
3002 /* st: st $src1,@$src2.  */
3003
3004 CIA
3005 SEM_FN_NAME (m32rx,st) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3006 {
3007   insn_t insn = SEM_INSN (sem_arg);
3008 #define OPRND(f) par_exec->operands.fmt_st.f
3009   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3010   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3011   EXTRACT_FMT_ST_VARS /* f-op1 f-r1 f-op2 f-r2 */
3012   EXTRACT_FMT_ST_CODE
3013
3014 SETMEMSI (current_cpu, OPRND (src2), OPRND (src1));
3015   TRACE_RESULT (current_cpu, "memory", 'x', GETMEMSI (current_cpu, OPRND (src2)));
3016
3017   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3018
3019 #if WITH_PROFILE_MODEL_P
3020   if (PROFILE_MODEL_P (current_cpu))
3021     {
3022       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3023       m32rx_model_profile_insn (current_cpu, abuf);
3024     }
3025 #endif
3026
3027   return new_pc;
3028 #undef OPRND
3029 }
3030
3031 /* st-d: st $src1,@($slo16,$src2).  */
3032
3033 CIA
3034 SEM_FN_NAME (m32rx,st_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3035 {
3036   insn_t insn = SEM_INSN (sem_arg);
3037 #define OPRND(f) par_exec->operands.fmt_st_d.f
3038   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3039   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
3040   EXTRACT_FMT_ST_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
3041   EXTRACT_FMT_ST_D_CODE
3042
3043 SETMEMSI (current_cpu, ADDSI (OPRND (src2), OPRND (slo16)), OPRND (src1));
3044   TRACE_RESULT (current_cpu, "memory", 'x', GETMEMSI (current_cpu, ADDSI (OPRND (src2), OPRND (slo16))));
3045
3046   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3047
3048 #if WITH_PROFILE_MODEL_P
3049   if (PROFILE_MODEL_P (current_cpu))
3050     {
3051       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3052       m32rx_model_profile_insn (current_cpu, abuf);
3053     }
3054 #endif
3055
3056   return new_pc;
3057 #undef OPRND
3058 }
3059
3060 /* stb: stb $src1,@$src2.  */
3061
3062 CIA
3063 SEM_FN_NAME (m32rx,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3064 {
3065   insn_t insn = SEM_INSN (sem_arg);
3066 #define OPRND(f) par_exec->operands.fmt_stb.f
3067   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3068   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3069   EXTRACT_FMT_STB_VARS /* f-op1 f-r1 f-op2 f-r2 */
3070   EXTRACT_FMT_STB_CODE
3071
3072 SETMEMQI (current_cpu, OPRND (src2), OPRND (src1));
3073   TRACE_RESULT (current_cpu, "memory", 'x', GETMEMQI (current_cpu, OPRND (src2)));
3074
3075   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3076
3077 #if WITH_PROFILE_MODEL_P
3078   if (PROFILE_MODEL_P (current_cpu))
3079     {
3080       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3081       m32rx_model_profile_insn (current_cpu, abuf);
3082     }
3083 #endif
3084
3085   return new_pc;
3086 #undef OPRND
3087 }
3088
3089 /* stb-d: stb $src1,@($slo16,$src2).  */
3090
3091 CIA
3092 SEM_FN_NAME (m32rx,stb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3093 {
3094   insn_t insn = SEM_INSN (sem_arg);
3095 #define OPRND(f) par_exec->operands.fmt_stb_d.f
3096   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3097   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
3098   EXTRACT_FMT_STB_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
3099   EXTRACT_FMT_STB_D_CODE
3100
3101 SETMEMQI (current_cpu, ADDSI (OPRND (src2), OPRND (slo16)), OPRND (src1));
3102   TRACE_RESULT (current_cpu, "memory", 'x', GETMEMQI (current_cpu, ADDSI (OPRND (src2), OPRND (slo16))));
3103
3104   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3105
3106 #if WITH_PROFILE_MODEL_P
3107   if (PROFILE_MODEL_P (current_cpu))
3108     {
3109       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3110       m32rx_model_profile_insn (current_cpu, abuf);
3111     }
3112 #endif
3113
3114   return new_pc;
3115 #undef OPRND
3116 }
3117
3118 /* sth: sth $src1,@$src2.  */
3119
3120 CIA
3121 SEM_FN_NAME (m32rx,sth) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3122 {
3123   insn_t insn = SEM_INSN (sem_arg);
3124 #define OPRND(f) par_exec->operands.fmt_sth.f
3125   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3126   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3127   EXTRACT_FMT_STH_VARS /* f-op1 f-r1 f-op2 f-r2 */
3128   EXTRACT_FMT_STH_CODE
3129
3130 SETMEMHI (current_cpu, OPRND (src2), OPRND (src1));
3131   TRACE_RESULT (current_cpu, "memory", 'x', GETMEMHI (current_cpu, OPRND (src2)));
3132
3133   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3134
3135 #if WITH_PROFILE_MODEL_P
3136   if (PROFILE_MODEL_P (current_cpu))
3137     {
3138       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3139       m32rx_model_profile_insn (current_cpu, abuf);
3140     }
3141 #endif
3142
3143   return new_pc;
3144 #undef OPRND
3145 }
3146
3147 /* sth-d: sth $src1,@($slo16,$src2).  */
3148
3149 CIA
3150 SEM_FN_NAME (m32rx,sth_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3151 {
3152   insn_t insn = SEM_INSN (sem_arg);
3153 #define OPRND(f) par_exec->operands.fmt_sth_d.f
3154   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3155   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
3156   EXTRACT_FMT_STH_D_VARS /* f-op1 f-r1 f-op2 f-r2 f-simm16 */
3157   EXTRACT_FMT_STH_D_CODE
3158
3159 SETMEMHI (current_cpu, ADDSI (OPRND (src2), OPRND (slo16)), OPRND (src1));
3160   TRACE_RESULT (current_cpu, "memory", 'x', GETMEMHI (current_cpu, ADDSI (OPRND (src2), OPRND (slo16))));
3161
3162   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3163
3164 #if WITH_PROFILE_MODEL_P
3165   if (PROFILE_MODEL_P (current_cpu))
3166     {
3167       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3168       m32rx_model_profile_insn (current_cpu, abuf);
3169     }
3170 #endif
3171
3172   return new_pc;
3173 #undef OPRND
3174 }
3175
3176 /* st-plus: st $src1,@+$src2.  */
3177
3178 CIA
3179 SEM_FN_NAME (m32rx,st_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3180 {
3181   insn_t insn = SEM_INSN (sem_arg);
3182 #define OPRND(f) par_exec->operands.fmt_st_plus.f
3183   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3184   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3185   EXTRACT_FMT_ST_PLUS_VARS /* f-op1 f-r1 f-op2 f-r2 */
3186   EXTRACT_FMT_ST_PLUS_CODE
3187
3188 do {
3189   SI tmp_new_src2;
3190   tmp_new_src2 = ADDSI (OPRND (src2), 4);
3191 SETMEMSI (current_cpu, tmp_new_src2, OPRND (src1));
3192   TRACE_RESULT (current_cpu, "memory", 'x', GETMEMSI (current_cpu, tmp_new_src2));
3193   CPU (h_gr[f_r2]) = tmp_new_src2;
3194   TRACE_RESULT (current_cpu, "src2", 'x', CPU (h_gr[f_r2]));
3195 } while (0);
3196
3197   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3198
3199 #if WITH_PROFILE_MODEL_P
3200   if (PROFILE_MODEL_P (current_cpu))
3201     {
3202       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3203       m32rx_model_mark_set_h_gr (current_cpu, abuf);
3204       m32rx_model_profile_insn (current_cpu, abuf);
3205     }
3206 #endif
3207
3208   return new_pc;
3209 #undef OPRND
3210 }
3211
3212 /* st-minus: st $src1,@-$src2.  */
3213
3214 CIA
3215 SEM_FN_NAME (m32rx,st_minus) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3216 {
3217   insn_t insn = SEM_INSN (sem_arg);
3218 #define OPRND(f) par_exec->operands.fmt_st_plus.f
3219   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3220   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3221   EXTRACT_FMT_ST_PLUS_VARS /* f-op1 f-r1 f-op2 f-r2 */
3222   EXTRACT_FMT_ST_PLUS_CODE
3223
3224 do {
3225   SI tmp_new_src2;
3226   tmp_new_src2 = SUBSI (OPRND (src2), 4);
3227 SETMEMSI (current_cpu, tmp_new_src2, OPRND (src1));
3228   TRACE_RESULT (current_cpu, "memory", 'x', GETMEMSI (current_cpu, tmp_new_src2));
3229   CPU (h_gr[f_r2]) = tmp_new_src2;
3230   TRACE_RESULT (current_cpu, "src2", 'x', CPU (h_gr[f_r2]));
3231 } while (0);
3232
3233   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3234
3235 #if WITH_PROFILE_MODEL_P
3236   if (PROFILE_MODEL_P (current_cpu))
3237     {
3238       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3239       m32rx_model_mark_set_h_gr (current_cpu, abuf);
3240       m32rx_model_profile_insn (current_cpu, abuf);
3241     }
3242 #endif
3243
3244   return new_pc;
3245 #undef OPRND
3246 }
3247
3248 /* sub: sub $dr,$sr.  */
3249
3250 CIA
3251 SEM_FN_NAME (m32rx,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3252 {
3253   insn_t insn = SEM_INSN (sem_arg);
3254 #define OPRND(f) par_exec->operands.fmt_add.f
3255   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3256   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3257   EXTRACT_FMT_ADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
3258   EXTRACT_FMT_ADD_CODE
3259
3260   CPU (h_gr[f_r1]) = SUBSI (OPRND (dr), OPRND (sr));
3261   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
3262
3263   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3264
3265 #if WITH_PROFILE_MODEL_P
3266   if (PROFILE_MODEL_P (current_cpu))
3267     {
3268       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3269       m32rx_model_mark_set_h_gr (current_cpu, abuf);
3270       m32rx_model_profile_insn (current_cpu, abuf);
3271     }
3272 #endif
3273
3274   return new_pc;
3275 #undef OPRND
3276 }
3277
3278 /* subv: subv $dr,$sr.  */
3279
3280 CIA
3281 SEM_FN_NAME (m32rx,subv) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3282 {
3283   insn_t insn = SEM_INSN (sem_arg);
3284 #define OPRND(f) par_exec->operands.fmt_addv.f
3285   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3286   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3287   EXTRACT_FMT_ADDV_VARS /* f-op1 f-r1 f-op2 f-r2 */
3288   EXTRACT_FMT_ADDV_CODE
3289
3290 do {
3291   UBI temp1;SI temp0;
3292   temp0 = SUBSI (OPRND (dr), OPRND (sr));
3293   temp1 = SUBOFSI (OPRND (dr), OPRND (sr), 0);
3294   CPU (h_gr[f_r1]) = temp0;
3295   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
3296   CPU (h_cond) = temp1;
3297   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
3298 } while (0);
3299
3300   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3301
3302 #if WITH_PROFILE_MODEL_P
3303   if (PROFILE_MODEL_P (current_cpu))
3304     {
3305       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3306       m32rx_model_mark_set_h_gr (current_cpu, abuf);
3307       m32rx_model_profile_insn (current_cpu, abuf);
3308     }
3309 #endif
3310
3311   return new_pc;
3312 #undef OPRND
3313 }
3314
3315 /* subx: subx $dr,$sr.  */
3316
3317 CIA
3318 SEM_FN_NAME (m32rx,subx) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3319 {
3320   insn_t insn = SEM_INSN (sem_arg);
3321 #define OPRND(f) par_exec->operands.fmt_addx.f
3322   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3323   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3324   EXTRACT_FMT_ADDX_VARS /* f-op1 f-r1 f-op2 f-r2 */
3325   EXTRACT_FMT_ADDX_CODE
3326
3327 do {
3328   UBI temp1;SI temp0;
3329   temp0 = SUBCSI (OPRND (dr), OPRND (sr), OPRND (condbit));
3330   temp1 = SUBCFSI (OPRND (dr), OPRND (sr), OPRND (condbit));
3331   CPU (h_gr[f_r1]) = temp0;
3332   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
3333   CPU (h_cond) = temp1;
3334   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
3335 } while (0);
3336
3337   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3338
3339 #if WITH_PROFILE_MODEL_P
3340   if (PROFILE_MODEL_P (current_cpu))
3341     {
3342       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3343       m32rx_model_mark_set_h_gr (current_cpu, abuf);
3344       m32rx_model_profile_insn (current_cpu, abuf);
3345     }
3346 #endif
3347
3348   return new_pc;
3349 #undef OPRND
3350 }
3351
3352 /* trap: trap $uimm4.  */
3353
3354 CIA
3355 SEM_FN_NAME (m32rx,trap) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3356 {
3357   insn_t insn = SEM_INSN (sem_arg);
3358 #define OPRND(f) par_exec->operands.fmt_trap.f
3359   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3360   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3361   int taken_p = 0;
3362   EXTRACT_FMT_TRAP_VARS /* f-op1 f-r1 f-op2 f-uimm4 */
3363   EXTRACT_FMT_TRAP_CODE
3364
3365 do {
3366 m32rx_h_cr_set (current_cpu, 6, ADDSI (OPRND (pc), 4));
3367   TRACE_RESULT (current_cpu, "cr-6", 'x', m32rx_h_cr_get (current_cpu, 6));
3368 m32rx_h_cr_set (current_cpu, 0, ANDSI (SLLSI (OPRND (h_cr_0), 8), 65408));
3369   TRACE_RESULT (current_cpu, "cr-0", 'x', m32rx_h_cr_get (current_cpu, 0));
3370   BRANCH_NEW_PC (new_pc, SEM_BRANCH_VIA_ADDR (sem_arg, m32r_trap (current_cpu, OPRND (uimm4))));
3371   taken_p = 1;
3372   TRACE_RESULT (current_cpu, "pc", 'x', new_pc);
3373 } while (0);
3374
3375   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3376
3377 #if WITH_PROFILE_MODEL_P
3378   if (PROFILE_MODEL_P (current_cpu))
3379     {
3380       m32rx_model_profile_cti_insn (current_cpu, abuf, taken_p);
3381     }
3382 #endif
3383
3384   return new_pc;
3385 #undef OPRND
3386 }
3387
3388 /* unlock: unlock $src1,@$src2.  */
3389
3390 CIA
3391 SEM_FN_NAME (m32rx,unlock) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3392 {
3393   insn_t insn = SEM_INSN (sem_arg);
3394 #define OPRND(f) par_exec->operands.fmt_unlock.f
3395   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3396   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3397   EXTRACT_FMT_UNLOCK_VARS /* f-op1 f-r1 f-op2 f-r2 */
3398   EXTRACT_FMT_UNLOCK_CODE
3399
3400 do {
3401 if (OPRND (h_lock_0)) {
3402 SETMEMSI (current_cpu, OPRND (src2), OPRND (src1));
3403   TRACE_RESULT (current_cpu, "memory", 'x', GETMEMSI (current_cpu, OPRND (src2)));
3404 }
3405   CPU (h_lock) = 0;
3406   TRACE_RESULT (current_cpu, "lock-0", 'x', CPU (h_lock));
3407 } while (0);
3408
3409   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3410
3411 #if WITH_PROFILE_MODEL_P
3412   if (PROFILE_MODEL_P (current_cpu))
3413     {
3414       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3415       m32rx_model_profile_insn (current_cpu, abuf);
3416     }
3417 #endif
3418
3419   return new_pc;
3420 #undef OPRND
3421 }
3422
3423 /* satb: satb $dr,$sr.  */
3424
3425 CIA
3426 SEM_FN_NAME (m32rx,satb) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3427 {
3428   insn_t insn = SEM_INSN (sem_arg);
3429 #define OPRND(f) par_exec->operands.fmt_satb.f
3430   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3431   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
3432   EXTRACT_FMT_SATB_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
3433   EXTRACT_FMT_SATB_CODE
3434
3435   CPU (h_gr[f_r1]) = (GESI (OPRND (sr), 127)) ? (127) : (LESI (OPRND (sr), -128)) ? (-128) : (OPRND (sr));
3436   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
3437
3438   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3439
3440 #if WITH_PROFILE_MODEL_P
3441   if (PROFILE_MODEL_P (current_cpu))
3442     {
3443       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3444       m32rx_model_mark_set_h_gr (current_cpu, abuf);
3445       m32rx_model_profile_insn (current_cpu, abuf);
3446     }
3447 #endif
3448
3449   return new_pc;
3450 #undef OPRND
3451 }
3452
3453 /* sath: sath $dr,$sr.  */
3454
3455 CIA
3456 SEM_FN_NAME (m32rx,sath) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3457 {
3458   insn_t insn = SEM_INSN (sem_arg);
3459 #define OPRND(f) par_exec->operands.fmt_satb.f
3460   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3461   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
3462   EXTRACT_FMT_SATB_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
3463   EXTRACT_FMT_SATB_CODE
3464
3465   CPU (h_gr[f_r1]) = (GESI (OPRND (sr), 32767)) ? (32767) : (LESI (OPRND (sr), -32768)) ? (-32768) : (OPRND (sr));
3466   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
3467
3468   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3469
3470 #if WITH_PROFILE_MODEL_P
3471   if (PROFILE_MODEL_P (current_cpu))
3472     {
3473       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3474       m32rx_model_mark_set_h_gr (current_cpu, abuf);
3475       m32rx_model_profile_insn (current_cpu, abuf);
3476     }
3477 #endif
3478
3479   return new_pc;
3480 #undef OPRND
3481 }
3482
3483 /* sat: sat $dr,$sr.  */
3484
3485 CIA
3486 SEM_FN_NAME (m32rx,sat) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3487 {
3488   insn_t insn = SEM_INSN (sem_arg);
3489 #define OPRND(f) par_exec->operands.fmt_sat.f
3490   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3491   CIA new_pc = SEM_NEXT_PC (sem_arg, 4);
3492   EXTRACT_FMT_SAT_VARS /* f-op1 f-r1 f-op2 f-r2 f-uimm16 */
3493   EXTRACT_FMT_SAT_CODE
3494
3495   CPU (h_gr[f_r1]) = ((OPRND (condbit)) ? (((LTSI (OPRND (sr), 0)) ? (2147483647) : (0x80000000))) : (OPRND (sr)));
3496   TRACE_RESULT (current_cpu, "dr", 'x', CPU (h_gr[f_r1]));
3497
3498   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3499
3500 #if WITH_PROFILE_MODEL_P
3501   if (PROFILE_MODEL_P (current_cpu))
3502     {
3503       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3504       m32rx_model_mark_set_h_gr (current_cpu, abuf);
3505       m32rx_model_profile_insn (current_cpu, abuf);
3506     }
3507 #endif
3508
3509   return new_pc;
3510 #undef OPRND
3511 }
3512
3513 /* pcmpbz: pcmpbz $src2.  */
3514
3515 CIA
3516 SEM_FN_NAME (m32rx,pcmpbz) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3517 {
3518   insn_t insn = SEM_INSN (sem_arg);
3519 #define OPRND(f) par_exec->operands.fmt_cmpz.f
3520   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3521   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3522   EXTRACT_FMT_CMPZ_VARS /* f-op1 f-r1 f-op2 f-r2 */
3523   EXTRACT_FMT_CMPZ_CODE
3524
3525   CPU (h_cond) = (EQSI (ANDSI (OPRND (src2), 255), 0)) ? (1) : (EQSI (ANDSI (OPRND (src2), 65280), 0)) ? (1) : (EQSI (ANDSI (OPRND (src2), 16711680), 0)) ? (1) : (EQSI (ANDSI (OPRND (src2), 0xff000000), 0)) ? (1) : (0);
3526   TRACE_RESULT (current_cpu, "condbit", 'x', CPU (h_cond));
3527
3528   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3529
3530 #if WITH_PROFILE_MODEL_P
3531   if (PROFILE_MODEL_P (current_cpu))
3532     {
3533       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3534       m32rx_model_profile_insn (current_cpu, abuf);
3535     }
3536 #endif
3537
3538   return new_pc;
3539 #undef OPRND
3540 }
3541
3542 /* sadd: sadd.  */
3543
3544 CIA
3545 SEM_FN_NAME (m32rx,sadd) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3546 {
3547   insn_t insn = SEM_INSN (sem_arg);
3548 #define OPRND(f) par_exec->operands.fmt_sadd.f
3549   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3550   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3551   EXTRACT_FMT_SADD_VARS /* f-op1 f-r1 f-op2 f-r2 */
3552   EXTRACT_FMT_SADD_CODE
3553
3554 m32rx_h_accums_set (current_cpu, 0, ADDDI (SRADI (OPRND (h_accums_1), 16), OPRND (h_accums_0)));
3555   TRACE_RESULT (current_cpu, "accums-0", 'D', m32rx_h_accums_get (current_cpu, 0));
3556
3557   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3558
3559 #if WITH_PROFILE_MODEL_P
3560   if (PROFILE_MODEL_P (current_cpu))
3561     {
3562       m32rx_model_profile_insn (current_cpu, abuf);
3563     }
3564 #endif
3565
3566   return new_pc;
3567 #undef OPRND
3568 }
3569
3570 /* macwu1: macwu1 $src1,$src2.  */
3571
3572 CIA
3573 SEM_FN_NAME (m32rx,macwu1) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3574 {
3575   insn_t insn = SEM_INSN (sem_arg);
3576 #define OPRND(f) par_exec->operands.fmt_macwu1.f
3577   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3578   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3579   EXTRACT_FMT_MACWU1_VARS /* f-op1 f-r1 f-op2 f-r2 */
3580   EXTRACT_FMT_MACWU1_CODE
3581
3582 m32rx_h_accums_set (current_cpu, 1, SRADI (SLLDI (ADDDI (OPRND (h_accums_1), MULDI (EXTSIDI (OPRND (src1)), EXTSIDI (ANDSI (OPRND (src2), 65535)))), 8), 8));
3583   TRACE_RESULT (current_cpu, "accums-1", 'D', m32rx_h_accums_get (current_cpu, 1));
3584
3585   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3586
3587 #if WITH_PROFILE_MODEL_P
3588   if (PROFILE_MODEL_P (current_cpu))
3589     {
3590       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3591       m32rx_model_profile_insn (current_cpu, abuf);
3592     }
3593 #endif
3594
3595   return new_pc;
3596 #undef OPRND
3597 }
3598
3599 /* msblo: msblo $src1,$src2.  */
3600
3601 CIA
3602 SEM_FN_NAME (m32rx,msblo) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3603 {
3604   insn_t insn = SEM_INSN (sem_arg);
3605 #define OPRND(f) par_exec->operands.fmt_macwhi.f
3606   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3607   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3608   EXTRACT_FMT_MACWHI_VARS /* f-op1 f-r1 f-op2 f-r2 */
3609   EXTRACT_FMT_MACWHI_CODE
3610
3611 m32rx_h_accum_set (current_cpu, SRADI (SLLDI (SUBDI (OPRND (accum), SRADI (SLLDI (MULDI (EXTHIDI (TRUNCSIHI (OPRND (src1))), EXTHIDI (TRUNCSIHI (OPRND (src2)))), 32), 16)), 8), 8));
3612   TRACE_RESULT (current_cpu, "accum", 'D', m32rx_h_accum_get (current_cpu));
3613
3614   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3615
3616 #if WITH_PROFILE_MODEL_P
3617   if (PROFILE_MODEL_P (current_cpu))
3618     {
3619       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3620       m32rx_model_profile_insn (current_cpu, abuf);
3621     }
3622 #endif
3623
3624   return new_pc;
3625 #undef OPRND
3626 }
3627
3628 /* mulwu1: mulwu1 $src1,$src2.  */
3629
3630 CIA
3631 SEM_FN_NAME (m32rx,mulwu1) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3632 {
3633   insn_t insn = SEM_INSN (sem_arg);
3634 #define OPRND(f) par_exec->operands.fmt_mulwu1.f
3635   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3636   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3637   EXTRACT_FMT_MULWU1_VARS /* f-op1 f-r1 f-op2 f-r2 */
3638   EXTRACT_FMT_MULWU1_CODE
3639
3640 m32rx_h_accums_set (current_cpu, 1, SRADI (SLLDI (MULDI (EXTSIDI (OPRND (src1)), EXTSIDI (ANDSI (OPRND (src2), 65535))), 16), 16));
3641   TRACE_RESULT (current_cpu, "accums-1", 'D', m32rx_h_accums_get (current_cpu, 1));
3642
3643   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3644
3645 #if WITH_PROFILE_MODEL_P
3646   if (PROFILE_MODEL_P (current_cpu))
3647     {
3648       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3649       m32rx_model_profile_insn (current_cpu, abuf);
3650     }
3651 #endif
3652
3653   return new_pc;
3654 #undef OPRND
3655 }
3656
3657 /* maclh1: maclh1 $src1,$src2.  */
3658
3659 CIA
3660 SEM_FN_NAME (m32rx,maclh1) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3661 {
3662   insn_t insn = SEM_INSN (sem_arg);
3663 #define OPRND(f) par_exec->operands.fmt_macwu1.f
3664   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3665   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3666   EXTRACT_FMT_MACWU1_VARS /* f-op1 f-r1 f-op2 f-r2 */
3667   EXTRACT_FMT_MACWU1_CODE
3668
3669 m32rx_h_accums_set (current_cpu, 1, SRADI (SLLDI (ADDDI (OPRND (h_accums_1), SLLDI (EXTSIDI (MULSI (EXTHISI (TRUNCSIHI (OPRND (src1))), SRASI (OPRND (src2), 16))), 16)), 8), 8));
3670   TRACE_RESULT (current_cpu, "accums-1", 'D', m32rx_h_accums_get (current_cpu, 1));
3671
3672   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3673
3674 #if WITH_PROFILE_MODEL_P
3675   if (PROFILE_MODEL_P (current_cpu))
3676     {
3677       m32rx_model_mark_get_h_gr (current_cpu, abuf);
3678       m32rx_model_profile_insn (current_cpu, abuf);
3679     }
3680 #endif
3681
3682   return new_pc;
3683 #undef OPRND
3684 }
3685
3686 /* sc: sc.  */
3687
3688 CIA
3689 SEM_FN_NAME (m32rx,sc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3690 {
3691   insn_t insn = SEM_INSN (sem_arg);
3692 #define OPRND(f) par_exec->operands.fmt_sc.f
3693   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3694   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3695   EXTRACT_FMT_SC_VARS /* f-op1 f-r1 f-op2 f-r2 */
3696   EXTRACT_FMT_SC_CODE
3697
3698 if (OPRND (condbit)) {
3699 BRANCH_NEW_PC (new_pc, NEW_PC_SKIP);
3700 }
3701
3702   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3703
3704 #if WITH_PROFILE_MODEL_P
3705   if (PROFILE_MODEL_P (current_cpu))
3706     {
3707       m32rx_model_profile_insn (current_cpu, abuf);
3708     }
3709 #endif
3710
3711   return new_pc;
3712 #undef OPRND
3713 }
3714
3715 /* snc: snc.  */
3716
3717 CIA
3718 SEM_FN_NAME (m32rx,snc) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3719 {
3720   insn_t insn = SEM_INSN (sem_arg);
3721 #define OPRND(f) par_exec->operands.fmt_sc.f
3722   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3723   CIA new_pc = SEM_NEXT_PC (sem_arg, 2);
3724   EXTRACT_FMT_SC_VARS /* f-op1 f-r1 f-op2 f-r2 */
3725   EXTRACT_FMT_SC_CODE
3726
3727 if (NOTBI (OPRND (condbit))) {
3728 BRANCH_NEW_PC (new_pc, NEW_PC_SKIP);
3729 }
3730
3731   PROFILE_COUNT_INSN (current_cpu, 0, abuf->idesc->num);
3732
3733 #if WITH_PROFILE_MODEL_P
3734   if (PROFILE_MODEL_P (current_cpu))
3735     {
3736       m32rx_model_profile_insn (current_cpu, abuf);
3737     }
3738 #endif
3739
3740   return new_pc;
3741 #undef OPRND
3742 }
3743
3744 CIA
3745 SEM_FN_NAME (m32rx,illegal) (SIM_CPU *current_cpu, SEM_ARG sem_arg, PAREXEC *par_exec)
3746 {
3747   sim_engine_illegal_insn (current_cpu, NULL_CIA /*FIXME*/);
3748   return 0;
3749 }
3750
3751 #endif /* WANT_CPU */