Reworking VM into infinite stack machine
This commit is contained in:
@@ -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;
|
||||
"""
|
||||
################################
|
||||
|
||||
Reference in New Issue
Block a user