From 21df1c48c2bbe82c63fe5b7ef73d7f0cc98a5b82 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Fri, 12 Apr 2013 02:44:04 -0700 Subject: [PATCH] Implement MOV(1) --- src/isa-thumb.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/isa-thumb.c b/src/isa-thumb.c index 05b68e550..5b29a9b97 100644 --- a/src/isa-thumb.c +++ b/src/isa-thumb.c @@ -16,6 +16,10 @@ void ThumbStep(struct ARMCore* cpu) { // Instruction definitions // Beware pre-processor insanity +#define THUMB_NEUTRAL_S(M, N, D) \ + cpu->cpsr.n = ARM_SIGN(D); \ + cpu->cpsr.z = !(D); + #define APPLY(F, ...) F(__VA_ARGS__) #define COUNT_1(EMITTER, PREFIX, ...) \ @@ -113,6 +117,7 @@ DEFINE_DATA_FORM_2_INSTRUCTION_THUMB(SUB, ARM_STUB) #define DEFINE_DATA_FORM_3_INSTRUCTION_EX_THUMB(NAME, RD, BODY) \ DEFINE_INSTRUCTION_THUMB(NAME, \ int rd = RD; \ + int immediate = opcode & 0x00FF; \ BODY;) #define DEFINE_DATA_FORM_3_INSTRUCTION_THUMB(NAME, BODY) \ @@ -120,7 +125,7 @@ DEFINE_DATA_FORM_2_INSTRUCTION_THUMB(SUB, ARM_STUB) DEFINE_DATA_FORM_3_INSTRUCTION_THUMB(ADD2, ARM_STUB) DEFINE_DATA_FORM_3_INSTRUCTION_THUMB(CMP1, ARM_STUB) -DEFINE_DATA_FORM_3_INSTRUCTION_THUMB(MOV1, ARM_STUB) +DEFINE_DATA_FORM_3_INSTRUCTION_THUMB(MOV1, cpu->gprs[rd] = immediate; THUMB_NEUTRAL_S(, , cpu->gprs[rd])) DEFINE_DATA_FORM_3_INSTRUCTION_THUMB(SUB2, ARM_STUB) #define DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(NAME, BODY) \