Implement ASR(2)

This commit is contained in:
Jeffrey Pfau 2013-04-13 01:42:34 -07:00
parent 5094b7717a
commit c51ad65cac
1 changed files with 16 additions and 1 deletions

View File

@ -182,7 +182,22 @@ DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(AND, ARM_STUB)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(EOR, ARM_STUB)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(LSL2, ARM_STUB)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(LSR2, ARM_STUB)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ASR2, ARM_STUB)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ASR2, \
int rs = cpu->gprs[rn] & 0xFF; \
if (rs) { \
if (rs < 32) { \
cpu->cpsr.c = cpu->gprs[rd] & (1 << (rs - 1)); \
cpu->gprs[rd] >>= rs; \
} else { \
cpu->cpsr.c = ARM_SIGN(cpu->gprs[rd]); \
if (cpu->cpsr.c) { \
cpu->gprs[rd] = 0xFFFFFFFF; \
} else { \
cpu->gprs[rd] = 0; \
} \
} \
})
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ADC, ARM_STUB)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(SBC, ARM_STUB)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ROR, ARM_STUB)