Mercurial > repos > blastem
changeset 554:474270dbff15
Fix ARM code generation and test program
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 23 Feb 2014 22:17:43 -0800 |
parents | 1af6c1052993 |
children | 5af986d2b9da |
files | gen_arm.c test_arm.c |
diffstat | 2 files changed, 6 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/gen_arm.c Sun Feb 23 21:37:19 2014 -0800 +++ b/gen_arm.c Sun Feb 23 22:17:43 2014 -0800 @@ -51,7 +51,7 @@ #define PUSH (OP_STR | PRE_IND | OFF_IMM | SZ_W | WRITE_B | DIR_DOWN | sizeof(uint32_t) | (sp << 16)) #define POP (OP_LDR | POST_IND | OFF_IMM | SZ_W | DIR_UP | sizeof(uint32_t) | (sp << 16)) #define PUSHM (OP_STM | PRE_IND | SZ_W | WRITE_B | DIR_DOWN | (sp << 16)) -#define POPM (OP_LDM | POST_IND | SZ_W | DIR_UP | (sp << 16)) +#define POPM (OP_LDM | POST_IND | SZ_W | WRITE_B | DIR_UP | (sp << 16)) #define IMMED 0x2000000u #define REG 0u @@ -87,7 +87,7 @@ void check_alloc_code(code_info *code) { - if (code->cur = code->last) { + if (code->cur == code->last) { size_t size = CODE_ALLOC_SIZE; uint32_t *next_code = alloc_code(&size); if (!next_code) { @@ -127,7 +127,7 @@ uint32_t data_proc(code_info *code, uint32_t cond, uint32_t op, uint32_t set_cond, uint32_t dst, uint32_t src1, uint32_t src2) { check_alloc_code(code); - *(code->cur++) = cond | op | set_cond | (dst << 16) | (src1 << 12) | src2; + *(code->cur++) = cond | op | set_cond | (src1 << 16) | (dst << 12) | src2; return CODE_OK; } @@ -135,10 +135,10 @@ uint32_t data_proci(code_info *code, uint32_t cond, uint32_t op, uint32_t set_cond, uint32_t dst, uint32_t src1, uint32_t immed) { immed = make_immed(immed); - if (immed = INVALID_IMMED) { + if (immed == INVALID_IMMED) { return immed; } - return data_proc(code, cond, op, set_cond, dst, src1, immed); + return data_proc(code, cond, op | IMMED, set_cond, dst, src1, immed); } //TODO: support shifted register for op2