add CFA op to the bytecode

This commit is contained in:
Nikita Smith
2025-11-26 15:13:24 -08:00
parent a1884aaf5f
commit 2a6d0d737c
4 changed files with 9 additions and 5 deletions
+2 -1
View File
@@ -58,7 +58,7 @@ sizeof(RDI_NameMapNode),
sizeof(RDI_U8), sizeof(RDI_U8),
}; };
RDI_U16 rdi_eval_op_ctrlbits_table[53] = RDI_U16 rdi_eval_op_ctrlbits_table[54] =
{ {
RDI_EVAL_CTRLBITS(0, 0, 0), RDI_EVAL_CTRLBITS(0, 0, 0),
RDI_EVAL_CTRLBITS(0, 0, 0), RDI_EVAL_CTRLBITS(0, 0, 0),
@@ -112,6 +112,7 @@ RDI_EVAL_CTRLBITS(4, 0, 0),
RDI_EVAL_CTRLBITS(4, 0, 0), RDI_EVAL_CTRLBITS(4, 0, 0),
RDI_EVAL_CTRLBITS(8, 0, 0), RDI_EVAL_CTRLBITS(8, 0, 0),
RDI_EVAL_CTRLBITS(0, 2, 2), RDI_EVAL_CTRLBITS(0, 2, 2),
RDI_EVAL_CTRLBITS(0, 0, 1),
RDI_EVAL_CTRLBITS(0, 0, 0), RDI_EVAL_CTRLBITS(0, 0, 0),
}; };
+4 -2
View File
@@ -531,7 +531,8 @@ RDI_EvalOp_CallSiteValue = 48,
RDI_EvalOp_PartialValue = 49, RDI_EvalOp_PartialValue = 49,
RDI_EvalOp_PartialValueBit = 50, RDI_EvalOp_PartialValueBit = 50,
RDI_EvalOp_Swap = 51, RDI_EvalOp_Swap = 51,
RDI_EvalOp_COUNT = 52, RDI_EvalOp_PushCfa = 52,
RDI_EvalOp_COUNT = 53,
} RDI_EvalOpEnum; } RDI_EvalOpEnum;
typedef RDI_U8 RDI_EvalTypeGroup; typedef RDI_U8 RDI_EvalTypeGroup;
@@ -1136,6 +1137,7 @@ X(CallSiteValue)\
X(PartialValue)\ X(PartialValue)\
X(PartialValueBit)\ X(PartialValueBit)\
X(Swap)\ X(Swap)\
X(PushCfa)\
#define RDI_EvalTypeGroup_XList \ #define RDI_EvalTypeGroup_XList \
X(Other)\ X(Other)\
@@ -1638,6 +1640,6 @@ RDI_PROC RDI_S32 rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTyp
RDI_PROC RDI_U8 *rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out); RDI_PROC RDI_U8 *rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out);
extern RDI_U16 rdi_section_element_size_table[44]; extern RDI_U16 rdi_section_element_size_table[44];
extern RDI_U16 rdi_eval_op_ctrlbits_table[53]; extern RDI_U16 rdi_eval_op_ctrlbits_table[54];
#endif // RDI_H #endif // RDI_H
+2 -1
View File
@@ -1358,7 +1358,8 @@ RDI_EvalOpTable:
{PartialValue 49 4 0 0} {PartialValue 49 4 0 0}
{PartialValueBit 50 8 0 0} {PartialValueBit 50 8 0 0}
{Swap 51 0 2 2} // swaps the top two entries on the stack {Swap 51 0 2 2} // swaps the top two entries on the stack
{COUNT 52 0 0 0} {PushCfa 52 0 0 1} // push canonical frame address on the stack
{COUNT 53 0 0 0}
} }
// NOTE(rjf): "ck" -> "conversion kind, when converted to type group", used in square matrix form // NOTE(rjf): "ck" -> "conversion kind, when converted to type group", used in square matrix form
+1 -1
View File
@@ -1261,7 +1261,7 @@ d2r_bytecode_from_expression(Arena *arena,
} }
} break; } break;
case DW_ExprOp_CallFrameCfa: { case DW_ExprOp_CallFrameCfa: {
rdim_bytecode_push_op(arena, &bc, RDI_EvalOp_FrameOff, 0); rdim_bytecode_push_op(arena, &bc, RDI_EvalOp_PushCfa, 0);
d2r_value_type_stack_push(scratch.arena, stack, D2R_ValueType_Address); d2r_value_type_stack_push(scratch.arena, stack, D2R_ValueType_Address);
} break; } break;
case DW_ExprOp_PushObjectAddress: { case DW_ExprOp_PushObjectAddress: {