aboutsummaryrefslogtreecommitdiff
path: root/sim/arm/armemu.h
diff options
context:
space:
mode:
Diffstat (limited to 'sim/arm/armemu.h')
-rw-r--r--sim/arm/armemu.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/sim/arm/armemu.h b/sim/arm/armemu.h
index ad89294..de836cb 100644
--- a/sim/arm/armemu.h
+++ b/sim/arm/armemu.h
@@ -73,6 +73,9 @@ extern ARMword isize;
#define SETT state->TFlag = 1
#define CLEART state->TFlag = 0
#define ASSIGNT(res) state->TFlag = res
+#define INSN_SIZE (TFLAG ? 2 : 4)
+#else
+#define INSN_SIZE 4
#endif
#define NFLAG state->NFlag
@@ -179,7 +182,13 @@ extern ARMword isize;
state->Reg[15] = R15PC | ((s) & (CCBITS | R15INTBITS | R15MODEBITS)) ; \
ARMul_R15Altered (state) ; \
}
-#define SETABORT(i,m) state->Cpsr = ECC | EINT | (i) | (m)
+#define SETABORT(i,m,d) do { \
+ int SETABORT_mode = (m); \
+ ARMul_SetSPSR (state, SETABORT_mode, ARMul_GetCPSR (state)); \
+ ARMul_SetCPSR (state, ((ARMul_GetCPSR (state) & ~(EMODE | TBIT)) \
+ | (i) | SETABORT_mode)); \
+ state->Reg[14] = temp - (d); \
+} while (0)
#ifndef MODE32
#define VECTORS 0x20