7 #include "mn10300_sim.h"
9 #include "sys/syscall.h"
13 #include <sys/times.h>
21 static void trace_input
PARAMS ((char *name
, enum op_types type
, int size
));
22 static void trace_output
PARAMS ((enum op_types result
));
23 static int init_text_p
= 0;
24 static asection
*text
;
25 static bfd_vma text_start
;
26 static bfd_vma text_end
;
29 #ifndef SIZE_INSTRUCTION
30 #define SIZE_INSTRUCTION 6
34 #define SIZE_OPERANDS 16
38 #define SIZE_VALUES 11
42 #define SIZE_LOCATION 40
46 trace_input (name
, type
, size
)
60 #define trace_input(NAME, IN1, IN2)
61 #define trace_output(RESULT)
68 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] = SEXT8 (insn
& 0xff);
74 State
.regs
[REG_D0
+ (insn
& 0x3)] = State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
80 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)] = State
.regs
[REG_D0
+ (insn
& 0x3)];
86 State
.regs
[REG_D0
+ (insn
& 0x3)] = State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
92 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] = insn
& 0xff;
98 State
.regs
[REG_A0
+ (insn
& 0x3)] = State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
104 State
.regs
[REG_A0
+ (insn
& 0x3)] = State
.regs
[REG_SP
];
110 State
.regs
[REG_SP
] = State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
116 State
.regs
[REG_D0
+ (insn
& 0x3)] = PSW
;
122 PSW
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
128 State
.regs
[REG_D0
+ (insn
& 0x3)] = State
.regs
[REG_MDR
];
134 State
.regs
[REG_MDR
] = State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
140 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]
141 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4);
144 /* mov (d8,am), dn */
147 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]
148 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
149 + SEXT8 (insn
& 0xff)), 4);
152 /* mov (d16,am), dn */
155 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]
156 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
157 + SEXT16 (insn
& 0xffff)), 4);
165 /* mov (d8,sp), dn */
168 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
169 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4);
172 /* mov (d16,sp), dn */
175 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)]
176 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4);
184 /* mov (di,am), dn */
187 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
188 = load_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
189 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 4);
192 /* mov (abs16), dn */
195 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] = load_mem ((insn
& 0xffff), 4);
206 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)]
207 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4);
210 /* mov (d8,am), an */
213 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 10)]
214 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
215 + SEXT8 (insn
& 0xff)), 4);
218 /* mov (d16,am), an */
221 State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 18)]
222 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
223 + SEXT16 (insn
& 0xffff)), 4);
231 /* mov (d8,sp), an */
234 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
235 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4);
238 /* mov (d16,sp), an */
241 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
242 = load_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4);
253 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
254 = load_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
255 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 4);
258 /* mov (abs16), an */
261 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = load_mem ((insn
& 0xffff), 4);
269 /* mov (d8,am), sp */
273 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
274 + SEXT8 (insn
& 0xff)), 4);
280 store_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4,
281 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
284 /* mov dm, (d8,an) */
287 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
288 + SEXT8 (insn
& 0xff)), 4,
289 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
292 /* mov dm (d16,an) */
295 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
296 + SEXT16 (insn
& 0xffff)), 4,
297 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
305 /* mov dm, (d8,sp) */
308 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4,
309 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
312 /* mov dm, (d16,sp) */
315 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4,
316 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
324 /* mov dm, (di,an) */
327 store_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
328 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 4,
329 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]);
332 /* mov dm, (abs16) */
335 store_mem ((insn
& 0xffff), 4, State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
346 store_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4,
347 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)]);
350 /* mov am, (d8,an) */
353 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
354 + SEXT8 (insn
& 0xff)), 4,
355 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 10)]);
358 /* mov am (d16,an) */
361 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 17)]
362 + SEXT16 (insn
& 0xffff)), 4,
363 State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 18)]);
371 /* mov am, (d8,sp) */
374 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 4,
375 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 10)]);
378 /* mov am, (d16,sp) */
381 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 4,
382 State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 18)]);
390 /* mov am, (di,an) */
393 store_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
394 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 4,
395 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]);
398 /* mov am, (abs16) */
401 store_mem ((insn
& 0xffff), 4, State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 18)]);
409 /* mov sp, (d8,an) */
412 store_mem (State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)] + SEXT8 (insn
& 0xff),
413 4, State
.regs
[REG_SP
]);
421 value
= SEXT16 (insn
& 0xffff);
422 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = value
;
435 value
= insn
& 0xffff;
436 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = value
;
444 value
= (insn
& 0xffff) << 16 | extension
;
445 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = value
;
451 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]
452 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 1);
455 /* movbu (d8,am), dn */
458 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]
459 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
460 + SEXT8 (insn
& 0xff)), 1);
463 /* movbu (d16,am), dn */
466 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]
467 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
468 + SEXT16 (insn
& 0xffff)), 1);
476 /* movbu (d8,sp), dn */
479 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
480 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xff)), 1);
483 /* movbu (d16,sp), dn */
486 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)]
487 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xffff)), 1);
495 /* movbu (di,am), dn */
498 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
499 = load_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
500 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 1);
503 /* movbu (abs16), dn */
506 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] = load_mem ((insn
& 0xffff), 1);
517 store_mem (State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)], 1,
518 State
.regs
[REG_D0
+ (insn
& 0x3)]);
521 /* movbu dm, (d8,an) */
524 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
525 + SEXT8 (insn
& 0xff)), 1,
526 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
529 /* movbu dm, (d16,an) */
532 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
533 + SEXT8 (insn
& 0xffff)), 1,
534 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
542 /* movbu dm, (d8,sp) */
545 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 1,
546 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
549 /* movbu dm, (d16,sp) */
552 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 2,
553 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
561 /* movbu dm, (di,an) */
564 store_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
565 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 1,
566 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]);
569 /* movbu dm, (abs16) */
572 store_mem ((insn
& 0xffff), 1, State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
583 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]
584 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 2);
587 /* movhu (d8,am), dn */
590 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]
591 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
592 + SEXT8 (insn
& 0xff)), 2);
595 /* movhu (d16,am), dn */
598 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]
599 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
600 + SEXT16 (insn
& 0xffff)), 2);
608 /* movhu (d8,sp) dn */
611 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
612 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xff)), 2);
615 /* movhu (d16,sp), dn */
618 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)]
619 = load_mem ((State
.regs
[REG_SP
] + (insn
& 0xffff)), 2);
627 /* movhu (di,am), dn */
630 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
631 = load_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
632 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 2);
635 /* movhu (abs16), dn */
638 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] = load_mem ((insn
& 0xffff), 2);
649 store_mem (State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)], 2,
650 State
.regs
[REG_D0
+ (insn
& 0x3)]);
653 /* movhu dm, (d8,an) */
656 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
657 + SEXT8 (insn
& 0xff)), 2,
658 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
661 /* movhu dm, (d16,an) */
664 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
665 + SEXT16 (insn
& 0xffff)), 2,
666 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
674 /* movhu dm,(d8,sp) */
677 store_mem (State
.regs
[REG_SP
] + (insn
& 0xff), 2,
678 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
681 /* movhu dm,(d16,sp) */
684 store_mem (State
.regs
[REG_SP
] + (insn
& 0xffff), 2,
685 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
693 /* movhu dm, (di,an) */
696 store_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
697 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 2,
698 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]);
701 /* movhu dm, (abs16) */
704 store_mem ((insn
& 0xffff), 2, State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
715 if (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x80000000)
716 State
.regs
[REG_MDR
] = -1;
718 State
.regs
[REG_MDR
] = 0;
724 State
.regs
[REG_D0
+ (insn
& 0x3)] = SEXT8 (State
.regs
[REG_D0
+ (insn
& 0x3)]);
730 State
.regs
[REG_D0
+ (insn
& 0x3)] &= 0xff;
736 State
.regs
[REG_D0
+ (insn
& 0x3)]
737 = SEXT16 (State
.regs
[REG_D0
+ (insn
& 0x3)]);
743 State
.regs
[REG_D0
+ (insn
& 0x3)] &= 0xffff;
746 /* movm (sp), reg_list */
749 unsigned long sp
= State
.regs
[REG_SP
];
757 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
759 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
761 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
763 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
765 State
.regs
[REG_A0
] = load_mem (sp
, 4);
767 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
769 State
.regs
[REG_D0
] = load_mem (sp
, 4);
775 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
781 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
787 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
793 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
797 /* And make sure to update the stack pointer. */
798 State
.regs
[REG_SP
] = sp
;
801 /* movm reg_list, (sp) */
804 unsigned long sp
= State
.regs
[REG_SP
];
812 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
818 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
824 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
830 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
836 State
.regs
[REG_D0
] = load_mem (sp
, 4);
838 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
840 State
.regs
[REG_A0
] = load_mem (sp
, 4);
842 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
844 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
846 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
848 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
852 /* And make sure to update the stack pointer. */
853 State
.regs
[REG_SP
] = sp
;
859 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)] = 0;
862 PSW
&= ~(PSW_V
| PSW_C
| PSW_N
);
869 unsigned long reg1
, reg2
, value
;
871 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
872 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
874 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
877 n
= (value
& 0x80000000);
879 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
880 && (reg2
& 0x8000000) != (value
& 0x80000000));
882 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
883 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
884 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
891 unsigned long reg1
, reg2
, value
;
893 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
894 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
896 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
899 n
= (value
& 0x80000000);
901 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
902 && (reg2
& 0x8000000) != (value
& 0x80000000));
904 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
905 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
906 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
913 unsigned long reg1
, reg2
, value
;
915 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
916 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
918 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
921 n
= (value
& 0x80000000);
923 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
924 && (reg2
& 0x8000000) != (value
& 0x80000000));
926 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
927 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
928 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
935 unsigned long reg1
, reg2
, value
;
937 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
938 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
940 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
943 n
= (value
& 0x80000000);
945 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
946 && (reg2
& 0x8000000) != (value
& 0x80000000));
948 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
949 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
950 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
957 unsigned long reg1
, imm
, value
;
959 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 8)];
960 imm
= SEXT8 (insn
& 0xff);
962 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 8)] = value
;
965 n
= (value
& 0x80000000);
967 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
968 && (imm
& 0x8000000) != (value
& 0x80000000));
970 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
971 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
972 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
979 unsigned long reg1
, imm
, value
;
981 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)];
982 imm
= SEXT16 (insn
& 0xffff);
984 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)] = value
;
987 n
= (value
& 0x80000000);
989 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
990 && (imm
& 0x8000000) != (value
& 0x80000000));
992 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
993 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
994 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1001 unsigned long reg1
, imm
, value
;
1003 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)];
1004 imm
= ((insn
& 0xffff) << 16) | extension
;
1006 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)] = value
;
1009 n
= (value
& 0x80000000);
1011 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1012 && (imm
& 0x8000000) != (value
& 0x80000000));
1014 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1015 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1016 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1023 unsigned long reg1
, imm
, value
;
1025 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 8)];
1028 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 8)] = value
;
1031 n
= (value
& 0x80000000);
1033 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1034 && (imm
& 0x8000000) != (value
& 0x80000000));
1036 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1037 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1038 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1045 unsigned long reg1
, imm
, value
;
1047 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)];
1050 State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)] = value
;
1053 n
= (value
& 0x80000000);
1055 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1056 && (imm
& 0x8000000) != (value
& 0x80000000));
1058 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1059 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1060 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1067 unsigned long reg1
, imm
, value
;
1069 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)];
1070 imm
= ((insn
& 0xffff) << 16) | extension
;
1072 State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)] = value
;
1075 n
= (value
& 0x80000000);
1077 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1078 && (imm
& 0x8000000) != (value
& 0x80000000));
1080 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1081 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1082 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1089 unsigned long reg1
, imm
, value
;
1091 reg1
= State
.regs
[REG_SP
];
1092 imm
= SEXT8 (insn
& 0xff);
1094 State
.regs
[REG_SP
] = value
;
1097 n
= (value
& 0x80000000);
1099 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1100 && (imm
& 0x8000000) != (value
& 0x80000000));
1102 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1103 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1104 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1111 unsigned long reg1
, imm
, value
;
1113 reg1
= State
.regs
[REG_SP
];
1114 imm
= SEXT16 (insn
& 0xffff);
1116 State
.regs
[REG_SP
] = value
;
1119 n
= (value
& 0x80000000);
1121 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1122 && (imm
& 0x8000000) != (value
& 0x80000000));
1124 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1125 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1126 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1133 unsigned long reg1
, imm
, value
;
1135 reg1
= State
.regs
[REG_SP
];
1136 imm
= ((insn
& 0xffff) << 16) | extension
;
1138 State
.regs
[REG_SP
] = value
;
1141 n
= (value
& 0x80000000);
1143 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1144 && (imm
& 0x8000000) != (value
& 0x80000000));
1146 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1147 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1148 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1155 unsigned long reg1
, reg2
, value
;
1157 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1158 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1159 value
= reg1
+ reg2
+ ((PSW
& PSW_C
) != 0);
1160 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1163 n
= (value
& 0x80000000);
1165 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1166 && (reg2
& 0x8000000) != (value
& 0x80000000));
1168 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1169 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1170 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1177 unsigned long reg1
, reg2
, value
;
1179 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1180 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1181 value
= reg2
- reg1
;
1184 n
= (value
& 0x80000000);
1186 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1187 && (reg2
& 0x8000000) != (value
& 0x80000000));
1189 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1190 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1191 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1192 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1199 unsigned long reg1
, reg2
, value
;
1201 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1202 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1203 value
= reg2
- reg1
;
1206 n
= (value
& 0x80000000);
1208 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1209 && (reg2
& 0x8000000) != (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));
1214 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
1221 unsigned long reg1
, reg2
, value
;
1223 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1224 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1225 value
= reg2
- reg1
;
1228 n
= (value
& 0x80000000);
1230 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1231 && (reg2
& 0x8000000) != (value
& 0x80000000));
1233 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1234 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1235 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1236 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1243 unsigned long reg1
, reg2
, value
;
1245 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1246 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1247 value
= reg2
- reg1
;
1250 n
= (value
& 0x80000000);
1252 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1253 && (reg2
& 0x8000000) != (value
& 0x80000000));
1255 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1256 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1257 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1258 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
1265 unsigned long reg1
, imm
, value
;
1267 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)];
1268 imm
= ((insn
& 0xffff) << 16) | extension
;
1272 n
= (value
& 0x80000000);
1274 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1275 && (imm
& 0x8000000) != (value
& 0x80000000));
1277 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1278 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1279 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1280 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)] = value
;
1287 unsigned long reg1
, imm
, value
;
1289 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)];
1290 imm
= ((insn
& 0xffff) << 16) | extension
;
1294 n
= (value
& 0x80000000);
1296 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1297 && (imm
& 0x8000000) != (value
& 0x80000000));
1299 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1300 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1301 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1302 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)] = value
;
1309 unsigned long reg1
, reg2
, value
;
1311 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1312 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1313 value
= reg2
- reg1
- ((PSW
& PSW_C
) != 0);
1316 n
= (value
& 0x80000000);
1318 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1319 && (reg2
& 0x8000000) != (value
& 0x80000000));
1321 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1322 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1323 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1324 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1330 unsigned long long temp
;
1333 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1334 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1335 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1336 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1337 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1338 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1339 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1340 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1346 unsigned long long temp
;
1349 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1350 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1351 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1352 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1353 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1354 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1355 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1356 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1365 temp
= State
.regs
[REG_MDR
];
1367 temp
|= State
.regs
[REG_D0
+ (insn
& 0x3)];
1368 State
.regs
[REG_MDR
] = temp
% State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1369 temp
/= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1370 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1371 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1372 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1373 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1374 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1375 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1376 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1377 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1383 unsigned long long temp
;
1386 temp
= State
.regs
[REG_MDR
];
1388 temp
|= State
.regs
[REG_D0
+ (insn
& 0x3)];
1389 State
.regs
[REG_MDR
] = temp
% State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1390 temp
/= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1391 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1392 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1393 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1394 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1395 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1396 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1397 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1398 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1404 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)] += 1;
1410 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)] += 1;
1416 State
.regs
[REG_A0
+ (insn
& 0x3)] += 4;
1423 unsigned long reg1
, imm
, value
;
1425 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)];
1426 imm
= SEXT8 (insn
& 0xff);
1430 n
= (value
& 0x80000000);
1432 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1433 && (imm
& 0x8000000) != (value
& 0x80000000));
1435 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1436 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1437 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1444 unsigned long reg1
, reg2
, value
;
1446 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1447 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1448 value
= reg2
- reg1
;
1451 n
= (value
& 0x80000000);
1453 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1454 && (reg2
& 0x8000000) != (value
& 0x80000000));
1456 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1457 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1458 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1465 unsigned long reg1
, reg2
, value
;
1467 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1468 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1469 value
= reg2
- reg1
;
1472 n
= (value
& 0x80000000);
1474 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1475 && (reg2
& 0x8000000) != (value
& 0x80000000));
1477 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1478 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1479 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1486 unsigned long reg1
, reg2
, value
;
1488 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1489 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1490 value
= reg2
- reg1
;
1493 n
= (value
& 0x80000000);
1495 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1496 && (reg2
& 0x8000000) != (value
& 0x80000000));
1498 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1499 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1500 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1507 unsigned long reg1
, imm
, value
;
1509 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)];
1514 n
= (value
& 0x80000000);
1516 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1517 && (imm
& 0x8000000) != (value
& 0x80000000));
1519 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1520 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1521 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1528 unsigned long reg1
, reg2
, value
;
1530 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1531 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1532 value
= reg2
- reg1
;
1535 n
= (value
& 0x80000000);
1537 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1538 && (reg2
& 0x8000000) != (value
& 0x80000000));
1540 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1541 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1542 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1549 unsigned long reg1
, imm
, value
;
1551 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)];
1552 imm
= SEXT16 (insn
& 0xffff);
1556 n
= (value
& 0x80000000);
1558 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1559 && (imm
& 0x8000000) != (value
& 0x80000000));
1561 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1562 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1563 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1570 unsigned long reg1
, imm
, value
;
1572 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)];
1573 imm
= ((insn
& 0xffff) << 16) | extension
;
1577 n
= (value
& 0x80000000);
1579 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1580 && (imm
& 0x8000000) != (value
& 0x80000000));
1582 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1583 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1584 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1591 unsigned long reg1
, imm
, value
;
1593 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)];
1594 imm
= insn
& 0xffff;
1598 n
= (value
& 0x80000000);
1600 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1601 && (imm
& 0x8000000) != (value
& 0x80000000));
1603 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1604 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1605 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1612 unsigned long reg1
, imm
, value
;
1614 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)];
1615 imm
= ((insn
& 0xffff) << 16) | extension
;
1619 n
= (value
& 0x80000000);
1621 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1622 && (imm
& 0x8000000) != (value
& 0x80000000));
1624 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1625 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1626 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1634 State
.regs
[REG_D0
+ (insn
& 0x3)] &= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1635 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1636 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1637 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1638 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1646 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] &= (insn
& 0xff);
1647 z
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] == 0);
1648 n
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 0x8000000) != 0;
1649 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1650 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1658 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] &= (insn
& 0xffff);
1659 z
= (State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] == 0);
1660 n
= (State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] & 0x8000000) != 0;
1661 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1662 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1670 /* and imm16, psw */
1673 PSW
&= (insn
& 0xffff);
1681 State
.regs
[REG_D0
+ (insn
& 0x3)] |= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1682 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1683 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1684 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1685 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1693 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] |= insn
& 0xff;
1694 z
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] == 0);
1695 n
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 0x8000000) != 0;
1696 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1697 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1705 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] |= insn
& 0xffff;
1706 z
= (State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] == 0);
1707 n
= (State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] & 0x8000000) != 0;
1708 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1709 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1720 PSW
|= (insn
& 0xffff);
1728 State
.regs
[REG_D0
+ (insn
& 0x3)] ^= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1729 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1730 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1731 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1732 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1740 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] ^= insn
& 0xffff;
1741 z
= (State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] == 0);
1742 n
= (State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] & 0x8000000) != 0;
1743 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1744 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1757 State
.regs
[REG_D0
+ (insn
& 0x3)] = ~State
.regs
[REG_D0
+ (insn
& 0x3)];
1758 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1759 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1760 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1761 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1770 temp
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)];
1771 temp
&= (insn
& 0xff);
1772 n
= (temp
& 0x80000000) != 0;
1774 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1775 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1778 /* btst imm16, dn */
1784 temp
= State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)];
1785 temp
&= (insn
& 0xffff);
1786 n
= (temp
& 0x80000000) != 0;
1788 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1789 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1802 /* btst imm8,(d8,an) */
1808 temp
= load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
1809 + SEXT8 ((insn
& 0xff00) >> 8)), 1);
1810 temp
&= (insn
& 0xff);
1811 n
= (temp
& 0x80000000) != 0;
1813 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1814 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1823 temp
= load_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1);
1824 z
= (temp
& State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]) == 0;
1825 temp
|= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1826 store_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1, temp
);
1827 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1828 PSW
|= (z
? PSW_Z
: 0);
1836 /* bset imm8,(d8,an) */
1842 temp
= load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
1843 + SEXT8 ((insn
& 0xff00) >> 8)), 1);
1844 z
= (temp
& (insn
& 0xff)) == 0;
1845 temp
|= (insn
& 0xff);
1846 store_mem (State
.regs
[REG_A0
+ ((insn
& 30000)>> 16)], 1, temp
);
1847 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1848 PSW
|= (z
? PSW_Z
: 0);
1857 temp
= load_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1);
1858 z
= (temp
& State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]) == 0;
1859 temp
= ~temp
& State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1860 store_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1, temp
);
1861 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1862 PSW
|= (z
? PSW_Z
: 0);
1870 /* bclr imm8,(d8,an) */
1876 temp
= load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)]
1877 + SEXT8 ((insn
& 0xff00) >> 8)), 1);
1878 z
= (temp
& (insn
& 0xff)) == 0;
1879 temp
= ~temp
& (insn
& 0xff);
1880 store_mem (State
.regs
[REG_A0
+ ((insn
& 30000)>> 16)], 1, temp
);
1881 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1882 PSW
|= (z
? PSW_Z
: 0);
1891 temp
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1893 temp
>>= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1894 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
;
1895 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1896 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1897 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1898 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1907 temp
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)];
1909 temp
>>= (insn
& 0xff);
1910 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] = temp
;
1911 z
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] == 0);
1912 n
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 0x8000000) != 0;
1913 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1914 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1922 c
= State
.regs
[REG_D0
+ (insn
& 0x3)] & 1;
1923 State
.regs
[REG_D0
+ (insn
& 0x3)]
1924 >>= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1925 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1926 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1927 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1928 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1936 c
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 1;
1937 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] >>= (insn
& 0xff);
1938 z
= (State
.regs
[REG_D0
+ ((insn
& 0x3) >> 8)] == 0);
1939 n
= (State
.regs
[REG_D0
+ ((insn
& 0x3) >> 8)] & 0x8000000) != 0;
1940 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1941 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1949 State
.regs
[REG_D0
+ (insn
& 0x3)]
1950 <<= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1951 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1952 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1953 PSW
&= ~(PSW_Z
| PSW_N
);
1954 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1962 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] <<= (insn
& 0xff);
1963 z
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] == 0);
1964 n
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 0x8000000) != 0;
1965 PSW
&= ~(PSW_Z
| PSW_N
);
1966 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1974 State
.regs
[REG_D0
+ (insn
& 0x3)] <<= 2;
1975 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1976 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1977 PSW
&= ~(PSW_Z
| PSW_N
);
1978 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1984 unsigned long value
;
1987 value
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1992 value
|= ((PSW
& PSW_C
) != 0) ? 0x80000000 : 0;
1993 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1995 n
= (value
& 0x8000000) != 0;
1996 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1997 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2003 unsigned long value
;
2006 value
= State
.regs
[REG_D0
+ (insn
& 0x3)];
2007 if (value
& 0x80000000)
2011 value
|= ((PSW
& PSW_C
) != 0);
2012 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
2014 n
= (value
& 0x8000000) != 0;
2015 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
2016 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
2022 /* The dispatching code will add 2 after we return, so
2023 we subtract two here to make things right. */
2025 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2031 /* The dispatching code will add 2 after we return, so
2032 we subtract two here to make things right. */
2034 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2040 /* The dispatching code will add 2 after we return, so
2041 we subtract two here to make things right. */
2043 || (((PSW
& PSW_N
) != 0) ^ (PSW
& PSW_V
) != 0)))
2044 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2050 /* The dispatching code will add 2 after we return, so
2051 we subtract two here to make things right. */
2052 if (!(((PSW
& PSW_N
) != 0) ^ (PSW
& PSW_V
) != 0))
2053 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2059 /* The dispatching code will add 2 after we return, so
2060 we subtract two here to make things right. */
2062 || (((PSW
& PSW_N
) != 0) ^ (PSW
& PSW_V
) != 0))
2063 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2069 /* The dispatching code will add 2 after we return, so
2070 we subtract two here to make things right. */
2071 if (((PSW
& PSW_N
) != 0) ^ (PSW
& PSW_V
) != 0)
2072 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2078 /* The dispatching code will add 2 after we return, so
2079 we subtract two here to make things right. */
2080 if (!(((PSW
& PSW_C
) != 0) || (PSW
& PSW_Z
) != 0))
2081 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2087 /* The dispatching code will add 2 after we return, so
2088 we subtract two here to make things right. */
2090 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2096 /* The dispatching code will add 2 after we return, so
2097 we subtract two here to make things right. */
2098 if (((PSW
& PSW_C
) != 0) || (PSW
& PSW_Z
) != 0)
2099 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2105 /* The dispatching code will add 2 after we return, so
2106 we subtract two here to make things right. */
2108 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2114 /* The dispatching code will add 3 after we return, so
2115 we subtract two here to make things right. */
2117 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2123 /* The dispatching code will add 3 after we return, so
2124 we subtract two here to make things right. */
2126 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2132 /* The dispatching code will add 3 after we return, so
2133 we subtract two here to make things right. */
2135 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2141 /* The dispatching code will add 3 after we return, so
2142 we subtract two here to make things right. */
2144 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2150 /* The dispatching code will add 2 after we return, so
2151 we subtract two here to make things right. */
2152 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2230 State
.pc
= State
.regs
[REG_A0
+ (insn
& 0x3)] - 2;
2236 State
.pc
+= SEXT16 (insn
& 0xffff) - 3;
2242 State
.pc
+= (((insn
& 0xffffff) << 8) | extension
) - 5;
2245 /* call label:16,reg_list,imm8 */
2248 unsigned int next_pc
, sp
, adjust
;
2251 sp
= State
.regs
[REG_SP
];
2252 next_pc
= State
.pc
+ 2;
2253 State
.mem
[sp
] = next_pc
& 0xff;
2254 State
.mem
[sp
+1] = next_pc
& 0xff00;
2255 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2256 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2264 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
2270 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
2276 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2282 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2288 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2290 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2292 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2294 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2296 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2298 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2300 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2304 /* And make sure to update the stack pointer. */
2305 State
.regs
[REG_SP
] -= extension
;
2306 State
.regs
[REG_MDR
] = next_pc
;
2307 State
.pc
+= SEXT16 ((insn
& 0xffff00) >> 8) - 5;
2310 /* call label:32,reg_list,imm8*/
2313 unsigned int next_pc
, sp
, adjust
;
2316 sp
= State
.regs
[REG_SP
];
2317 next_pc
= State
.pc
+ 2;
2318 State
.mem
[sp
] = next_pc
& 0xff;
2319 State
.mem
[sp
+1] = next_pc
& 0xff00;
2320 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2321 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2323 mask
= (extension
& 0xff00) >> 8;
2329 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
2335 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
2341 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2347 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2353 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2355 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2357 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2359 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2361 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2363 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2365 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2369 /* And make sure to update the stack pointer. */
2370 State
.regs
[REG_SP
] -= (extension
& 0xff);
2371 State
.regs
[REG_MDR
] = next_pc
;
2372 State
.pc
+= (((insn
& 0xffffff) << 8) | ((extension
& 0xff0000) >> 16)) - 7;
2378 unsigned int next_pc
, sp
;
2380 sp
= State
.regs
[REG_SP
];
2381 next_pc
= State
.pc
+ 2;
2382 State
.mem
[sp
] = next_pc
& 0xff;
2383 State
.mem
[sp
+1] = next_pc
& 0xff00;
2384 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2385 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2386 State
.regs
[REG_MDR
] = next_pc
;
2387 State
.pc
= State
.regs
[REG_A0
+ (insn
& 0x3)] - 2;
2390 /* calls label:16 */
2393 unsigned int next_pc
, sp
;
2395 sp
= State
.regs
[REG_SP
];
2396 next_pc
= State
.pc
+ 4;
2397 State
.mem
[sp
] = next_pc
& 0xff;
2398 State
.mem
[sp
+1] = next_pc
& 0xff00;
2399 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2400 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2401 State
.regs
[REG_MDR
] = next_pc
;
2402 State
.pc
+= SEXT16 (insn
& 0xffff) - 4;
2405 /* calls label:32 */
2408 unsigned int next_pc
, sp
;
2410 sp
= State
.regs
[REG_SP
];
2411 next_pc
= State
.pc
+ 6;
2412 State
.mem
[sp
] = next_pc
& 0xff;
2413 State
.mem
[sp
+1] = next_pc
& 0xff00;
2414 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2415 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2416 State
.regs
[REG_MDR
] = next_pc
;
2417 State
.pc
+= (((insn
& 0xffff) << 16) | extension
) - 6;
2426 State
.regs
[REG_SP
] += insn
& 0xff;
2427 State
.pc
= State
.regs
[REG_MDR
] - 3;
2428 sp
= State
.regs
[REG_SP
];
2430 mask
= (insn
& 0xff00) >> 8;
2435 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
2437 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
2439 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
2441 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
2443 State
.regs
[REG_A0
] = load_mem (sp
, 4);
2445 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
2447 State
.regs
[REG_D0
] = load_mem (sp
, 4);
2453 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
2459 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
2465 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
2471 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
2476 /* retf reg_list,imm8 */
2482 State
.regs
[REG_SP
] += insn
& 0xff;
2483 State
.pc
= (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2484 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));
2487 sp
= State
.regs
[REG_SP
];
2489 mask
= (insn
& 0xff00) >> 8;
2494 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
2496 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
2498 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
2500 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
2502 State
.regs
[REG_A0
] = load_mem (sp
, 4);
2504 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
2506 State
.regs
[REG_D0
] = load_mem (sp
, 4);
2512 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
2518 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
2524 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
2530 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
2540 sp
= State
.regs
[REG_SP
];
2541 State
.pc
= (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2542 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));
This page took 0.08311 seconds and 5 git commands to generate.