add opcode for swapping top two values on the stack

This commit is contained in:
Nikita Smith
2025-10-02 18:01:49 -07:00
parent 48c7e45535
commit 954633bba2
4 changed files with 14 additions and 4 deletions
+6
View File
@@ -841,6 +841,12 @@ e_interpret(String8 bytecode)
case 8:{nval.u64 = bswap_u64(svals[0].u64);}break;
}
}break;
case RDI_EvalOp_Swap:
{
// TODO: add support for pushing multiple values onto the stack
NotImplemented;
}break;
}
// rjf: push
+2 -1
View File
@@ -58,7 +58,7 @@ sizeof(RDI_NameMapNode),
sizeof(RDI_U8),
};
RDI_U16 rdi_eval_op_ctrlbits_table[52] =
RDI_U16 rdi_eval_op_ctrlbits_table[53] =
{
RDI_EVAL_CTRLBITS(0, 0, 0),
RDI_EVAL_CTRLBITS(0, 0, 0),
@@ -111,6 +111,7 @@ RDI_EVAL_CTRLBITS(1, 1, 1),
RDI_EVAL_CTRLBITS(4, 0, 0),
RDI_EVAL_CTRLBITS(4, 0, 0),
RDI_EVAL_CTRLBITS(8, 0, 0),
RDI_EVAL_CTRLBITS(0, 2, 2),
RDI_EVAL_CTRLBITS(0, 0, 0),
};
+4 -2
View File
@@ -523,7 +523,8 @@ RDI_EvalOp_ByteSwap = 47,
RDI_EvalOp_CallSiteValue = 48,
RDI_EvalOp_PartialValue = 49,
RDI_EvalOp_PartialValueBit = 50,
RDI_EvalOp_COUNT = 51,
RDI_EvalOp_Swap = 51,
RDI_EvalOp_COUNT = 52,
} RDI_EvalOpEnum;
typedef RDI_U8 RDI_EvalTypeGroup;
@@ -1122,6 +1123,7 @@ X(ByteSwap)\
X(CallSiteValue)\
X(PartialValue)\
X(PartialValueBit)\
X(Swap)\
#define RDI_EvalTypeGroup_XList \
X(Other)\
@@ -1623,6 +1625,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);
extern RDI_U16 rdi_section_element_size_table[44];
extern RDI_U16 rdi_eval_op_ctrlbits_table[52];
extern RDI_U16 rdi_eval_op_ctrlbits_table[53];
#endif // RDI_H
+2 -1
View File
@@ -1349,7 +1349,8 @@ RDI_EvalOpTable:
{CallSiteValue 48 4 0 0}
{PartialValue 49 4 0 0}
{PartialValueBit 50 8 0 0}
{COUNT 51 0 0 0}
{Swap 51 0 2 2} // swaps the top two entries on the stack
{COUNT 52 0 0 0}
}
// NOTE(rjf): "ck" -> "conversion kind, when converted to type group", used in square matrix form