char *code;
char *stuff[MAX_NR_STUFF];
int index;
-}
-
-op;
+} op;
op tab[] =
},
{ "", "nm", "mac.l @<REG_M>+,@<REG_N>+", "0000nnnnmmmm1111",
- "trap (255,R0,memory,maskl,maskw, endianw);",
+ "trap (255, R0, PC, memory, maskl, maskw, endianw);",
"/* FIXME: mac.l support */",
},
},
{ "", "", "sleep", "0000000000011011",
- "nip = PC;",
- "trap (0xc3, R0, memory, maskl, maskw, endianw);",
+ "nip += trap (0xc3, R0, PC, memory, maskl, maskw, endianw);",
},
{ "n", "", "stc <CREG_M>,<REG_N>", "0000nnnnmmmm0010",
},
{ "0", "", "trapa #<imm>", "11000011i8*1....",
-#if 0
- /* SH-[12] */
"long imm = 0xff & i;",
- "if (i==0xc3)",
- " PC-=2;",
- "if (i<20||i==34||i==0xc3)",
- " trap(i,R,memory,maskl,maskw,endianw);",
+ "if (i < 20 || i == 33 || i == 34 || i == 0xc3)",
+ " nip += trap (i, R, PC, memory, maskl, maskw,endianw);",
+#if 0
"else {",
+ /* SH-[12] */
" R[15]-=4;",
- " WLAT(R[15],GET_SR());",
+ " WLAT (R[15], GET_SR());",
" R[15]-=4;",
- " WLAT(R[15],PC+2);",
- " PC=RLAT(VBR+(imm<<2))-2;",
- "}",
+ " WLAT (R[15], PH2T (PC + 2));",
#else
- "if (i == 0xc3)",
- " {",
- " nip = PC;",
- " trap (i, R, memory, maskl, maskw,endianw);",
- " }",
- "else if (i < 20 || i==34 || i==0xc3)",
- " trap (i, R, memory, maskl, maskw,endianw);",
"else if (!SR_BL) {",
- " /* FIXME: TRA = (imm << 2); */",
" SSR = GET_SR();",
" SPC = PH2T (PC + 2);",
" SET_SR (GET_SR() | SR_MASK_MD | SR_MASK_BL | SR_MASK_RB);",
" /* FIXME: EXPEVT = 0x00000160; */",
- " SET_NIP (PT2H (VBR + 0x00000100));",
- "}",
#endif
+ " SET_NIP (PT2H (RLAT (VBR + (imm<<2))));",
+ "}",
},
{ "", "mn", "tst <REG_M>,<REG_N>", "0010nnnnmmmm1000",
" res = Sz << i;",
"else if (i >= 128 - 16)",
" res = Sz >> 128 - i;",
- "else"
+ "else",
" {",
" RAISE_EXCEPTION (SIGILL);",
" return;",
"",
"if (i < 32)",
" {",
- " if (i == 32)"
+ " if (i == 32)",
" {",
" res = 0;",
" res_grd = Sz;",
"else if (i >= 96)",
" {",
" i = 128 - i;",
- " if (i == 32)"
+ " if (i == 32)",
" {",
" res_grd = SIGN32 (Sz_grd);",
" res = Sz_grd;",
" }",
" carry = Sz >> (i - 1) & 1;",
" }",
- "else"
+ "else",
" {",
" RAISE_EXCEPTION (SIGILL);",
" return;",
" res = Sx << Sy;",
"else if (Sy >= 128 - 16)",
" res = Sx >> 128 - Sy;",
- "else"
+ "else",
" {",
" RAISE_EXCEPTION (SIGILL);",
" return;",
"",
"if (Sy < 32)",
" {",
- " if (Sy == 32)"
+ " if (Sy == 32)",
" {",
" res = 0;",
" res_grd = Sx;",
"else if (Sy >= 96)",
" {",
" Sy = 128 - Sy;",
- " if (Sy == 32)"
+ " if (Sy == 32)",
" {",
" res_grd = SIGN32 (Sx_grd);",
" res = Sx_grd;",
" }",
" carry = Sx >> (Sy - 1) & 1;",
" }",
- "else"
+ "else",
" {",
" RAISE_EXCEPTION (SIGILL);",
" return;",
{ "","", "(if cc) pdmsb Sx,Dz", "100111ccxx..zzzz",
"unsigned Sx = DSP_R (x);",
"int Sx_grd = GET_DSP_GRD (x);",
- "int i = 16;"
+ "int i = 16;",
"",
"if (Sx_grd < 0)",
" {",
" res = 30;",
"else",
" res = 31;",
- "do"
+ "do",
" {",
" if (Sx & ~0 << i)",
" {",
},
{ "","", "(if cc) pdmsb Sy,Dz", "101111cc..yyzzzz",
"unsigned Sy = DSP_R (y);",
- "int i;"
+ "int i;",
"",
"if (Sy < 0)",
" Sy = ~Sy;",
"Sy <<= 1;",
"res = 31;",
- "do"
+ "do",
" {",
" if (Sy & ~0 << i)",
" {",