7 #include "mn10300_sim.h"
9 #include "sys/syscall.h"
13 #include <sys/times.h>
16 #define REG0(X) ((X) & 0x3)
17 #define REG1(X) (((X) & 0xc) >> 2)
18 #define REG0_4(X) (((X) & 0x30) >> 4)
19 #define REG0_8(X) (((X) & 0x300) >> 8)
20 #define REG1_8(X) (((X) & 0xc00) >> 10)
21 #define REG0_16(X) (((X) & 0x30000) >> 16)
22 #define REG1_16(X) (((X) & 0xc0000) >> 18)
25 void OP_8000 (insn
, extension
)
26 unsigned long insn
, extension
;
28 State
.regs
[REG_D0
+ REG0_8 (insn
)] = SEXT8 (insn
& 0xff);
32 void OP_80 (insn
, extension
)
33 unsigned long insn
, extension
;
35 State
.regs
[REG_D0
+ REG0 (insn
)] = State
.regs
[REG_D0
+ REG1 (insn
)];
39 void OP_F1E0 (insn
, extension
)
40 unsigned long insn
, extension
;
42 State
.regs
[REG_A0
+ REG0 (insn
)] = State
.regs
[REG_D0
+ REG1 (insn
)];
46 void OP_F1D0 (insn
, extension
)
47 unsigned long insn
, extension
;
49 State
.regs
[REG_D0
+ REG0 (insn
)] = State
.regs
[REG_A0
+ REG1 (insn
)];
53 void OP_9000 (insn
, extension
)
54 unsigned long insn
, extension
;
56 State
.regs
[REG_A0
+ REG0_8 (insn
)] = insn
& 0xff;
60 void OP_90 (insn
, extension
)
61 unsigned long insn
, extension
;
63 State
.regs
[REG_A0
+ REG0 (insn
)] = State
.regs
[REG_A0
+ REG1 (insn
)];
67 void OP_3C (insn
, extension
)
68 unsigned long insn
, extension
;
70 State
.regs
[REG_A0
+ REG0 (insn
)] = State
.regs
[REG_SP
];
74 void OP_F2F0 (insn
, extension
)
75 unsigned long insn
, extension
;
77 State
.regs
[REG_SP
] = State
.regs
[REG_A0
+ REG1 (insn
)];
81 void OP_F2E4 (insn
, extension
)
82 unsigned long insn
, extension
;
84 State
.regs
[REG_D0
+ REG0 (insn
)] = PSW
;
88 void OP_F2F3 (insn
, extension
)
89 unsigned long insn
, extension
;
91 PSW
= State
.regs
[REG_D0
+ REG1 (insn
)];
95 void OP_F2E0 (insn
, extension
)
96 unsigned long insn
, extension
;
98 State
.regs
[REG_D0
+ REG0 (insn
)] = State
.regs
[REG_MDR
];
102 void OP_F2F2 (insn
, extension
)
103 unsigned long insn
, extension
;
105 State
.regs
[REG_MDR
] = State
.regs
[REG_D0
+ REG1 (insn
)];
109 void OP_70 (insn
, extension
)
110 unsigned long insn
, extension
;
112 State
.regs
[REG_D0
+ REG1 (insn
)]
113 = load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 4);
116 /* mov (d8,am), dn */
117 void OP_F80000 (insn
, extension
)
118 unsigned long insn
, extension
;
120 State
.regs
[REG_D0
+ REG1_8 (insn
)]
121 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
122 + SEXT8 (insn
& 0xff)), 4);
125 /* mov (d16,am), dn */
126 void OP_FA000000 (insn
, extension
)
127 unsigned long insn
, extension
;
129 State
.regs
[REG_D0
+ REG1_16 (insn
)]
130 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
131 + SEXT16 (insn
& 0xffff)), 4);
134 /* mov (d32,am), dn */
135 void OP_FC000000 (insn
, extension
)
136 unsigned long insn
, extension
;
138 State
.regs
[REG_D0
+ REG1_16 (insn
)]
139 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
140 + ((insn
& 0xffff) << 16) + extension
), 4);
143 /* mov (d8,sp), dn */
144 void OP_5800 (insn
, extension
)
145 unsigned long insn
, extension
;
147 State
.regs
[REG_D0
+ REG0_8 (insn
)]
148 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4);
151 /* mov (d16,sp), dn */
152 void OP_FAB40000 (insn
, extension
)
153 unsigned long insn
, extension
;
155 State
.regs
[REG_D0
+ REG0_16 (insn
)]
156 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4);
159 /* mov (d32,sp), dn */
160 void OP_FCB40000 (insn
, extension
)
161 unsigned long insn
, extension
;
163 State
.regs
[REG_D0
+ REG0_16 (insn
)]
164 = load_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 4);
167 /* mov (di,am), dn */
168 void OP_F300 (insn
, extension
)
169 unsigned long insn
, extension
;
171 State
.regs
[REG_D0
+ REG0_4 (insn
)]
172 = load_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
173 + State
.regs
[REG_D0
+ REG1 (insn
)]), 4);
176 /* mov (abs16), dn */
177 void OP_300000 (insn
, extension
)
178 unsigned long insn
, extension
;
180 State
.regs
[REG_D0
+ REG0_16 (insn
)] = load_mem ((insn
& 0xffff), 4);
183 /* mov (abs32), dn */
184 void OP_FCA40000 (insn
, extension
)
185 unsigned long insn
, extension
;
187 State
.regs
[REG_D0
+ REG0_16 (insn
)]
188 = load_mem ((((insn
& 0xffff) << 16) + extension
), 4);
192 void OP_F000 (insn
, extension
)
193 unsigned long insn
, extension
;
195 State
.regs
[REG_A0
+ REG1 (insn
)]
196 = load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 4);
199 /* mov (d8,am), an */
200 void OP_F82000 (insn
, extension
)
201 unsigned long insn
, extension
;
203 State
.regs
[REG_A0
+ REG1_8 (insn
)]
204 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
205 + SEXT8 (insn
& 0xff)), 4);
208 /* mov (d16,am), an */
209 void OP_FA200000 (insn
, extension
)
210 unsigned long insn
, extension
;
212 State
.regs
[REG_A0
+ REG1_16 (insn
)]
213 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
214 + SEXT16 (insn
& 0xffff)), 4);
217 /* mov (d32,am), an */
218 void OP_FC200000 (insn
, extension
)
219 unsigned long insn
, extension
;
221 State
.regs
[REG_A0
+ REG1_16 (insn
)]
222 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
223 + ((insn
& 0xffff) << 16) + extension
), 4);
226 /* mov (d8,sp), an */
227 void OP_5C00 (insn
, extension
)
228 unsigned long insn
, extension
;
230 State
.regs
[REG_A0
+ REG0_8 (insn
)]
231 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4);
234 /* mov (d16,sp), an */
235 void OP_FAB00000 (insn
, extension
)
236 unsigned long insn
, extension
;
238 State
.regs
[REG_A0
+ REG0_16 (insn
)]
239 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4);
242 /* mov (d32,sp), an */
243 void OP_FCB00000 (insn
, extension
)
244 unsigned long insn
, extension
;
246 State
.regs
[REG_A0
+ REG0_16 (insn
)]
247 = load_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 4);
250 /* mov (di,am), an */
251 void OP_F380 (insn
, extension
)
252 unsigned long insn
, extension
;
254 State
.regs
[REG_A0
+ REG0_4 (insn
)]
255 = load_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
256 + State
.regs
[REG_D0
+ REG1 (insn
)]), 4);
259 /* mov (abs16), an */
260 void OP_FAA00000 (insn
, extension
)
261 unsigned long insn
, extension
;
263 State
.regs
[REG_A0
+ REG0_16 (insn
)] = load_mem ((insn
& 0xffff), 4);
266 /* mov (abs32), an */
267 void OP_FCA00000 (insn
, extension
)
268 unsigned long insn
, extension
;
270 State
.regs
[REG_A0
+ REG0_16 (insn
)]
271 = load_mem ((((insn
& 0xffff) << 16) + extension
), 4);
274 /* mov (d8,am), sp */
275 void OP_F8F000 (insn
, extension
)
276 unsigned long insn
, extension
;
279 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
280 + SEXT8 (insn
& 0xff)), 4);
284 void OP_60 (insn
, extension
)
285 unsigned long insn
, extension
;
287 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 4,
288 State
.regs
[REG_D0
+ REG1 (insn
)]);
291 /* mov dm, (d8,an) */
292 void OP_F81000 (insn
, extension
)
293 unsigned long insn
, extension
;
295 store_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
296 + SEXT8 (insn
& 0xff)), 4,
297 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
300 /* mov dm (d16,an) */
301 void OP_FA100000 (insn
, extension
)
302 unsigned long insn
, extension
;
304 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
305 + SEXT16 (insn
& 0xffff)), 4,
306 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
309 /* mov dm (d32,an) */
310 void OP_FC100000 (insn
, extension
)
311 unsigned long insn
, extension
;
313 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
314 + ((insn
& 0xffff) << 16) + extension
), 4,
315 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
318 /* mov dm, (d8,sp) */
319 void OP_4200 (insn
, extension
)
320 unsigned long insn
, extension
;
322 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4,
323 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
326 /* mov dm, (d16,sp) */
327 void OP_FA910000 (insn
, extension
)
328 unsigned long insn
, extension
;
330 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4,
331 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
334 /* mov dm, (d32,sp) */
335 void OP_FC910000 (insn
, extension
)
336 unsigned long insn
, extension
;
338 store_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 4,
339 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
342 /* mov dm, (di,an) */
343 void OP_F340 (insn
, extension
)
344 unsigned long insn
, extension
;
346 store_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
347 + State
.regs
[REG_D0
+ REG1 (insn
)]), 4,
348 State
.regs
[REG_D0
+ REG0_4 (insn
)]);
351 /* mov dm, (abs16) */
352 void OP_10000 (insn
, extension
)
353 unsigned long insn
, extension
;
355 store_mem ((insn
& 0xffff), 4, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
358 /* mov dm, (abs32) */
359 void OP_FC810000 (insn
, extension
)
360 unsigned long insn
, extension
;
362 store_mem ((((insn
& 0xffff) << 16) + extension
), 4, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
366 void OP_F010 (insn
, extension
)
367 unsigned long insn
, extension
;
369 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 4,
370 State
.regs
[REG_A0
+ REG1 (insn
)]);
373 /* mov am, (d8,an) */
374 void OP_F83000 (insn
, extension
)
375 unsigned long insn
, extension
;
377 store_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
378 + SEXT8 (insn
& 0xff)), 4,
379 State
.regs
[REG_A0
+ REG1_8 (insn
)]);
382 /* mov am, (d16,an) */
383 void OP_FA300000 (insn
, extension
)
384 unsigned long insn
, extension
;
386 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
387 + SEXT16 (insn
& 0xffff)), 4,
388 State
.regs
[REG_A0
+ REG1_16 (insn
)]);
391 /* mov am, (d32,an) */
392 void OP_FC300000 (insn
, extension
)
393 unsigned long insn
, extension
;
395 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
396 + ((insn
& 0xffff) << 16) + extension
), 4,
397 State
.regs
[REG_A0
+ REG1_16 (insn
)]);
400 /* mov am, (d8,sp) */
401 void OP_4300 (insn
, extension
)
402 unsigned long insn
, extension
;
404 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4,
405 State
.regs
[REG_A0
+ REG1_8 (insn
)]);
408 /* mov am, (d16,sp) */
409 void OP_FA900000 (insn
, extension
)
410 unsigned long insn
, extension
;
412 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4,
413 State
.regs
[REG_A0
+ REG1_16 (insn
)]);
416 /* mov am, (d32,sp) */
417 void OP_FC900000 (insn
, extension
)
418 unsigned long insn
, extension
;
420 store_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 4,
421 State
.regs
[REG_A0
+ REG1_16 (insn
)]);
424 /* mov am, (di,an) */
425 void OP_F3C0 (insn
, extension
)
426 unsigned long insn
, extension
;
428 store_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
429 + State
.regs
[REG_D0
+ REG1 (insn
)]), 4,
430 State
.regs
[REG_A0
+ REG0_4 (insn
)]);
433 /* mov am, (abs16) */
434 void OP_FA800000 (insn
, extension
)
435 unsigned long insn
, extension
;
437 store_mem ((insn
& 0xffff), 4, State
.regs
[REG_A0
+ REG1_16 (insn
)]);
440 /* mov am, (abs32) */
441 void OP_FC800000 (insn
, extension
)
442 unsigned long insn
, extension
;
444 store_mem ((((insn
& 0xffff) << 16) + extension
), 4, State
.regs
[REG_A0
+ REG1_16 (insn
)]);
447 /* mov sp, (d8,an) */
448 void OP_F8F400 (insn
, extension
)
449 unsigned long insn
, extension
;
451 store_mem (State
.regs
[REG_A0
+ REG0_8 (insn
)] + SEXT8 (insn
& 0xff),
452 4, State
.regs
[REG_SP
]);
456 void OP_2C0000 (insn
, extension
)
457 unsigned long insn
, extension
;
461 value
= SEXT16 (insn
& 0xffff);
462 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
466 void OP_FCCC0000 (insn
, extension
)
467 unsigned long insn
, extension
;
471 value
= ((insn
& 0xffff) << 16) + extension
;
472 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
476 void OP_240000 (insn
, extension
)
477 unsigned long insn
, extension
;
481 value
= insn
& 0xffff;
482 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
486 void OP_FCDC0000 (insn
, extension
)
487 unsigned long insn
, extension
;
491 value
= ((insn
& 0xffff) << 16) + extension
;
492 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
496 void OP_F040 (insn
, extension
)
497 unsigned long insn
, extension
;
499 State
.regs
[REG_D0
+ REG1 (insn
)]
500 = load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 1);
503 /* movbu (d8,am), dn */
504 void OP_F84000 (insn
, extension
)
505 unsigned long insn
, extension
;
507 State
.regs
[REG_D0
+ REG1_8 (insn
)]
508 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
509 + SEXT8 (insn
& 0xff)), 1);
512 /* movbu (d16,am), dn */
513 void OP_FA400000 (insn
, extension
)
514 unsigned long insn
, extension
;
516 State
.regs
[REG_D0
+ REG1_16 (insn
)]
517 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
518 + SEXT16 (insn
& 0xffff)), 1);
521 /* movbu (d32,am), dn */
522 void OP_FC400000 (insn
, extension
)
523 unsigned long insn
, extension
;
525 State
.regs
[REG_D0
+ REG1_16 (insn
)]
526 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
527 + ((insn
& 0xffff) << 16) + extension
), 1);
530 /* movbu (d8,sp), dn */
531 void OP_F8B800 (insn
, extension
)
532 unsigned long insn
, extension
;
534 State
.regs
[REG_D0
+ REG0_8 (insn
)]
535 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xff)), 1);
538 /* movbu (d16,sp), dn */
539 void OP_FAB80000 (insn
, extension
)
540 unsigned long insn
, extension
;
542 State
.regs
[REG_D0
+ REG0_16 (insn
)]
543 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xffff)), 1);
546 /* movbu (d32,sp), dn */
547 void OP_FCB80000 (insn
, extension
)
548 unsigned long insn
, extension
;
550 State
.regs
[REG_D0
+ REG0_16 (insn
)]
551 = load_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 1);
554 /* movbu (di,am), dn */
555 void OP_F400 (insn
, extension
)
556 unsigned long insn
, extension
;
558 State
.regs
[REG_D0
+ REG0_4 (insn
)]
559 = load_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
560 + State
.regs
[REG_D0
+ REG1 (insn
)]), 1);
563 /* movbu (abs16), dn */
564 void OP_340000 (insn
, extension
)
565 unsigned long insn
, extension
;
567 State
.regs
[REG_D0
+ REG0_16 (insn
)] = load_mem ((insn
& 0xffff), 1);
570 /* movbu (abs32), dn */
571 void OP_FCA80000 (insn
, extension
)
572 unsigned long insn
, extension
;
574 State
.regs
[REG_D0
+ REG0_16 (insn
)]
575 = load_mem ((((insn
& 0xffff) << 16) + extension
), 1);
579 void OP_F050 (insn
, extension
)
580 unsigned long insn
, extension
;
582 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 1,
583 State
.regs
[REG_D0
+ REG1 (insn
)]);
586 /* movbu dm, (d8,an) */
587 void OP_F85000 (insn
, extension
)
588 unsigned long insn
, extension
;
590 store_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
591 + SEXT8 (insn
& 0xff)), 1,
592 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
595 /* movbu dm, (d16,an) */
596 void OP_FA500000 (insn
, extension
)
597 unsigned long insn
, extension
;
599 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
600 + SEXT16 (insn
& 0xffff)), 1,
601 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
604 /* movbu dm, (d32,an) */
605 void OP_FC500000 (insn
, extension
)
606 unsigned long insn
, extension
;
608 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
609 + ((insn
& 0xffff) << 16) + extension
), 1,
610 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
613 /* movbu dm, (d8,sp) */
614 void OP_F89200 (insn
, extension
)
615 unsigned long insn
, extension
;
617 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 1,
618 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
621 /* movbu dm, (d16,sp) */
622 void OP_FA920000 (insn
, extension
)
623 unsigned long insn
, extension
;
625 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 2,
626 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
629 /* movbu dm (d32,sp) */
630 void OP_FC920000 (insn
, extension
)
631 unsigned long insn
, extension
;
633 store_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 2,
634 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
637 /* movbu dm, (di,an) */
638 void OP_F440 (insn
, extension
)
639 unsigned long insn
, extension
;
641 store_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
642 + State
.regs
[REG_D0
+ REG1 (insn
)]), 1,
643 State
.regs
[REG_D0
+ REG0_4 (insn
)]);
646 /* movbu dm, (abs16) */
647 void OP_20000 (insn
, extension
)
648 unsigned long insn
, extension
;
650 store_mem ((insn
& 0xffff), 1, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
653 /* movbu dm, (abs32) */
654 void OP_FC820000 (insn
, extension
)
655 unsigned long insn
, extension
;
657 store_mem ((((insn
& 0xffff) << 16) + extension
), 1, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
661 void OP_F060 (insn
, extension
)
662 unsigned long insn
, extension
;
664 State
.regs
[REG_D0
+ REG1 (insn
)]
665 = load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 2);
668 /* movhu (d8,am), dn */
669 void OP_F86000 (insn
, extension
)
670 unsigned long insn
, extension
;
672 State
.regs
[REG_D0
+ REG1_8 (insn
)]
673 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
674 + SEXT8 (insn
& 0xff)), 2);
677 /* movhu (d16,am), dn */
678 void OP_FA600000 (insn
, extension
)
679 unsigned long insn
, extension
;
681 State
.regs
[REG_D0
+ REG1_16 (insn
)]
682 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
683 + SEXT16 (insn
& 0xffff)), 2);
686 /* movhu (d32,am), dn */
687 void OP_FC600000 (insn
, extension
)
688 unsigned long insn
, extension
;
690 State
.regs
[REG_D0
+ REG1_16 (insn
)]
691 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
692 + ((insn
& 0xffff) << 16) + extension
), 2);
695 /* movhu (d8,sp) dn */
696 void OP_F8BC00 (insn
, extension
)
697 unsigned long insn
, extension
;
699 State
.regs
[REG_D0
+ REG0_8 (insn
)]
700 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xff)), 2);
703 /* movhu (d16,sp), dn */
704 void OP_FABC0000 (insn
, extension
)
705 unsigned long insn
, extension
;
707 State
.regs
[REG_D0
+ REG0_16 (insn
)]
708 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xffff)), 2);
711 /* movhu (d32,sp), dn */
712 void OP_FCBC0000 (insn
, extension
)
713 unsigned long insn
, extension
;
715 State
.regs
[REG_D0
+ REG0_16 (insn
)]
716 = load_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 2);
719 /* movhu (di,am), dn */
720 void OP_F480 (insn
, extension
)
721 unsigned long insn
, extension
;
723 State
.regs
[REG_D0
+ REG0_4 (insn
)]
724 = load_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
725 + State
.regs
[REG_D0
+ REG1 (insn
)]), 2);
728 /* movhu (abs16), dn */
729 void OP_380000 (insn
, extension
)
730 unsigned long insn
, extension
;
732 State
.regs
[REG_D0
+ REG0_16 (insn
)] = load_mem ((insn
& 0xffff), 2);
735 /* movhu (abs32), dn */
736 void OP_FCAC0000 (insn
, extension
)
737 unsigned long insn
, extension
;
739 State
.regs
[REG_D0
+ REG0_16 (insn
)]
740 = load_mem ((((insn
& 0xffff) << 16) + extension
), 2);
744 void OP_F070 (insn
, extension
)
745 unsigned long insn
, extension
;
747 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 2,
748 State
.regs
[REG_D0
+ REG1 (insn
)]);
751 /* movhu dm, (d8,an) */
752 void OP_F87000 (insn
, extension
)
753 unsigned long insn
, extension
;
755 store_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
756 + SEXT8 (insn
& 0xff)), 2,
757 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
760 /* movhu dm, (d16,an) */
761 void OP_FA700000 (insn
, extension
)
762 unsigned long insn
, extension
;
764 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
765 + SEXT16 (insn
& 0xffff)), 2,
766 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
769 /* movhu dm, (d32,an) */
770 void OP_FC700000 (insn
, extension
)
771 unsigned long insn
, extension
;
773 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
774 + ((insn
& 0xffff) << 16) + extension
), 2,
775 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
778 /* movhu dm,(d8,sp) */
779 void OP_F89300 (insn
, extension
)
780 unsigned long insn
, extension
;
782 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 2,
783 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
786 /* movhu dm,(d16,sp) */
787 void OP_FA930000 (insn
, extension
)
788 unsigned long insn
, extension
;
790 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 2,
791 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
794 /* movhu dm,(d32,sp) */
795 void OP_FC930000 (insn
, extension
)
796 unsigned long insn
, extension
;
798 store_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 2,
799 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
802 /* movhu dm, (di,an) */
803 void OP_F4C0 (insn
, extension
)
804 unsigned long insn
, extension
;
806 store_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
807 + State
.regs
[REG_D0
+ REG1 (insn
)]), 2,
808 State
.regs
[REG_D0
+ REG0_4 (insn
)]);
811 /* movhu dm, (abs16) */
812 void OP_30000 (insn
, extension
)
813 unsigned long insn
, extension
;
815 store_mem ((insn
& 0xffff), 2, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
818 /* movhu dm, (abs32) */
819 void OP_FC830000 (insn
, extension
)
820 unsigned long insn
, extension
;
822 store_mem ((((insn
& 0xffff) << 16) + extension
), 2, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
826 void OP_F2D0 (insn
, extension
)
827 unsigned long insn
, extension
;
829 if (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000)
830 State
.regs
[REG_MDR
] = -1;
832 State
.regs
[REG_MDR
] = 0;
836 void OP_10 (insn
, extension
)
837 unsigned long insn
, extension
;
839 State
.regs
[REG_D0
+ REG0 (insn
)] = SEXT8 (State
.regs
[REG_D0
+ REG0 (insn
)]);
843 void OP_14 (insn
, extension
)
844 unsigned long insn
, extension
;
846 State
.regs
[REG_D0
+ REG0 (insn
)] &= 0xff;
850 void OP_18 (insn
, extension
)
851 unsigned long insn
, extension
;
853 State
.regs
[REG_D0
+ REG0 (insn
)]
854 = SEXT16 (State
.regs
[REG_D0
+ REG0 (insn
)]);
858 void OP_1C (insn
, extension
)
859 unsigned long insn
, extension
;
861 State
.regs
[REG_D0
+ REG0 (insn
)] &= 0xffff;
864 /* movm (sp), reg_list */
865 void OP_CE00 (insn
, extension
)
866 unsigned long insn
, extension
;
868 unsigned long sp
= State
.regs
[REG_SP
];
876 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
878 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
880 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
882 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
884 State
.regs
[REG_A0
] = load_mem (sp
, 4);
886 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
888 State
.regs
[REG_D0
] = load_mem (sp
, 4);
894 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
900 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
906 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
912 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
916 /* And make sure to update the stack pointer. */
917 State
.regs
[REG_SP
] = sp
;
920 /* movm reg_list, (sp) */
921 void OP_CF00 (insn
, extension
)
922 unsigned long insn
, extension
;
924 unsigned long sp
= State
.regs
[REG_SP
];
932 store_mem (sp
, 4, State
.regs
[REG_D0
+ 2]);
938 store_mem (sp
, 4, State
.regs
[REG_D0
+ 3]);
944 store_mem (sp
, 4, State
.regs
[REG_A0
+ 2]);
950 store_mem (sp
, 4, State
.regs
[REG_A0
+ 3]);
956 store_mem (sp
, 4, State
.regs
[REG_D0
]);
958 store_mem (sp
, 4, State
.regs
[REG_D0
+ 1]);
960 store_mem (sp
, 4, State
.regs
[REG_A0
]);
962 store_mem (sp
, 4, State
.regs
[REG_A0
+ 1]);
964 store_mem (sp
, 4, State
.regs
[REG_MDR
]);
966 store_mem (sp
, 4, State
.regs
[REG_LIR
]);
968 store_mem (sp
, 4, State
.regs
[REG_LAR
]);
972 /* And make sure to update the stack pointer. */
973 State
.regs
[REG_SP
] = sp
;
977 void OP_0 (insn
, extension
)
978 unsigned long insn
, extension
;
980 State
.regs
[REG_D0
+ REG1 (insn
)] = 0;
983 PSW
&= ~(PSW_V
| PSW_C
| PSW_N
);
987 void OP_E0 (insn
, extension
)
988 unsigned long insn
, extension
;
991 unsigned long reg1
, reg2
, value
;
993 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
994 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
996 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
999 n
= (value
& 0x80000000);
1001 v
= ((reg2
& 0x80000000) == (reg1
& 0x80000000)
1002 && (reg2
& 0x80000000) != (value
& 0x80000000));
1004 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1005 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1006 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1010 void OP_F160 (insn
, extension
)
1011 unsigned long insn
, extension
;
1014 unsigned long reg1
, reg2
, value
;
1016 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1017 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1018 value
= reg1
+ reg2
;
1019 State
.regs
[REG_A0
+ REG0 (insn
)] = value
;
1022 n
= (value
& 0x80000000);
1024 v
= ((reg2
& 0x80000000) == (reg1
& 0x80000000)
1025 && (reg2
& 0x80000000) != (value
& 0x80000000));
1027 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1028 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1029 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1033 void OP_F150 (insn
, extension
)
1034 unsigned long insn
, extension
;
1037 unsigned long reg1
, reg2
, value
;
1039 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1040 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1041 value
= reg1
+ reg2
;
1042 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1045 n
= (value
& 0x80000000);
1047 v
= ((reg2
& 0x80000000) == (reg1
& 0x80000000)
1048 && (reg2
& 0x80000000) != (value
& 0x80000000));
1050 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1051 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1052 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1056 void OP_F170 (insn
, extension
)
1057 unsigned long insn
, extension
;
1060 unsigned long reg1
, reg2
, value
;
1062 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1063 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1064 value
= reg1
+ reg2
;
1065 State
.regs
[REG_A0
+ REG0 (insn
)] = value
;
1068 n
= (value
& 0x80000000);
1070 v
= ((reg2
& 0x80000000) == (reg1
& 0x80000000)
1071 && (reg2
& 0x80000000) != (value
& 0x80000000));
1073 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1074 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1075 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1079 void OP_2800 (insn
, extension
)
1080 unsigned long insn
, extension
;
1083 unsigned long reg1
, imm
, value
;
1085 reg1
= State
.regs
[REG_D0
+ REG0_8 (insn
)];
1086 imm
= SEXT8 (insn
& 0xff);
1088 State
.regs
[REG_D0
+ REG0_8 (insn
)] = value
;
1091 n
= (value
& 0x80000000);
1093 v
= ((reg1
& 0x80000000) == (imm
& 0x80000000)
1094 && (reg1
& 0x80000000) != (value
& 0x80000000));
1096 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1097 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1098 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1102 void OP_FAC00000 (insn
, extension
)
1103 unsigned long insn
, extension
;
1106 unsigned long reg1
, imm
, value
;
1108 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1109 imm
= SEXT16 (insn
& 0xffff);
1111 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
1114 n
= (value
& 0x80000000);
1116 v
= ((reg1
& 0x80000000) == (imm
& 0x80000000)
1117 && (reg1
& 0x80000000) != (value
& 0x80000000));
1119 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1120 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1121 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1125 void OP_FCC00000 (insn
, extension
)
1126 unsigned long insn
, extension
;
1129 unsigned long reg1
, imm
, value
;
1131 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1132 imm
= ((insn
& 0xffff) << 16) + extension
;
1134 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
1137 n
= (value
& 0x80000000);
1139 v
= ((reg1
& 0x80000000) == (imm
& 0x80000000)
1140 && (reg1
& 0x80000000) != (value
& 0x80000000));
1142 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1143 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1144 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1148 void OP_2000 (insn
, extension
)
1149 unsigned long insn
, extension
;
1152 unsigned long reg1
, imm
, value
;
1154 reg1
= State
.regs
[REG_A0
+ REG0_8 (insn
)];
1155 imm
= SEXT8 (insn
& 0xff);
1157 State
.regs
[REG_A0
+ REG0_8 (insn
)] = value
;
1160 n
= (value
& 0x80000000);
1162 v
= ((reg1
& 0x80000000) == (imm
& 0x80000000)
1163 && (reg1
& 0x80000000) != (value
& 0x80000000));
1165 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1166 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1167 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1171 void OP_FAD00000 (insn
, extension
)
1172 unsigned long insn
, extension
;
1175 unsigned long reg1
, imm
, value
;
1177 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1178 imm
= SEXT16 (insn
& 0xffff);
1180 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
1183 n
= (value
& 0x80000000);
1185 v
= ((reg1
& 0x80000000) == (imm
& 0x80000000)
1186 && (reg1
& 0x80000000) != (value
& 0x80000000));
1188 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1189 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1190 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1194 void OP_FCD00000 (insn
, extension
)
1195 unsigned long insn
, extension
;
1198 unsigned long reg1
, imm
, value
;
1200 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1201 imm
= ((insn
& 0xffff) << 16) + extension
;
1203 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
1206 n
= (value
& 0x80000000);
1208 v
= ((reg1
& 0x80000000) == (imm
& 0x80000000)
1209 && (reg1
& 0x80000000) != (value
& 0x80000000));
1211 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1212 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1213 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1217 void OP_F8FE00 (insn
, extension
)
1218 unsigned long insn
, extension
;
1220 unsigned long reg1
, imm
, value
;
1222 reg1
= State
.regs
[REG_SP
];
1223 imm
= SEXT8 (insn
& 0xff);
1225 State
.regs
[REG_SP
] = value
;
1229 void OP_FAFE0000 (insn
, extension
)
1230 unsigned long insn
, extension
;
1232 unsigned long reg1
, imm
, value
;
1234 reg1
= State
.regs
[REG_SP
];
1235 imm
= SEXT16 (insn
& 0xffff);
1237 State
.regs
[REG_SP
] = value
;
1241 void OP_FCFE0000 (insn
, extension
)
1242 unsigned long insn
, extension
;
1244 unsigned long reg1
, imm
, value
;
1246 reg1
= State
.regs
[REG_SP
];
1247 imm
= ((insn
& 0xffff) << 16) + extension
;
1249 State
.regs
[REG_SP
] = value
;
1253 void OP_F140 (insn
, extension
)
1254 unsigned long insn
, extension
;
1257 unsigned long reg1
, reg2
, value
;
1259 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1260 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1261 value
= reg1
+ reg2
+ ((PSW
& PSW_C
) != 0);
1262 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1265 n
= (value
& 0x80000000);
1267 v
= ((reg2
& 0x80000000) == (reg1
& 0x80000000)
1268 && (reg2
& 0x80000000) != (value
& 0x80000000));
1270 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1271 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1272 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1276 void OP_F100 (insn
, extension
)
1277 unsigned long insn
, extension
;
1280 unsigned long reg1
, reg2
, value
;
1282 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1283 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1284 value
= reg2
- reg1
;
1287 n
= (value
& 0x80000000);
1289 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1290 && (reg2
& 0x80000000) != (value
& 0x80000000));
1292 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1293 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1294 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1295 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1299 void OP_F120 (insn
, extension
)
1300 unsigned long insn
, extension
;
1303 unsigned long reg1
, reg2
, value
;
1305 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1306 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1307 value
= reg2
- reg1
;
1310 n
= (value
& 0x80000000);
1312 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1313 && (reg2
& 0x80000000) != (value
& 0x80000000));
1315 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1316 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1317 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1318 State
.regs
[REG_A0
+ REG0 (insn
)] = value
;
1322 void OP_F110 (insn
, extension
)
1323 unsigned long insn
, extension
;
1326 unsigned long reg1
, reg2
, value
;
1328 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1329 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1330 value
= reg2
- reg1
;
1333 n
= (value
& 0x80000000);
1335 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1336 && (reg2
& 0x80000000) != (value
& 0x80000000));
1338 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1339 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1340 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1341 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1345 void OP_F130 (insn
, extension
)
1346 unsigned long insn
, extension
;
1349 unsigned long reg1
, reg2
, value
;
1351 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1352 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1353 value
= reg2
- reg1
;
1356 n
= (value
& 0x80000000);
1358 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1359 && (reg2
& 0x80000000) != (value
& 0x80000000));
1361 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1362 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1363 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1364 State
.regs
[REG_A0
+ REG0 (insn
)] = value
;
1368 void OP_FCC40000 (insn
, extension
)
1369 unsigned long insn
, extension
;
1372 unsigned long reg1
, imm
, value
;
1374 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1375 imm
= ((insn
& 0xffff) << 16) + extension
;
1379 n
= (value
& 0x80000000);
1381 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1382 && (reg1
& 0x80000000) != (value
& 0x80000000));
1384 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1385 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1386 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1387 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
1391 void OP_FCD40000 (insn
, extension
)
1392 unsigned long insn
, extension
;
1395 unsigned long reg1
, imm
, value
;
1397 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1398 imm
= ((insn
& 0xffff) << 16) + extension
;
1402 n
= (value
& 0x80000000);
1404 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1405 && (reg1
& 0x80000000) != (value
& 0x80000000));
1407 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1408 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1409 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1410 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
1414 void OP_F180 (insn
, extension
)
1415 unsigned long insn
, extension
;
1418 unsigned long reg1
, reg2
, value
;
1420 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1421 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1422 value
= reg2
- reg1
- ((PSW
& PSW_C
) != 0);
1425 n
= (value
& 0x80000000);
1427 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1428 && (reg2
& 0x80000000) != (value
& 0x80000000));
1430 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1431 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1432 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1433 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1437 void OP_F240 (insn
, extension
)
1438 unsigned long insn
, extension
;
1440 unsigned long long temp
;
1443 temp
= (State
.regs
[REG_D0
+ REG0 (insn
)]
1444 * State
.regs
[REG_D0
+ REG1 (insn
)]);
1445 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
& 0xffffffff;
1446 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1447 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1448 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1449 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1450 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1454 void OP_F250 (insn
, extension
)
1455 unsigned long insn
, extension
;
1457 unsigned long long temp
;
1460 temp
= (State
.regs
[REG_D0
+ REG0 (insn
)]
1461 * State
.regs
[REG_D0
+ REG1 (insn
)]);
1462 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
& 0xffffffff;
1463 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1464 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1465 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1466 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1467 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1471 void OP_F260 (insn
, extension
)
1472 unsigned long insn
, extension
;
1477 temp
= State
.regs
[REG_MDR
];
1479 temp
|= State
.regs
[REG_D0
+ REG0 (insn
)];
1480 State
.regs
[REG_MDR
] = temp
% (long)State
.regs
[REG_D0
+ REG1 (insn
)];
1481 temp
/= (long)State
.regs
[REG_D0
+ REG1 (insn
)];
1482 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
& 0xffffffff;
1483 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1484 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1485 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1486 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1487 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1491 void OP_F270 (insn
, extension
)
1492 unsigned long insn
, extension
;
1494 unsigned long long temp
;
1497 temp
= State
.regs
[REG_MDR
];
1499 temp
|= State
.regs
[REG_D0
+ REG0 (insn
)];
1500 State
.regs
[REG_MDR
] = temp
% State
.regs
[REG_D0
+ REG1 (insn
)];
1501 temp
/= State
.regs
[REG_D0
+ REG1 (insn
)];
1502 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
& 0xffffffff;
1503 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1504 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1505 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1506 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1507 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1511 void OP_40 (insn
, extension
)
1512 unsigned long insn
, extension
;
1515 unsigned int value
, imm
, reg1
;
1517 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1520 State
.regs
[REG_D0
+ REG1 (insn
)] = value
;
1523 n
= (value
& 0x80000000);
1525 v
= ((reg1
& 0x80000000) == (imm
& 0x80000000)
1526 && (reg1
& 0x80000000) != (value
& 0x80000000));
1528 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1529 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1530 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1534 void OP_41 (insn
, extension
)
1535 unsigned long insn
, extension
;
1537 State
.regs
[REG_A0
+ REG1 (insn
)] += 1;
1541 void OP_50 (insn
, extension
)
1542 unsigned long insn
, extension
;
1544 State
.regs
[REG_A0
+ REG0 (insn
)] += 4;
1548 void OP_A000 (insn
, extension
)
1549 unsigned long insn
, extension
;
1552 unsigned long reg1
, imm
, value
;
1554 reg1
= State
.regs
[REG_D0
+ REG0_8 (insn
)];
1555 imm
= SEXT8 (insn
& 0xff);
1559 n
= (value
& 0x80000000);
1561 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1562 && (reg1
& 0x80000000) != (value
& 0x80000000));
1564 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1565 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1566 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1570 void OP_A0 (insn
, extension
)
1571 unsigned long insn
, extension
;
1574 unsigned long reg1
, reg2
, value
;
1576 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1577 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1578 value
= reg2
- reg1
;
1581 n
= (value
& 0x80000000);
1583 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1584 && (reg2
& 0x80000000) != (value
& 0x80000000));
1586 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1587 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1588 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1592 void OP_F1A0 (insn
, extension
)
1593 unsigned long insn
, extension
;
1596 unsigned long reg1
, reg2
, value
;
1598 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1599 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1600 value
= reg2
- reg1
;
1603 n
= (value
& 0x80000000);
1605 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1606 && (reg2
& 0x80000000) != (value
& 0x80000000));
1608 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1609 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1610 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1614 void OP_F190 (insn
, extension
)
1615 unsigned long insn
, extension
;
1618 unsigned long reg1
, reg2
, value
;
1620 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1621 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1622 value
= reg2
- reg1
;
1625 n
= (value
& 0x80000000);
1627 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1628 && (reg2
& 0x80000000) != (value
& 0x80000000));
1630 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1631 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1632 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1636 void OP_B000 (insn
, extension
)
1637 unsigned long insn
, extension
;
1640 unsigned long reg1
, imm
, value
;
1642 reg1
= State
.regs
[REG_A0
+ REG0_8 (insn
)];
1647 n
= (value
& 0x80000000);
1649 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1650 && (reg1
& 0x80000000) != (value
& 0x80000000));
1652 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1653 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1654 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1658 void OP_B0 (insn
, extension
)
1659 unsigned long insn
, extension
;
1662 unsigned long reg1
, reg2
, value
;
1664 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1665 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1666 value
= reg2
- reg1
;
1669 n
= (value
& 0x80000000);
1671 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1672 && (reg2
& 0x80000000) != (value
& 0x80000000));
1674 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1675 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1676 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1680 void OP_FAC80000 (insn
, extension
)
1681 unsigned long insn
, extension
;
1684 unsigned long reg1
, imm
, value
;
1686 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1687 imm
= SEXT16 (insn
& 0xffff);
1691 n
= (value
& 0x80000000);
1693 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1694 && (reg1
& 0x80000000) != (value
& 0x80000000));
1696 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1697 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1698 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1702 void OP_FCC80000 (insn
, extension
)
1703 unsigned long insn
, extension
;
1706 unsigned long reg1
, imm
, value
;
1708 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1709 imm
= ((insn
& 0xffff) << 16) + extension
;
1713 n
= (value
& 0x80000000);
1715 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1716 && (reg1
& 0x80000000) != (value
& 0x80000000));
1718 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1719 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1720 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1724 void OP_FAD80000 (insn
, extension
)
1725 unsigned long insn
, extension
;
1728 unsigned long reg1
, imm
, value
;
1730 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1731 imm
= insn
& 0xffff;
1735 n
= (value
& 0x80000000);
1737 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1738 && (reg1
& 0x80000000) != (value
& 0x80000000));
1740 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1741 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1742 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1746 void OP_FCD80000 (insn
, extension
)
1747 unsigned long insn
, extension
;
1750 unsigned long reg1
, imm
, value
;
1752 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1753 imm
= ((insn
& 0xffff) << 16) + extension
;
1757 n
= (value
& 0x80000000);
1759 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1760 && (reg1
& 0x80000000) != (value
& 0x80000000));
1762 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1763 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1764 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1768 void OP_F200 (insn
, extension
)
1769 unsigned long insn
, extension
;
1773 State
.regs
[REG_D0
+ REG0 (insn
)] &= State
.regs
[REG_D0
+ REG1 (insn
)];
1774 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1775 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1776 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1777 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1781 void OP_F8E000 (insn
, extension
)
1782 unsigned long insn
, extension
;
1786 State
.regs
[REG_D0
+ REG0_8 (insn
)] &= (insn
& 0xff);
1787 z
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] == 0);
1788 n
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] & 0x80000000) != 0;
1789 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1790 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1794 void OP_FAE00000 (insn
, extension
)
1795 unsigned long insn
, extension
;
1799 State
.regs
[REG_D0
+ REG0_16 (insn
)] &= (insn
& 0xffff);
1800 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1801 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1802 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1803 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1807 void OP_FCE00000 (insn
, extension
)
1808 unsigned long insn
, extension
;
1812 State
.regs
[REG_D0
+ REG0_16 (insn
)]
1813 &= ((insn
& 0xffff) << 16) + extension
;
1814 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1815 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1816 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1817 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1820 /* and imm16, psw */
1821 void OP_FAFC0000 (insn
, extension
)
1822 unsigned long insn
, extension
;
1824 PSW
&= (insn
& 0xffff);
1828 void OP_F210 (insn
, extension
)
1829 unsigned long insn
, extension
;
1833 State
.regs
[REG_D0
+ REG0 (insn
)] |= State
.regs
[REG_D0
+ REG1 (insn
)];
1834 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1835 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1836 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1837 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1841 void OP_F8E400 (insn
, extension
)
1842 unsigned long insn
, extension
;
1846 State
.regs
[REG_D0
+ REG0_8 (insn
)] |= insn
& 0xff;
1847 z
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] == 0);
1848 n
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] & 0x80000000) != 0;
1849 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1850 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1854 void OP_FAE40000 (insn
, extension
)
1855 unsigned long insn
, extension
;
1859 State
.regs
[REG_D0
+ REG0_16 (insn
)] |= insn
& 0xffff;
1860 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1861 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1862 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1863 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1867 void OP_FCE40000 (insn
, extension
)
1868 unsigned long insn
, extension
;
1872 State
.regs
[REG_D0
+ REG0_16 (insn
)]
1873 |= ((insn
& 0xffff) << 16) + extension
;
1874 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1875 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1876 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1877 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1881 void OP_FAFD0000 (insn
, extension
)
1882 unsigned long insn
, extension
;
1884 PSW
|= (insn
& 0xffff);
1888 void OP_F220 (insn
, extension
)
1889 unsigned long insn
, extension
;
1893 State
.regs
[REG_D0
+ REG0 (insn
)] ^= State
.regs
[REG_D0
+ REG1 (insn
)];
1894 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1895 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1896 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1897 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1901 void OP_FAE80000 (insn
, extension
)
1902 unsigned long insn
, extension
;
1906 State
.regs
[REG_D0
+ REG0_16 (insn
)] ^= insn
& 0xffff;
1907 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1908 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1909 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1910 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1914 void OP_FCE80000 (insn
, extension
)
1915 unsigned long insn
, extension
;
1919 State
.regs
[REG_D0
+ REG0_16 (insn
)]
1920 ^= ((insn
& 0xffff) << 16) + extension
;
1921 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1922 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1923 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1924 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1928 void OP_F230 (insn
, extension
)
1929 unsigned long insn
, extension
;
1933 State
.regs
[REG_D0
+ REG0 (insn
)] = ~State
.regs
[REG_D0
+ REG0 (insn
)];
1934 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1935 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1936 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1937 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1941 void OP_F8EC00 (insn
, extension
)
1942 unsigned long insn
, extension
;
1947 temp
= State
.regs
[REG_D0
+ REG0_8 (insn
)];
1948 temp
&= (insn
& 0xff);
1949 n
= (temp
& 0x80000000) != 0;
1951 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1952 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1955 /* btst imm16, dn */
1956 void OP_FAEC0000 (insn
, extension
)
1957 unsigned long insn
, extension
;
1962 temp
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1963 temp
&= (insn
& 0xffff);
1964 n
= (temp
& 0x80000000) != 0;
1966 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1967 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1970 /* btst imm32, dn */
1971 void OP_FCEC0000 (insn
, extension
)
1972 unsigned long insn
, extension
;
1977 temp
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1978 temp
&= ((insn
& 0xffff) << 16) + extension
;
1979 n
= (temp
& 0x80000000) != 0;
1981 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1982 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1985 /* btst imm8,(abs32) */
1986 void OP_FE020000 (insn
, extension
)
1987 unsigned long insn
, extension
;
1992 temp
= load_mem (((insn
& 0xffff) << 16) | (extension
>> 8), 1);
1993 temp
&= (extension
& 0xff);
1994 n
= (temp
& 0x80000000) != 0;
1996 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1997 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
2000 /* btst imm8,(d8,an) */
2001 void OP_FAF80000 (insn
, extension
)
2002 unsigned long insn
, extension
;
2007 temp
= load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
2008 + SEXT8 ((insn
& 0xff00) >> 8)), 1);
2009 temp
&= (insn
& 0xff);
2010 n
= (temp
& 0x80000000) != 0;
2012 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2013 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
2017 void OP_F080 (insn
, extension
)
2018 unsigned long insn
, extension
;
2023 temp
= load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 1);
2024 z
= (temp
& State
.regs
[REG_D0
+ REG1 (insn
)]) == 0;
2025 temp
|= State
.regs
[REG_D0
+ REG1 (insn
)];
2026 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 1, temp
);
2027 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2028 PSW
|= (z
? PSW_Z
: 0);
2031 /* bset imm8, (abs32) */
2032 void OP_FE000000 (insn
, extension
)
2033 unsigned long insn
, extension
;
2038 temp
= load_mem (((insn
& 0xffff) << 16 | (extension
>> 8)), 1);
2039 z
= (temp
& (extension
& 0xff)) == 0;
2040 temp
|= (extension
& 0xff);
2041 store_mem ((((insn
& 0xffff) << 16) | (extension
>> 8)), 1, temp
);
2042 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2043 PSW
|= (z
? PSW_Z
: 0);
2046 /* bset imm8,(d8,an) */
2047 void OP_FAF00000 (insn
, extension
)
2048 unsigned long insn
, extension
;
2053 temp
= load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
2054 + SEXT8 ((insn
& 0xff00) >> 8)), 1);
2055 z
= (temp
& (insn
& 0xff)) == 0;
2056 temp
|= (insn
& 0xff);
2057 store_mem (State
.regs
[REG_A0
+ REG0_16 (insn
)], 1, temp
);
2058 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2059 PSW
|= (z
? PSW_Z
: 0);
2063 void OP_F090 (insn
, extension
)
2064 unsigned long insn
, extension
;
2069 temp
= load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 1);
2070 z
= (temp
& State
.regs
[REG_D0
+ REG1 (insn
)]) == 0;
2071 temp
= ~temp
& State
.regs
[REG_D0
+ REG1 (insn
)];
2072 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 1, temp
);
2073 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2074 PSW
|= (z
? PSW_Z
: 0);
2077 /* bclr imm8, (abs32) */
2078 void OP_FE010000 (insn
, extension
)
2079 unsigned long insn
, extension
;
2084 temp
= load_mem (((insn
& 0xffff) << 16) | (extension
>> 8), 1);
2085 z
= (temp
& (extension
& 0xff)) == 0;
2086 temp
= ~temp
& (extension
& 0xff);
2087 store_mem (((insn
& 0xffff) << 16) | (extension
>> 8), 1, temp
);
2088 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2089 PSW
|= (z
? PSW_Z
: 0);
2092 /* bclr imm8,(d8,an) */
2093 void OP_FAF40000 (insn
, extension
)
2094 unsigned long insn
, extension
;
2099 temp
= load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
2100 + SEXT8 ((insn
& 0xff00) >> 8)), 1);
2101 z
= (temp
& (insn
& 0xff)) == 0;
2102 temp
= ~temp
& (insn
& 0xff);
2103 store_mem (State
.regs
[REG_A0
+ REG0_16 (insn
)], 1, temp
);
2104 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2105 PSW
|= (z
? PSW_Z
: 0);
2109 void OP_F2B0 (insn
, extension
)
2110 unsigned long insn
, extension
;
2115 temp
= State
.regs
[REG_D0
+ REG0 (insn
)];
2117 temp
>>= State
.regs
[REG_D0
+ REG1 (insn
)];
2118 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
;
2119 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
2120 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
2121 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
2122 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2126 void OP_F8C800 (insn
, extension
)
2127 unsigned long insn
, extension
;
2132 temp
= State
.regs
[REG_D0
+ REG0_8 (insn
)];
2134 temp
>>= (insn
& 0xff);
2135 State
.regs
[REG_D0
+ REG0_8 (insn
)] = temp
;
2136 z
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] == 0);
2137 n
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] & 0x80000000) != 0;
2138 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
2139 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2143 void OP_F2A0 (insn
, extension
)
2144 unsigned long insn
, extension
;
2148 c
= State
.regs
[REG_D0
+ REG0 (insn
)] & 1;
2149 State
.regs
[REG_D0
+ REG0 (insn
)]
2150 >>= State
.regs
[REG_D0
+ REG1 (insn
)];
2151 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
2152 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
2153 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
2154 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2158 void OP_F8C400 (insn
, extension
)
2159 unsigned long insn
, extension
;
2163 c
= State
.regs
[REG_D0
+ REG0_8 (insn
)] & 1;
2164 State
.regs
[REG_D0
+ REG0_8 (insn
)] >>= (insn
& 0xff);
2165 z
= (State
.regs
[REG_D0
+ (REG0 (insn
) >> 8)] == 0);
2166 n
= (State
.regs
[REG_D0
+ (REG0 (insn
) >> 8)] & 0x80000000) != 0;
2167 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
2168 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2172 void OP_F290 (insn
, extension
)
2173 unsigned long insn
, extension
;
2177 State
.regs
[REG_D0
+ REG0 (insn
)]
2178 <<= State
.regs
[REG_D0
+ REG1 (insn
)];
2179 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
2180 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
2181 PSW
&= ~(PSW_Z
| PSW_N
);
2182 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
2186 void OP_F8C000 (insn
, extension
)
2187 unsigned long insn
, extension
;
2191 State
.regs
[REG_D0
+ REG0_8 (insn
)] <<= (insn
& 0xff);
2192 z
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] == 0);
2193 n
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] & 0x80000000) != 0;
2194 PSW
&= ~(PSW_Z
| PSW_N
);
2195 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
2199 void OP_54 (insn
, extension
)
2200 unsigned long insn
, extension
;
2204 State
.regs
[REG_D0
+ REG0 (insn
)] <<= 2;
2205 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
2206 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
2207 PSW
&= ~(PSW_Z
| PSW_N
);
2208 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
2212 void OP_F284 (insn
, extension
)
2213 unsigned long insn
, extension
;
2215 unsigned long value
;
2218 value
= State
.regs
[REG_D0
+ REG0 (insn
)];
2222 value
|= ((PSW
& PSW_C
) != 0) ? 0x80000000 : 0;
2223 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
2225 n
= (value
& 0x80000000) != 0;
2226 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2227 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2231 void OP_F280 (insn
, extension
)
2232 unsigned long insn
, extension
;
2234 unsigned long value
;
2237 value
= State
.regs
[REG_D0
+ REG0 (insn
)];
2238 c
= (value
& 0x80000000) ? 1 : 0;
2241 value
|= ((PSW
& PSW_C
) != 0);
2242 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
2244 n
= (value
& 0x80000000) != 0;
2245 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2246 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2250 void OP_C800 (insn
, extension
)
2251 unsigned long insn
, extension
;
2253 /* The dispatching code will add 2 after we return, so
2254 we subtract two here to make things right. */
2256 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2260 void OP_C900 (insn
, extension
)
2261 unsigned long insn
, extension
;
2263 /* The dispatching code will add 2 after we return, so
2264 we subtract two here to make things right. */
2266 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2270 void OP_C100 (insn
, extension
)
2271 unsigned long insn
, extension
;
2273 /* The dispatching code will add 2 after we return, so
2274 we subtract two here to make things right. */
2276 || (((PSW
& PSW_N
) != 0) ^ ((PSW
& PSW_V
) != 0))))
2277 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2281 void OP_C200 (insn
, extension
)
2282 unsigned long insn
, extension
;
2284 /* The dispatching code will add 2 after we return, so
2285 we subtract two here to make things right. */
2286 if (!(((PSW
& PSW_N
) != 0) ^ ((PSW
& PSW_V
) != 0)))
2287 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2291 void OP_C300 (insn
, extension
)
2292 unsigned long insn
, extension
;
2294 /* The dispatching code will add 2 after we return, so
2295 we subtract two here to make things right. */
2297 || (((PSW
& PSW_N
) != 0) ^ ((PSW
& PSW_V
) != 0)))
2298 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2302 void OP_C000 (insn
, extension
)
2303 unsigned long insn
, extension
;
2305 /* The dispatching code will add 2 after we return, so
2306 we subtract two here to make things right. */
2307 if (((PSW
& PSW_N
) != 0) ^ ((PSW
& PSW_V
) != 0))
2308 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2312 void OP_C500 (insn
, extension
)
2313 unsigned long insn
, extension
;
2315 /* The dispatching code will add 2 after we return, so
2316 we subtract two here to make things right. */
2317 if (!(((PSW
& PSW_C
) != 0) || (PSW
& PSW_Z
) != 0))
2318 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2322 void OP_C600 (insn
, extension
)
2323 unsigned long insn
, extension
;
2325 /* The dispatching code will add 2 after we return, so
2326 we subtract two here to make things right. */
2328 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2332 void OP_C700 (insn
, extension
)
2333 unsigned long insn
, extension
;
2335 /* The dispatching code will add 2 after we return, so
2336 we subtract two here to make things right. */
2337 if (((PSW
& PSW_C
) != 0) || (PSW
& PSW_Z
) != 0)
2338 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2342 void OP_C400 (insn
, extension
)
2343 unsigned long insn
, extension
;
2345 /* The dispatching code will add 2 after we return, so
2346 we subtract two here to make things right. */
2348 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2352 void OP_F8E800 (insn
, extension
)
2353 unsigned long insn
, extension
;
2355 /* The dispatching code will add 3 after we return, so
2356 we subtract two here to make things right. */
2358 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 3;
2362 void OP_F8E900 (insn
, extension
)
2363 unsigned long insn
, extension
;
2365 /* The dispatching code will add 3 after we return, so
2366 we subtract two here to make things right. */
2368 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 3;
2372 void OP_F8EA00 (insn
, extension
)
2373 unsigned long insn
, extension
;
2375 /* The dispatching code will add 3 after we return, so
2376 we subtract two here to make things right. */
2378 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 3;
2382 void OP_F8EB00 (insn
, extension
)
2383 unsigned long insn
, extension
;
2385 /* The dispatching code will add 3 after we return, so
2386 we subtract two here to make things right. */
2388 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 3;
2392 void OP_CA00 (insn
, extension
)
2393 unsigned long insn
, extension
;
2395 /* The dispatching code will add 2 after we return, so
2396 we subtract two here to make things right. */
2397 State
.regs
[REG_PC
] += SEXT8 (insn
& 0xff) - 2;
2401 void OP_D8 (insn
, extension
)
2402 unsigned long insn
, extension
;
2408 void OP_D9 (insn
, extension
)
2409 unsigned long insn
, extension
;
2415 void OP_D1 (insn
, extension
)
2416 unsigned long insn
, extension
;
2422 void OP_D2 (insn
, extension
)
2423 unsigned long insn
, extension
;
2429 void OP_D3 (insn
, extension
)
2430 unsigned long insn
, extension
;
2436 void OP_D0 (insn
, extension
)
2437 unsigned long insn
, extension
;
2443 void OP_D5 (insn
, extension
)
2444 unsigned long insn
, extension
;
2450 void OP_D6 (insn
, extension
)
2451 unsigned long insn
, extension
;
2457 void OP_D7 (insn
, extension
)
2458 unsigned long insn
, extension
;
2464 void OP_D4 (insn
, extension
)
2465 unsigned long insn
, extension
;
2471 void OP_DA (insn
, extension
)
2472 unsigned long insn
, extension
;
2478 void OP_DB (insn
, extension
)
2479 unsigned long insn
, extension
;
2485 void OP_F0F4 (insn
, extension
)
2486 unsigned long insn
, extension
;
2488 State
.regs
[REG_PC
] = State
.regs
[REG_A0
+ REG0 (insn
)] - 2;
2492 void OP_CC0000 (insn
, extension
)
2493 unsigned long insn
, extension
;
2495 State
.regs
[REG_PC
] += SEXT16 (insn
& 0xffff) - 3;
2499 void OP_DC000000 (insn
, extension
)
2500 unsigned long insn
, extension
;
2502 State
.regs
[REG_PC
] += (((insn
& 0xffffff) << 8) + extension
) - 5;
2505 /* call label:16,reg_list,imm8 */
2506 void OP_CD000000 (insn
, extension
)
2507 unsigned long insn
, extension
;
2509 unsigned int next_pc
, sp
, adjust
;
2512 sp
= State
.regs
[REG_SP
];
2513 next_pc
= State
.regs
[REG_PC
] + 2;
2514 State
.mem
[sp
] = next_pc
& 0xff;
2515 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2516 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2517 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2525 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
2531 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
2537 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2543 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2549 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2551 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2553 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2555 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2557 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2559 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2561 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2565 /* And make sure to update the stack pointer. */
2566 State
.regs
[REG_SP
] -= extension
;
2567 State
.regs
[REG_MDR
] = next_pc
;
2568 State
.regs
[REG_PC
] += SEXT16 ((insn
& 0xffff00) >> 8) - 5;
2571 /* call label:32,reg_list,imm8*/
2572 void OP_DD000000 (insn
, extension
)
2573 unsigned long insn
, extension
;
2575 unsigned int next_pc
, sp
, adjust
;
2578 sp
= State
.regs
[REG_SP
];
2579 next_pc
= State
.regs
[REG_PC
] + 2;
2580 State
.mem
[sp
] = next_pc
& 0xff;
2581 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2582 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2583 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2585 mask
= (extension
& 0xff00) >> 8;
2591 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
2597 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
2603 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2609 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2615 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2617 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2619 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2621 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2623 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2625 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2627 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2631 /* And make sure to update the stack pointer. */
2632 State
.regs
[REG_SP
] -= (extension
& 0xff);
2633 State
.regs
[REG_MDR
] = next_pc
;
2634 State
.regs
[REG_PC
] += (((insn
& 0xffffff) << 8) | ((extension
& 0xff0000) >> 16)) - 7;
2638 void OP_F0F0 (insn
, extension
)
2639 unsigned long insn
, extension
;
2641 unsigned int next_pc
, sp
;
2643 sp
= State
.regs
[REG_SP
];
2644 next_pc
= State
.regs
[REG_PC
] + 2;
2645 State
.mem
[sp
] = next_pc
& 0xff;
2646 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2647 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2648 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2649 State
.regs
[REG_MDR
] = next_pc
;
2650 State
.regs
[REG_PC
] = State
.regs
[REG_A0
+ REG0 (insn
)] - 2;
2653 /* calls label:16 */
2654 void OP_FAFF0000 (insn
, extension
)
2655 unsigned long insn
, extension
;
2657 unsigned int next_pc
, sp
;
2659 sp
= State
.regs
[REG_SP
];
2660 next_pc
= State
.regs
[REG_PC
] + 4;
2661 State
.mem
[sp
] = next_pc
& 0xff;
2662 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2663 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2664 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2665 State
.regs
[REG_MDR
] = next_pc
;
2666 State
.regs
[REG_PC
] += SEXT16 (insn
& 0xffff) - 4;
2669 /* calls label:32 */
2670 void OP_FCFF0000 (insn
, extension
)
2671 unsigned long insn
, extension
;
2673 unsigned int next_pc
, sp
;
2675 sp
= State
.regs
[REG_SP
];
2676 next_pc
= State
.regs
[REG_PC
] + 6;
2677 State
.mem
[sp
] = next_pc
& 0xff;
2678 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2679 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2680 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2681 State
.regs
[REG_MDR
] = next_pc
;
2682 State
.regs
[REG_PC
] += (((insn
& 0xffff) << 16) + extension
) - 6;
2685 /* ret reg_list, imm8 */
2686 void OP_DF0000 (insn
, extension
)
2687 unsigned long insn
, extension
;
2692 State
.regs
[REG_SP
] += insn
& 0xff;
2693 sp
= State
.regs
[REG_SP
];
2695 mask
= (insn
& 0xff00) >> 8;
2700 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
2702 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
2704 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
2706 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
2708 State
.regs
[REG_A0
] = load_mem (sp
, 4);
2710 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
2712 State
.regs
[REG_D0
] = load_mem (sp
, 4);
2718 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
2724 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
2730 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
2736 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
2740 /* And make sure to update the stack pointer. */
2741 State
.regs
[REG_SP
] = sp
;
2743 /* Restore the PC value. */
2744 State
.regs
[REG_PC
] = (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2745 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));
2746 State
.regs
[REG_PC
] -= 3;
2749 /* retf reg_list,imm8 */
2750 void OP_DE0000 (insn
, extension
)
2751 unsigned long insn
, extension
;
2756 sp
= State
.regs
[REG_SP
] + (insn
& 0xff);
2757 State
.regs
[REG_SP
] = sp
;
2758 State
.regs
[REG_PC
] = State
.regs
[REG_MDR
] - 3;
2760 sp
= State
.regs
[REG_SP
];
2762 mask
= (insn
& 0xff00) >> 8;
2767 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
2769 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
2771 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
2773 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
2775 State
.regs
[REG_A0
] = load_mem (sp
, 4);
2777 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
2779 State
.regs
[REG_D0
] = load_mem (sp
, 4);
2785 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
2791 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
2797 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
2803 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
2807 /* And make sure to update the stack pointer. */
2808 State
.regs
[REG_SP
] = sp
;
2812 void OP_F0FC (insn
, extension
)
2813 unsigned long insn
, extension
;
2817 sp
= State
.regs
[REG_SP
];
2818 State
.regs
[REG_PC
] = (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2819 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));
2820 State
.regs
[REG_PC
] -= 2;
2824 void OP_F0FD (insn
, extension
)
2825 unsigned long insn
, extension
;
2831 void OP_F0FE (insn
, extension
)
2832 unsigned long insn
, extension
;
2834 /* We use this for simulated system calls; we may need to change
2835 it to a reserved instruction if we conflict with uses at
2837 int save_errno
= errno
;
2840 /* Registers passed to trap 0 */
2842 /* Function number. */
2843 #define FUNC (load_mem (State.regs[REG_SP] + 4, 4))
2846 #define PARM1 (load_mem (State.regs[REG_SP] + 8, 4))
2847 #define PARM2 (load_mem (State.regs[REG_SP] + 12, 4))
2848 #define PARM3 (load_mem (State.regs[REG_SP] + 16, 4))
2850 /* Registers set by trap 0 */
2852 #define RETVAL State.regs[0] /* return value */
2853 #define RETERR State.regs[1] /* return error code */
2855 /* Turn a pointer in a register into a pointer into real memory. */
2857 #define MEMPTR(x) (State.mem + x)
2861 #if !defined(__GO32__) && !defined(_WIN32)
2866 RETVAL
= execve (MEMPTR (PARM1
), (char **) MEMPTR (PARM2
),
2867 (char **)MEMPTR (PARM3
));
2870 RETVAL
= execve (MEMPTR (PARM1
), (char **) MEMPTR (PARM2
), NULL
);
2875 RETVAL
= mn10300_callback
->read (mn10300_callback
, PARM1
,
2876 MEMPTR (PARM2
), PARM3
);
2880 RETVAL
= (int)mn10300_callback
->write_stdout (mn10300_callback
,
2881 MEMPTR (PARM2
), PARM3
);
2883 RETVAL
= (int)mn10300_callback
->write (mn10300_callback
, PARM1
,
2884 MEMPTR (PARM2
), PARM3
);
2887 RETVAL
= mn10300_callback
->lseek (mn10300_callback
, PARM1
, PARM2
, PARM3
);
2890 RETVAL
= mn10300_callback
->close (mn10300_callback
, PARM1
);
2893 RETVAL
= mn10300_callback
->open (mn10300_callback
, MEMPTR (PARM1
), PARM2
);
2896 /* EXIT - caller can look in PARM1 to work out the
2898 if (PARM1
== 0xdead || PARM1
== 0x1)
2899 State
.exception
= SIGABRT
;
2901 State
.exception
= SIGQUIT
;
2904 case SYS_stat
: /* added at hmsi */
2905 /* stat system call */
2907 struct stat host_stat
;
2910 RETVAL
= stat (MEMPTR (PARM1
), &host_stat
);
2914 /* Just wild-assed guesses. */
2915 store_mem (buf
, 2, host_stat
.st_dev
);
2916 store_mem (buf
+ 2, 2, host_stat
.st_ino
);
2917 store_mem (buf
+ 4, 4, host_stat
.st_mode
);
2918 store_mem (buf
+ 8, 2, host_stat
.st_nlink
);
2919 store_mem (buf
+ 10, 2, host_stat
.st_uid
);
2920 store_mem (buf
+ 12, 2, host_stat
.st_gid
);
2921 store_mem (buf
+ 14, 2, host_stat
.st_rdev
);
2922 store_mem (buf
+ 16, 4, host_stat
.st_size
);
2923 store_mem (buf
+ 20, 4, host_stat
.st_atime
);
2924 store_mem (buf
+ 28, 4, host_stat
.st_mtime
);
2925 store_mem (buf
+ 36, 4, host_stat
.st_ctime
);
2930 RETVAL
= chown (MEMPTR (PARM1
), PARM2
, PARM3
);
2933 RETVAL
= chmod (MEMPTR (PARM1
), PARM2
);
2936 RETVAL
= time (MEMPTR (PARM1
));
2941 RETVAL
= times (&tms
);
2942 store_mem (PARM1
, 4, tms
.tms_utime
);
2943 store_mem (PARM1
+ 4, 4, tms
.tms_stime
);
2944 store_mem (PARM1
+ 8, 4, tms
.tms_cutime
);
2945 store_mem (PARM1
+ 12, 4, tms
.tms_cstime
);
2948 case SYS_gettimeofday
:
2952 RETVAL
= gettimeofday (&t
, &tz
);
2953 store_mem (PARM1
, 4, t
.tv_sec
);
2954 store_mem (PARM1
+ 4, 4, t
.tv_usec
);
2955 store_mem (PARM2
, 4, tz
.tz_minuteswest
);
2956 store_mem (PARM2
+ 4, 4, tz
.tz_dsttime
);
2960 /* Cast the second argument to void *, to avoid type mismatch
2961 if a prototype is present. */
2962 RETVAL
= utime (MEMPTR (PARM1
), (void *) MEMPTR (PARM2
));
2972 void OP_F0FF (insn
, extension
)
2973 unsigned long insn
, extension
;
2979 void OP_CB (insn
, extension
)
2980 unsigned long insn
, extension
;
2985 void OP_F500 (insn
, extension
)
2986 unsigned long insn
, extension
;
2992 void OP_F6F0 (insn
, extension
)
2993 unsigned long insn
, extension
;
2999 void OP_F600 (insn
, extension
)
3000 unsigned long insn
, extension
;
3006 void OP_F90000 (insn
, extension
)
3007 unsigned long insn
, extension
;
3013 void OP_FB000000 (insn
, extension
)
3014 unsigned long insn
, extension
;
3020 void OP_FD000000 (insn
, extension
)
3021 unsigned long insn
, extension
;
3027 void OP_F610 (insn
, extension
)
3028 unsigned long insn
, extension
;
3034 void OP_F91400 (insn
, extension
)
3035 unsigned long insn
, extension
;
3041 void OP_FB140000 (insn
, extension
)
3042 unsigned long insn
, extension
;
3048 void OP_FD140000 (insn
, extension
)
3049 unsigned long insn
, extension
;
3055 void OP_F640 (insn
, extension
)
3056 unsigned long insn
, extension
;
3062 void OP_F650 (insn
, extension
)
3063 unsigned long insn
, extension
;
3069 void OP_F670 (insn
, extension
)
3070 unsigned long insn
, extension
;
3077 OP_FF (insn
, extension
)
3078 unsigned long insn
, extension
;
3080 State
.exception
= SIGTRAP
;