added _Decimal* and __bf16 types to RDI and DWARF converter

This commit is contained in:
Nikita Smith
2026-02-18 21:25:35 -08:00
parent f0c3ea7678
commit 338d2177ff
5 changed files with 89 additions and 59 deletions
+8
View File
@@ -187,6 +187,7 @@ case RDI_TypeKind_S128: {result = (RDI_U8*)"S128"; *size_out = sizeof("S128")-1;
case RDI_TypeKind_S256: {result = (RDI_U8*)"S256"; *size_out = sizeof("S256")-1;}break; case RDI_TypeKind_S256: {result = (RDI_U8*)"S256"; *size_out = sizeof("S256")-1;}break;
case RDI_TypeKind_S512: {result = (RDI_U8*)"S512"; *size_out = sizeof("S512")-1;}break; case RDI_TypeKind_S512: {result = (RDI_U8*)"S512"; *size_out = sizeof("S512")-1;}break;
case RDI_TypeKind_Bool: {result = (RDI_U8*)"Bool"; *size_out = sizeof("Bool")-1;}break; case RDI_TypeKind_Bool: {result = (RDI_U8*)"Bool"; *size_out = sizeof("Bool")-1;}break;
case RDI_TypeKind_BF16: {result = (RDI_U8*)"BF16"; *size_out = sizeof("BF16")-1;}break;
case RDI_TypeKind_F16: {result = (RDI_U8*)"F16"; *size_out = sizeof("F16")-1;}break; case RDI_TypeKind_F16: {result = (RDI_U8*)"F16"; *size_out = sizeof("F16")-1;}break;
case RDI_TypeKind_F32: {result = (RDI_U8*)"F32"; *size_out = sizeof("F32")-1;}break; case RDI_TypeKind_F32: {result = (RDI_U8*)"F32"; *size_out = sizeof("F32")-1;}break;
case RDI_TypeKind_F32PP: {result = (RDI_U8*)"F32PP"; *size_out = sizeof("F32PP")-1;}break; case RDI_TypeKind_F32PP: {result = (RDI_U8*)"F32PP"; *size_out = sizeof("F32PP")-1;}break;
@@ -199,6 +200,9 @@ case RDI_TypeKind_ComplexF32: {result = (RDI_U8*)"ComplexF32"; *size_out = sizeo
case RDI_TypeKind_ComplexF64: {result = (RDI_U8*)"ComplexF64"; *size_out = sizeof("ComplexF64")-1;}break; case RDI_TypeKind_ComplexF64: {result = (RDI_U8*)"ComplexF64"; *size_out = sizeof("ComplexF64")-1;}break;
case RDI_TypeKind_ComplexF80: {result = (RDI_U8*)"ComplexF80"; *size_out = sizeof("ComplexF80")-1;}break; case RDI_TypeKind_ComplexF80: {result = (RDI_U8*)"ComplexF80"; *size_out = sizeof("ComplexF80")-1;}break;
case RDI_TypeKind_ComplexF128: {result = (RDI_U8*)"ComplexF128"; *size_out = sizeof("ComplexF128")-1;}break; case RDI_TypeKind_ComplexF128: {result = (RDI_U8*)"ComplexF128"; *size_out = sizeof("ComplexF128")-1;}break;
case RDI_TypeKind_Decimal32: {result = (RDI_U8*)"Decimal32"; *size_out = sizeof("Decimal32")-1;}break;
case RDI_TypeKind_Decimal64: {result = (RDI_U8*)"Decimal64"; *size_out = sizeof("Decimal64")-1;}break;
case RDI_TypeKind_Decimal128: {result = (RDI_U8*)"Decimal128"; *size_out = sizeof("Decimal128")-1;}break;
case RDI_TypeKind_Modifier: {result = (RDI_U8*)"Modifier"; *size_out = sizeof("Modifier")-1;}break; case RDI_TypeKind_Modifier: {result = (RDI_U8*)"Modifier"; *size_out = sizeof("Modifier")-1;}break;
case RDI_TypeKind_Ptr: {result = (RDI_U8*)"Ptr"; *size_out = sizeof("Ptr")-1;}break; case RDI_TypeKind_Ptr: {result = (RDI_U8*)"Ptr"; *size_out = sizeof("Ptr")-1;}break;
case RDI_TypeKind_LRef: {result = (RDI_U8*)"LRef"; *size_out = sizeof("LRef")-1;}break; case RDI_TypeKind_LRef: {result = (RDI_U8*)"LRef"; *size_out = sizeof("LRef")-1;}break;
@@ -253,6 +257,7 @@ case RDI_TypeKind_S128:{result = 16;}break;
case RDI_TypeKind_S256:{result = 32;}break; case RDI_TypeKind_S256:{result = 32;}break;
case RDI_TypeKind_S512:{result = 64;}break; case RDI_TypeKind_S512:{result = 64;}break;
case RDI_TypeKind_Bool:{result = 1;}break; case RDI_TypeKind_Bool:{result = 1;}break;
case RDI_TypeKind_BF16:{result = 2;}break;
case RDI_TypeKind_F16:{result = 2;}break; case RDI_TypeKind_F16:{result = 2;}break;
case RDI_TypeKind_F32:{result = 4;}break; case RDI_TypeKind_F32:{result = 4;}break;
case RDI_TypeKind_F32PP:{result = 4;}break; case RDI_TypeKind_F32PP:{result = 4;}break;
@@ -265,6 +270,9 @@ case RDI_TypeKind_ComplexF32:{result = 8;}break;
case RDI_TypeKind_ComplexF64:{result = 16;}break; case RDI_TypeKind_ComplexF64:{result = 16;}break;
case RDI_TypeKind_ComplexF80:{result = 20;}break; case RDI_TypeKind_ComplexF80:{result = 20;}break;
case RDI_TypeKind_ComplexF128:{result = 32;}break; case RDI_TypeKind_ComplexF128:{result = 32;}break;
case RDI_TypeKind_Decimal32:{result = 4;}break;
case RDI_TypeKind_Decimal64:{result = 8;}break;
case RDI_TypeKind_Decimal128:{result = 16;}break;
} }
return result; return result;
} }
+21 -13
View File
@@ -298,18 +298,22 @@ RDI_TypeKind_S128 = 0x0015,
RDI_TypeKind_S256 = 0x0016, RDI_TypeKind_S256 = 0x0016,
RDI_TypeKind_S512 = 0x0017, RDI_TypeKind_S512 = 0x0017,
RDI_TypeKind_Bool = 0x0018, RDI_TypeKind_Bool = 0x0018,
RDI_TypeKind_F16 = 0x0019, RDI_TypeKind_BF16 = 0x0019,
RDI_TypeKind_F32 = 0x001A, RDI_TypeKind_F16 = 0x001A,
RDI_TypeKind_F32PP = 0x001B, RDI_TypeKind_F32 = 0x001B,
RDI_TypeKind_F48 = 0x001C, RDI_TypeKind_F32PP = 0x001C,
RDI_TypeKind_F64 = 0x001D, RDI_TypeKind_F48 = 0x001D,
RDI_TypeKind_F80 = 0x001E, RDI_TypeKind_F64 = 0x001E,
RDI_TypeKind_F96 = 0x001F, RDI_TypeKind_F80 = 0x001F,
RDI_TypeKind_F128 = 0x0020, RDI_TypeKind_F96 = 0x0020,
RDI_TypeKind_ComplexF32 = 0x0021, RDI_TypeKind_F128 = 0x0021,
RDI_TypeKind_ComplexF64 = 0x0022, RDI_TypeKind_ComplexF32 = 0x0022,
RDI_TypeKind_ComplexF80 = 0x0023, RDI_TypeKind_ComplexF64 = 0x0023,
RDI_TypeKind_ComplexF128 = 0x0024, RDI_TypeKind_ComplexF80 = 0x0024,
RDI_TypeKind_ComplexF128 = 0x0025,
RDI_TypeKind_Decimal32 = 0x0026,
RDI_TypeKind_Decimal64 = 0x0027,
RDI_TypeKind_Decimal128 = 0x0028,
RDI_TypeKind_Modifier = 0x1000, RDI_TypeKind_Modifier = 0x1000,
RDI_TypeKind_Ptr = 0x1001, RDI_TypeKind_Ptr = 0x1001,
RDI_TypeKind_LRef = 0x1002, RDI_TypeKind_LRef = 0x1002,
@@ -331,7 +335,7 @@ RDI_TypeKind_Bitfield = 0xF000,
RDI_TypeKind_Variadic = 0xF001, RDI_TypeKind_Variadic = 0xF001,
RDI_TypeKind_Count = 0xF002, RDI_TypeKind_Count = 0xF002,
RDI_TypeKind_FirstBuiltIn = RDI_TypeKind_Void, RDI_TypeKind_FirstBuiltIn = RDI_TypeKind_Void,
RDI_TypeKind_LastBuiltIn = RDI_TypeKind_ComplexF128, RDI_TypeKind_LastBuiltIn = RDI_TypeKind_Decimal128,
RDI_TypeKind_FirstConstructed = RDI_TypeKind_Modifier, RDI_TypeKind_FirstConstructed = RDI_TypeKind_Modifier,
RDI_TypeKind_LastConstructed = RDI_TypeKind_MemberPtr, RDI_TypeKind_LastConstructed = RDI_TypeKind_MemberPtr,
RDI_TypeKind_FirstUserDefined = RDI_TypeKind_Struct, RDI_TypeKind_FirstUserDefined = RDI_TypeKind_Struct,
@@ -770,6 +774,7 @@ X(S128)\
X(S256)\ X(S256)\
X(S512)\ X(S512)\
X(Bool)\ X(Bool)\
X(BF16)\
X(F16)\ X(F16)\
X(F32)\ X(F32)\
X(F32PP)\ X(F32PP)\
@@ -782,6 +787,9 @@ X(ComplexF32)\
X(ComplexF64)\ X(ComplexF64)\
X(ComplexF80)\ X(ComplexF80)\
X(ComplexF128)\ X(ComplexF128)\
X(Decimal32)\
X(Decimal64)\
X(Decimal128)\
X(Modifier)\ X(Modifier)\
X(Ptr)\ X(Ptr)\
X(LRef)\ X(LRef)\
+16 -12
View File
@@ -705,18 +705,22 @@ RDI_TypeKindTable:
{S256 0x0016 32 } {S256 0x0016 32 }
{S512 0x0017 64 } {S512 0x0017 64 }
{Bool 0x0018 1 } {Bool 0x0018 1 }
{F16 0x0019 2 } {BF16 0x0019 2 }
{F32 0x001A 4 } {F16 0x001A 2 }
{F32PP 0x001B 4 } {F32 0x001B 4 }
{F48 0x001C 6 } {F32PP 0x001C 4 }
{F64 0x001D 8 } {F48 0x001D 6 }
{F80 0x001E 10 } {F64 0x001E 8 }
{F96 0x001F 12 } {F80 0x001F 10 }
{F128 0x0020 16 } {F96 0x0020 12 }
{ComplexF32 0x0021 8 } {F128 0x0021 16 }
{ComplexF64 0x0022 16 } {ComplexF32 0x0022 8 }
{ComplexF80 0x0023 20 } {ComplexF64 0x0023 16 }
{ComplexF128 0x0024 32 LastBuiltIn } {ComplexF80 0x0024 20 }
{ComplexF128 0x0025 32 }
{Decimal32 0x0026 4 }
{Decimal64 0x0027 8 }
{Decimal128 0x0028 16 LastBuiltIn }
//- //-
{Modifier 0x1000 0 FirstConstructed } {Modifier 0x1000 0 FirstConstructed }
{Ptr 0x1001 0 } {Ptr 0x1001 0 }
+9 -4
View File
@@ -1775,7 +1775,7 @@ d2r_convert_types(Arena *arena,
} else if (str8_match(name, str8_lit("_Float16"), 0)) { } else if (str8_match(name, str8_lit("_Float16"), 0)) {
kind = RDI_TypeKind_F16; kind = RDI_TypeKind_F16;
} else if (str8_match(name, str8_lit("__bf16"), 0)) { } else if (str8_match(name, str8_lit("__bf16"), 0)) {
NotImplemented; kind = RDI_TypeKind_BF16;
} }
if (kind != RDI_TypeKind_NULL) { break; } if (kind != RDI_TypeKind_NULL) { break; }
} }
@@ -1818,6 +1818,14 @@ d2r_convert_types(Arena *arena,
default: log_user_errorf("unexpected size"); break; default: log_user_errorf("unexpected size"); break;
} }
} break; } break;
case DW_ATE_DecimalFloat: {
switch (byte_size) {
case 4: kind = RDI_TypeKind_Decimal32; break;
case 8: kind = RDI_TypeKind_Decimal64; break;
case 16: kind = RDI_TypeKind_Decimal128; break;
default: log_user_errorf("unexpected size"); break;
}
} break;
case DW_ATE_ImaginaryFloat: { case DW_ATE_ImaginaryFloat: {
NotImplemented; NotImplemented;
} break; } break;
@@ -1836,9 +1844,6 @@ d2r_convert_types(Arena *arena,
case DW_ATE_UnsignedFixed: { case DW_ATE_UnsignedFixed: {
NotImplemented; NotImplemented;
} break; } break;
case DW_ATE_DecimalFloat: {
NotImplemented;
} break;
case DW_ATE_Ucs: { case DW_ATE_Ucs: {
NotImplemented; NotImplemented;
} break; } break;
+35 -30
View File
@@ -70,33 +70,36 @@ T_BeginTest(d2r_types)
dw_writer_push_attrib_enum(writer, DW_AttribKind_Encoding, DW_ATE_##e); \ dw_writer_push_attrib_enum(writer, DW_AttribKind_Encoding, DW_ATE_##e); \
dw_writer_push_attrib_stringf(writer, DW_AttribKind_Name, n); \ dw_writer_push_attrib_stringf(writer, DW_AttribKind_Name, n); \
dw_writer_tag_end(writer); dw_writer_tag_end(writer);
DeclBaseType(char_type, "char", SignedChar, 1); DeclBaseType(char_type, "char", SignedChar, 1);
DeclBaseType(unsigned_char_type, "unsigned char", UnsignedChar, 1); DeclBaseType(unsigned_char_type, "unsigned char", UnsignedChar, 1);
DeclBaseType(char8_type, "char8_t", Utf, 1); DeclBaseType(char8_type, "char8_t", Utf, 1);
DeclBaseType(char16_type, "char16_t", Utf, 2); DeclBaseType(char16_type, "char16_t", Utf, 2);
DeclBaseType(char32_type, "char32_t", Utf, 4); DeclBaseType(char32_type, "char32_t", Utf, 4);
DeclBaseType(wchar_type, "wchar_t", Signed, 4); DeclBaseType(wchar_type, "wchar_t", Signed, 4);
DeclBaseType(bool_type, "_Bool", Boolean, 1); DeclBaseType(bool_type, "_Bool", Boolean, 1);
DeclBaseType(short_type, "short", Signed, 2); DeclBaseType(short_type, "short", Signed, 2);
DeclBaseType(unsigned_short_type, "unsigned short", Unsigned, 2); DeclBaseType(unsigned_short_type, "unsigned short", Unsigned, 2);
DeclBaseType(short_unsigned_int_type, "short unsigned int", Unsigned, 2); DeclBaseType(short_unsigned_int_type, "short unsigned int", Unsigned, 2);
DeclBaseType(short_int_type, "short int", Signed, 2); DeclBaseType(short_int_type, "short int", Signed, 2);
DeclBaseType(unsigned_int_type, "unsigned int", Unsigned, 4); DeclBaseType(unsigned_int_type, "unsigned int", Unsigned, 4);
DeclBaseType(int_type, "int", Signed, 4); DeclBaseType(int_type, "int", Signed, 4);
DeclBaseType(long_int_type, "long int", Signed, 8); DeclBaseType(long_int_type, "long int", Signed, 8);
DeclBaseType(long_unsigned_int_type, "long unsigned int", Unsigned, 8); DeclBaseType(long_unsigned_int_type, "long unsigned int", Unsigned, 8);
DeclBaseType(long_long_int_type, "long long int", Signed, 8); DeclBaseType(long_long_int_type, "long long int", Signed, 8);
DeclBaseType(long_long_unsigned_int, "long long unsigned int", Unsigned, 8); DeclBaseType(long_long_unsigned_int, "long long unsigned int", Unsigned, 8);
DeclBaseType(float_type, "float", Float, 4); DeclBaseType(float_type, "float", Float, 4);
DeclBaseType(double_type, "double", Float, 8); DeclBaseType(double_type, "double", Float, 8);
DeclBaseType(long_double_type, "long double", Float, 16); DeclBaseType(long_double_type, "long double", Float, 16);
DeclBaseType(float16_type, "_Float16", Float, 2); DeclBaseType(float16_type, "_Float16", Float, 2);
DeclBaseType(float80_type, "__float80", Float, 16); DeclBaseType(bfloat16_type, "__bf16", Float, 2);
DeclBaseType(float128_type, "_float128", Float, 16); DeclBaseType(float80_type, "__float80", Float, 16);
DeclBaseType(complex_float, "complex float", ComplexFloat, 8); DeclBaseType(float128_type, "_float128", Float, 16);
DeclBaseType(complex_doulbe, "complex double", ComplexFloat, 16); DeclBaseType(complex_float_type, "complex float", ComplexFloat, 8);
DeclBaseType(complex_long_double, "complex long double", ComplexFloat, 32); DeclBaseType(complex_doulbe_type, "complex double", ComplexFloat, 16);
//DeclBaseType("__bf16", Float, 2); DeclBaseType(complex_long_double_type, "complex long double", ComplexFloat, 32);
DeclBaseType(decimal32_type, "_Decimal32", DecimalFloat, 4);
DeclBaseType(decimal64_type, "_Decimal64", DecimalFloat, 8);
DeclBaseType(decimal128_type, "_Decimal128", DecimalFloat, 16);
#undef DeclBaseType #undef DeclBaseType
#define DeclStdint(n, a) \ #define DeclStdint(n, a) \
@@ -160,16 +163,18 @@ T_BeginTest(d2r_types)
TestBuiltinType("double", 8, F64); TestBuiltinType("double", 8, F64);
TestBuiltinType("long double", 16, F128); TestBuiltinType("long double", 16, F128);
TestBuiltinType("_Float16", 2, F16); TestBuiltinType("_Float16", 2, F16);
TestBuiltinType("__bf16", 2, BF16);
TestBuiltinType("__float80", 16, F80); TestBuiltinType("__float80", 16, F80);
TestBuiltinType("_float128", 16, F128); TestBuiltinType("_float128", 16, F128);
TestBuiltinType("complex float", 8, ComplexF32); TestBuiltinType("complex float", 8, ComplexF32);
TestBuiltinType("complex double", 16, ComplexF64); TestBuiltinType("complex double", 16, ComplexF64);
TestBuiltinType("complex long double", 32, ComplexF128); TestBuiltinType("complex long double", 32, ComplexF128);
// TODO: bfloat16 TestBuiltinType("_Decimal32", 4, Decimal32);
//TestBuiltinType("__bf16", 2, BF16); TestBuiltinType("_Decimal64", 8, Decimal64);
TestBuiltinType("_Decimal128", 16, Decimal128);
#undef TestBuiltinType #undef TestBuiltinType
#define TestStdint(n, s, t) \ #define TestStdint(n, s, t) \
do { \ do { \
RDI_TypeNode *td = d2rt_type_from_name(rdi, &types_map, n); \ RDI_TypeNode *td = d2rt_type_from_name(rdi, &types_map, n); \
T_Ok(td); \ T_Ok(td); \