Cleaned up inst.c

Use (H)WORD_SIZE more, added some notes, etc
This commit is contained in:
2023-10-22 20:25:17 +01:00
parent d5d37f1264
commit 137a6d3b75

View File

@@ -193,9 +193,9 @@ size_t inst_bytecode_size(inst_t inst)
if (inst.opcode == OP_PUSH_BYTE) if (inst.opcode == OP_PUSH_BYTE)
++size; ++size;
else if (inst.opcode == OP_PUSH_HWORD) else if (inst.opcode == OP_PUSH_HWORD)
size += sizeof(i32); size += HWORD_SIZE;
else if (inst.opcode == OP_PUSH_WORD) else if (inst.opcode == OP_PUSH_WORD)
size += sizeof(word); size += WORD_SIZE;
} }
else if (OPCODE_IS_TYPE(inst.opcode, OP_PUSH_REGISTER) || else if (OPCODE_IS_TYPE(inst.opcode, OP_PUSH_REGISTER) ||
OPCODE_IS_TYPE(inst.opcode, OP_MOV)) OPCODE_IS_TYPE(inst.opcode, OP_MOV))
@@ -227,12 +227,10 @@ void inst_write_bytecode(inst_t inst, darr_t *darr)
darr_append_byte(darr, inst.operand.as_byte); darr_append_byte(darr, inst.operand.as_byte);
break; break;
case DATA_TYPE_HWORD: case DATA_TYPE_HWORD:
darr_append_bytes(darr, (byte *)&inst.operand.as_hword, darr_append_bytes(darr, (byte *)&inst.operand.as_hword, HWORD_SIZE);
sizeof(inst.operand.as_hword));
break; break;
case DATA_TYPE_WORD: case DATA_TYPE_WORD:
darr_append_bytes(darr, (byte *)&inst.operand.as_word, darr_append_bytes(darr, (byte *)&inst.operand.as_word, WORD_SIZE);
sizeof(inst.operand.as_word));
break; break;
} }
} }
@@ -260,17 +258,17 @@ data_t read_type_from_darr(darr_t *darr, data_type_t type)
// TODO: Error (darr has no space left) // TODO: Error (darr has no space left)
return DWORD(0); return DWORD(0);
hword u = 0; hword u = 0;
memcpy(&u, darr->data + darr->used, sizeof(u)); memcpy(&u, darr->data + darr->used, HWORD_SIZE);
darr->used += sizeof(u); darr->used += HWORD_SIZE;
return DHWORD(u); return DHWORD(u);
break; break;
case DATA_TYPE_WORD: case DATA_TYPE_WORD:
if (darr->used + sizeof(word) >= darr->available) if (darr->used + WORD_SIZE >= darr->available)
// TODO: Error (darr has no space left) // TODO: Error (darr has no space left)
return DWORD(0); return DWORD(0);
word w = 0; word w = 0;
memcpy(&w, darr->data + darr->used, sizeof(w)); memcpy(&w, darr->data + darr->used, WORD_SIZE);
darr->used += sizeof(w); darr->used += WORD_SIZE;
return DWORD(w); return DWORD(w);
break; break;
} }
@@ -303,9 +301,10 @@ inst_t inst_read_bytecode(darr_t *darr)
inst_t *insts_read_bytecode(darr_t *bytes, size_t *ret_size) inst_t *insts_read_bytecode(darr_t *bytes, size_t *ret_size)
{ {
*ret_size = 0; *ret_size = 0;
// NOTE: Here we use the darr as a dynamic array of inst_t.
darr_t instructions = {0}; darr_t instructions = {0};
darr_init(&instructions, 0); darr_init(&instructions, sizeof(inst_t));
while (bytes->used < bytes->available) while (bytes->used < bytes->available)
{ {
inst_t instruction = inst_read_bytecode(bytes); inst_t instruction = inst_read_bytecode(bytes);