Reworking VM into infinite stack machine

This commit is contained in:
Krzosa Karol
2022-06-21 23:13:07 +02:00
parent 2c3a8dc764
commit eee9e24cfc
4 changed files with 264 additions and 202 deletions

View File

@@ -30,6 +30,7 @@ if False:
enum_members.append("BC_POP_STACK")
enum_members.append("BC_PUSH_STACK")
enum_members.append("BC_LOAD_CONSTANT")
enum_members.append("BC_STORE_CONSTANT")
load_store = ["LOAD_FROM_MEMORY", "STORE_TO_MEMORY"]
for op in load_store:
@@ -70,7 +71,7 @@ if True:
if symbol == "~":
result += f"""
case BC_{op_name}_{T}:{{
{T} left = ({T})b->registers[instr->left].{t};
{T} left = ({T})b->registers[instr->a].{t};
{T} result = {symbol}left;
{T} *dst = b->registers[instr->dst].pointer_{t};
*dst = result;
@@ -84,11 +85,11 @@ if True:
# Binary operation
result += f"""
case BC_{op_name}_{T}:{{
{T} left = b->registers[instr->left].{t};
{T} right = b->registers[instr->right].{t};
{T} left = b->registers[instr->a].{t};
{T} right = b->registers[instr->b].{t};
{T} result = left {symbol} right;
b->registers[instr->dst].{t} = result;
bc_log("r%u + r%u = r%u => [{sign}] {symbol} [{sign}] = [{sign}]", instr->left, instr->right, instr->dst, left, right, result);
bc_log("r%u + r%u = r%u => [{sign}] {symbol} [{sign}] = [{sign}]", instr->a, instr->b, instr->dst, left, right, result);
}}break;
"""
################################