mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-22 11:44:59 -07:00
begin sketching out eval paths for small string operations
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
{
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -85,7 +85,6 @@ typedef enum E_Mode
|
||||
E_Mode_Value,
|
||||
E_Mode_Addr,
|
||||
E_Mode_Reg,
|
||||
E_Mode_InlineData,
|
||||
}
|
||||
E_Mode;
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user