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);
159 /* mov (d8,sp), dn */
162 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)]
163 = load_mem (State
.regs
[REG_SP
] + insn
& 0xff, 4);
181 /* mov (abs16), dn */
184 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] = load_mem (insn
& 0xffff, 4);
195 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)]
196 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4);
214 /* mov (d8,sp), an */
217 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)]
218 = load_mem (State
.regs
[REG_SP
] + insn
& 0xff, 4);
254 store_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4,
255 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
273 /* mov dm, (d8,sp) */
276 store_mem (State
.regs
[REG_SP
] + insn
& 0xff, 4,
277 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 10)]);
295 /* mov dm, (abs16) */
298 store_mem ((insn
& 0xffff), 4, State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
309 store_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 4,
310 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)]);
328 /* mov am, (d8,sp) */
331 store_mem (State
.regs
[REG_SP
] + insn
& 0xff, 4,
332 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 10)]);
370 value
= SEXT16 (insn
& 0xffff);
371 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = value
;
384 value
= insn
& 0xffff;
385 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = value
;
393 value
= (insn
& 0xffff) << 16 | extension
;
394 State
.regs
[REG_A0
+ ((insn
& 0x30000) >> 16)] = value
;
400 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]
401 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 1);
439 /* movbu (abs16), dn */
442 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] = load_mem (insn
& 0xffff, 1);
453 store_mem (State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)], 1,
454 State
.regs
[REG_D0
+ (insn
& 0x3)]);
492 /* movbu dm, (abs16) */
495 store_mem ((insn
& 0xffff), 1, State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
506 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]
507 = load_mem (State
.regs
[REG_A0
+ (insn
& 0x3)], 2);
545 /* movhu (abs16), dn */
548 State
.regs
[REG_D0
+ ((insn
& 0x30000) >> 16)] = load_mem (insn
& 0xffff, 2);
559 store_mem (State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)], 2,
560 State
.regs
[REG_D0
+ (insn
& 0x3)]);
598 /* movhu dm, (abs16) */
601 store_mem ((insn
& 0xffff), 2, State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 18)]);
612 if (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x80000000)
613 State
.regs
[REG_MDR
] = -1;
615 State
.regs
[REG_MDR
] = 0;
621 State
.regs
[REG_D0
+ (insn
& 0x3)] = SEXT8 (State
.regs
[REG_D0
+ (insn
& 0x3)]);
627 State
.regs
[REG_D0
+ (insn
& 0x3)] &= 0xff;
633 State
.regs
[REG_D0
+ (insn
& 0x3)]
634 = SEXT16 (State
.regs
[REG_D0
+ (insn
& 0x3)]);
640 State
.regs
[REG_D0
+ (insn
& 0x3)] &= 0xffff;
643 /* movm (sp), reg_list */
646 unsigned long sp
= State
.regs
[REG_SP
];
654 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
656 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
658 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
660 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
662 State
.regs
[REG_A0
] = load_mem (sp
, 4);
664 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
666 State
.regs
[REG_D0
] = load_mem (sp
, 4);
672 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
678 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
684 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
690 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
694 /* And make sure to update the stack pointer. */
695 State
.regs
[REG_SP
] = sp
;
698 /* movm reg_list, (sp) */
701 unsigned long sp
= State
.regs
[REG_SP
];
709 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
715 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
721 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
727 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
733 State
.regs
[REG_D0
] = load_mem (sp
, 4);
735 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
737 State
.regs
[REG_A0
] = load_mem (sp
, 4);
739 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
741 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
743 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
745 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
749 /* And make sure to update the stack pointer. */
750 State
.regs
[REG_SP
] = sp
;
756 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)] = 0;
759 PSW
&= ~(PSW_V
| PSW_C
| PSW_N
);
766 unsigned long reg1
, reg2
, value
;
768 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
769 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
771 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
774 n
= (value
& 0x80000000);
776 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
777 && (reg2
& 0x8000000) != (value
& 0x80000000));
779 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
780 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
781 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
788 unsigned long reg1
, reg2
, value
;
790 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
791 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
793 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
796 n
= (value
& 0x80000000);
798 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
799 && (reg2
& 0x8000000) != (value
& 0x80000000));
801 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
802 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
803 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
810 unsigned long reg1
, reg2
, value
;
812 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
813 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
815 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
818 n
= (value
& 0x80000000);
820 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
821 && (reg2
& 0x8000000) != (value
& 0x80000000));
823 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
824 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
825 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
832 unsigned long reg1
, reg2
, value
;
834 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
835 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
837 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
840 n
= (value
& 0x80000000);
842 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
843 && (reg2
& 0x8000000) != (value
& 0x80000000));
845 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
846 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
847 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
854 unsigned long reg1
, imm
, value
;
856 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 8)];
857 imm
= SEXT8 (insn
& 0xff);
859 State
.regs
[REG_D0
+ ((insn
& 0xc00) >> 8)] = value
;
862 n
= (value
& 0x80000000);
864 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
865 && (imm
& 0x8000000) != (value
& 0x80000000));
867 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
868 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
869 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
876 unsigned long reg1
, imm
, value
;
878 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)];
879 imm
= SEXT16 (insn
& 0xffff);
881 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)] = value
;
884 n
= (value
& 0x80000000);
886 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
887 && (imm
& 0x8000000) != (value
& 0x80000000));
889 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
890 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
891 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
898 unsigned long reg1
, imm
, value
;
900 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)];
901 imm
= ((insn
& 0xffff) << 16) | extension
;
903 State
.regs
[REG_D0
+ ((insn
& 0xc0000) >> 16)] = value
;
906 n
= (value
& 0x80000000);
908 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
909 && (imm
& 0x8000000) != (value
& 0x80000000));
911 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
912 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
913 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
920 unsigned long reg1
, imm
, value
;
922 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 8)];
925 State
.regs
[REG_A0
+ ((insn
& 0xc00) >> 8)] = value
;
928 n
= (value
& 0x80000000);
930 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
931 && (imm
& 0x8000000) != (value
& 0x80000000));
933 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
934 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
935 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
942 unsigned long reg1
, imm
, value
;
944 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)];
947 State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)] = value
;
950 n
= (value
& 0x80000000);
952 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
953 && (imm
& 0x8000000) != (value
& 0x80000000));
955 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
956 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
957 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
964 unsigned long reg1
, imm
, value
;
966 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)];
967 imm
= ((insn
& 0xffff) << 16) | extension
;
969 State
.regs
[REG_A0
+ ((insn
& 0xc0000) >> 16)] = value
;
972 n
= (value
& 0x80000000);
974 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
975 && (imm
& 0x8000000) != (value
& 0x80000000));
977 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
978 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
979 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
986 unsigned long reg1
, imm
, value
;
988 reg1
= State
.regs
[REG_SP
];
989 imm
= SEXT8 (insn
& 0xff);
991 State
.regs
[REG_SP
] = value
;
994 n
= (value
& 0x80000000);
996 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
997 && (imm
& 0x8000000) != (value
& 0x80000000));
999 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1000 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1001 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1008 unsigned long reg1
, imm
, value
;
1010 reg1
= State
.regs
[REG_SP
];
1011 imm
= SEXT16 (insn
& 0xffff);
1013 State
.regs
[REG_SP
] = value
;
1016 n
= (value
& 0x80000000);
1018 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1019 && (imm
& 0x8000000) != (value
& 0x80000000));
1021 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1022 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1023 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1030 unsigned long reg1
, imm
, value
;
1032 reg1
= State
.regs
[REG_SP
];
1033 imm
= ((insn
& 0xffff) << 16) | extension
;
1035 State
.regs
[REG_SP
] = value
;
1038 n
= (value
& 0x80000000);
1040 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1041 && (imm
& 0x8000000) != (value
& 0x80000000));
1043 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1044 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1045 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1052 unsigned long reg1
, reg2
, value
;
1054 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1055 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1056 value
= reg1
+ reg2
+ ((PSW
& PSW_C
) != 0);
1057 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1060 n
= (value
& 0x80000000);
1062 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1063 && (reg2
& 0x8000000) != (value
& 0x80000000));
1065 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1066 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1067 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1074 unsigned long reg1
, reg2
, value
;
1076 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1077 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1078 value
= reg2
- reg1
;
1081 n
= (value
& 0x80000000);
1083 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1084 && (reg2
& 0x8000000) != (value
& 0x80000000));
1086 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1087 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1088 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1089 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1096 unsigned long reg1
, reg2
, value
;
1098 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1099 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1100 value
= reg2
- reg1
;
1103 n
= (value
& 0x80000000);
1105 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1106 && (reg2
& 0x8000000) != (value
& 0x80000000));
1108 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1109 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1110 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1111 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
1118 unsigned long reg1
, reg2
, value
;
1120 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1121 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1122 value
= reg2
- reg1
;
1125 n
= (value
& 0x80000000);
1127 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1128 && (reg2
& 0x8000000) != (value
& 0x80000000));
1130 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1131 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1132 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1133 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1140 unsigned long reg1
, reg2
, value
;
1142 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1143 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1144 value
= reg2
- reg1
;
1147 n
= (value
& 0x80000000);
1149 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1150 && (reg2
& 0x8000000) != (value
& 0x80000000));
1152 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1153 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1154 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1155 State
.regs
[REG_A0
+ (insn
& 0x3)] = value
;
1162 unsigned long reg1
, imm
, value
;
1164 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)];
1165 imm
= ((insn
& 0xffff) << 16) | extension
;
1169 n
= (value
& 0x80000000);
1171 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1172 && (imm
& 0x8000000) != (value
& 0x80000000));
1174 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1175 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1176 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1177 State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)] = value
;
1184 unsigned long reg1
, imm
, value
;
1186 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)];
1187 imm
= ((insn
& 0xffff) << 16) | extension
;
1191 n
= (value
& 0x80000000);
1193 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1194 && (imm
& 0x8000000) != (value
& 0x80000000));
1196 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1197 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1198 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1199 State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)] = value
;
1206 unsigned long reg1
, reg2
, value
;
1208 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1209 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1210 value
= reg2
- reg1
- ((PSW
& PSW_C
) != 0);
1213 n
= (value
& 0x80000000);
1215 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1216 && (reg2
& 0x8000000) != (value
& 0x80000000));
1218 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1219 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1220 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1221 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1227 unsigned long long temp
;
1230 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1231 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1232 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1233 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1234 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1235 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1236 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1237 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1243 unsigned long long temp
;
1246 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1247 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1248 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1249 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1250 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1251 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1252 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1253 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1262 temp
= State
.regs
[REG_MDR
];
1264 temp
|= State
.regs
[REG_D0
+ (insn
& 0x3)];
1265 State
.regs
[REG_MDR
] = temp
% State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1266 temp
/= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1267 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1268 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1269 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1270 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1271 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1272 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1273 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1274 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1280 unsigned long long temp
;
1283 temp
= State
.regs
[REG_MDR
];
1285 temp
|= State
.regs
[REG_D0
+ (insn
& 0x3)];
1286 State
.regs
[REG_MDR
] = temp
% State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1287 temp
/= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1288 temp
= (State
.regs
[REG_D0
+ (insn
& 0x3)]
1289 * State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]);
1290 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
& 0xffffffff;
1291 State
.regs
[REG_MDR
] = temp
& 0xffffffff00000000LL
;
1292 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1293 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1294 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1295 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1301 State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)] += 1;
1307 State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)] += 1;
1313 State
.regs
[REG_A0
+ (insn
& 0x3)] += 4;
1320 unsigned long reg1
, imm
, value
;
1322 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 8)];
1323 imm
= SEXT8 (insn
& 0xff);
1327 n
= (value
& 0x80000000);
1329 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1330 && (imm
& 0x8000000) != (value
& 0x80000000));
1332 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1333 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1334 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1341 unsigned long reg1
, reg2
, value
;
1343 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1344 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1345 value
= reg2
- reg1
;
1348 n
= (value
& 0x80000000);
1350 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1351 && (reg2
& 0x8000000) != (value
& 0x80000000));
1353 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1354 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1355 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1362 unsigned long reg1
, reg2
, value
;
1364 reg1
= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1365 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1366 value
= reg2
- reg1
;
1369 n
= (value
& 0x80000000);
1371 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1372 && (reg2
& 0x8000000) != (value
& 0x80000000));
1374 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1375 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1376 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1383 unsigned long reg1
, reg2
, value
;
1385 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1386 reg2
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1387 value
= reg2
- reg1
;
1390 n
= (value
& 0x80000000);
1392 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1393 && (reg2
& 0x8000000) != (value
& 0x80000000));
1395 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1396 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1397 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1404 unsigned long reg1
, imm
, value
;
1406 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 8)];
1411 n
= (value
& 0x80000000);
1413 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1414 && (imm
& 0x8000000) != (value
& 0x80000000));
1416 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1417 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1418 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1425 unsigned long reg1
, reg2
, value
;
1427 reg1
= State
.regs
[REG_A0
+ ((insn
& 0xc) >> 2)];
1428 reg2
= State
.regs
[REG_A0
+ (insn
& 0x3)];
1429 value
= reg2
- reg1
;
1432 n
= (value
& 0x80000000);
1434 v
= ((reg2
& 0x8000000) != (reg1
& 0x80000000)
1435 && (reg2
& 0x8000000) != (value
& 0x80000000));
1437 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1438 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1439 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1446 unsigned long reg1
, imm
, value
;
1448 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)];
1449 imm
= SEXT16 (insn
& 0xffff);
1453 n
= (value
& 0x80000000);
1455 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1456 && (imm
& 0x8000000) != (value
& 0x80000000));
1458 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1459 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1460 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1467 unsigned long reg1
, imm
, value
;
1469 reg1
= State
.regs
[REG_D0
+ ((insn
& 0x300) >> 16)];
1470 imm
= ((insn
& 0xffff) << 16) | extension
;
1474 n
= (value
& 0x80000000);
1476 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1477 && (imm
& 0x8000000) != (value
& 0x80000000));
1479 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1480 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1481 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1488 unsigned long reg1
, imm
, value
;
1490 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)];
1491 imm
= insn
& 0xffff;
1495 n
= (value
& 0x80000000);
1497 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1498 && (imm
& 0x8000000) != (value
& 0x80000000));
1500 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1501 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1502 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1509 unsigned long reg1
, imm
, value
;
1511 reg1
= State
.regs
[REG_A0
+ ((insn
& 0x300) >> 16)];
1512 imm
= ((insn
& 0xffff) << 16) | extension
;
1516 n
= (value
& 0x80000000);
1518 v
= ((imm
& 0x8000000) != (reg1
& 0x80000000)
1519 && (imm
& 0x8000000) != (value
& 0x80000000));
1521 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1522 PSW
|= ((z
? PSW_Z
: 0) | ( n
? PSW_N
: 0)
1523 | (c
? PSW_C
: 0) | (v
? PSW_V
: 0));
1531 State
.regs
[REG_D0
+ (insn
& 0x3)] &= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1532 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1533 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1534 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1535 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1563 State
.regs
[REG_D0
+ (insn
& 0x3)] |= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1564 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1565 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1566 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1567 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1595 State
.regs
[REG_D0
+ (insn
& 0x3)] ^= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1596 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1597 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1598 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1599 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1617 State
.regs
[REG_D0
+ (insn
& 0x3)] = ~State
.regs
[REG_D0
+ (insn
& 0x3)];
1618 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1619 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1620 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1621 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1655 temp
= load_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1);
1656 z
= (temp
& State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]) == 0;
1657 temp
|= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1658 store_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1, temp
);
1659 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1660 PSW
|= (z
? PSW_Z
: 0);
1679 temp
= load_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1);
1680 z
= (temp
& State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)]) == 0;
1681 temp
= ~temp
& State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1682 store_mem (State
.regs
[REG_A0
+ (insn
& 3)], 1, temp
);
1683 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1684 PSW
|= (z
? PSW_Z
: 0);
1703 temp
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1705 temp
>>= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1706 State
.regs
[REG_D0
+ (insn
& 0x3)] = temp
;
1707 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1708 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1709 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1710 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1723 c
= State
.regs
[REG_D0
+ (insn
& 0x3)] & 1;
1724 State
.regs
[REG_D0
+ (insn
& 0x3)]
1725 >>= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1726 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1727 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1728 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
);
1729 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1742 State
.regs
[REG_D0
+ (insn
& 0x3)]
1743 <<= State
.regs
[REG_D0
+ ((insn
& 0xc) >> 2)];
1744 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1745 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1746 PSW
&= ~(PSW_Z
| PSW_N
);
1747 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1760 State
.regs
[REG_D0
+ (insn
& 0x3)] <<= 2;
1761 z
= (State
.regs
[REG_D0
+ (insn
& 0x3)] == 0);
1762 n
= (State
.regs
[REG_D0
+ (insn
& 0x3)] & 0x8000000) != 0;
1763 PSW
&= ~(PSW_Z
| PSW_N
);
1764 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0));
1770 unsigned long value
;
1773 value
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1778 value
|= ((PSW
& PSW_C
) != 0) ? 0x80000000 : 0;
1779 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1781 n
= (value
& 0x8000000) != 0;
1782 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1783 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1789 unsigned long value
;
1792 value
= State
.regs
[REG_D0
+ (insn
& 0x3)];
1793 if (value
& 0x80000000)
1797 value
|= ((PSW
& PSW_C
) != 0);
1798 State
.regs
[REG_D0
+ (insn
& 0x3)] = value
;
1800 n
= (value
& 0x8000000) != 0;
1801 PSW
&= ~(PSW_Z
| PSW_N
| PSW_C
| PSW_V
);
1802 PSW
|= ((z
? PSW_Z
: 0) | (n
? PSW_N
: 0) | (c
? PSW_C
: 0));
1808 /* The dispatching code will add 2 after we return, so
1809 we subtract two here to make things right. */
1811 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1817 /* The dispatching code will add 2 after we return, so
1818 we subtract two here to make things right. */
1820 State
.pc
+= SEXT8 (insn
& 0xff) - 2;
1951 State
.pc
= State
.regs
[REG_A0
+ (insn
& 0x3)] - 2;
1957 State
.pc
+= SEXT16 (insn
& 0xffff) - 3;
1963 State
.pc
+= (((insn
& 0xffffff) << 8) | extension
) - 5;
1966 /* call label:16,reg_list,imm8 */
1969 unsigned int next_pc
, sp
, adjust
;
1972 sp
= State
.regs
[REG_SP
];
1973 next_pc
= State
.pc
+ 2;
1974 State
.mem
[sp
] = next_pc
& 0xff;
1975 State
.mem
[sp
+1] = next_pc
& 0xff00;
1976 State
.mem
[sp
+2] = next_pc
& 0xff0000;
1977 State
.mem
[sp
+3] = next_pc
& 0xff000000;
1985 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
1991 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
1997 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2003 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2009 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2011 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2013 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2015 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2017 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2019 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2021 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2025 /* And make sure to update the stack pointer. */
2026 State
.regs
[REG_SP
] -= extension
;
2027 State
.regs
[REG_MDR
] = next_pc
;
2028 State
.pc
+= SEXT16 ((insn
& 0xffff00) >> 8) - 5;
2031 /* call label:32,reg_list,imm8*/
2034 unsigned int next_pc
, sp
, adjust
;
2037 sp
= State
.regs
[REG_SP
];
2038 next_pc
= State
.pc
+ 2;
2039 State
.mem
[sp
] = next_pc
& 0xff;
2040 State
.mem
[sp
+1] = next_pc
& 0xff00;
2041 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2042 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2044 mask
= (extension
& 0xff00) >> 8;
2050 State
.regs
[REG_D0
+ 2] = load_mem (sp
+ adjust
, 4);
2056 State
.regs
[REG_D0
+ 3] = load_mem (sp
+ adjust
, 4);
2062 State
.regs
[REG_A0
+ 2] = load_mem (sp
+ adjust
, 4);
2068 State
.regs
[REG_A0
+ 3] = load_mem (sp
+ adjust
, 4);
2074 State
.regs
[REG_D0
] = load_mem (sp
+ adjust
, 4);
2076 State
.regs
[REG_D0
+ 1] = load_mem (sp
+ adjust
, 4);
2078 State
.regs
[REG_A0
] = load_mem (sp
+ adjust
, 4);
2080 State
.regs
[REG_A0
+ 1] = load_mem (sp
+ adjust
, 4);
2082 State
.regs
[REG_MDR
] = load_mem (sp
+ adjust
, 4);
2084 State
.regs
[REG_LIR
] = load_mem (sp
+ adjust
, 4);
2086 State
.regs
[REG_LAR
] = load_mem (sp
+ adjust
, 4);
2090 /* And make sure to update the stack pointer. */
2091 State
.regs
[REG_SP
] -= (extension
& 0xff);
2092 State
.regs
[REG_MDR
] = next_pc
;
2093 State
.pc
+= (((insn
& 0xffffff) << 8) | ((extension
& 0xff0000) >> 16)) - 7;
2099 unsigned int next_pc
, sp
;
2101 sp
= State
.regs
[REG_SP
];
2102 next_pc
= State
.pc
+ 2;
2103 State
.mem
[sp
] = next_pc
& 0xff;
2104 State
.mem
[sp
+1] = next_pc
& 0xff00;
2105 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2106 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2107 State
.regs
[REG_MDR
] = next_pc
;
2108 State
.pc
= State
.regs
[REG_A0
+ (insn
& 0x3)] - 2;
2111 /* calls label:16 */
2114 unsigned int next_pc
, sp
;
2116 sp
= State
.regs
[REG_SP
];
2117 next_pc
= State
.pc
+ 4;
2118 State
.mem
[sp
] = next_pc
& 0xff;
2119 State
.mem
[sp
+1] = next_pc
& 0xff00;
2120 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2121 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2122 State
.regs
[REG_MDR
] = next_pc
;
2123 State
.pc
+= SEXT16 (insn
& 0xffff) - 4;
2126 /* calls label:32 */
2129 unsigned int next_pc
, sp
;
2131 sp
= State
.regs
[REG_SP
];
2132 next_pc
= State
.pc
+ 6;
2133 State
.mem
[sp
] = next_pc
& 0xff;
2134 State
.mem
[sp
+1] = next_pc
& 0xff00;
2135 State
.mem
[sp
+2] = next_pc
& 0xff0000;
2136 State
.mem
[sp
+3] = next_pc
& 0xff000000;
2137 State
.regs
[REG_MDR
] = next_pc
;
2138 State
.pc
+= (((insn
& 0xffff) << 16) | extension
) - 6;
2147 State
.regs
[REG_SP
] += insn
& 0xff;
2148 State
.pc
= State
.regs
[REG_MDR
] - 3;
2149 sp
= State
.regs
[REG_SP
];
2151 mask
= (insn
& 0xff00) >> 8;
2156 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
2158 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
2160 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
2162 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
2164 State
.regs
[REG_A0
] = load_mem (sp
, 4);
2166 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
2168 State
.regs
[REG_D0
] = load_mem (sp
, 4);
2174 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
2180 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
2186 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
2192 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
2197 /* retf reg_list,imm8 */
2203 State
.regs
[REG_SP
] += insn
& 0xff;
2204 State
.pc
= (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2205 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));
2208 sp
= State
.regs
[REG_SP
];
2210 mask
= (insn
& 0xff00) >> 8;
2215 State
.regs
[REG_LAR
] = load_mem (sp
, 4);
2217 State
.regs
[REG_LIR
] = load_mem (sp
, 4);
2219 State
.regs
[REG_MDR
] = load_mem (sp
, 4);
2221 State
.regs
[REG_A0
+ 1] = load_mem (sp
, 4);
2223 State
.regs
[REG_A0
] = load_mem (sp
, 4);
2225 State
.regs
[REG_D0
+ 1] = load_mem (sp
, 4);
2227 State
.regs
[REG_D0
] = load_mem (sp
, 4);
2233 State
.regs
[REG_A0
+ 3] = load_mem (sp
, 4);
2239 State
.regs
[REG_A0
+ 2] = load_mem (sp
, 4);
2245 State
.regs
[REG_D0
+ 3] = load_mem (sp
, 4);
2251 State
.regs
[REG_D0
+ 2] = load_mem (sp
, 4);
2261 sp
= State
.regs
[REG_SP
];
2262 State
.pc
= (State
.mem
[sp
] | (State
.mem
[sp
+1] << 8)
2263 | (State
.mem
[sp
+2] << 16) | (State
.mem
[sp
+3] << 24));