cfg tree collection evaluation

This commit is contained in:
Ryan Fleury
2025-01-27 15:33:35 -08:00
parent b085acbc32
commit 4cc5f636fe
15 changed files with 505 additions and 723 deletions
+24 -1
View File
@@ -74,7 +74,8 @@ e_interpret(String8 bytecode)
}
else switch(op)
{
case E_IRExtKind_SetSpace:{ctrlbits = RDI_EVAL_CTRLBITS(32, 0, 0);}break;
case E_IRExtKind_SetSpace: {ctrlbits = RDI_EVAL_CTRLBITS(32, 0, 0);}break;
case E_IRExtKind_DerefSpacePtr:{ctrlbits = RDI_EVAL_CTRLBITS(0, 1, 1);}break;
default:
{
result.code = E_InterpretationCode_BadOp;
@@ -124,6 +125,27 @@ e_interpret(String8 bytecode)
MemoryCopy(&selected_space, &imm, sizeof(selected_space));
}break;
case E_IRExtKind_DerefSpacePtr:
{
U64 addr = svals[0].u64;
U64 size = sizeof(E_Space) + sizeof(U64);
typedef struct SpacePtrRead SpacePtrRead;
struct SpacePtrRead
{
E_Space space;
U64 off;
};
SpacePtrRead space_ptr_read = {0};
B32 good_read = e_space_read(selected_space, &space_ptr_read, r1u64(addr, addr+size));
if(!good_read)
{
result.code = E_InterpretationCode_BadMemRead;
goto done;
}
MemoryCopyStruct(&selected_space, &space_ptr_read.space);
nval.u64 = space_ptr_read.off;
}break;
case RDI_EvalOp_Stop:
{
goto done;
@@ -812,6 +834,7 @@ e_interpret(String8 bytecode)
{
result.value = stack[0];
}
result.space = selected_space;
scratch_end(scratch);
return result;
}