f1f8c43ce46c4faa6916e1b19f3355ffabc5fb2e
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_8(X) (((X) & 0x300) >> 8)
19 #define REG1_8(X) (((X) & 0xc00) >> 10)
20 #define REG0_16(X) (((X) & 0x30000) >> 8)
21 #define REG1_16(X) (((X) & 0xc0000) >> 18)
24 void OP_8000 (insn
, extension
)
25 unsigned long insn
, extension
;
27 State
.regs
[REG_D0
+ REG0_8 (insn
)] = SEXT8 (insn
& 0xff);
31 void OP_80 (insn
, extension
)
32 unsigned long insn
, extension
;
34 State
.regs
[REG_D0
+ REG0 (insn
)] = State
.regs
[REG_D0
+ REG1 (insn
)];
38 void OP_F1E0 (insn
, extension
)
39 unsigned long insn
, extension
;
41 State
.regs
[REG_A0
+ REG0 (insn
)] = State
.regs
[REG_D0
+ REG1 (insn
)];
45 void OP_F1D0 (insn
, extension
)
46 unsigned long insn
, extension
;
48 State
.regs
[REG_D0
+ REG0 (insn
)] = State
.regs
[REG_A0
+ REG1 (insn
)];
52 void OP_9000 (insn
, extension
)
53 unsigned long insn
, extension
;
55 State
.regs
[REG_A0
+ REG0_8 (insn
)] = insn
& 0xff;
59 void OP_90 (insn
, extension
)
60 unsigned long insn
, extension
;
62 State
.regs
[REG_A0
+ REG0 (insn
)] = State
.regs
[REG_A0
+ REG1 (insn
)];
66 void OP_3C (insn
, extension
)
67 unsigned long insn
, extension
;
69 State
.regs
[REG_A0
+ REG0 (insn
)] = State
.regs
[REG_SP
];
73 void OP_F2F0 (insn
, extension
)
74 unsigned long insn
, extension
;
76 State
.regs
[REG_SP
] = State
.regs
[REG_A0
+ REG1 (insn
)];
80 void OP_F2E4 (insn
, extension
)
81 unsigned long insn
, extension
;
83 State
.regs
[REG_D0
+ REG0 (insn
)] = PSW
;
87 void OP_F2F3 (insn
, extension
)
88 unsigned long insn
, extension
;
90 PSW
= State
.regs
[REG_D0
+ REG1 (insn
)];
94 void OP_F2E0 (insn
, extension
)
95 unsigned long insn
, extension
;
97 State
.regs
[REG_D0
+ REG0 (insn
)] = State
.regs
[REG_MDR
];
101 void OP_F2F2 (insn
, extension
)
102 unsigned long insn
, extension
;
104 State
.regs
[REG_MDR
] = State
.regs
[REG_D0
+ REG1 (insn
)];
108 void OP_70 (insn
, extension
)
109 unsigned long insn
, extension
;
111 State
.regs
[REG_D0
+ REG1 (insn
)]
112 = load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 4);
115 /* mov (d8,am), dn */
116 void OP_F80000 (insn
, extension
)
117 unsigned long insn
, extension
;
119 State
.regs
[REG_D0
+ REG1_8 (insn
)]
120 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
121 + SEXT8 (insn
& 0xff)), 4);
124 /* mov (d16,am), dn */
125 void OP_FA000000 (insn
, extension
)
126 unsigned long insn
, extension
;
128 State
.regs
[REG_D0
+ REG1_16 (insn
)]
129 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
130 + SEXT16 (insn
& 0xffff)), 4);
133 /* mov (d32,am), dn */
134 void OP_FC000000 (insn
, extension
)
135 unsigned long insn
, extension
;
137 State
.regs
[REG_D0
+ REG1_16 (insn
)]
138 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
139 + ((insn
& 0xffff) << 16) + extension
), 4);
142 /* mov (d8,sp), dn */
143 void OP_5800 (insn
, extension
)
144 unsigned long insn
, extension
;
146 State
.regs
[REG_D0
+ REG0_8 (insn
)]
147 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4);
150 /* mov (d16,sp), dn */
151 void OP_FAB40000 (insn
, extension
)
152 unsigned long insn
, extension
;
154 State
.regs
[REG_D0
+ REG0_16 (insn
)]
155 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4);
158 /* mov (d32,sp), dn */
159 void OP_FCB40000 (insn
, extension
)
160 unsigned long insn
, extension
;
162 State
.regs
[REG_D0
+ REG0_16 (insn
)]
163 = load_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 4);
166 /* mov (di,am), dn */
167 void OP_F300 (insn
, extension
)
168 unsigned long insn
, extension
;
170 State
.regs
[REG_D0
+ REG0_8 (insn
)]
171 = load_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
172 + State
.regs
[REG_D0
+ REG1 (insn
)]), 4);
175 /* mov (abs16), dn */
176 void OP_300000 (insn
, extension
)
177 unsigned long insn
, extension
;
179 State
.regs
[REG_D0
+ REG0_16 (insn
)] = load_mem ((insn
& 0xffff), 4);
182 /* mov (abs32), dn */
183 void OP_FCA40000 (insn
, extension
)
184 unsigned long insn
, extension
;
186 State
.regs
[REG_D0
+ REG0_16 (insn
)]
187 = load_mem ((((insn
& 0xffff) << 16) + extension
), 4);
191 void OP_F000 (insn
, extension
)
192 unsigned long insn
, extension
;
194 State
.regs
[REG_A0
+ REG1 (insn
)]
195 = load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 4);
198 /* mov (d8,am), an */
199 void OP_F82000 (insn
, extension
)
200 unsigned long insn
, extension
;
202 State
.regs
[REG_A0
+ REG1_8 (insn
)]
203 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
204 + SEXT8 (insn
& 0xff)), 4);
207 /* mov (d16,am), an */
208 void OP_FA200000 (insn
, extension
)
209 unsigned long insn
, extension
;
211 State
.regs
[REG_A0
+ REG1_16 (insn
)]
212 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
213 + SEXT16 (insn
& 0xffff)), 4);
216 /* mov (d32,am), an */
217 void OP_FC200000 (insn
, extension
)
218 unsigned long insn
, extension
;
220 State
.regs
[REG_A0
+ REG1_16 (insn
)]
221 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
222 + ((insn
& 0xffff) << 16) + extension
), 4);
225 /* mov (d8,sp), an */
226 void OP_5C00 (insn
, extension
)
227 unsigned long insn
, extension
;
229 State
.regs
[REG_A0
+ REG0_8 (insn
)]
230 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4);
233 /* mov (d16,sp), an */
234 void OP_FAB00000 (insn
, extension
)
235 unsigned long insn
, extension
;
237 State
.regs
[REG_A0
+ REG0_16 (insn
)]
238 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4);
241 /* mov (d32,sp), an */
242 void OP_FCB00000 (insn
, extension
)
243 unsigned long insn
, extension
;
245 State
.regs
[REG_A0
+ REG0_16 (insn
)]
246 = load_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 4);
249 /* mov (di,am), an */
250 void OP_F380 (insn
, extension
)
251 unsigned long insn
, extension
;
253 State
.regs
[REG_A0
+ REG0_8 (insn
)]
254 = load_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
255 + State
.regs
[REG_D0
+ REG1 (insn
)]), 4);
258 /* mov (abs16), an */
259 void OP_FAA00000 (insn
, extension
)
260 unsigned long insn
, extension
;
262 State
.regs
[REG_A0
+ REG0_16 (insn
)] = load_mem ((insn
& 0xffff), 4);
265 /* mov (abs32), an */
266 void OP_FCA00000 (insn
, extension
)
267 unsigned long insn
, extension
;
269 State
.regs
[REG_A0
+ REG0_16 (insn
)]
270 = load_mem ((((insn
& 0xffff) << 16) + extension
), 4);
273 /* mov (d8,am), sp */
274 void OP_F8F000 (insn
, extension
)
275 unsigned long insn
, extension
;
278 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
279 + SEXT8 (insn
& 0xff)), 4);
283 void OP_60 (insn
, extension
)
284 unsigned long insn
, extension
;
286 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 4,
287 State
.regs
[REG_D0
+ REG1 (insn
)]);
290 /* mov dm, (d8,an) */
291 void OP_F81000 (insn
, extension
)
292 unsigned long insn
, extension
;
294 store_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
295 + SEXT8 (insn
& 0xff)), 4,
296 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
299 /* mov dm (d16,an) */
300 void OP_FA100000 (insn
, extension
)
301 unsigned long insn
, extension
;
303 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
304 + SEXT16 (insn
& 0xffff)), 4,
305 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
308 /* mov dm (d32,an) */
309 void OP_FC100000 (insn
, extension
)
310 unsigned long insn
, extension
;
312 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
313 + ((insn
& 0xffff) << 16) + extension
), 4,
314 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
317 /* mov dm, (d8,sp) */
318 void OP_4200 (insn
, extension
)
319 unsigned long insn
, extension
;
321 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4,
322 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
325 /* mov dm, (d16,sp) */
326 void OP_FA910000 (insn
, extension
)
327 unsigned long insn
, extension
;
329 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4,
330 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
333 /* mov dm, (d32,sp) */
334 void OP_FC910000 (insn
, extension
)
335 unsigned long insn
, extension
;
337 store_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 4,
338 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
341 /* mov dm, (di,an) */
342 void OP_F340 (insn
, extension
)
343 unsigned long insn
, extension
;
345 store_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
346 + State
.regs
[REG_D0
+ REG1 (insn
)]), 4,
347 State
.regs
[REG_D0
+ REG0_8 (insn
)]);
350 /* mov dm, (abs16) */
351 void OP_10000 (insn
, extension
)
352 unsigned long insn
, extension
;
354 store_mem ((insn
& 0xffff), 4, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
357 /* mov dm, (abs32) */
358 void OP_FC810000 (insn
, extension
)
359 unsigned long insn
, extension
;
361 store_mem ((((insn
& 0xffff) << 16) + extension
), 4, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
365 void OP_F010 (insn
, extension
)
366 unsigned long insn
, extension
;
368 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 4,
369 State
.regs
[REG_A0
+ REG1 (insn
)]);
372 /* mov am, (d8,an) */
373 void OP_F83000 (insn
, extension
)
374 unsigned long insn
, extension
;
376 store_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
377 + SEXT8 (insn
& 0xff)), 4,
378 State
.regs
[REG_A0
+ REG1_8 (insn
)]);
381 /* mov am, (d16,an) */
382 void OP_FA300000 (insn
, extension
)
383 unsigned long insn
, extension
;
385 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
386 + SEXT16 (insn
& 0xffff)), 4,
387 State
.regs
[REG_A0
+ REG1_16 (insn
)]);
390 /* mov am, (d32,an) */
391 void OP_FC300000 (insn
, extension
)
392 unsigned long insn
, extension
;
394 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
395 + ((insn
& 0xffff) << 16) + extension
), 4,
396 State
.regs
[REG_A0
+ REG1_16 (insn
)]);
399 /* mov am, (d8,sp) */
400 void OP_4300 (insn
, extension
)
401 unsigned long insn
, extension
;
403 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4,
404 State
.regs
[REG_A0
+ REG1_8 (insn
)]);
407 /* mov am, (d16,sp) */
408 void OP_FA900000 (insn
, extension
)
409 unsigned long insn
, extension
;
411 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4,
412 State
.regs
[REG_A0
+ REG1_16 (insn
)]);
415 /* mov am, (d32,sp) */
416 void OP_FC900000 (insn
, extension
)
417 unsigned long insn
, extension
;
419 store_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 4,
420 State
.regs
[REG_A0
+ REG1_16 (insn
)]);
423 /* mov am, (di,an) */
424 void OP_F3C0 (insn
, extension
)
425 unsigned long insn
, extension
;
427 store_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
428 + State
.regs
[REG_D0
+ REG1 (insn
)]), 4,
429 State
.regs
[REG_A0
+ REG0_8 (insn
)]);
432 /* mov am, (abs16) */
433 void OP_FA800000 (insn
, extension
)
434 unsigned long insn
, extension
;
436 store_mem ((insn
& 0xffff), 4, State
.regs
[REG_A0
+ REG1_16 (insn
)]);
439 /* mov am, (abs32) */
440 void OP_FC800000 (insn
, extension
)
441 unsigned long insn
, extension
;
443 store_mem ((((insn
& 0xffff) << 16) + extension
), 4, State
.regs
[REG_A0
+ REG1_16 (insn
)]);
446 /* mov sp, (d8,an) */
447 void OP_F8F400 (insn
, extension
)
448 unsigned long insn
, extension
;
450 store_mem (State
.regs
[REG_A0
+ REG0_8 (insn
)] + SEXT8 (insn
& 0xff),
451 4, State
.regs
[REG_SP
]);
455 void OP_2C0000 (insn
, extension
)
456 unsigned long insn
, extension
;
460 value
= SEXT16 (insn
& 0xffff);
461 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
465 void OP_FCCC0000 (insn
, extension
)
466 unsigned long insn
, extension
;
470 value
= ((insn
& 0xffff) << 16) + extension
;
471 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
475 void OP_240000 (insn
, extension
)
476 unsigned long insn
, extension
;
480 value
= insn
& 0xffff;
481 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
485 void OP_FCDC0000 (insn
, extension
)
486 unsigned long insn
, extension
;
490 value
= ((insn
& 0xffff) << 16) + extension
;
491 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
495 void OP_F040 (insn
, extension
)
496 unsigned long insn
, extension
;
498 State
.regs
[REG_D0
+ REG1 (insn
)]
499 = load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 1);
502 /* movbu (d8,am), dn */
503 void OP_F84000 (insn
, extension
)
504 unsigned long insn
, extension
;
506 State
.regs
[REG_D0
+ REG1_8 (insn
)]
507 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
508 + SEXT8 (insn
& 0xff)), 1);
511 /* movbu (d16,am), dn */
512 void OP_FA400000 (insn
, extension
)
513 unsigned long insn
, extension
;
515 State
.regs
[REG_D0
+ REG1_16 (insn
)]
516 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
517 + SEXT16 (insn
& 0xffff)), 1);
520 /* movbu (d32,am), dn */
521 void OP_FC400000 (insn
, extension
)
522 unsigned long insn
, extension
;
524 State
.regs
[REG_D0
+ REG1_16 (insn
)]
525 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
526 + ((insn
& 0xffff) << 16) + extension
), 1);
529 /* movbu (d8,sp), dn */
530 void OP_F8B800 (insn
, extension
)
531 unsigned long insn
, extension
;
533 State
.regs
[REG_D0
+ REG0_8 (insn
)]
534 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xff)), 1);
537 /* movbu (d16,sp), dn */
538 void OP_FAB80000 (insn
, extension
)
539 unsigned long insn
, extension
;
541 State
.regs
[REG_D0
+ REG0_16 (insn
)]
542 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xffff)), 1);
545 /* movbu (d32,sp), dn */
546 void OP_FCB80000 (insn
, extension
)
547 unsigned long insn
, extension
;
549 State
.regs
[REG_D0
+ REG0_16 (insn
)]
550 = load_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 1);
553 /* movbu (di,am), dn */
554 void OP_F400 (insn
, extension
)
555 unsigned long insn
, extension
;
557 State
.regs
[REG_D0
+ REG0_8 (insn
)]
558 = load_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
559 + State
.regs
[REG_D0
+ REG1 (insn
)]), 1);
562 /* movbu (abs16), dn */
563 void OP_340000 (insn
, extension
)
564 unsigned long insn
, extension
;
566 State
.regs
[REG_D0
+ REG0_16 (insn
)] = load_mem ((insn
& 0xffff), 1);
569 /* movbu (abs32), dn */
570 void OP_FCA80000 (insn
, extension
)
571 unsigned long insn
, extension
;
573 State
.regs
[REG_D0
+ REG0_16 (insn
)]
574 = load_mem ((((insn
& 0xffff) << 16) + extension
), 1);
578 void OP_F050 (insn
, extension
)
579 unsigned long insn
, extension
;
581 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 1,
582 State
.regs
[REG_D0
+ REG1 (insn
)]);
585 /* movbu dm, (d8,an) */
586 void OP_F85000 (insn
, extension
)
587 unsigned long insn
, extension
;
589 store_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
590 + SEXT8 (insn
& 0xff)), 1,
591 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
594 /* movbu dm, (d16,an) */
595 void OP_FA500000 (insn
, extension
)
596 unsigned long insn
, extension
;
598 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
599 + SEXT16 (insn
& 0xffff)), 1,
600 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
603 /* movbu dm, (d32,an) */
604 void OP_FC500000 (insn
, extension
)
605 unsigned long insn
, extension
;
607 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
608 + ((insn
& 0xffff) << 16) + extension
), 1,
609 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
612 /* movbu dm, (d8,sp) */
613 void OP_F89200 (insn
, extension
)
614 unsigned long insn
, extension
;
616 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 1,
617 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
620 /* movbu dm, (d16,sp) */
621 void OP_FA920000 (insn
, extension
)
622 unsigned long insn
, extension
;
624 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 2,
625 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
628 /* movbu dm (d32,sp) */
629 void OP_FC920000 (insn
, extension
)
630 unsigned long insn
, extension
;
632 store_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 2,
633 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
636 /* movbu dm, (di,an) */
637 void OP_F440 (insn
, extension
)
638 unsigned long insn
, extension
;
640 store_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
641 + State
.regs
[REG_D0
+ REG1 (insn
)]), 1,
642 State
.regs
[REG_D0
+ REG0_8 (insn
)]);
645 /* movbu dm, (abs16) */
646 void OP_20000 (insn
, extension
)
647 unsigned long insn
, extension
;
649 store_mem ((insn
& 0xffff), 1, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
652 /* movbu dm, (abs32) */
653 void OP_FC820000 (insn
, extension
)
654 unsigned long insn
, extension
;
656 store_mem ((((insn
& 0xffff) << 16) + extension
), 1, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
660 void OP_F060 (insn
, extension
)
661 unsigned long insn
, extension
;
663 State
.regs
[REG_D0
+ REG1 (insn
)]
664 = load_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 2);
667 /* movhu (d8,am), dn */
668 void OP_F86000 (insn
, extension
)
669 unsigned long insn
, extension
;
671 State
.regs
[REG_D0
+ REG1_8 (insn
)]
672 = load_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
673 + SEXT8 (insn
& 0xff)), 2);
676 /* movhu (d16,am), dn */
677 void OP_FA600000 (insn
, extension
)
678 unsigned long insn
, extension
;
680 State
.regs
[REG_D0
+ REG1_16 (insn
)]
681 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
682 + SEXT16 (insn
& 0xffff)), 2);
685 /* movhu (d32,am), dn */
686 void OP_FC600000 (insn
, extension
)
687 unsigned long insn
, extension
;
689 State
.regs
[REG_D0
+ REG1_16 (insn
)]
690 = load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
691 + ((insn
& 0xffff) << 16) + extension
), 2);
694 /* movhu (d8,sp) dn */
695 void OP_F8BC00 (insn
, extension
)
696 unsigned long insn
, extension
;
698 State
.regs
[REG_D0
+ REG0_8 (insn
)]
699 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xff)), 2);
702 /* movhu (d16,sp), dn */
703 void OP_FABC0000 (insn
, extension
)
704 unsigned long insn
, extension
;
706 State
.regs
[REG_D0
+ REG0_16 (insn
)]
707 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xffff)), 2);
710 /* movhu (d32,sp), dn */
711 void OP_FCBC0000 (insn
, extension
)
712 unsigned long insn
, extension
;
714 State
.regs
[REG_D0
+ REG0_16 (insn
)]
715 = load_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 2);
718 /* movhu (di,am), dn */
719 void OP_F480 (insn
, extension
)
720 unsigned long insn
, extension
;
722 State
.regs
[REG_D0
+ REG0_8 (insn
)]
723 = load_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
724 + State
.regs
[REG_D0
+ REG1 (insn
)]), 2);
727 /* movhu (abs16), dn */
728 void OP_380000 (insn
, extension
)
729 unsigned long insn
, extension
;
731 State
.regs
[REG_D0
+ REG0_16 (insn
)] = load_mem ((insn
& 0xffff), 2);
734 /* movhu (abs32), dn */
735 void OP_FCAC0000 (insn
, extension
)
736 unsigned long insn
, extension
;
738 State
.regs
[REG_D0
+ REG0_16 (insn
)]
739 = load_mem ((((insn
& 0xffff) << 16) + extension
), 2);
743 void OP_F070 (insn
, extension
)
744 unsigned long insn
, extension
;
746 store_mem (State
.regs
[REG_A0
+ REG0 (insn
)], 2,
747 State
.regs
[REG_D0
+ REG1 (insn
)]);
750 /* movhu dm, (d8,an) */
751 void OP_F87000 (insn
, extension
)
752 unsigned long insn
, extension
;
754 store_mem ((State
.regs
[REG_A0
+ REG0_8 (insn
)]
755 + SEXT8 (insn
& 0xff)), 2,
756 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
759 /* movhu dm, (d16,an) */
760 void OP_FA700000 (insn
, extension
)
761 unsigned long insn
, extension
;
763 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
764 + SEXT16 (insn
& 0xffff)), 2,
765 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
768 /* movhu dm, (d32,an) */
769 void OP_FC700000 (insn
, extension
)
770 unsigned long insn
, extension
;
772 store_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
773 + ((insn
& 0xffff) << 16) + extension
), 2,
774 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
777 /* movhu dm,(d8,sp) */
778 void OP_F89300 (insn
, extension
)
779 unsigned long insn
, extension
;
781 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 2,
782 State
.regs
[REG_D0
+ REG1_8 (insn
)]);
785 /* movhu dm,(d16,sp) */
786 void OP_FA930000 (insn
, extension
)
787 unsigned long insn
, extension
;
789 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 2,
790 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
793 /* movhu dm,(d32,sp) */
794 void OP_FC930000 (insn
, extension
)
795 unsigned long insn
, extension
;
797 store_mem (State
.regs
[REG_SP
] + (((insn
& 0xffff) << 16) + extension
), 2,
798 State
.regs
[REG_D0
+ REG1_16 (insn
)]);
801 /* movhu dm, (di,an) */
802 void OP_F4C0 (insn
, extension
)
803 unsigned long insn
, extension
;
805 store_mem ((State
.regs
[REG_A0
+ REG0 (insn
)]
806 + State
.regs
[REG_D0
+ REG1 (insn
)]), 2,
807 State
.regs
[REG_D0
+ REG0_8 (insn
)]);
810 /* movhu dm, (abs16) */
811 void OP_30000 (insn
, extension
)
812 unsigned long insn
, extension
;
814 store_mem ((insn
& 0xffff), 2, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
817 /* movhu dm, (abs32) */
818 void OP_FC830000 (insn
, extension
)
819 unsigned long insn
, extension
;
821 store_mem ((((insn
& 0xffff) << 16) + extension
), 2, State
.regs
[REG_D0
+ REG1_16 (insn
)]);
825 void OP_F2D0 (insn
, extension
)
826 unsigned long insn
, extension
;
828 if (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000)
829 State
.regs
[REG_MDR
] = -1;
831 State
.regs
[REG_MDR
] = 0;
835 void OP_10 (insn
, extension
)
836 unsigned long insn
, extension
;
838 State
.regs
[REG_D0
+ REG0 (insn
)] = SEXT8 (State
.regs
[REG_D0
+ REG0 (insn
)]);
842 void OP_14 (insn
, extension
)
843 unsigned long insn
, extension
;
845 State
.regs
[REG_D0
+ REG0 (insn
)] &= 0xff;
849 void OP_18 (insn
, extension
)
850 unsigned long insn
, extension
;
852 State
.regs
[REG_D0
+ REG0 (insn
)]
853 = SEXT16 (State
.regs
[REG_D0
+ REG0 (insn
)]);
857 void OP_1C (insn
, extension
)
858 unsigned long insn
, extension
;
860 State
.regs
[REG_D0
+ REG0 (insn
)] &= 0xffff;
863 /* movm (sp), reg_list */
864 void OP_CE00 (insn
, extension
)
865 unsigned long insn
, extension
;
867 unsigned long sp
= State
.regs
[REG_SP
];
875 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
877 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
879 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
881 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
883 State
.regs
[REG_A0
] = load_mem (sp
, 4);
885 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
887 State
.regs
[REG_D0
] = load_mem (sp
, 4);
893 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
899 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
905 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
911 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
915 /* And make sure to update the stack pointer. */
916 State
.regs
[REG_SP
] = sp
;
919 /* movm reg_list, (sp) */
920 void OP_CF00 (insn
, extension
)
921 unsigned long insn
, extension
;
923 unsigned long sp
= State
.regs
[REG_SP
];
931 store_mem (sp
, 4, State
.regs
[REG_D0
+ 2]);
937 store_mem (sp
, 4, State
.regs
[REG_D0
+ 3]);
943 store_mem (sp
, 4, State
.regs
[REG_A0
+ 2]);
949 store_mem (sp
, 4, State
.regs
[REG_A0
+ 3]);
955 store_mem (sp
, 4, State
.regs
[REG_D0
]);
957 store_mem (sp
, 4, State
.regs
[REG_D0
+ 1]);
959 store_mem (sp
, 4, State
.regs
[REG_A0
]);
961 store_mem (sp
, 4, State
.regs
[REG_A0
+ 1]);
963 store_mem (sp
, 4, State
.regs
[REG_MDR
]);
965 store_mem (sp
, 4, State
.regs
[REG_LIR
]);
967 store_mem (sp
, 4, State
.regs
[REG_LAR
]);
971 /* And make sure to update the stack pointer. */
972 State
.regs
[REG_SP
] = sp
;
976 void OP_0 (insn
, extension
)
977 unsigned long insn
, extension
;
979 State
.regs
[REG_D0
+ REG1 (insn
)] = 0;
982 PSW
&= ~(PSW_V
| PSW_C
| PSW_N
);
986 void OP_E0 (insn
, extension
)
987 unsigned long insn
, extension
;
990 unsigned long reg1
, reg2
, value
;
992 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
993 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
995 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
998 n
= (value
& 0x80000000);
1000 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1001 && (reg2
& 0x80000000) != (value
& 0x80000000));
1003 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1004 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1005 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1009 void OP_F160 (insn
, extension
)
1010 unsigned long insn
, extension
;
1013 unsigned long reg1
, reg2
, value
;
1015 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1016 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1017 value
= reg1
+ reg2
;
1018 State
.regs
[REG_A0
+ REG0 (insn
)] = value
;
1021 n
= (value
& 0x80000000);
1023 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1024 && (reg2
& 0x80000000) != (value
& 0x80000000));
1026 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1027 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1028 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1032 void OP_F150 (insn
, extension
)
1033 unsigned long insn
, extension
;
1036 unsigned long reg1
, reg2
, value
;
1038 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1039 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1040 value
= reg1
+ reg2
;
1041 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1044 n
= (value
& 0x80000000);
1046 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1047 && (reg2
& 0x80000000) != (value
& 0x80000000));
1049 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1050 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1051 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1055 void OP_F170 (insn
, extension
)
1056 unsigned long insn
, extension
;
1059 unsigned long reg1
, reg2
, value
;
1061 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1062 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1063 value
= reg1
+ reg2
;
1064 State
.regs
[REG_A0
+ REG0 (insn
)] = value
;
1067 n
= (value
& 0x80000000);
1069 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1070 && (reg2
& 0x80000000) != (value
& 0x80000000));
1072 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1073 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1074 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1078 void OP_2800 (insn
, extension
)
1079 unsigned long insn
, extension
;
1082 unsigned long reg1
, imm
, value
;
1084 reg1
= State
.regs
[REG_D0
+ REG0_8 (insn
)];
1085 imm
= SEXT8 (insn
& 0xff);
1087 State
.regs
[REG_D0
+ REG0_8 (insn
)] = value
;
1090 n
= (value
& 0x80000000);
1092 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1093 && (reg1
& 0x80000000) != (value
& 0x80000000));
1095 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1096 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1097 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1101 void OP_FAC00000 (insn
, extension
)
1102 unsigned long insn
, extension
;
1105 unsigned long reg1
, imm
, value
;
1107 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1108 imm
= SEXT16 (insn
& 0xffff);
1110 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
1113 n
= (value
& 0x80000000);
1115 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1116 && (reg1
& 0x80000000) != (value
& 0x80000000));
1118 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1119 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1120 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1124 void OP_FCC00000 (insn
, extension
)
1125 unsigned long insn
, extension
;
1128 unsigned long reg1
, imm
, value
;
1130 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1131 imm
= ((insn
& 0xffff) << 16) + extension
;
1133 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
1136 n
= (value
& 0x80000000);
1138 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1139 && (reg1
& 0x80000000) != (value
& 0x80000000));
1141 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1142 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1143 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1147 void OP_2000 (insn
, extension
)
1148 unsigned long insn
, extension
;
1151 unsigned long reg1
, imm
, value
;
1153 reg1
= State
.regs
[REG_A0
+ REG0_8 (insn
)];
1154 imm
= SEXT8 (insn
& 0xff);
1156 State
.regs
[REG_A0
+ REG0_8 (insn
)] = value
;
1159 n
= (value
& 0x80000000);
1161 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1162 && (reg1
& 0x80000000) != (value
& 0x80000000));
1164 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1165 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1166 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1170 void OP_FAD00000 (insn
, extension
)
1171 unsigned long insn
, extension
;
1174 unsigned long reg1
, imm
, value
;
1176 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1177 imm
= SEXT16 (insn
& 0xffff);
1179 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
1182 n
= (value
& 0x80000000);
1184 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1185 && (reg1
& 0x80000000) != (value
& 0x80000000));
1187 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1188 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1189 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1193 void OP_FCD00000 (insn
, extension
)
1194 unsigned long insn
, extension
;
1197 unsigned long reg1
, imm
, value
;
1199 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1200 imm
= ((insn
& 0xffff) << 16) + extension
;
1202 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
1205 n
= (value
& 0x80000000);
1207 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1208 && (reg1
& 0x80000000) != (value
& 0x80000000));
1210 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1211 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1212 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1216 void OP_F8FE00 (insn
, extension
)
1217 unsigned long insn
, extension
;
1219 unsigned long reg1
, imm
, value
;
1221 reg1
= State
.regs
[REG_SP
];
1222 imm
= SEXT8 (insn
& 0xff);
1224 State
.regs
[REG_SP
] = value
;
1228 void OP_FAFE0000 (insn
, extension
)
1229 unsigned long insn
, extension
;
1231 unsigned long reg1
, imm
, value
;
1233 reg1
= State
.regs
[REG_SP
];
1234 imm
= SEXT16 (insn
& 0xffff);
1236 State
.regs
[REG_SP
] = value
;
1240 void OP_FCFE0000 (insn
, extension
)
1241 unsigned long insn
, extension
;
1243 unsigned long reg1
, imm
, value
;
1245 reg1
= State
.regs
[REG_SP
];
1246 imm
= ((insn
& 0xffff) << 16) + extension
;
1248 State
.regs
[REG_SP
] = value
;
1252 void OP_F140 (insn
, extension
)
1253 unsigned long insn
, extension
;
1256 unsigned long reg1
, reg2
, value
;
1258 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1259 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1260 value
= reg1
+ reg2
+ ((PSW
& PSW_C
) != 0);
1261 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1264 n
= (value
& 0x80000000);
1266 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1267 && (reg2
& 0x80000000) != (value
& 0x80000000));
1269 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1270 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1271 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1275 void OP_F100 (insn
, extension
)
1276 unsigned long insn
, extension
;
1279 unsigned long reg1
, reg2
, value
;
1281 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1282 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1283 value
= reg2
- reg1
;
1286 n
= (value
& 0x80000000);
1288 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1289 && (reg2
& 0x80000000) != (value
& 0x80000000));
1291 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1292 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1293 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1294 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1298 void OP_F120 (insn
, extension
)
1299 unsigned long insn
, extension
;
1302 unsigned long reg1
, reg2
, value
;
1304 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1305 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1306 value
= reg2
- reg1
;
1309 n
= (value
& 0x80000000);
1311 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1312 && (reg2
& 0x80000000) != (value
& 0x80000000));
1314 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1315 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1316 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1317 State
.regs
[REG_A0
+ REG0 (insn
)] = value
;
1321 void OP_F110 (insn
, extension
)
1322 unsigned long insn
, extension
;
1325 unsigned long reg1
, reg2
, value
;
1327 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1328 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1329 value
= reg2
- reg1
;
1332 n
= (value
& 0x80000000);
1334 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1335 && (reg2
& 0x80000000) != (value
& 0x80000000));
1337 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1338 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1339 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1340 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1344 void OP_F130 (insn
, extension
)
1345 unsigned long insn
, extension
;
1348 unsigned long reg1
, reg2
, value
;
1350 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1351 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1352 value
= reg2
- reg1
;
1355 n
= (value
& 0x80000000);
1357 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1358 && (reg2
& 0x80000000) != (value
& 0x80000000));
1360 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1361 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1362 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1363 State
.regs
[REG_A0
+ REG0 (insn
)] = value
;
1367 void OP_FCC40000 (insn
, extension
)
1368 unsigned long insn
, extension
;
1371 unsigned long reg1
, imm
, value
;
1373 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1374 imm
= ((insn
& 0xffff) << 16) + extension
;
1378 n
= (value
& 0x80000000);
1380 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1381 && (reg1
& 0x80000000) != (value
& 0x80000000));
1383 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1384 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1385 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1386 State
.regs
[REG_D0
+ REG0_16 (insn
)] = value
;
1390 void OP_FCD40000 (insn
, extension
)
1391 unsigned long insn
, extension
;
1394 unsigned long reg1
, imm
, value
;
1396 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1397 imm
= ((insn
& 0xffff) << 16) + extension
;
1401 n
= (value
& 0x80000000);
1403 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1404 && (reg1
& 0x80000000) != (value
& 0x80000000));
1406 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1407 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1408 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1409 State
.regs
[REG_A0
+ REG0_16 (insn
)] = value
;
1413 void OP_F180 (insn
, extension
)
1414 unsigned long insn
, extension
;
1417 unsigned long reg1
, reg2
, value
;
1419 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1420 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1421 value
= reg2
- reg1
- ((PSW
& PSW_C
) != 0);
1424 n
= (value
& 0x80000000);
1426 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1427 && (reg2
& 0x80000000) != (value
& 0x80000000));
1429 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1430 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1431 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1432 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
1436 void OP_F240 (insn
, extension
)
1437 unsigned long insn
, extension
;
1439 unsigned long long temp
;
1442 temp
= (State
.regs
[REG_D0
+ REG0 (insn
)]
1443 * State
.regs
[REG_D0
+ REG1 (insn
)]);
1444 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
& 0xffffffff;
1445 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1446 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1447 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1448 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1449 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1453 void OP_F250 (insn
, extension
)
1454 unsigned long insn
, extension
;
1456 unsigned long long temp
;
1459 temp
= (State
.regs
[REG_D0
+ REG0 (insn
)]
1460 * State
.regs
[REG_D0
+ REG1 (insn
)]);
1461 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
& 0xffffffff;
1462 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1463 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1464 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1465 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1466 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1470 void OP_F260 (insn
, extension
)
1471 unsigned long insn
, extension
;
1476 temp
= State
.regs
[REG_MDR
];
1478 temp
|= State
.regs
[REG_D0
+ REG0 (insn
)];
1479 State
.regs
[REG_MDR
] = temp
% (long)State
.regs
[REG_D0
+ REG1 (insn
)];
1480 temp
/= (long)State
.regs
[REG_D0
+ REG1 (insn
)];
1481 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
& 0xffffffff;
1482 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1483 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1484 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1485 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1486 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1490 void OP_F270 (insn
, extension
)
1491 unsigned long insn
, extension
;
1493 unsigned long long temp
;
1496 temp
= State
.regs
[REG_MDR
];
1498 temp
|= State
.regs
[REG_D0
+ REG0 (insn
)];
1499 State
.regs
[REG_MDR
] = temp
% State
.regs
[REG_D0
+ REG1 (insn
)];
1500 temp
/= State
.regs
[REG_D0
+ REG1 (insn
)];
1501 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
& 0xffffffff;
1502 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1503 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1504 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1505 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1506 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1510 void OP_40 (insn
, extension
)
1511 unsigned long insn
, extension
;
1514 unsigned int value
, imm
, reg1
;
1516 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1519 State
.regs
[REG_D0
+ REG1 (insn
)] = value
;
1522 n
= (value
& 0x80000000);
1524 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1525 && (reg1
& 0x80000000) != (value
& 0x80000000));
1527 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1528 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1529 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1533 void OP_41 (insn
, extension
)
1534 unsigned long insn
, extension
;
1536 State
.regs
[REG_A0
+ REG1 (insn
)] += 1;
1540 void OP_50 (insn
, extension
)
1541 unsigned long insn
, extension
;
1543 State
.regs
[REG_A0
+ REG0 (insn
)] += 4;
1547 void OP_A000 (insn
, extension
)
1548 unsigned long insn
, extension
;
1551 unsigned long reg1
, imm
, value
;
1553 reg1
= State
.regs
[REG_D0
+ REG0_8 (insn
)];
1554 imm
= SEXT8 (insn
& 0xff);
1558 n
= (value
& 0x80000000);
1560 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1561 && (reg1
& 0x80000000) != (value
& 0x80000000));
1563 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1564 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1565 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1569 void OP_A0 (insn
, extension
)
1570 unsigned long insn
, extension
;
1573 unsigned long reg1
, reg2
, value
;
1575 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1576 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1577 value
= reg2
- reg1
;
1580 n
= (value
& 0x80000000);
1582 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1583 && (reg2
& 0x80000000) != (value
& 0x80000000));
1585 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1586 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1587 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1591 void OP_F1A0 (insn
, extension
)
1592 unsigned long insn
, extension
;
1595 unsigned long reg1
, reg2
, value
;
1597 reg1
= State
.regs
[REG_D0
+ REG1 (insn
)];
1598 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1599 value
= reg2
- reg1
;
1602 n
= (value
& 0x80000000);
1604 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1605 && (reg2
& 0x80000000) != (value
& 0x80000000));
1607 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1608 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1609 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1613 void OP_F190 (insn
, extension
)
1614 unsigned long insn
, extension
;
1617 unsigned long reg1
, reg2
, value
;
1619 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1620 reg2
= State
.regs
[REG_D0
+ REG0 (insn
)];
1621 value
= reg2
- reg1
;
1624 n
= (value
& 0x80000000);
1626 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1627 && (reg2
& 0x80000000) != (value
& 0x80000000));
1629 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1630 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1631 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1635 void OP_B000 (insn
, extension
)
1636 unsigned long insn
, extension
;
1639 unsigned long reg1
, imm
, value
;
1641 reg1
= State
.regs
[REG_A0
+ REG0_8 (insn
)];
1646 n
= (value
& 0x80000000);
1648 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1649 && (reg1
& 0x80000000) != (value
& 0x80000000));
1651 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1652 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1653 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1657 void OP_B0 (insn
, extension
)
1658 unsigned long insn
, extension
;
1661 unsigned long reg1
, reg2
, value
;
1663 reg1
= State
.regs
[REG_A0
+ REG1 (insn
)];
1664 reg2
= State
.regs
[REG_A0
+ REG0 (insn
)];
1665 value
= reg2
- reg1
;
1668 n
= (value
& 0x80000000);
1670 v
= ((reg2
& 0x80000000) != (reg1
& 0x80000000)
1671 && (reg2
& 0x80000000) != (value
& 0x80000000));
1673 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1674 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1675 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1679 void OP_FAC80000 (insn
, extension
)
1680 unsigned long insn
, extension
;
1683 unsigned long reg1
, imm
, value
;
1685 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1686 imm
= SEXT16 (insn
& 0xffff);
1690 n
= (value
& 0x80000000);
1692 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1693 && (reg1
& 0x80000000) != (value
& 0x80000000));
1695 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1696 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1697 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1701 void OP_FCC80000 (insn
, extension
)
1702 unsigned long insn
, extension
;
1705 unsigned long reg1
, imm
, value
;
1707 reg1
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1708 imm
= ((insn
& 0xffff) << 16) + extension
;
1712 n
= (value
& 0x80000000);
1714 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1715 && (reg1
& 0x80000000) != (value
& 0x80000000));
1717 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1718 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1719 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1723 void OP_FAD80000 (insn
, extension
)
1724 unsigned long insn
, extension
;
1727 unsigned long reg1
, imm
, value
;
1729 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1730 imm
= insn
& 0xffff;
1734 n
= (value
& 0x80000000);
1736 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1737 && (reg1
& 0x80000000) != (value
& 0x80000000));
1739 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1740 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1741 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1745 void OP_FCD80000 (insn
, extension
)
1746 unsigned long insn
, extension
;
1749 unsigned long reg1
, imm
, value
;
1751 reg1
= State
.regs
[REG_A0
+ REG0_16 (insn
)];
1752 imm
= ((insn
& 0xffff) << 16) + extension
;
1756 n
= (value
& 0x80000000);
1758 v
= ((reg1
& 0x80000000) != (imm
& 0x80000000)
1759 && (reg1
& 0x80000000) != (value
& 0x80000000));
1761 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1762 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1763 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1767 void OP_F200 (insn
, extension
)
1768 unsigned long insn
, extension
;
1772 State
.regs
[REG_D0
+ REG0 (insn
)] &= State
.regs
[REG_D0
+ REG1 (insn
)];
1773 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1774 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1775 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1776 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1780 void OP_F8E000 (insn
, extension
)
1781 unsigned long insn
, extension
;
1785 State
.regs
[REG_D0
+ REG0_8 (insn
)] &= (insn
& 0xff);
1786 z
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] == 0);
1787 n
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] & 0x80000000) != 0;
1788 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1789 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1793 void OP_FAE00000 (insn
, extension
)
1794 unsigned long insn
, extension
;
1798 State
.regs
[REG_D0
+ REG0_16 (insn
)] &= (insn
& 0xffff);
1799 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1800 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1801 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1802 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1806 void OP_FCE00000 (insn
, extension
)
1807 unsigned long insn
, extension
;
1811 State
.regs
[REG_D0
+ REG0_16 (insn
)]
1812 &= ((insn
& 0xffff) << 16) + extension
;
1813 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1814 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1815 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1816 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1819 /* and imm16, psw */
1820 void OP_FAFC0000 (insn
, extension
)
1821 unsigned long insn
, extension
;
1823 PSW
&= (insn
& 0xffff);
1827 void OP_F210 (insn
, extension
)
1828 unsigned long insn
, extension
;
1832 State
.regs
[REG_D0
+ REG0 (insn
)] |= State
.regs
[REG_D0
+ REG1 (insn
)];
1833 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1834 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1835 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1836 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1840 void OP_F8E400 (insn
, extension
)
1841 unsigned long insn
, extension
;
1845 State
.regs
[REG_D0
+ REG0_8 (insn
)] |= insn
& 0xff;
1846 z
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] == 0);
1847 n
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] & 0x80000000) != 0;
1848 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1849 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1853 void OP_FAE40000 (insn
, extension
)
1854 unsigned long insn
, extension
;
1858 State
.regs
[REG_D0
+ REG0_16 (insn
)] |= insn
& 0xffff;
1859 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1860 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1861 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1862 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1866 void OP_FCE40000 (insn
, extension
)
1867 unsigned long insn
, extension
;
1871 State
.regs
[REG_D0
+ REG0_16 (insn
)]
1872 |= ((insn
& 0xffff) << 16) + extension
;
1873 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1874 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1875 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1876 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1880 void OP_FAFD0000 (insn
, extension
)
1881 unsigned long insn
, extension
;
1883 PSW
|= (insn
& 0xffff);
1887 void OP_F220 (insn
, extension
)
1888 unsigned long insn
, extension
;
1892 State
.regs
[REG_D0
+ REG0 (insn
)] ^= State
.regs
[REG_D0
+ REG1 (insn
)];
1893 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1894 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1895 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1896 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1900 void OP_FAE80000 (insn
, extension
)
1901 unsigned long insn
, extension
;
1905 State
.regs
[REG_D0
+ REG0_16 (insn
)] ^= insn
& 0xffff;
1906 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1907 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1908 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1909 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1913 void OP_FCE80000 (insn
, extension
)
1914 unsigned long insn
, extension
;
1918 State
.regs
[REG_D0
+ REG0_16 (insn
)]
1919 ^= ((insn
& 0xffff) << 16) + extension
;
1920 z
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] == 0);
1921 n
= (State
.regs
[REG_D0
+ REG0_16 (insn
)] & 0x80000000) != 0;
1922 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1923 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1927 void OP_F230 (insn
, extension
)
1928 unsigned long insn
, extension
;
1932 State
.regs
[REG_D0
+ REG0 (insn
)] = ~State
.regs
[REG_D0
+ REG0 (insn
)];
1933 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
1934 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
1935 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1936 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1940 void OP_F8EC00 (insn
, extension
)
1941 unsigned long insn
, extension
;
1946 temp
= State
.regs
[REG_D0
+ REG0_8 (insn
)];
1947 temp
&= (insn
& 0xff);
1948 n
= (temp
& 0x80000000) != 0;
1950 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1951 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1954 /* btst imm16, dn */
1955 void OP_FAEC0000 (insn
, extension
)
1956 unsigned long insn
, extension
;
1961 temp
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1962 temp
&= (insn
& 0xffff);
1963 n
= (temp
& 0x80000000) != 0;
1965 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1966 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1969 /* btst imm32, dn */
1970 void OP_FCEC0000 (insn
, extension
)
1971 unsigned long insn
, extension
;
1976 temp
= State
.regs
[REG_D0
+ REG0_16 (insn
)];
1977 temp
&= ((insn
& 0xffff) << 16) + extension
;
1978 n
= (temp
& 0x80000000) != 0;
1980 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1981 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1984 /* btst imm8,(abs32) */
1985 void OP_FE020000 (insn
, extension
)
1986 unsigned long insn
, extension
;
1991 temp
= load_mem (((insn
& 0xffff) << 16) | (extension
>> 8), 1);
1992 temp
&= (extension
& 0xff);
1993 n
= (temp
& 0x80000000) != 0;
1995 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1996 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1999 /* btst imm8,(d8,an) */
2000 void OP_FAF80000 (insn
, extension
)
2001 unsigned long insn
, extension
;
2006 temp
= load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
2007 + SEXT8 ((insn
& 0xff00) >> 8)), 1);
2008 temp
&= (insn
& 0xff);
2009 n
= (temp
& 0x80000000) != 0;
2011 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2012 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
2016 void OP_F080 (insn
, extension
)
2017 unsigned long insn
, extension
;
2022 temp
= load_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1);
2023 z
= (temp
& State
.regs
[REG_D0
+ REG1 (insn
)]) == 0;
2024 temp
|= State
.regs
[REG_D0
+ REG1 (insn
)];
2025 store_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1, temp
);
2026 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2027 PSW
|= (z
? PSW_Z
: 0);
2030 /* bset imm8, (abs32) */
2031 void OP_FE000000 (insn
, extension
)
2032 unsigned long insn
, extension
;
2037 temp
= load_mem (((insn
& 0xffff) << 16 | (extension
>> 8)), 1);
2038 z
= (temp
& (extension
& 0xff)) == 0;
2039 temp
|= (extension
& 0xff);
2040 store_mem ((((insn
& 0xffff) << 16) | (extension
>> 8)), 1, temp
);
2041 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2042 PSW
|= (z
? PSW_Z
: 0);
2045 /* bset imm8,(d8,an) */
2046 void OP_FAF00000 (insn
, extension
)
2047 unsigned long insn
, extension
;
2052 temp
= load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
2053 + SEXT8 ((insn
& 0xff00) >> 8)), 1);
2054 z
= (temp
& (insn
& 0xff)) == 0;
2055 temp
|= (insn
& 0xff);
2056 store_mem (State
.regs
[REG_A0
+ ((insn
& 30000)>> 16)], 1, temp
);
2057 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2058 PSW
|= (z
? PSW_Z
: 0);
2062 void OP_F090 (insn
, extension
)
2063 unsigned long insn
, extension
;
2068 temp
= load_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1);
2069 z
= (temp
& State
.regs
[REG_D0
+ REG1 (insn
)]) == 0;
2070 temp
= ~temp
& State
.regs
[REG_D0
+ REG1 (insn
)];
2071 store_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1, temp
);
2072 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2073 PSW
|= (z
? PSW_Z
: 0);
2076 /* bclr imm8, (abs32) */
2077 void OP_FE010000 (insn
, extension
)
2078 unsigned long insn
, extension
;
2083 temp
= load_mem (((insn
& 0xffff) << 16) | (extension
>> 8), 1);
2084 z
= (temp
& (extension
& 0xff)) == 0;
2085 temp
= ~temp
& (extension
& 0xff);
2086 store_mem (((insn
& 0xffff) << 16) | (extension
>> 8), 1, temp
);
2087 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2088 PSW
|= (z
? PSW_Z
: 0);
2091 /* bclr imm8,(d8,an) */
2092 void OP_FAF40000 (insn
, extension
)
2093 unsigned long insn
, extension
;
2098 temp
= load_mem ((State
.regs
[REG_A0
+ REG0_16 (insn
)]
2099 + SEXT8 ((insn
& 0xff00) >> 8)), 1);
2100 z
= (temp
& (insn
& 0xff)) == 0;
2101 temp
= ~temp
& (insn
& 0xff);
2102 store_mem (State
.regs
[REG_A0
+ REG0_16 (insn
)], 1, temp
);
2103 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2104 PSW
|= (z
? PSW_Z
: 0);
2108 void OP_F2B0 (insn
, extension
)
2109 unsigned long insn
, extension
;
2114 temp
= State
.regs
[REG_D0
+ REG0 (insn
)];
2116 temp
>>= State
.regs
[REG_D0
+ REG1 (insn
)];
2117 State
.regs
[REG_D0
+ REG0 (insn
)] = temp
;
2118 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
2119 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
2120 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
2121 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2125 void OP_F8C800 (insn
, extension
)
2126 unsigned long insn
, extension
;
2131 temp
= State
.regs
[REG_D0
+ REG0_8 (insn
)];
2133 temp
>>= (insn
& 0xff);
2134 State
.regs
[REG_D0
+ REG0_8 (insn
)] = temp
;
2135 z
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] == 0);
2136 n
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] & 0x80000000) != 0;
2137 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
2138 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2142 void OP_F2A0 (insn
, extension
)
2143 unsigned long insn
, extension
;
2147 c
= State
.regs
[REG_D0
+ REG0 (insn
)] & 1;
2148 State
.regs
[REG_D0
+ REG0 (insn
)]
2149 >>= State
.regs
[REG_D0
+ REG1 (insn
)];
2150 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
2151 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
2152 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
2153 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2157 void OP_F8C400 (insn
, extension
)
2158 unsigned long insn
, extension
;
2162 c
= State
.regs
[REG_D0
+ REG0_8 (insn
)] & 1;
2163 State
.regs
[REG_D0
+ REG0_8 (insn
)] >>= (insn
& 0xff);
2164 z
= (State
.regs
[REG_D0
+ (REG0 (insn
) >> 8)] == 0);
2165 n
= (State
.regs
[REG_D0
+ (REG0 (insn
) >> 8)] & 0x80000000) != 0;
2166 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
2167 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2171 void OP_F290 (insn
, extension
)
2172 unsigned long insn
, extension
;
2176 State
.regs
[REG_D0
+ REG0 (insn
)]
2177 <<= State
.regs
[REG_D0
+ REG1 (insn
)];
2178 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
2179 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
2180 PSW
&= ~(PSW_Z
| PSW_N
);
2181 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
2185 void OP_F8C000 (insn
, extension
)
2186 unsigned long insn
, extension
;
2190 State
.regs
[REG_D0
+ REG0_8 (insn
)] <<= (insn
& 0xff);
2191 z
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] == 0);
2192 n
= (State
.regs
[REG_D0
+ REG0_8 (insn
)] & 0x80000000) != 0;
2193 PSW
&= ~(PSW_Z
| PSW_N
);
2194 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
2198 void OP_54 (insn
, extension
)
2199 unsigned long insn
, extension
;
2203 State
.regs
[REG_D0
+ REG0 (insn
)] <<= 2;
2204 z
= (State
.regs
[REG_D0
+ REG0 (insn
)] == 0);
2205 n
= (State
.regs
[REG_D0
+ REG0 (insn
)] & 0x80000000) != 0;
2206 PSW
&= ~(PSW_Z
| PSW_N
);
2207 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
2211 void OP_F284 (insn
, extension
)
2212 unsigned long insn
, extension
;
2214 unsigned long value
;
2217 value
= State
.regs
[REG_D0
+ REG0 (insn
)];
2221 value
|= ((PSW
& PSW_C
) != 0) ? 0x80000000 : 0;
2222 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
2224 n
= (value
& 0x80000000) != 0;
2225 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2226 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2230 void OP_F280 (insn
, extension
)
2231 unsigned long insn
, extension
;
2233 unsigned long value
;
2236 value
= State
.regs
[REG_D0
+ REG0 (insn
)];
2237 c
= (value
& 0x80000000) ? 1 : 0;
2240 value
|= ((PSW
& PSW_C
) != 0);
2241 State
.regs
[REG_D0
+ REG0 (insn
)] = value
;
2243 n
= (value
& 0x80000000) != 0;
2244 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2245 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2249 void OP_C800 (insn
, extension
)
2250 unsigned long insn
, extension
;
2252 /* The dispatching code will add 2 after we return, so
2253 we subtract two here to make things right. */
2255 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2259 void OP_C900 (insn
, extension
)
2260 unsigned long insn
, extension
;
2262 /* The dispatching code will add 2 after we return, so
2263 we subtract two here to make things right. */
2265 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2269 void OP_C100 (insn
, extension
)
2270 unsigned long insn
, extension
;
2272 /* The dispatching code will add 2 after we return, so
2273 we subtract two here to make things right. */
2275 || (((PSW
& PSW_N
) != 0) ^ ((PSW
& PSW_V
) != 0))))
2276 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2280 void OP_C200 (insn
, extension
)
2281 unsigned long insn
, extension
;
2283 /* The dispatching code will add 2 after we return, so
2284 we subtract two here to make things right. */
2285 if (!(((PSW
& PSW_N
) != 0) ^ ((PSW
& PSW_V
) != 0)))
2286 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2290 void OP_C300 (insn
, extension
)
2291 unsigned long insn
, extension
;
2293 /* The dispatching code will add 2 after we return, so
2294 we subtract two here to make things right. */
2296 || (((PSW
& PSW_N
) != 0) ^ ((PSW
& PSW_V
) != 0)))
2297 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2301 void OP_C000 (insn
, extension
)
2302 unsigned long insn
, extension
;
2304 /* The dispatching code will add 2 after we return, so
2305 we subtract two here to make things right. */
2306 if (((PSW
& PSW_N
) != 0) ^ ((PSW
& PSW_V
) != 0))
2307 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2311 void OP_C500 (insn
, extension
)
2312 unsigned long insn
, extension
;
2314 /* The dispatching code will add 2 after we return, so
2315 we subtract two here to make things right. */
2316 if (!(((PSW
& PSW_C
) != 0) || (PSW
& PSW_Z
) != 0))
2317 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2321 void OP_C600 (insn
, extension
)
2322 unsigned long insn
, extension
;
2324 /* The dispatching code will add 2 after we return, so
2325 we subtract two here to make things right. */
2327 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2331 void OP_C700 (insn
, extension
)
2332 unsigned long insn
, extension
;
2334 /* The dispatching code will add 2 after we return, so
2335 we subtract two here to make things right. */
2336 if (((PSW
& PSW_C
) != 0) || (PSW
& PSW_Z
) != 0)
2337 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2341 void OP_C400 (insn
, extension
)
2342 unsigned long insn
, extension
;
2344 /* The dispatching code will add 2 after we return, so
2345 we subtract two here to make things right. */
2347 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2351 void OP_F8E800 (insn
, extension
)
2352 unsigned long insn
, extension
;
2354 /* The dispatching code will add 3 after we return, so
2355 we subtract two here to make things right. */
2357 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2361 void OP_F8E900 (insn
, extension
)
2362 unsigned long insn
, extension
;
2364 /* The dispatching code will add 3 after we return, so
2365 we subtract two here to make things right. */
2367 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2371 void OP_F8EA00 (insn
, extension
)
2372 unsigned long insn
, extension
;
2374 /* The dispatching code will add 3 after we return, so
2375 we subtract two here to make things right. */
2377 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2381 void OP_F8EB00 (insn
, extension
)
2382 unsigned long insn
, extension
;
2384 /* The dispatching code will add 3 after we return, so
2385 we subtract two here to make things right. */
2387 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2391 void OP_CA00 (insn
, extension
)
2392 unsigned long insn
, extension
;
2394 /* The dispatching code will add 2 after we return, so
2395 we subtract two here to make things right. */
2396 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2400 void OP_D8 (insn
, extension
)
2401 unsigned long insn
, extension
;
2407 void OP_D9 (insn
, extension
)
2408 unsigned long insn
, extension
;
2414 void OP_D1 (insn
, extension
)
2415 unsigned long insn
, extension
;
2421 void OP_D2 (insn
, extension
)
2422 unsigned long insn
, extension
;
2428 void OP_D3 (insn
, extension
)
2429 unsigned long insn
, extension
;
2435 void OP_D0 (insn
, extension
)
2436 unsigned long insn
, extension
;
2442 void OP_D5 (insn
, extension
)
2443 unsigned long insn
, extension
;
2449 void OP_D6 (insn
, extension
)
2450 unsigned long insn
, extension
;
2456 void OP_D7 (insn
, extension
)
2457 unsigned long insn
, extension
;
2463 void OP_D4 (insn
, extension
)
2464 unsigned long insn
, extension
;
2470 void OP_DA (insn
, extension
)
2471 unsigned long insn
, extension
;
2477 void OP_DB (insn
, extension
)
2478 unsigned long insn
, extension
;
2484 void OP_F0F4 (insn
, extension
)
2485 unsigned long insn
, extension
;
2487 State
.pc
= State
.regs
[REG_A0
+ REG0 (insn
)] - 2;
2491 void OP_CC0000 (insn
, extension
)
2492 unsigned long insn
, extension
;
2494 State
.pc
+= SEXT16 (insn
& 0xffff) - 3;
2498 void OP_DC000000 (insn
, extension
)
2499 unsigned long insn
, extension
;
2501 State
.pc
+= (((insn
& 0xffffff) << 8) + extension
) - 5;
2504 /* call label:16,reg_list,imm8 */
2505 void OP_CD000000 (insn
, extension
)
2506 unsigned long insn
, extension
;
2508 unsigned int next_pc
, sp
, adjust
;
2511 sp
= State
.regs
[REG_SP
];
2512 next_pc
= State
.pc
+ 2;
2513 State
.mem
[sp
] = next_pc
& 0xff;
2514 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2515 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2516 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2524 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
2530 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
2536 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2542 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2548 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2550 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2552 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2554 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2556 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2558 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2560 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2564 /* And make sure to update the stack pointer. */
2565 State
.regs
[REG_SP
] -= extension
;
2566 State
.regs
[REG_MDR
] = next_pc
;
2567 State
.pc
+= SEXT16 ((insn
& 0xffff00) >> 8) - 5;
2570 /* call label:32,reg_list,imm8*/
2571 void OP_DD000000 (insn
, extension
)
2572 unsigned long insn
, extension
;
2574 unsigned int next_pc
, sp
, adjust
;
2577 sp
= State
.regs
[REG_SP
];
2578 next_pc
= State
.pc
+ 2;
2579 State
.mem
[sp
] = next_pc
& 0xff;
2580 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2581 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2582 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2584 mask
= (extension
& 0xff00) >> 8;
2590 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
2596 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
2602 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2608 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2614 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2616 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2618 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2620 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2622 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2624 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2626 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2630 /* And make sure to update the stack pointer. */
2631 State
.regs
[REG_SP
] -= (extension
& 0xff);
2632 State
.regs
[REG_MDR
] = next_pc
;
2633 State
.pc
+= (((insn
& 0xffffff) << 8) | ((extension
& 0xff0000) >> 16)) - 7;
2637 void OP_F0F0 (insn
, extension
)
2638 unsigned long insn
, extension
;
2640 unsigned int next_pc
, sp
;
2642 sp
= State
.regs
[REG_SP
];
2643 next_pc
= State
.pc
+ 2;
2644 State
.mem
[sp
] = next_pc
& 0xff;
2645 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2646 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2647 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2648 State
.regs
[REG_MDR
] = next_pc
;
2649 State
.pc
= State
.regs
[REG_A0
+ REG0 (insn
)] - 2;
2652 /* calls label:16 */
2653 void OP_FAFF0000 (insn
, extension
)
2654 unsigned long insn
, extension
;
2656 unsigned int next_pc
, sp
;
2658 sp
= State
.regs
[REG_SP
];
2659 next_pc
= State
.pc
+ 4;
2660 State
.mem
[sp
] = next_pc
& 0xff;
2661 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2662 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2663 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2664 State
.regs
[REG_MDR
] = next_pc
;
2665 State
.pc
+= SEXT16 (insn
& 0xffff) - 4;
2668 /* calls label:32 */
2669 void OP_FCFF0000 (insn
, extension
)
2670 unsigned long insn
, extension
;
2672 unsigned int next_pc
, sp
;
2674 sp
= State
.regs
[REG_SP
];
2675 next_pc
= State
.pc
+ 6;
2676 State
.mem
[sp
] = next_pc
& 0xff;
2677 State
.mem
[sp
+1] = (next_pc
& 0xff00) >> 8;
2678 State
.mem
[sp
+2] = (next_pc
& 0xff0000) >> 16;
2679 State
.mem
[sp
+3] = (next_pc
& 0xff000000) >> 24;
2680 State
.regs
[REG_MDR
] = next_pc
;
2681 State
.pc
+= (((insn
& 0xffff) << 16) + extension
) - 6;
2684 /* ret reg_list, imm8 */
2685 void OP_DF0000 (insn
, extension
)
2686 unsigned long insn
, extension
;
2691 State
.regs
[REG_SP
] += insn
& 0xff;
2692 State
.pc
= State
.regs
[REG_MDR
] - 3;
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);
2741 /* retf reg_list,imm8 */
2742 void OP_DE0000 (insn
, extension
)
2743 unsigned long insn
, extension
;
2748 sp
= State
.regs
[REG_SP
] + (insn
& 0xff);
2749 State
.regs
[REG_SP
] = sp
;
2750 State
.pc
= (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2751 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));
2754 sp
= State
.regs
[REG_SP
];
2756 mask
= (insn
& 0xff00) >> 8;
2761 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
2763 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
2765 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
2767 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
2769 State
.regs
[REG_A0
] = load_mem (sp
, 4);
2771 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
2773 State
.regs
[REG_D0
] = load_mem (sp
, 4);
2779 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
2785 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
2791 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
2797 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
2803 void OP_F0FC (insn
, extension
)
2804 unsigned long insn
, extension
;
2808 sp
= State
.regs
[REG_SP
];
2809 State
.pc
= (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2810 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));
2815 void OP_F0FD (insn
, extension
)
2816 unsigned long insn
, extension
;
2822 void OP_F0FE (insn
, extension
)
2823 unsigned long insn
, extension
;
2825 /* We use this for simulated system calls; we may need to change
2826 it to a reserved instruction if we conflict with uses at
2828 int save_errno
= errno
;
2831 /* Registers passed to trap 0 */
2833 /* Function number. */
2834 #define FUNC (load_mem (State.regs[REG_SP] + 4, 4))
2837 #define PARM1 (load_mem (State.regs[REG_SP] + 8, 4))
2838 #define PARM2 (load_mem (State.regs[REG_SP] + 12, 4))
2839 #define PARM3 (load_mem (State.regs[REG_SP] + 16, 4))
2841 /* Registers set by trap 0 */
2843 #define RETVAL State.regs[0] /* return value */
2844 #define RETERR State.regs[1] /* return error code */
2846 /* Turn a pointer in a register into a pointer into real memory. */
2848 #define MEMPTR(x) (State.mem + x)
2852 #if !defined(__GO32__) && !defined(_WIN32)
2857 RETVAL
= execve (MEMPTR (PARM1
), (char **) MEMPTR (PARM2
),
2858 (char **)MEMPTR (PARM3
));
2861 RETVAL
= execve (MEMPTR (PARM1
), (char **) MEMPTR (PARM2
), NULL
);
2866 RETVAL
= mn10300_callback
->read (mn10300_callback
, PARM1
,
2867 MEMPTR (PARM2
), PARM3
);
2871 RETVAL
= (int)mn10300_callback
->write_stdout (mn10300_callback
,
2872 MEMPTR (PARM2
), PARM3
);
2874 RETVAL
= (int)mn10300_callback
->write (mn10300_callback
, PARM1
,
2875 MEMPTR (PARM2
), PARM3
);
2878 RETVAL
= mn10300_callback
->lseek (mn10300_callback
, PARM1
, PARM2
, PARM3
);
2881 RETVAL
= mn10300_callback
->close (mn10300_callback
, PARM1
);
2884 RETVAL
= mn10300_callback
->open (mn10300_callback
, MEMPTR (PARM1
), PARM2
);
2887 /* EXIT - caller can look in PARM1 to work out the
2889 if (PARM1
== 0xdead || PARM1
== 0x1)
2890 State
.exception
= SIGABRT
;
2892 State
.exception
= SIGQUIT
;
2895 case SYS_stat
: /* added at hmsi */
2896 /* stat system call */
2898 struct stat host_stat
;
2901 RETVAL
= stat (MEMPTR (PARM1
), &host_stat
);
2905 /* Just wild-assed guesses. */
2906 store_mem (buf
, 2, host_stat
.st_dev
);
2907 store_mem (buf
+ 2, 2, host_stat
.st_ino
);
2908 store_mem (buf
+ 4, 4, host_stat
.st_mode
);
2909 store_mem (buf
+ 8, 2, host_stat
.st_nlink
);
2910 store_mem (buf
+ 10, 2, host_stat
.st_uid
);
2911 store_mem (buf
+ 12, 2, host_stat
.st_gid
);
2912 store_mem (buf
+ 14, 2, host_stat
.st_rdev
);
2913 store_mem (buf
+ 16, 4, host_stat
.st_size
);
2914 store_mem (buf
+ 20, 4, host_stat
.st_atime
);
2915 store_mem (buf
+ 28, 4, host_stat
.st_mtime
);
2916 store_mem (buf
+ 36, 4, host_stat
.st_ctime
);
2921 RETVAL
= chown (MEMPTR (PARM1
), PARM2
, PARM3
);
2924 RETVAL
= chmod (MEMPTR (PARM1
), PARM2
);
2927 RETVAL
= time (MEMPTR (PARM1
));
2932 RETVAL
= times (&tms
);
2933 store_mem (PARM1
, 4, tms
.tms_utime
);
2934 store_mem (PARM1
+ 4, 4, tms
.tms_stime
);
2935 store_mem (PARM1
+ 8, 4, tms
.tms_cutime
);
2936 store_mem (PARM1
+ 12, 4, tms
.tms_cstime
);
2939 case SYS_gettimeofday
:
2943 RETVAL
= gettimeofday (&t
, &tz
);
2944 store_mem (PARM1
, 4, t
.tv_sec
);
2945 store_mem (PARM1
+ 4, 4, t
.tv_usec
);
2946 store_mem (PARM2
, 4, tz
.tz_minuteswest
);
2947 store_mem (PARM2
+ 4, 4, tz
.tz_dsttime
);
2951 /* Cast the second argument to void *, to avoid type mismatch
2952 if a prototype is present. */
2953 RETVAL
= utime (MEMPTR (PARM1
), (void *) MEMPTR (PARM2
));
2963 void OP_F0FF (insn
, extension
)
2964 unsigned long insn
, extension
;
2970 void OP_CB (insn
, extension
)
2971 unsigned long insn
, extension
;
2976 void OP_F500 (insn
, extension
)
2977 unsigned long insn
, extension
;
2983 void OP_F6F0 (insn
, extension
)
2984 unsigned long insn
, extension
;
2990 void OP_F600 (insn
, extension
)
2991 unsigned long insn
, extension
;
2997 void OP_F90000 (insn
, extension
)
2998 unsigned long insn
, extension
;
3004 void OP_FB000000 (insn
, extension
)
3005 unsigned long insn
, extension
;
3011 void OP_FD000000 (insn
, extension
)
3012 unsigned long insn
, extension
;
3018 void OP_F610 (insn
, extension
)
3019 unsigned long insn
, extension
;
3025 void OP_F91400 (insn
, extension
)
3026 unsigned long insn
, extension
;
3032 void OP_FB140000 (insn
, extension
)
3033 unsigned long insn
, extension
;
3039 void OP_FD140000 (insn
, extension
)
3040 unsigned long insn
, extension
;
3046 void OP_F640 (insn
, extension
)
3047 unsigned long insn
, extension
;
3053 void OP_F650 (insn
, extension
)
3054 unsigned long insn
, extension
;
3060 void OP_F670 (insn
, extension
)
3061 unsigned long insn
, extension
;
This page took 0.138647 seconds and 3 git commands to generate.