From da19d2f59353ade607c715ed9ab7b81ba1407411 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Sat, 13 Jun 2020 19:18:49 -0400 Subject: Optimized, and cleaned up the codebase. --- assemble.c | 51 +++++++++------------------------------------------ 1 file changed, 9 insertions(+), 42 deletions(-) (limited to 'assemble.c') diff --git a/assemble.c b/assemble.c index 990ca96..1ed4960 100644 --- a/assemble.c +++ b/assemble.c @@ -25,10 +25,9 @@ uint8_t get_rs(token *t, uint8_t inst, uint8_t dbg) { uint64_t get_val(token *t, uint64_t addr, uint8_t size, uint8_t dbg) { uint64_t value = 0; uint64_t tmp_val = 0; - uint16_t expr_count = 0; uint8_t type = EXPR_NONE; do { - if (expr_count) { + if (t->id == TOK_EXPR) { type = t->type; t = t->next; } @@ -36,15 +35,9 @@ uint64_t get_val(token *t, uint64_t addr, uint8_t size, uint8_t dbg) { case TOK_HEX: case TOK_DEC: case TOK_BIN: - case TOK_CHAR: - tmp_val = t->qword; - t = t->next; - break; + case TOK_CHAR: tmp_val = t->qword; t = t->next; break; case TOK_SYM: - case TOK_LABEL: - tmp_val = (t->sym) ? t->sym->val : addr; - t = t->next; - break; + case TOK_LABEL: tmp_val = (t->sym) ? t->sym->val : addr; t = t-> next; break; } switch (type) { case EXPR_PLUS : value += tmp_val; break; @@ -67,11 +60,7 @@ uint64_t get_val(token *t, uint64_t addr, uint8_t size, uint8_t dbg) { break; case EXPR_NONE : value = tmp_val; break; } - expr_count++; - if (!t) { - break; - } - } while (t->id == TOK_EXPR && isexpr(t->type, dbg)); + } while (t && t->id == TOK_EXPR && isexpr(t->type, dbg)); return value; } @@ -186,7 +175,7 @@ uint64_t handle_opcode(token *t, bytecount *bc, uint8_t isasm, uint64_t address, break; } tmp = 0; - opsize = 0; + opsize = 1; opcode = 0; if (t->next) { rs = get_rs(t->next, inst, dbg); @@ -231,35 +220,13 @@ uint64_t handle_opcode(token *t, bytecount *bc, uint8_t isasm, uint64_t address, } address++; bc->progsize++; - switch (rs) { - case 3: - if (isasm) { - addr[address+7] = val.u8[7]; - addr[address+6] = val.u8[6]; - addr[address+5] = val.u8[5]; - addr[address+4] = val.u8[4]; - } - tmp += 4; - case 2: - if (isasm) { - addr[address+3] = val.u8[3]; - addr[address+2] = val.u8[2]; - } - tmp += 2; - case 1 : - if (isasm) { - addr[address+1] = val.u8[1]; - } - tmp++; - default: - if (isasm) { - addr[address ] = val.u8[0]; - } - tmp++; + rs = (rs != 0xFF) ? rs : 0; + tmp = (1 << rs); + if (isasm) { + setreg(addr, +, address, val.u8, +, 0, tmp-1); } break; default: - opsize = (val.u64 <= 0x00000000000000FF) ? 1 : opsize; opsize = (val.u64 > 0x00000000000000FF) ? 2 : opsize; opsize = (val.u64 > 0x000000000000FFFF) ? 3 : opsize; opsize = (val.u64 > 0x0000000000FFFFFF) ? 4 : opsize; -- cgit v1.2.3-13-gbd6f