mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-04 12:58:41 +00:00
reorganize generated & handwritten library (relocatable) rad debug info format files; separate from codebase-local tools for managing or internally including the libraries
This commit is contained in:
+155
-56
@@ -1,85 +1,174 @@
|
|||||||
// Copyright (c) 2024 Epic Games Tools
|
// Copyright (c) 2024 Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
// Functions
|
//~ RAD Debug Info, (R)AD(D)BG(I) Format Library
|
||||||
|
//
|
||||||
|
// Defines standard RDI debug information format types and
|
||||||
|
// functions.
|
||||||
|
|
||||||
|
#ifndef RDI_FORMAT_C
|
||||||
|
#define RDI_FORMAT_C
|
||||||
|
|
||||||
|
RDI_U8 rdi_eval_op_ctrlbits_table[45] =
|
||||||
|
{
|
||||||
|
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||||
|
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 1, 0),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 0, 0),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(4, 0, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(0, 1, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 0, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(4, 0, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(4, 0, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||||
|
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||||
|
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(1, 1, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 2, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 1, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(2, 1, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 0, 1),
|
||||||
|
RDI_EVAL_CTRLBITS(0, 1, 0),
|
||||||
|
RDI_EVAL_CTRLBITS(1, 0, 0),
|
||||||
|
RDI_EVAL_CTRLBITS(0, 0, 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
struct {RDI_EvalConversionKind dst_typegroups[RDI_EvalTypeGroup_COUNT];} rdi_eval_typegroup_conversion_kind_matrix[6] =
|
||||||
|
{
|
||||||
|
{{RDI_EvalConversionKind_OtherToOther, RDI_EvalConversionKind_FromOther, RDI_EvalConversionKind_FromOther, RDI_EvalConversionKind_FromOther, RDI_EvalConversionKind_FromOther}},
|
||||||
|
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal}},
|
||||||
|
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal}},
|
||||||
|
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Legal}},
|
||||||
|
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Noop}},
|
||||||
|
{{RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop}},
|
||||||
|
};
|
||||||
|
|
||||||
|
struct {RDI_U8 *str; RDI_U64 size;} rdi_eval_conversion_kind_message_string_table[6] =
|
||||||
|
{
|
||||||
|
{(RDI_U8 *)"Other", sizeof("Other")},
|
||||||
|
{(RDI_U8 *)"U", sizeof("U")},
|
||||||
|
{(RDI_U8 *)"S", sizeof("S")},
|
||||||
|
{(RDI_U8 *)"F32", sizeof("F32")},
|
||||||
|
{(RDI_U8 *)"F64", sizeof("F64")},
|
||||||
|
{(RDI_U8 *)"COUNT", sizeof("COUNT")},
|
||||||
|
};
|
||||||
|
|
||||||
RDI_PROC RDI_U64
|
RDI_PROC RDI_U64
|
||||||
rdi_hash(RDI_U8 *ptr, RDI_U64 size){
|
rdi_hash(RDI_U8 *ptr, RDI_U64 size)
|
||||||
|
{
|
||||||
RDI_U64 result = 5381;
|
RDI_U64 result = 5381;
|
||||||
RDI_U8 *opl = ptr + size;
|
RDI_U8 *opl = ptr + size;
|
||||||
for (; ptr < opl; ptr += 1){
|
for(;ptr < opl; ptr += 1)
|
||||||
|
{
|
||||||
result = ((result << 5) + result) + *ptr;
|
result = ((result << 5) + result) + *ptr;
|
||||||
}
|
}
|
||||||
return(result);
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
RDI_PROC RDI_U32
|
RDI_PROC RDI_U32
|
||||||
rdi_size_from_basic_type_kind(RDI_TypeKind kind){
|
rdi_size_from_basic_type_kind(RDI_TypeKind kind)
|
||||||
RDI_U32 result = 0;
|
{
|
||||||
switch (kind){
|
RDI_U32 result = 0;
|
||||||
#define X(N,C)
|
switch(kind)
|
||||||
#define XZ(N,C,Z) case C: result = Z; break;
|
{
|
||||||
#define Y(A,N)
|
default:{}break;
|
||||||
RDI_TypeKindXList(X,XZ,Y)
|
case RDI_TypeKind_Handle:{result = 0xFFFFFFFF;}break;
|
||||||
#undef X
|
case RDI_TypeKind_Char8:{result = 1;}break;
|
||||||
#undef XZ
|
case RDI_TypeKind_Char16:{result = 2;}break;
|
||||||
#undef Y
|
case RDI_TypeKind_Char32:{result = 4;}break;
|
||||||
}
|
case RDI_TypeKind_UChar8:{result = 1;}break;
|
||||||
return(result);
|
case RDI_TypeKind_UChar16:{result = 2;}break;
|
||||||
|
case RDI_TypeKind_UChar32:{result = 4;}break;
|
||||||
|
case RDI_TypeKind_U8:{result = 1;}break;
|
||||||
|
case RDI_TypeKind_U16:{result = 2;}break;
|
||||||
|
case RDI_TypeKind_U32:{result = 4;}break;
|
||||||
|
case RDI_TypeKind_U64:{result = 8;}break;
|
||||||
|
case RDI_TypeKind_U128:{result = 16;}break;
|
||||||
|
case RDI_TypeKind_U256:{result = 32;}break;
|
||||||
|
case RDI_TypeKind_U512:{result = 64;}break;
|
||||||
|
case RDI_TypeKind_S8:{result = 1;}break;
|
||||||
|
case RDI_TypeKind_S16:{result = 2;}break;
|
||||||
|
case RDI_TypeKind_S32:{result = 4;}break;
|
||||||
|
case RDI_TypeKind_S64:{result = 8;}break;
|
||||||
|
case RDI_TypeKind_S128:{result = 16;}break;
|
||||||
|
case RDI_TypeKind_S256:{result = 32;}break;
|
||||||
|
case RDI_TypeKind_S512:{result = 64;}break;
|
||||||
|
case RDI_TypeKind_Bool:{result = 1;}break;
|
||||||
|
case RDI_TypeKind_F16:{result = 2;}break;
|
||||||
|
case RDI_TypeKind_F32:{result = 4;}break;
|
||||||
|
case RDI_TypeKind_F32PP:{result = 4;}break;
|
||||||
|
case RDI_TypeKind_F48:{result = 6;}break;
|
||||||
|
case RDI_TypeKind_F64:{result = 8;}break;
|
||||||
|
case RDI_TypeKind_F80:{result = 10;}break;
|
||||||
|
case RDI_TypeKind_F128:{result = 16;}break;
|
||||||
|
case RDI_TypeKind_ComplexF32:{result = 8;}break;
|
||||||
|
case RDI_TypeKind_ComplexF64:{result = 16;}break;
|
||||||
|
case RDI_TypeKind_ComplexF80:{result = 20;}break;
|
||||||
|
case RDI_TypeKind_ComplexF128:{result = 32;}break;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
RDI_PROC RDI_U32
|
RDI_PROC RDI_U32
|
||||||
rdi_addr_size_from_arch(RDI_Arch arch){
|
rdi_addr_size_from_arch(RDI_Arch arch)
|
||||||
RDI_U32 result = 0;
|
{
|
||||||
switch (arch){
|
RDI_U32 result = 0;
|
||||||
#define X(N,C,Z) case C: result = Z; break;
|
switch(arch)
|
||||||
RDI_ArchXList(X)
|
{
|
||||||
#undef X
|
default:{}break;
|
||||||
}
|
case RDI_Arch_X86:{result = 4;}break;
|
||||||
return(result);
|
case RDI_Arch_X64:{result = 8;}break;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- eval helpers
|
|
||||||
|
|
||||||
RDI_PROC RDI_EvalConversionKind
|
RDI_PROC RDI_EvalConversionKind
|
||||||
rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out){
|
rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out)
|
||||||
RDI_EvalConversionKind result = 0;
|
{
|
||||||
switch (in + (out << 8)){
|
RDI_EvalConversionKind k = rdi_eval_typegroup_conversion_kind_matrix[in].dst_typegroups[out];
|
||||||
#define Y(i,o) case ((RDI_EvalTypeGroup_##i) + ((RDI_EvalTypeGroup_##o) << 8)):
|
return k;
|
||||||
#define Xb(c)
|
|
||||||
#define Xe(c) result = RDI_EvalConversionKind_##c; break;
|
|
||||||
RDI_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)
|
|
||||||
#undef Xe
|
|
||||||
#undef Xb
|
|
||||||
#undef Y
|
|
||||||
}
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
RDI_PROC RDI_U8*
|
|
||||||
rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind conversion_kind, RDI_U64 *lenout){
|
|
||||||
RDI_U8 *result = 0;
|
|
||||||
switch (conversion_kind){
|
|
||||||
#define X(N,msg) \
|
|
||||||
case RDI_EvalConversionKind_##N: result = (RDI_U8*)msg; *lenout = sizeof(msg) - 1; break;
|
|
||||||
RDI_EvalConversionKindXList(X)
|
|
||||||
#undef X
|
|
||||||
}
|
|
||||||
return(result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RDI_PROC RDI_S32
|
RDI_PROC RDI_S32
|
||||||
rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group){
|
rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group)
|
||||||
|
{
|
||||||
RDI_S32 result = 0;
|
RDI_S32 result = 0;
|
||||||
switch (op){
|
switch(op)
|
||||||
|
{
|
||||||
case RDI_EvalOp_Neg: case RDI_EvalOp_Add: case RDI_EvalOp_Sub:
|
case RDI_EvalOp_Neg: case RDI_EvalOp_Add: case RDI_EvalOp_Sub:
|
||||||
case RDI_EvalOp_Mul: case RDI_EvalOp_Div:
|
case RDI_EvalOp_Mul: case RDI_EvalOp_Div:
|
||||||
case RDI_EvalOp_EqEq:case RDI_EvalOp_NtEq:
|
case RDI_EvalOp_EqEq:case RDI_EvalOp_NtEq:
|
||||||
case RDI_EvalOp_LsEq:case RDI_EvalOp_GrEq:
|
case RDI_EvalOp_LsEq:case RDI_EvalOp_GrEq:
|
||||||
case RDI_EvalOp_Less:case RDI_EvalOp_Grtr:
|
case RDI_EvalOp_Less:case RDI_EvalOp_Grtr:
|
||||||
{
|
{
|
||||||
if (group != RDI_EvalTypeGroup_Other){
|
if(group != RDI_EvalTypeGroup_Other)
|
||||||
|
{
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
@@ -88,10 +177,20 @@ rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group){
|
|||||||
case RDI_EvalOp_BitOr:case RDI_EvalOp_LogNot:case RDI_EvalOp_LogAnd:
|
case RDI_EvalOp_BitOr:case RDI_EvalOp_LogNot:case RDI_EvalOp_LogAnd:
|
||||||
case RDI_EvalOp_LogOr:
|
case RDI_EvalOp_LogOr:
|
||||||
{
|
{
|
||||||
if (group == RDI_EvalTypeGroup_S || group == RDI_EvalTypeGroup_U){
|
if(group == RDI_EvalTypeGroup_S || group == RDI_EvalTypeGroup_U)
|
||||||
|
{
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
}
|
}
|
||||||
return(result);
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RDI_PROC RDI_U8 *
|
||||||
|
rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out)
|
||||||
|
{
|
||||||
|
*size_out = rdi_eval_conversion_kind_message_string_table[kind].size;
|
||||||
|
return rdi_eval_conversion_kind_message_string_table[kind].str;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // RDI_FORMAT_C
|
||||||
|
|||||||
+903
-821
File diff suppressed because it is too large
Load Diff
@@ -515,12 +515,17 @@ int main(int argument_count, char **arguments)
|
|||||||
for(MG_LayerNode *n = slot->first; n != 0; n = n->next)
|
for(MG_LayerNode *n = slot->first; n != 0; n = n->next)
|
||||||
{
|
{
|
||||||
MG_Layer *layer = &n->v;
|
MG_Layer *layer = &n->v;
|
||||||
String8 gen_folder = str8_lit("generated");
|
String8 layer_generated_folder = {0};
|
||||||
if(layer->gen_folder_name.size != 0)
|
if(layer->gen_folder_name.size != 0)
|
||||||
{
|
{
|
||||||
gen_folder = layer->gen_folder_name;
|
String8 gen_folder = layer->gen_folder_name;
|
||||||
|
layer_generated_folder = push_str8f(mg_arena, "%S/%S", code_dir_path, gen_folder);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String8 gen_folder = str8_lit("generated");
|
||||||
|
layer_generated_folder = push_str8f(mg_arena, "%S/%S/%S", code_dir_path, layer->key, gen_folder);
|
||||||
}
|
}
|
||||||
String8 layer_generated_folder = push_str8f(mg_arena, "%S/%S/%S", code_dir_path, layer->key, gen_folder);
|
|
||||||
if(os_make_directory(layer_generated_folder))
|
if(os_make_directory(layer_generated_folder))
|
||||||
{
|
{
|
||||||
String8List layer_key_parts = str8_split_path(mg_arena, layer->key);
|
String8List layer_key_parts = str8_split_path(mg_arena, layer->key);
|
||||||
|
|||||||
@@ -1,196 +0,0 @@
|
|||||||
// Copyright (c) 2024 Epic Games Tools
|
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
|
||||||
//~ RAD Debug Info, (R)AD(D)BG(I) Format Library
|
|
||||||
//
|
|
||||||
// Defines standard RDI debug information format types and
|
|
||||||
// functions.
|
|
||||||
|
|
||||||
#ifndef RDI_FORMAT_C
|
|
||||||
#define RDI_FORMAT_C
|
|
||||||
|
|
||||||
RDI_U8 rdi_eval_op_ctrlbits_table[45] =
|
|
||||||
{
|
|
||||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
|
||||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 1, 0),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 0, 0),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(4, 0, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(0, 1, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 0, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(4, 0, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(4, 0, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
|
||||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
|
||||||
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(1, 1, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 2, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 1, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(2, 1, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 0, 1),
|
|
||||||
RDI_EVAL_CTRLBITS(0, 1, 0),
|
|
||||||
RDI_EVAL_CTRLBITS(1, 0, 0),
|
|
||||||
RDI_EVAL_CTRLBITS(0, 0, 0),
|
|
||||||
};
|
|
||||||
|
|
||||||
struct {RDI_EvalConversionKind dst_typegroups[RDI_EvalTypeGroup_COUNT];} rdi_eval_typegroup_conversion_kind_matrix[6] =
|
|
||||||
{
|
|
||||||
{{RDI_EvalConversionKind_OtherToOther, RDI_EvalConversionKind_FromOther, RDI_EvalConversionKind_FromOther, RDI_EvalConversionKind_FromOther, RDI_EvalConversionKind_FromOther}},
|
|
||||||
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal}},
|
|
||||||
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal}},
|
|
||||||
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Legal}},
|
|
||||||
{{RDI_EvalConversionKind_ToOther, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Legal, RDI_EvalConversionKind_Noop}},
|
|
||||||
{{RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop, RDI_EvalConversionKind_Noop}},
|
|
||||||
};
|
|
||||||
|
|
||||||
struct {RDI_U8 *str; RDI_U64 size;} rdi_eval_conversion_kind_message_string_table[6] =
|
|
||||||
{
|
|
||||||
{(RDI_U8 *)"Other", sizeof("Other")},
|
|
||||||
{(RDI_U8 *)"U", sizeof("U")},
|
|
||||||
{(RDI_U8 *)"S", sizeof("S")},
|
|
||||||
{(RDI_U8 *)"F32", sizeof("F32")},
|
|
||||||
{(RDI_U8 *)"F64", sizeof("F64")},
|
|
||||||
{(RDI_U8 *)"COUNT", sizeof("COUNT")},
|
|
||||||
};
|
|
||||||
|
|
||||||
RDI_PROC RDI_U64
|
|
||||||
rdi_hash(RDI_U8 *ptr, RDI_U64 size)
|
|
||||||
{
|
|
||||||
RDI_U64 result = 5381;
|
|
||||||
RDI_U8 *opl = ptr + size;
|
|
||||||
for(;ptr < opl; ptr += 1)
|
|
||||||
{
|
|
||||||
result = ((result << 5) + result) + *ptr;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
RDI_PROC RDI_U32
|
|
||||||
rdi_size_from_basic_type_kind(RDI_TypeKind kind)
|
|
||||||
{
|
|
||||||
RDI_U32 result = 0;
|
|
||||||
switch(kind)
|
|
||||||
{
|
|
||||||
default:{}break;
|
|
||||||
case RDI_TypeKind_Handle:{result = 0xFFFFFFFF;}break;
|
|
||||||
case RDI_TypeKind_Char8:{result = 1;}break;
|
|
||||||
case RDI_TypeKind_Char16:{result = 2;}break;
|
|
||||||
case RDI_TypeKind_Char32:{result = 4;}break;
|
|
||||||
case RDI_TypeKind_UChar8:{result = 1;}break;
|
|
||||||
case RDI_TypeKind_UChar16:{result = 2;}break;
|
|
||||||
case RDI_TypeKind_UChar32:{result = 4;}break;
|
|
||||||
case RDI_TypeKind_U8:{result = 1;}break;
|
|
||||||
case RDI_TypeKind_U16:{result = 2;}break;
|
|
||||||
case RDI_TypeKind_U32:{result = 4;}break;
|
|
||||||
case RDI_TypeKind_U64:{result = 8;}break;
|
|
||||||
case RDI_TypeKind_U128:{result = 16;}break;
|
|
||||||
case RDI_TypeKind_U256:{result = 32;}break;
|
|
||||||
case RDI_TypeKind_U512:{result = 64;}break;
|
|
||||||
case RDI_TypeKind_S8:{result = 1;}break;
|
|
||||||
case RDI_TypeKind_S16:{result = 2;}break;
|
|
||||||
case RDI_TypeKind_S32:{result = 4;}break;
|
|
||||||
case RDI_TypeKind_S64:{result = 8;}break;
|
|
||||||
case RDI_TypeKind_S128:{result = 16;}break;
|
|
||||||
case RDI_TypeKind_S256:{result = 32;}break;
|
|
||||||
case RDI_TypeKind_S512:{result = 64;}break;
|
|
||||||
case RDI_TypeKind_Bool:{result = 1;}break;
|
|
||||||
case RDI_TypeKind_F16:{result = 2;}break;
|
|
||||||
case RDI_TypeKind_F32:{result = 4;}break;
|
|
||||||
case RDI_TypeKind_F32PP:{result = 4;}break;
|
|
||||||
case RDI_TypeKind_F48:{result = 6;}break;
|
|
||||||
case RDI_TypeKind_F64:{result = 8;}break;
|
|
||||||
case RDI_TypeKind_F80:{result = 10;}break;
|
|
||||||
case RDI_TypeKind_F128:{result = 16;}break;
|
|
||||||
case RDI_TypeKind_ComplexF32:{result = 8;}break;
|
|
||||||
case RDI_TypeKind_ComplexF64:{result = 16;}break;
|
|
||||||
case RDI_TypeKind_ComplexF80:{result = 20;}break;
|
|
||||||
case RDI_TypeKind_ComplexF128:{result = 32;}break;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
RDI_PROC RDI_U32
|
|
||||||
rdi_addr_size_from_arch(RDI_Arch arch)
|
|
||||||
{
|
|
||||||
RDI_U32 result = 0;
|
|
||||||
switch(arch)
|
|
||||||
{
|
|
||||||
default:{}break;
|
|
||||||
case RDI_Arch_X86:{result = 4;}break;
|
|
||||||
case RDI_Arch_X64:{result = 8;}break;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
RDI_PROC RDI_EvalConversionKind
|
|
||||||
rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out)
|
|
||||||
{
|
|
||||||
RDI_EvalConversionKind k = rdi_eval_typegroup_conversion_kind_matrix[in].dst_typegroups[out];
|
|
||||||
return k;
|
|
||||||
}
|
|
||||||
|
|
||||||
RDI_PROC RDI_S32
|
|
||||||
rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group)
|
|
||||||
{
|
|
||||||
RDI_S32 result = 0;
|
|
||||||
switch(op)
|
|
||||||
{
|
|
||||||
case RDI_EvalOp_Neg: case RDI_EvalOp_Add: case RDI_EvalOp_Sub:
|
|
||||||
case RDI_EvalOp_Mul: case RDI_EvalOp_Div:
|
|
||||||
case RDI_EvalOp_EqEq:case RDI_EvalOp_NtEq:
|
|
||||||
case RDI_EvalOp_LsEq:case RDI_EvalOp_GrEq:
|
|
||||||
case RDI_EvalOp_Less:case RDI_EvalOp_Grtr:
|
|
||||||
{
|
|
||||||
if(group != RDI_EvalTypeGroup_Other)
|
|
||||||
{
|
|
||||||
result = 1;
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
case RDI_EvalOp_Mod:case RDI_EvalOp_LShift:case RDI_EvalOp_RShift:
|
|
||||||
case RDI_EvalOp_BitNot:case RDI_EvalOp_BitAnd:case RDI_EvalOp_BitXor:
|
|
||||||
case RDI_EvalOp_BitOr:case RDI_EvalOp_LogNot:case RDI_EvalOp_LogAnd:
|
|
||||||
case RDI_EvalOp_LogOr:
|
|
||||||
{
|
|
||||||
if(group == RDI_EvalTypeGroup_S || group == RDI_EvalTypeGroup_U)
|
|
||||||
{
|
|
||||||
result = 1;
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
RDI_PROC RDI_U8 *
|
|
||||||
rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out)
|
|
||||||
{
|
|
||||||
*size_out = rdi_eval_conversion_kind_message_string_table[kind].size;
|
|
||||||
return rdi_eval_conversion_kind_message_string_table[kind].str;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // RDI_FORMAT_C
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@
|
|||||||
//~ rjf: Generated File Format
|
//~ rjf: Generated File Format
|
||||||
|
|
||||||
@option library
|
@option library
|
||||||
@gen_folder "lib"
|
@gen_folder "lib_rdi_format"
|
||||||
@h_name "rdi_format.h"
|
@h_name "rdi_format.h"
|
||||||
@c_name "rdi_format.c"
|
@c_name "rdi_format.c"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user