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