Loads and stores for different sizes
This commit is contained in:
@@ -143,13 +143,25 @@ typedef S32 Register_Index;
|
||||
union Register{
|
||||
F64 f64;
|
||||
S64 s64;
|
||||
U64 *pointer_u64;
|
||||
U64 u64;
|
||||
|
||||
S64 *pointer_s64;
|
||||
F64 *pointer_f64;
|
||||
U64 *pointer64;
|
||||
U8 *pointer;
|
||||
U64 *pointer64;
|
||||
|
||||
U64 *pointer_u64;
|
||||
U32 *pointer_u32;
|
||||
U16 *pointer_u16;
|
||||
U8 *pointer_u8;
|
||||
|
||||
U64 u64;
|
||||
U32 u32;
|
||||
U16 u16;
|
||||
U8 u8;
|
||||
|
||||
};
|
||||
static_assert(sizeof(Register) == 8, "not 8 bytes");
|
||||
|
||||
|
||||
struct Instruction{
|
||||
Operation operation;
|
||||
@@ -368,17 +380,6 @@ run_bytecode_interp(Bc *b){
|
||||
bc_log("i%u[0x%llx] %s ", instr->di, instr, op_name[instr->operation]);
|
||||
switch(instr->operation){
|
||||
invalid_default_case;
|
||||
case BC_LOAD_FROM_MEMORY64:{
|
||||
U64 *load_address = b->registers[instr->index_a].pointer64;
|
||||
b->registers[instr->index_c].u64 = *load_address;
|
||||
bc_log("load_address[r%u, %llx] dst[r%u] [0x%llx|%lld|%f]", instr->index_a, load_address, instr->index_c, b->registers[instr->index_c].u64, b->registers[instr->index_c].u64, b->registers[instr->index_c].u64);
|
||||
}break;
|
||||
|
||||
case BC_STORE_TO_MEMORY64:{
|
||||
U64 *store_address = b->registers[instr->index_c].pointer64;
|
||||
*store_address = b->registers[instr->index_a].u64;
|
||||
bc_log("src[r%u] store_address[r%u, %llx] value_written[0x%llx|%lld|%f]", instr->index_a, instr->index_c, store_address, *store_address, *store_address, *store_address);
|
||||
}break;
|
||||
|
||||
case BC_PUSH_STACK:{
|
||||
U64 *stack = b->stack_pointer++;
|
||||
@@ -415,6 +416,54 @@ run_bytecode_interp(Bc *b){
|
||||
// *Begin* of switch_cases generated using code_generating_script.py
|
||||
//
|
||||
|
||||
case BC_LOAD_FROM_MEMORY64:{
|
||||
U64 *load_address = b->registers[instr->index_a].pointer_u64;
|
||||
b->registers[instr->index_c].u64 = *load_address;
|
||||
bc_log("load_address[r%u, %llx] dst[r%u] [0x%llx|%lld|%f]", instr->index_a, load_address, instr->index_c, b->registers[instr->index_c].u64, b->registers[instr->index_c].u64, b->registers[instr->index_c].u64);
|
||||
}break;
|
||||
|
||||
case BC_STORE_TO_MEMORY64:{
|
||||
U64 *store_address = b->registers[instr->index_c].pointer_u64;
|
||||
*store_address = b->registers[instr->index_a].u64;
|
||||
bc_log("src[r%u] store_address[r%u, %llx] value_written[0x%llx|%lld|%f]", instr->index_a, instr->index_c, store_address, *store_address, *store_address, *store_address);
|
||||
}break;
|
||||
|
||||
case BC_LOAD_FROM_MEMORY32:{
|
||||
U32 *load_address = b->registers[instr->index_a].pointer_u32;
|
||||
b->registers[instr->index_c].u32 = *load_address;
|
||||
bc_log("load_address[r%u, %llx] dst[r%u] [0x%llx|%lld|%f]", instr->index_a, load_address, instr->index_c, b->registers[instr->index_c].u32, b->registers[instr->index_c].u32, b->registers[instr->index_c].u32);
|
||||
}break;
|
||||
|
||||
case BC_STORE_TO_MEMORY32:{
|
||||
U32 *store_address = b->registers[instr->index_c].pointer_u32;
|
||||
*store_address = b->registers[instr->index_a].u32;
|
||||
bc_log("src[r%u] store_address[r%u, %llx] value_written[0x%llx|%lld|%f]", instr->index_a, instr->index_c, store_address, *store_address, *store_address, *store_address);
|
||||
}break;
|
||||
|
||||
case BC_LOAD_FROM_MEMORY16:{
|
||||
U16 *load_address = b->registers[instr->index_a].pointer_u16;
|
||||
b->registers[instr->index_c].u16 = *load_address;
|
||||
bc_log("load_address[r%u, %llx] dst[r%u] [0x%llx|%lld|%f]", instr->index_a, load_address, instr->index_c, b->registers[instr->index_c].u16, b->registers[instr->index_c].u16, b->registers[instr->index_c].u16);
|
||||
}break;
|
||||
|
||||
case BC_STORE_TO_MEMORY16:{
|
||||
U16 *store_address = b->registers[instr->index_c].pointer_u16;
|
||||
*store_address = b->registers[instr->index_a].u16;
|
||||
bc_log("src[r%u] store_address[r%u, %llx] value_written[0x%llx|%lld|%f]", instr->index_a, instr->index_c, store_address, *store_address, *store_address, *store_address);
|
||||
}break;
|
||||
|
||||
case BC_LOAD_FROM_MEMORY8:{
|
||||
U8 *load_address = b->registers[instr->index_a].pointer_u8;
|
||||
b->registers[instr->index_c].u8 = *load_address;
|
||||
bc_log("load_address[r%u, %llx] dst[r%u] [0x%llx|%lld|%f]", instr->index_a, load_address, instr->index_c, b->registers[instr->index_c].u8, b->registers[instr->index_c].u8, b->registers[instr->index_c].u8);
|
||||
}break;
|
||||
|
||||
case BC_STORE_TO_MEMORY8:{
|
||||
U8 *store_address = b->registers[instr->index_c].pointer_u8;
|
||||
*store_address = b->registers[instr->index_a].u8;
|
||||
bc_log("src[r%u] store_address[r%u, %llx] value_written[0x%llx|%lld|%f]", instr->index_a, instr->index_c, store_address, *store_address, *store_address, *store_address);
|
||||
}break;
|
||||
|
||||
case BC_ADD_S64:{
|
||||
S64 left = b->registers[instr->index_a].s64;
|
||||
S64 right = b->registers[instr->index_b].s64;
|
||||
|
||||
@@ -90,6 +90,22 @@ if True:
|
||||
#
|
||||
if True:
|
||||
result = ""
|
||||
|
||||
for size in sizes:
|
||||
result += f"""
|
||||
case BC_LOAD_FROM_MEMORY{size}:{{
|
||||
U{size} *load_address = b->registers[instr->index_a].pointer{size};
|
||||
b->registers[instr->index_c].u{size} = *load_address;
|
||||
bc_log("load_address[r%u, %llx] dst[r%u] [0x%llx|%lld|%f]", instr->index_a, load_address, instr->index_c, b->registers[instr->index_c].u{size}, b->registers[instr->index_c].u{size}, b->registers[instr->index_c].u{size});
|
||||
}}break;
|
||||
|
||||
case BC_STORE_TO_MEMORY{size}:{{
|
||||
U{size} *store_address = b->registers[instr->index_c].pointer{size};
|
||||
*store_address = b->registers[instr->index_a].u{size};
|
||||
bc_log("src[r%u] store_address[r%u, %llx] value_written[0x%llx|%lld|%f]", instr->index_a, instr->index_c, store_address, *store_address, *store_address, *store_address);
|
||||
}}break;
|
||||
"""
|
||||
|
||||
for sign, T in zip(print_sign, types):
|
||||
t = T.lower()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user