mirror of https://github.com/mgba-emu/mgba.git
ARM: Remove need for CPSR load in some flag calculations
This commit is contained in:
parent
e18f275aaa
commit
bf8c1d1b4b
|
@ -93,6 +93,20 @@ union PSR {
|
|||
#endif
|
||||
};
|
||||
|
||||
struct {
|
||||
#if defined(__BIG_ENDIAN__)
|
||||
uint8_t flags;
|
||||
uint8_t status;
|
||||
uint8_t extension;
|
||||
uint8_t control;
|
||||
#else
|
||||
uint8_t control;
|
||||
uint8_t extension;
|
||||
uint8_t status;
|
||||
uint8_t flags;
|
||||
#endif
|
||||
};
|
||||
|
||||
int32_t packed;
|
||||
};
|
||||
|
||||
|
|
|
@ -185,6 +185,7 @@ static inline void _immediate(struct ARMCore* cpu, uint32_t opcode) {
|
|||
// Beware pre-processor antics
|
||||
|
||||
ATTRIBUTE_NOINLINE static void _additionS(struct ARMCore* cpu, int32_t m, int32_t n, int32_t d) {
|
||||
cpu->cpsr.flags = 0;
|
||||
cpu->cpsr.n = ARM_SIGN(d);
|
||||
cpu->cpsr.z = !d;
|
||||
cpu->cpsr.c = ARM_CARRY_FROM(m, n, d);
|
||||
|
@ -192,6 +193,7 @@ ATTRIBUTE_NOINLINE static void _additionS(struct ARMCore* cpu, int32_t m, int32_
|
|||
}
|
||||
|
||||
ATTRIBUTE_NOINLINE static void _subtractionS(struct ARMCore* cpu, int32_t m, int32_t n, int32_t d) {
|
||||
cpu->cpsr.flags = 0;
|
||||
cpu->cpsr.n = ARM_SIGN(d);
|
||||
cpu->cpsr.z = !d;
|
||||
cpu->cpsr.c = ARM_BORROW_FROM(m, n, d);
|
||||
|
|
|
@ -12,12 +12,14 @@
|
|||
// Beware pre-processor insanity
|
||||
|
||||
#define THUMB_ADDITION_S(M, N, D) \
|
||||
cpu->cpsr.flags = 0; \
|
||||
cpu->cpsr.n = ARM_SIGN(D); \
|
||||
cpu->cpsr.z = !(D); \
|
||||
cpu->cpsr.c = ARM_CARRY_FROM(M, N, D); \
|
||||
cpu->cpsr.v = ARM_V_ADDITION(M, N, D);
|
||||
|
||||
#define THUMB_SUBTRACTION_S(M, N, D) \
|
||||
cpu->cpsr.flags = 0; \
|
||||
cpu->cpsr.n = ARM_SIGN(D); \
|
||||
cpu->cpsr.z = !(D); \
|
||||
cpu->cpsr.c = ARM_BORROW_FROM(M, N, D); \
|
||||
|
|
Loading…
Reference in New Issue