diff options
Diffstat (limited to 'assemble.c')
-rw-r--r-- | assemble.c | 28 |
1 files changed, 14 insertions, 14 deletions
@@ -75,18 +75,17 @@ uint64_t get_val(token *t, uint64_t addr, uint8_t size, uint8_t dbg) { return value; } -uint8_t get_dirsize(uint8_t type, uint8_t dbg) { - uint8_t size = 0; +uint8_t get_directivesize(uint8_t type, uint8_t dbg) { switch (type) { - case DIR_QWORD: size = 3; break; - case DIR_DWORD: size = 2; break; - case DIR_WORD : size = 1; break; - case DIR_BYTE : size = 0; break; + case DIR_QWORD: return 3; + case DIR_DWORD: return 2; + case DIR_WORD : return 1; + case DIR_BYTE : return 0; } - return size; + return 0; } -uint64_t handle_dir(token *t, bytecount *bc, uint8_t isasm, uint64_t address, uint8_t dbg) { +uint64_t handle_directive(token *t, bytecount *bc, uint8_t isasm, uint64_t address, uint8_t dbg) { union reg val; uint8_t c = 0; uint8_t tmp = 0; @@ -102,9 +101,9 @@ uint64_t handle_dir(token *t, bytecount *bc, uint8_t isasm, uint64_t address, ui case TOK_CHAR: case TOK_SYM: case TOK_LABEL: - val.u64 = get_val(t, tmpaddr, get_dirsize(type, dbg), dbg); + val.u64 = get_val(t, tmpaddr, get_directivesize(type, dbg), dbg); switch (type) { - case DIR_QWORD: + case DIR_QWORD: /* Falls through. */ if (isasm) { addr[tmpaddr+7] = val.u8[7]; addr[tmpaddr+6] = val.u8[6]; @@ -112,13 +111,13 @@ uint64_t handle_dir(token *t, bytecount *bc, uint8_t isasm, uint64_t address, ui addr[tmpaddr+4] = val.u8[4]; } tmp += 4; - case DIR_DWORD: + case DIR_DWORD: /* Falls through. */ if (isasm) { addr[tmpaddr+3] = val.u8[3]; addr[tmpaddr+2] = val.u8[2]; } tmp += 2; - case DIR_WORD: + case DIR_WORD: /* Falls through. */ if (isasm) { addr[tmpaddr+1] = val.u8[1]; } @@ -203,7 +202,8 @@ uint64_t handle_opcode(token *t, bytecount *bc, uint8_t isasm, uint64_t address, val.u64 = get_val(t, address, (rs != 0xFF) ? rs : 0, dbg); } opcode = opcodes[inst][type]; - if (inst == 78) { + /* Special case for TXS. */ + if (inst == TXS_MNE_ID) { if (type == IMM) { rs = 1; } else { @@ -325,7 +325,7 @@ uint64_t parse_tokens(token *t, bytecount *bc, uint8_t isasm, uint64_t address, case DIR_BYTE: case DIR_WORD: case DIR_DWORD: - case DIR_QWORD: address = handle_dir(t, bc, isasm, address, dbg); break; + case DIR_QWORD: address = handle_directive(t, bc, isasm, address, dbg); break; } break; case TOK_OPCODE: address = handle_opcode(t, bc, isasm, address, dbg); break; |