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);
162 /* mov (d8,sp), dn */
165 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
166 = load_mem (State
.regs
[REG_SP
] + insn
& 0xff, 4);
179 /* mov (di,am), dn */
182 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
183 = load_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
184 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 4);
187 /* mov (abs16), dn */
190 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] = load_mem (insn
& 0xffff, 4);
201 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)]
202 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4);
205 /* mov (d8,am), an */
208 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 10)]
209 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
210 + SEXT8 (insn
& 0xff)), 4);
223 /* mov (d8,sp), an */
226 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
227 = load_mem (State
.regs
[REG_SP
] + insn
& 0xff, 4);
243 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
244 = load_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
245 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 4);
258 /* mov (d8,am), sp */
262 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
263 + SEXT8 (insn
& 0xff)), 4);
269 store_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4,
270 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
273 /* mov dm, (d8,an) */
276 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
277 + SEXT8 (insn
& 0xff)), 4,
278 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
291 /* mov dm, (d8,sp) */
294 store_mem (State
.regs
[REG_SP
] + insn
& 0xff, 4,
295 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
308 /* mov dm, (di,an) */
311 store_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
312 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 4,
313 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]);
316 /* mov dm, (abs16) */
319 store_mem ((insn
& 0xffff), 4, State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
330 store_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4,
331 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)]);
334 /* mov am, (d8,an) */
337 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
338 + SEXT8 (insn
& 0xff)), 4,
339 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 10)]);
352 /* mov am, (d8,sp) */
355 store_mem (State
.regs
[REG_SP
] + insn
& 0xff, 4,
356 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 10)]);
369 /* mov am, (di,an) */
372 store_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
373 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 4,
374 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]);
387 /* mov sp, (d8,an) */
390 store_mem (State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)] + SEXT8 (insn
& 0xff),
391 4, State
.regs
[REG_SP
]);
399 value
= SEXT16 (insn
& 0xffff);
400 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = value
;
413 value
= insn
& 0xffff;
414 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = value
;
422 value
= (insn
& 0xffff) << 16 | extension
;
423 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = value
;
429 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]
430 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 1);
433 /* movbu (d8,am), dn */
436 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]
437 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
438 + SEXT8 (insn
& 0xff)), 1);
451 /* movbu (d8,sp), dn */
454 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
455 = load_mem ((State
.regs
[REG_SP
] + SEXT8 (insn
& 0xff)), 1);
468 /* movbu (di,am), dn */
471 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
472 = load_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
473 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 1);
476 /* movbu (abs16), dn */
479 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] = load_mem (insn
& 0xffff, 1);
490 store_mem (State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)], 1,
491 State
.regs
[REG_D0
+ (insn
& 0x3)]);
494 /* movbu dm, (d8,an) */
497 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
498 + SEXT8 (insn
& 0xff)), 1,
499 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
512 /* movbu dm, (d8,sp) */
515 store_mem ((State
.regs
[REG_SP
] + SEXT8 (insn
& 0xff)), 1,
516 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
529 /* movbu dm, (di,an) */
532 store_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
533 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 1,
534 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]);
537 /* movbu dm, (abs16) */
540 store_mem ((insn
& 0xffff), 1, State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
551 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]
552 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 2);
555 /* movhu (d8,am), dn */
558 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]
559 = load_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
560 + SEXT8 (insn
& 0xff)), 2);
573 /* movhu (d8,sp) dn */
576 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
577 = load_mem ((State
.regs
[REG_SP
] + SEXT8 (insn
& 0xff)), 2);
590 /* movhu (di,am), dn */
593 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
594 = load_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
595 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 2);
598 /* movhu (abs16), dn */
601 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] = load_mem (insn
& 0xffff, 2);
612 store_mem (State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)], 2,
613 State
.regs
[REG_D0
+ (insn
& 0x3)]);
616 /* movhu dm, (d8,an) */
619 store_mem ((State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
620 + SEXT8 (insn
& 0xff)), 2,
621 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
634 /* movhu dm,(d8,sp) */
637 store_mem ((State
.regs
[REG_SP
] + SEXT8 (insn
& 0xff)), 2,
638 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
651 /* movhu dm, (di,an) */
654 store_mem ((State
.regs
[REG_A0
+ (insn
& 0x3)]
655 + State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]), 2,
656 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]);
659 /* movhu dm, (abs16) */
662 store_mem ((insn
& 0xffff), 2, State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
673 if (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x80000000)
674 State
.regs
[REG_MDR
] = -1;
676 State
.regs
[REG_MDR
] = 0;
682 State
.regs
[REG_D0
+ (insn
& 0x3)] = SEXT8 (State
.regs
[REG_D0
+ (insn
& 0x3)]);
688 State
.regs
[REG_D0
+ (insn
& 0x3)] &= 0xff;
694 State
.regs
[REG_D0
+ (insn
& 0x3)]
695 = SEXT16 (State
.regs
[REG_D0
+ (insn
& 0x3)]);
701 State
.regs
[REG_D0
+ (insn
& 0x3)] &= 0xffff;
704 /* movm (sp), reg_list */
707 unsigned long sp
= State
.regs
[REG_SP
];
715 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
717 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
719 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
721 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
723 State
.regs
[REG_A0
] = load_mem (sp
, 4);
725 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
727 State
.regs
[REG_D0
] = load_mem (sp
, 4);
733 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
739 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
745 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
751 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
755 /* And make sure to update the stack pointer. */
756 State
.regs
[REG_SP
] = sp
;
759 /* movm reg_list, (sp) */
762 unsigned long sp
= State
.regs
[REG_SP
];
770 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
776 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
782 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
788 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
794 State
.regs
[REG_D0
] = load_mem (sp
, 4);
796 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
798 State
.regs
[REG_A0
] = load_mem (sp
, 4);
800 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
802 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
804 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
806 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
810 /* And make sure to update the stack pointer. */
811 State
.regs
[REG_SP
] = sp
;
817 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)] = 0;
820 PSW
&= ~(PSW_V
| PSW_C
| PSW_N
);
827 unsigned long reg1
, reg2
, value
;
829 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
830 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
832 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
835 n
= (value
& 0x80000000);
837 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
838 && (reg2
& 0x8000000) != (value
& 0x80000000));
840 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
841 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
842 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
849 unsigned long reg1
, reg2
, value
;
851 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
852 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
854 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
857 n
= (value
& 0x80000000);
859 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
860 && (reg2
& 0x8000000) != (value
& 0x80000000));
862 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
863 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
864 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
871 unsigned long reg1
, reg2
, value
;
873 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
874 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
876 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
879 n
= (value
& 0x80000000);
881 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
882 && (reg2
& 0x8000000) != (value
& 0x80000000));
884 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
885 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
886 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
893 unsigned long reg1
, reg2
, value
;
895 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
896 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
898 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
901 n
= (value
& 0x80000000);
903 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
904 && (reg2
& 0x8000000) != (value
& 0x80000000));
906 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
907 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
908 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
915 unsigned long reg1
, imm
, value
;
917 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 8)];
918 imm
= SEXT8 (insn
& 0xff);
920 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 8)] = value
;
923 n
= (value
& 0x80000000);
925 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
926 && (imm
& 0x8000000) != (value
& 0x80000000));
928 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
929 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
930 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
937 unsigned long reg1
, imm
, value
;
939 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)];
940 imm
= SEXT16 (insn
& 0xffff);
942 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)] = value
;
945 n
= (value
& 0x80000000);
947 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
948 && (imm
& 0x8000000) != (value
& 0x80000000));
950 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
951 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
952 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
959 unsigned long reg1
, imm
, value
;
961 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)];
962 imm
= ((insn
& 0xffff) << 16) | extension
;
964 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)] = value
;
967 n
= (value
& 0x80000000);
969 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
970 && (imm
& 0x8000000) != (value
& 0x80000000));
972 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
973 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
974 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
981 unsigned long reg1
, imm
, value
;
983 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 8)];
986 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 8)] = value
;
989 n
= (value
& 0x80000000);
991 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
992 && (imm
& 0x8000000) != (value
& 0x80000000));
994 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
995 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
996 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1003 unsigned long reg1
, imm
, value
;
1005 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)];
1008 State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)] = value
;
1011 n
= (value
& 0x80000000);
1013 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1014 && (imm
& 0x8000000) != (value
& 0x80000000));
1016 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1017 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1018 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1025 unsigned long reg1
, imm
, value
;
1027 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)];
1028 imm
= ((insn
& 0xffff) << 16) | extension
;
1030 State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)] = value
;
1033 n
= (value
& 0x80000000);
1035 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1036 && (imm
& 0x8000000) != (value
& 0x80000000));
1038 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1039 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1040 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1047 unsigned long reg1
, imm
, value
;
1049 reg1
= State
.regs
[REG_SP
];
1050 imm
= SEXT8 (insn
& 0xff);
1052 State
.regs
[REG_SP
] = value
;
1055 n
= (value
& 0x80000000);
1057 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1058 && (imm
& 0x8000000) != (value
& 0x80000000));
1060 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1061 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1062 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1069 unsigned long reg1
, imm
, value
;
1071 reg1
= State
.regs
[REG_SP
];
1072 imm
= SEXT16 (insn
& 0xffff);
1074 State
.regs
[REG_SP
] = value
;
1077 n
= (value
& 0x80000000);
1079 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1080 && (imm
& 0x8000000) != (value
& 0x80000000));
1082 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1083 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1084 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1091 unsigned long reg1
, imm
, value
;
1093 reg1
= State
.regs
[REG_SP
];
1094 imm
= ((insn
& 0xffff) << 16) | extension
;
1096 State
.regs
[REG_SP
] = value
;
1099 n
= (value
& 0x80000000);
1101 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1102 && (imm
& 0x8000000) != (value
& 0x80000000));
1104 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1105 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1106 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1113 unsigned long reg1
, reg2
, value
;
1115 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1116 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1117 value
= reg1
+ reg2
+ ((PSW
& PSW_C
) != 0);
1118 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1121 n
= (value
& 0x80000000);
1123 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1124 && (reg2
& 0x8000000) != (value
& 0x80000000));
1126 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1127 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1128 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1135 unsigned long reg1
, reg2
, value
;
1137 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1138 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1139 value
= reg2
- reg1
;
1142 n
= (value
& 0x80000000);
1144 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1145 && (reg2
& 0x8000000) != (value
& 0x80000000));
1147 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1148 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1149 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1150 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1157 unsigned long reg1
, reg2
, value
;
1159 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1160 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1161 value
= reg2
- reg1
;
1164 n
= (value
& 0x80000000);
1166 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1167 && (reg2
& 0x8000000) != (value
& 0x80000000));
1169 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1170 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1171 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1172 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
1179 unsigned long reg1
, reg2
, value
;
1181 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1182 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1183 value
= reg2
- reg1
;
1186 n
= (value
& 0x80000000);
1188 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1189 && (reg2
& 0x8000000) != (value
& 0x80000000));
1191 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1192 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1193 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1194 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1201 unsigned long reg1
, reg2
, value
;
1203 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1204 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1205 value
= reg2
- reg1
;
1208 n
= (value
& 0x80000000);
1210 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1211 && (reg2
& 0x8000000) != (value
& 0x80000000));
1213 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1214 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1215 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1216 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
1223 unsigned long reg1
, imm
, value
;
1225 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)];
1226 imm
= ((insn
& 0xffff) << 16) | extension
;
1230 n
= (value
& 0x80000000);
1232 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1233 && (imm
& 0x8000000) != (value
& 0x80000000));
1235 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1236 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1237 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1238 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)] = value
;
1245 unsigned long reg1
, imm
, value
;
1247 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)];
1248 imm
= ((insn
& 0xffff) << 16) | extension
;
1252 n
= (value
& 0x80000000);
1254 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1255 && (imm
& 0x8000000) != (value
& 0x80000000));
1257 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1258 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1259 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1260 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)] = value
;
1267 unsigned long reg1
, reg2
, value
;
1269 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1270 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1271 value
= reg2
- reg1
- ((PSW
& PSW_C
) != 0);
1274 n
= (value
& 0x80000000);
1276 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1277 && (reg2
& 0x8000000) != (value
& 0x80000000));
1279 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1280 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1281 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1282 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1288 unsigned long long temp
;
1291 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1292 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1293 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1294 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1295 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1296 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1297 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1298 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1304 unsigned long long temp
;
1307 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1308 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1309 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1310 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1311 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1312 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1313 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1314 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1323 temp
= State
.regs
[REG_MDR
];
1325 temp
|= State
.regs
[REG_D0
+ (insn
& 0x3)];
1326 State
.regs
[REG_MDR
] = temp
% State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1327 temp
/= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1328 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1329 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1330 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1331 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1332 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1333 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1334 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1335 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1341 unsigned long long temp
;
1344 temp
= State
.regs
[REG_MDR
];
1346 temp
|= State
.regs
[REG_D0
+ (insn
& 0x3)];
1347 State
.regs
[REG_MDR
] = temp
% State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1348 temp
/= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
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));
1362 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)] += 1;
1368 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)] += 1;
1374 State
.regs
[REG_A0
+ (insn
& 0x3)] += 4;
1381 unsigned long reg1
, imm
, value
;
1383 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)];
1384 imm
= SEXT8 (insn
& 0xff);
1388 n
= (value
& 0x80000000);
1390 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1391 && (imm
& 0x8000000) != (value
& 0x80000000));
1393 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1394 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1395 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1402 unsigned long reg1
, reg2
, value
;
1404 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1405 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1406 value
= reg2
- reg1
;
1409 n
= (value
& 0x80000000);
1411 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1412 && (reg2
& 0x8000000) != (value
& 0x80000000));
1414 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1415 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1416 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1423 unsigned long reg1
, reg2
, value
;
1425 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1426 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1427 value
= reg2
- reg1
;
1430 n
= (value
& 0x80000000);
1432 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1433 && (reg2
& 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_A0
+ ((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
, imm
, value
;
1467 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)];
1472 n
= (value
& 0x80000000);
1474 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1475 && (imm
& 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_A0
+ (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_D0
+ ((insn
& 0x300) >> 16)];
1510 imm
= SEXT16 (insn
& 0xffff);
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
, imm
, value
;
1530 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)];
1531 imm
= ((insn
& 0xffff) << 16) | extension
;
1535 n
= (value
& 0x80000000);
1537 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1538 && (imm
& 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_A0
+ ((insn
& 0x300) >> 16)];
1552 imm
= 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_A0
+ ((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));
1592 State
.regs
[REG_D0
+ (insn
& 0x3)] &= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1593 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1594 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1595 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1596 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1604 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] &= (insn
& 0xff);
1605 z
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] == 0);
1606 n
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 0x8000000) != 0;
1607 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1608 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1631 State
.regs
[REG_D0
+ (insn
& 0x3)] |= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1632 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1633 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1634 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1635 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1643 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] |= insn
& 0xff;
1644 z
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] == 0);
1645 n
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 0x8000000) != 0;
1646 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1647 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1670 State
.regs
[REG_D0
+ (insn
& 0x3)] ^= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1671 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1672 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1673 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1674 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1692 State
.regs
[REG_D0
+ (insn
& 0x3)] = ~State
.regs
[REG_D0
+ (insn
& 0x3)];
1693 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1694 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1695 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1696 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1705 temp
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)];
1706 temp
&= (insn
& 0xff);
1707 n
= (temp
& 0x80000000) != 0;
1709 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1710 PSW
|= (z
? PSW_Z
: 0) | (n
? PSW_N
: 0);
1739 temp
= load_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1);
1740 z
= (temp
& State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]) == 0;
1741 temp
|= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1742 store_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1, temp
);
1743 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1744 PSW
|= (z
? PSW_Z
: 0);
1763 temp
= load_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1);
1764 z
= (temp
& State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]) == 0;
1765 temp
= ~temp
& State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1766 store_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1, temp
);
1767 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1768 PSW
|= (z
? PSW_Z
: 0);
1787 temp
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1789 temp
>>= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1790 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
;
1791 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1792 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1793 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1794 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1803 temp
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)];
1805 temp
>>= (insn
& 0xff);
1806 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] = temp
;
1807 z
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] == 0);
1808 n
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 0x8000000) != 0;
1809 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1810 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1818 c
= State
.regs
[REG_D0
+ (insn
& 0x3)] & 1;
1819 State
.regs
[REG_D0
+ (insn
& 0x3)]
1820 >>= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1821 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1822 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1823 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1824 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1832 c
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 1;
1833 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] >>= (insn
& 0xff);
1834 z
= (State
.regs
[REG_D0
+ ((insn
& 0x3) >> 8)] == 0);
1835 n
= (State
.regs
[REG_D0
+ ((insn
& 0x3) >> 8)] & 0x8000000) != 0;
1836 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1837 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1845 State
.regs
[REG_D0
+ (insn
& 0x3)]
1846 <<= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1847 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1848 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1849 PSW
&= ~(PSW_Z
| PSW_N
);
1850 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1858 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] <<= (insn
& 0xff);
1859 z
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] == 0);
1860 n
= (State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)] & 0x8000000) != 0;
1861 PSW
&= ~(PSW_Z
| PSW_N
);
1862 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1870 State
.regs
[REG_D0
+ (insn
& 0x3)] <<= 2;
1871 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1872 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1873 PSW
&= ~(PSW_Z
| PSW_N
);
1874 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1880 unsigned long value
;
1883 value
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1888 value
|= ((PSW
& PSW_C
) != 0) ? 0x80000000 : 0;
1889 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1891 n
= (value
& 0x8000000) != 0;
1892 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1893 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1899 unsigned long value
;
1902 value
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1903 if (value
& 0x80000000)
1907 value
|= ((PSW
& PSW_C
) != 0);
1908 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1910 n
= (value
& 0x8000000) != 0;
1911 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1912 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1918 /* The dispatching code will add 2 after we return, so
1919 we subtract two here to make things right. */
1921 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1927 /* The dispatching code will add 2 after we return, so
1928 we subtract two here to make things right. */
1930 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1936 /* The dispatching code will add 2 after we return, so
1937 we subtract two here to make things right. */
1939 || (((PSW
& PSW_N
) != 0) ^ (PSW
& PSW_V
) != 0)))
1940 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1946 /* The dispatching code will add 2 after we return, so
1947 we subtract two here to make things right. */
1948 if (!(((PSW
& PSW_N
) != 0) ^ (PSW
& PSW_V
) != 0))
1949 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1955 /* The dispatching code will add 2 after we return, so
1956 we subtract two here to make things right. */
1958 || (((PSW
& PSW_N
) != 0) ^ (PSW
& PSW_V
) != 0))
1959 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1965 /* The dispatching code will add 2 after we return, so
1966 we subtract two here to make things right. */
1967 if (((PSW
& PSW_N
) != 0) ^ (PSW
& PSW_V
) != 0)
1968 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1974 /* The dispatching code will add 2 after we return, so
1975 we subtract two here to make things right. */
1976 if (!(((PSW
& PSW_C
) != 0) || (PSW
& PSW_Z
) != 0))
1977 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1983 /* The dispatching code will add 2 after we return, so
1984 we subtract two here to make things right. */
1986 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1992 /* The dispatching code will add 2 after we return, so
1993 we subtract two here to make things right. */
1994 if (((PSW
& PSW_C
) != 0) || (PSW
& PSW_Z
) != 0)
1995 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2001 /* The dispatching code will add 2 after we return, so
2002 we subtract two here to make things right. */
2004 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2010 /* The dispatching code will add 3 after we return, so
2011 we subtract two here to make things right. */
2013 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2019 /* The dispatching code will add 3 after we return, so
2020 we subtract two here to make things right. */
2022 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2028 /* The dispatching code will add 3 after we return, so
2029 we subtract two here to make things right. */
2031 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2037 /* The dispatching code will add 3 after we return, so
2038 we subtract two here to make things right. */
2040 State
.pc
+= SEXT8 (insn
& 0xff) - 3;
2046 /* The dispatching code will add 2 after we return, so
2047 we subtract two here to make things right. */
2048 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
2126 State
.pc
= State
.regs
[REG_A0
+ (insn
& 0x3)] - 2;
2132 State
.pc
+= SEXT16 (insn
& 0xffff) - 3;
2138 State
.pc
+= (((insn
& 0xffffff) << 8) | extension
) - 5;
2141 /* call label:16,reg_list,imm8 */
2144 unsigned int next_pc
, sp
, adjust
;
2147 sp
= State
.regs
[REG_SP
];
2148 next_pc
= State
.pc
+ 2;
2149 State
.mem
[sp
] = next_pc
& 0xff;
2150 State
.mem
[sp
+1] = next_pc
& 0xff00;
2151 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2152 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2160 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
2166 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
2172 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2178 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2184 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2186 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2188 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2190 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2192 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2194 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2196 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2200 /* And make sure to update the stack pointer. */
2201 State
.regs
[REG_SP
] -= extension
;
2202 State
.regs
[REG_MDR
] = next_pc
;
2203 State
.pc
+= SEXT16 ((insn
& 0xffff00) >> 8) - 5;
2206 /* call label:32,reg_list,imm8*/
2209 unsigned int next_pc
, sp
, adjust
;
2212 sp
= State
.regs
[REG_SP
];
2213 next_pc
= State
.pc
+ 2;
2214 State
.mem
[sp
] = next_pc
& 0xff;
2215 State
.mem
[sp
+1] = next_pc
& 0xff00;
2216 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2217 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2219 mask
= (extension
& 0xff00) >> 8;
2225 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
2231 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
2237 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2243 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2249 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2251 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2253 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2255 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2257 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2259 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2261 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2265 /* And make sure to update the stack pointer. */
2266 State
.regs
[REG_SP
] -= (extension
& 0xff);
2267 State
.regs
[REG_MDR
] = next_pc
;
2268 State
.pc
+= (((insn
& 0xffffff) << 8) | ((extension
& 0xff0000) >> 16)) - 7;
2274 unsigned int next_pc
, sp
;
2276 sp
= State
.regs
[REG_SP
];
2277 next_pc
= State
.pc
+ 2;
2278 State
.mem
[sp
] = next_pc
& 0xff;
2279 State
.mem
[sp
+1] = next_pc
& 0xff00;
2280 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2281 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2282 State
.regs
[REG_MDR
] = next_pc
;
2283 State
.pc
= State
.regs
[REG_A0
+ (insn
& 0x3)] - 2;
2286 /* calls label:16 */
2289 unsigned int next_pc
, sp
;
2291 sp
= State
.regs
[REG_SP
];
2292 next_pc
= State
.pc
+ 4;
2293 State
.mem
[sp
] = next_pc
& 0xff;
2294 State
.mem
[sp
+1] = next_pc
& 0xff00;
2295 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2296 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2297 State
.regs
[REG_MDR
] = next_pc
;
2298 State
.pc
+= SEXT16 (insn
& 0xffff) - 4;
2301 /* calls label:32 */
2304 unsigned int next_pc
, sp
;
2306 sp
= State
.regs
[REG_SP
];
2307 next_pc
= State
.pc
+ 6;
2308 State
.mem
[sp
] = next_pc
& 0xff;
2309 State
.mem
[sp
+1] = next_pc
& 0xff00;
2310 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2311 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2312 State
.regs
[REG_MDR
] = next_pc
;
2313 State
.pc
+= (((insn
& 0xffff) << 16) | extension
) - 6;
2322 State
.regs
[REG_SP
] += insn
& 0xff;
2323 State
.pc
= State
.regs
[REG_MDR
] - 3;
2324 sp
= State
.regs
[REG_SP
];
2326 mask
= (insn
& 0xff00) >> 8;
2331 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
2333 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
2335 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
2337 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
2339 State
.regs
[REG_A0
] = load_mem (sp
, 4);
2341 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
2343 State
.regs
[REG_D0
] = load_mem (sp
, 4);
2349 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
2355 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
2361 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
2367 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
2372 /* retf reg_list,imm8 */
2378 State
.regs
[REG_SP
] += insn
& 0xff;
2379 State
.pc
= (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2380 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));
2383 sp
= State
.regs
[REG_SP
];
2385 mask
= (insn
& 0xff00) >> 8;
2390 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
2392 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
2394 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
2396 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
2398 State
.regs
[REG_A0
] = load_mem (sp
, 4);
2400 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
2402 State
.regs
[REG_D0
] = load_mem (sp
, 4);
2408 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
2414 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
2420 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
2426 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
2436 sp
= State
.regs
[REG_SP
];
2437 State
.pc
= (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2438 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));