begin sketching out eval paths for small string operations

This commit is contained in:
Ryan Fleury
2024-08-13 16:16:55 -07:00
parent 07c4e6ee87
commit eac1672c4e
9 changed files with 86 additions and 117 deletions
+1 -1
View File
@@ -341,7 +341,7 @@ DF_GfxViewRuleTable:
@data(DF_ViewSpecInfo) @c_file df_g_gfx_view_rule_tab_view_spec_info_table:
{
@expand(DF_GfxViewRuleTable a)
```$(a.tu == "x" -> '{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("' .. a.string .. '_view_rule"), str8_lit_comp("' .. a.tab_display_string .. '"), DF_IconKind_Binoculars, ' .. 'DF_VIEW_SETUP_FUNCTION_NAME(' .. a.string .. '), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(' .. a.string .. '), DF_VIEW_CMD_FUNCTION_NAME(' .. a.string .. '), DF_VIEW_UI_FUNCTION_NAME(' .. a.string .. ') }')```;
```$(a.tu == "x" -> '{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery|DF_ViewSpecFlag_FilterIsCode, str8_lit_comp("' .. a.string .. '_view_rule"), str8_lit_comp("' .. a.tab_display_string .. '"), DF_IconKind_Binoculars, ' .. 'DF_VIEW_SETUP_FUNCTION_NAME(' .. a.string .. '), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(' .. a.string .. '), DF_VIEW_CMD_FUNCTION_NAME(' .. a.string .. '), DF_VIEW_UI_FUNCTION_NAME(' .. a.string .. ') }')```;
}
@data(DF_GfxViewRuleSpecInfo) @c_file df_g_gfx_view_rule_spec_info_table:
-3
View File
@@ -2686,7 +2686,6 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
switch(t->node->op)
{
default:{}break;
case E_IRExtKind_Data:{op_string = str8_lit("Data");}break;
case E_IRExtKind_Bytecode:{op_string = str8_lit("Bytecode");}break;
#define X(name) case RDI_EvalOp_##name:{op_string = str8_lit(#name);}break;
RDI_EvalOp_XList
@@ -2712,7 +2711,6 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
switch(op->opcode)
{
default:{}break;
case E_IRExtKind_Data:{op_string = str8_lit("Data");}break;
case E_IRExtKind_Bytecode:{op_string = str8_lit("Bytecode");}break;
#define X(name) case RDI_EvalOp_##name:{op_string = str8_lit(#name);}break;
RDI_EvalOp_XList
@@ -2721,7 +2719,6 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
String8 ext = {0};
switch(op->opcode)
{
case E_IRExtKind_Data:{ext = push_str8f(scratch.arena, "'%S'", op->data);}break;
case E_IRExtKind_Bytecode:{ext = str8_lit("[bytecode]");}break;
default:
{
+4 -4
View File
@@ -206,10 +206,10 @@ str8_lit_comp("function_breakpoint"),
DF_ViewSpecInfo df_g_gfx_view_rule_tab_view_spec_info_table[4] =
{
{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("text_view_rule"), str8_lit_comp("Text"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(text), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(text), DF_VIEW_CMD_FUNCTION_NAME(text), DF_VIEW_UI_FUNCTION_NAME(text) },
{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("disasm_view_rule"), str8_lit_comp("Disassembly"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(disasm), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(disasm), DF_VIEW_CMD_FUNCTION_NAME(disasm), DF_VIEW_UI_FUNCTION_NAME(disasm) },
{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("bitmap_view_rule"), str8_lit_comp("Bitmap"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(bitmap), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(bitmap), DF_VIEW_CMD_FUNCTION_NAME(bitmap), DF_VIEW_UI_FUNCTION_NAME(bitmap) },
{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("geo_view_rule"), str8_lit_comp("Geometry"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(geo), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(geo), DF_VIEW_CMD_FUNCTION_NAME(geo), DF_VIEW_UI_FUNCTION_NAME(geo) },
{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery|DF_ViewSpecFlag_FilterIsCode, str8_lit_comp("text_view_rule"), str8_lit_comp("Text"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(text), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(text), DF_VIEW_CMD_FUNCTION_NAME(text), DF_VIEW_UI_FUNCTION_NAME(text) },
{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery|DF_ViewSpecFlag_FilterIsCode, str8_lit_comp("disasm_view_rule"), str8_lit_comp("Disassembly"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(disasm), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(disasm), DF_VIEW_CMD_FUNCTION_NAME(disasm), DF_VIEW_UI_FUNCTION_NAME(disasm) },
{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery|DF_ViewSpecFlag_FilterIsCode, str8_lit_comp("bitmap_view_rule"), str8_lit_comp("Bitmap"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(bitmap), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(bitmap), DF_VIEW_CMD_FUNCTION_NAME(bitmap), DF_VIEW_UI_FUNCTION_NAME(bitmap) },
{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery|DF_ViewSpecFlag_FilterIsCode, str8_lit_comp("geo_view_rule"), str8_lit_comp("Geometry"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(geo), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(geo), DF_VIEW_CMD_FUNCTION_NAME(geo), DF_VIEW_UI_FUNCTION_NAME(geo) },
};
DF_GfxViewRuleSpecInfo df_g_gfx_view_rule_spec_info_table[14] =
+7 -44
View File
@@ -133,17 +133,6 @@ e_oplist_push_bytecode(Arena *arena, E_OpList *list, String8 bytecode)
list->encoded_size += bytecode.size;
}
internal void
e_oplist_push_data(Arena *arena, E_OpList *list, String8 data)
{
E_Op *node = push_array_no_zero(arena, E_Op, 1);
node->opcode = E_IRExtKind_Data;
node->data = data;
SLLQueuePush(list->first, list->last, node);
list->op_count += 1;
list->encoded_size += data.size;
}
internal void
e_oplist_concat_in_place(E_OpList *dst, E_OpList *to_push)
{
@@ -242,8 +231,8 @@ e_irtree_bytecode_no_copy(Arena *arena, String8 bytecode)
internal E_IRNode *
e_irtree_string_literal(Arena *arena, String8 string)
{
E_IRNode *root = e_push_irnode(arena, E_IRExtKind_Data);
root->string = string;
E_IRNode *root = e_push_irnode(arena, RDI_EvalOp_ConstU512);
root->string = str8(string.str, Min(64, string.size));
return root;
}
@@ -1043,7 +1032,7 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
E_IRNode *new_tree = e_irtree_string_literal(arena, string);
result.root = new_tree;
result.type_key = type_key;
result.mode = E_Mode_InlineData;
result.mode = E_Mode_Value;
}break;
//- rjf: leaf U64s
@@ -1149,23 +1138,11 @@ e_append_oplist_from_irtree(Arena *arena, E_IRNode *root, E_OpList *out)
e_oplist_push_bytecode(arena, out, root->string);
}break;
case E_IRExtKind_Data:
case RDI_EvalOp_ConstU128:
case RDI_EvalOp_ConstU256:
case RDI_EvalOp_ConstU512:
{
// rjf: for inline data in a bytecode stream, we:
//
// 1. generate a const-u64 value on the stack, encoding the offset of the
// data within the bytecode stream
// 2. generate a 'skip' instruction, to skip past the data
// 3. generate the actual data
//
Temp scratch = scratch_begin(&arena, 1);
E_OpList header_calcsize_ops = {0};
e_oplist_push_op(scratch.arena, &header_calcsize_ops, RDI_EvalOp_ConstU64, 0);
e_oplist_push_op(scratch.arena, &header_calcsize_ops, RDI_EvalOp_Skip, 0);
e_oplist_push_op(arena, out, RDI_EvalOp_ConstU64, out->encoded_size + header_calcsize_ops.encoded_size);
e_oplist_push_op(arena, out, RDI_EvalOp_Skip, root->string.size);
e_oplist_push_data(arena, out, root->string);
scratch_end(scratch);
// TODO(rjf)
}break;
case RDI_EvalOp_Cond:
@@ -1274,20 +1251,6 @@ e_bytecode_from_oplist(Arena *arena, E_OpList *oplist)
// rjf: advance
ptr = next_ptr;
}break;
case E_IRExtKind_Data:
{
// rjf: compute bytecode advance
U64 size = op->data.size;
U8 *next_ptr = ptr + size;
Assert(next_ptr <= opl);
// rjf: fill data
MemoryCopy(ptr, op->data.str, op->data.size);
// rjf: advance
ptr = next_ptr;
}break;
}
}
-2
View File
@@ -10,7 +10,6 @@
enum
{
E_IRExtKind_Bytecode = RDI_EvalOp_COUNT,
E_IRExtKind_Data,
E_IRExtKind_COUNT
};
@@ -94,7 +93,6 @@ internal void e_oplist_push_op(Arena *arena, E_OpList *list, RDI_EvalOp opcode,
internal void e_oplist_push_uconst(Arena *arena, E_OpList *list, U64 x);
internal void e_oplist_push_sconst(Arena *arena, E_OpList *list, S64 x);
internal void e_oplist_push_bytecode(Arena *arena, E_OpList *list, String8 bytecode);
internal void e_oplist_push_data(Arena *arena, E_OpList *list, String8 data);
internal void e_oplist_concat_in_place(E_OpList *dst, E_OpList *to_push);
//- rjf: ir tree core building helpers
-1
View File
@@ -85,7 +85,6 @@ typedef enum E_Mode
E_Mode_Value,
E_Mode_Addr,
E_Mode_Reg,
E_Mode_InlineData,
}
E_Mode;
+4 -1
View File
@@ -92,7 +92,7 @@ RDI_U8 rdi_section_is_required_table[37] =
0,
};
RDI_U8 rdi_eval_op_ctrlbits_table[45] =
RDI_U8 rdi_eval_op_ctrlbits_table[48] =
{
RDI_EVAL_CTRLBITS(0, 0, 0),
RDI_EVAL_CTRLBITS(0, 0, 0),
@@ -110,6 +110,9 @@ RDI_EVAL_CTRLBITS(1, 0, 1),
RDI_EVAL_CTRLBITS(2, 0, 1),
RDI_EVAL_CTRLBITS(4, 0, 1),
RDI_EVAL_CTRLBITS(8, 0, 1),
RDI_EVAL_CTRLBITS(16, 0, 1),
RDI_EVAL_CTRLBITS(32, 0, 1),
RDI_EVAL_CTRLBITS(64, 0, 1),
RDI_EVAL_CTRLBITS(1, 1, 1),
RDI_EVAL_CTRLBITS(1, 1, 1),
RDI_EVAL_CTRLBITS(1, 2, 1),
+37 -31
View File
@@ -52,7 +52,7 @@ typedef int64_t RDI_S64;
// \"raddbg\0\0\"
#define RDI_MAGIC_CONSTANT 0x0000676264646172
#define RDI_ENCODING_VERSION 7
#define RDI_ENCODING_VERSION 8
////////////////////////////////////////////////////////////////
//~ Format Types & Functions
@@ -452,35 +452,38 @@ RDI_EvalOp_ConstU8 = 12,
RDI_EvalOp_ConstU16 = 13,
RDI_EvalOp_ConstU32 = 14,
RDI_EvalOp_ConstU64 = 15,
RDI_EvalOp_Abs = 16,
RDI_EvalOp_Neg = 17,
RDI_EvalOp_Add = 18,
RDI_EvalOp_Sub = 19,
RDI_EvalOp_Mul = 20,
RDI_EvalOp_Div = 21,
RDI_EvalOp_Mod = 22,
RDI_EvalOp_LShift = 23,
RDI_EvalOp_RShift = 24,
RDI_EvalOp_BitAnd = 25,
RDI_EvalOp_BitOr = 26,
RDI_EvalOp_BitXor = 27,
RDI_EvalOp_BitNot = 28,
RDI_EvalOp_LogAnd = 29,
RDI_EvalOp_LogOr = 30,
RDI_EvalOp_LogNot = 31,
RDI_EvalOp_EqEq = 32,
RDI_EvalOp_NtEq = 33,
RDI_EvalOp_LsEq = 34,
RDI_EvalOp_GrEq = 35,
RDI_EvalOp_Less = 36,
RDI_EvalOp_Grtr = 37,
RDI_EvalOp_Trunc = 38,
RDI_EvalOp_TruncSigned = 39,
RDI_EvalOp_Convert = 40,
RDI_EvalOp_Pick = 41,
RDI_EvalOp_Pop = 42,
RDI_EvalOp_Insert = 43,
RDI_EvalOp_COUNT = 44,
RDI_EvalOp_ConstU128 = 16,
RDI_EvalOp_ConstU256 = 17,
RDI_EvalOp_ConstU512 = 18,
RDI_EvalOp_Abs = 19,
RDI_EvalOp_Neg = 20,
RDI_EvalOp_Add = 21,
RDI_EvalOp_Sub = 22,
RDI_EvalOp_Mul = 23,
RDI_EvalOp_Div = 24,
RDI_EvalOp_Mod = 25,
RDI_EvalOp_LShift = 26,
RDI_EvalOp_RShift = 27,
RDI_EvalOp_BitAnd = 28,
RDI_EvalOp_BitOr = 29,
RDI_EvalOp_BitXor = 30,
RDI_EvalOp_BitNot = 31,
RDI_EvalOp_LogAnd = 32,
RDI_EvalOp_LogOr = 33,
RDI_EvalOp_LogNot = 34,
RDI_EvalOp_EqEq = 35,
RDI_EvalOp_NtEq = 36,
RDI_EvalOp_LsEq = 37,
RDI_EvalOp_GrEq = 38,
RDI_EvalOp_Less = 39,
RDI_EvalOp_Grtr = 40,
RDI_EvalOp_Trunc = 41,
RDI_EvalOp_TruncSigned = 42,
RDI_EvalOp_Convert = 43,
RDI_EvalOp_Pick = 44,
RDI_EvalOp_Pop = 45,
RDI_EvalOp_Insert = 46,
RDI_EvalOp_COUNT = 47,
} RDI_EvalOpEnum;
typedef RDI_U8 RDI_EvalTypeGroup;
@@ -854,6 +857,9 @@ X(ConstU8)\
X(ConstU16)\
X(ConstU32)\
X(ConstU64)\
X(ConstU128)\
X(ConstU256)\
X(ConstU512)\
X(Abs)\
X(Neg)\
X(Add)\
@@ -1351,6 +1357,6 @@ RDI_PROC RDI_U8 *rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConver
extern RDI_U16 rdi_section_element_size_table[37];
extern RDI_U8 rdi_section_is_required_table[37];
extern RDI_U8 rdi_eval_op_ctrlbits_table[45];
extern RDI_U8 rdi_eval_op_ctrlbits_table[48];
#endif // RDI_FORMAT_H
+33 -30
View File
@@ -62,7 +62,7 @@
"";
"// \"raddbg\0\0\"";
"#define RDI_MAGIC_CONSTANT 0x0000676264646172";
"#define RDI_ENCODING_VERSION 7";
"#define RDI_ENCODING_VERSION 8";
"";
"////////////////////////////////////////////////////////////////";
"//~ Format Types & Functions";
@@ -1245,35 +1245,38 @@ RDI_EvalOpTable:
{ConstU16 13 2 0 1}
{ConstU32 14 4 0 1}
{ConstU64 15 8 0 1}
{Abs 16 1 1 1}
{Neg 17 1 1 1}
{Add 18 1 2 1}
{Sub 19 1 2 1}
{Mul 20 1 2 1}
{Div 21 1 2 1}
{Mod 22 1 2 1}
{LShift 23 1 2 1}
{RShift 24 1 2 1}
{BitAnd 25 1 2 1}
{BitOr 26 1 2 1}
{BitXor 27 1 2 1}
{BitNot 28 1 1 1}
{LogAnd 29 1 2 1}
{LogOr 30 1 2 1}
{LogNot 31 1 1 1}
{EqEq 32 1 2 1}
{NtEq 33 1 2 1}
{LsEq 34 1 2 1}
{GrEq 35 1 2 1}
{Less 36 1 2 1}
{Grtr 37 1 2 1}
{Trunc 38 1 1 1}
{TruncSigned 39 1 1 1}
{Convert 40 2 1 1}
{Pick 41 1 0 1}
{Pop 42 0 1 0}
{Insert 43 1 0 0}
{COUNT 44 0 0 0}
{ConstU128 16 16 0 1}
{ConstU256 17 32 0 1}
{ConstU512 18 64 0 1}
{Abs 19 1 1 1}
{Neg 20 1 1 1}
{Add 21 1 2 1}
{Sub 22 1 2 1}
{Mul 23 1 2 1}
{Div 24 1 2 1}
{Mod 25 1 2 1}
{LShift 26 1 2 1}
{RShift 27 1 2 1}
{BitAnd 28 1 2 1}
{BitOr 29 1 2 1}
{BitXor 30 1 2 1}
{BitNot 31 1 1 1}
{LogAnd 32 1 2 1}
{LogOr 33 1 2 1}
{LogNot 34 1 1 1}
{EqEq 35 1 2 1}
{NtEq 36 1 2 1}
{LsEq 37 1 2 1}
{GrEq 38 1 2 1}
{Less 39 1 2 1}
{Grtr 40 1 2 1}
{Trunc 41 1 1 1}
{TruncSigned 42 1 1 1}
{Convert 43 2 1 1}
{Pick 44 1 0 1}
{Pop 45 0 1 0}
{Insert 46 1 0 0}
{COUNT 47 0 0 0}
}
// NOTE(rjf): "ck" -> "conversion kind, when converted to type group", used in square matrix form