diff options
| author | gingerBill <bill@gingerbill.org> | 2020-04-11 21:34:55 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-04-11 21:34:55 +0100 |
| commit | 90593fe6ae1a66ea5037140d14c7666fd073894c (patch) | |
| tree | 9afa3504eed1addf0e1ef5f8e76dbd7a25dfacdc /src/types.cpp | |
| parent | 16b4178b8a9bb132e4b2361b95b53f791162a445 (diff) | |
Endian specific floating point types (e.g. f32be)
Diffstat (limited to 'src/types.cpp')
| -rw-r--r-- | src/types.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/types.cpp b/src/types.cpp index 2ab0897da..52db2ee44 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -64,6 +64,12 @@ enum BasicKind { Basic_i128be, Basic_u128be, + Basic_f32le, + Basic_f64le, + + Basic_f32be, + Basic_f64be, + // Untyped types Basic_UntypedBool, Basic_UntypedInteger, @@ -449,6 +455,12 @@ gb_global Type basic_types[] = { {Type_Basic, {Basic_i128be, BasicFlag_Integer | BasicFlag_EndianBig, 16, STR_LIT("i128be")}}, {Type_Basic, {Basic_u128be, BasicFlag_Integer | BasicFlag_Unsigned | BasicFlag_EndianBig, 16, STR_LIT("u128be")}}, + {Type_Basic, {Basic_f32le, BasicFlag_Float | BasicFlag_EndianLittle, 4, STR_LIT("f32le")}}, + {Type_Basic, {Basic_f64le, BasicFlag_Float | BasicFlag_EndianLittle, 8, STR_LIT("f64le")}}, + + {Type_Basic, {Basic_f32be, BasicFlag_Float | BasicFlag_EndianBig, 4, STR_LIT("f32be")}}, + {Type_Basic, {Basic_f64be, BasicFlag_Float | BasicFlag_EndianBig, 8, STR_LIT("f64be")}}, + // Untyped types {Type_Basic, {Basic_UntypedBool, BasicFlag_Boolean | BasicFlag_Untyped, 0, STR_LIT("untyped bool")}}, {Type_Basic, {Basic_UntypedInteger, BasicFlag_Integer | BasicFlag_Untyped, 0, STR_LIT("untyped integer")}}, @@ -1316,6 +1328,11 @@ bool is_type_endian_little(Type *t) { return is_type_integer_endian_little(t); } +bool types_have_same_internal_endian(Type *a, Type *b) { + return is_type_endian_little(a) == is_type_endian_little(b); +} + + bool is_type_dereferenceable(Type *t) { if (is_type_rawptr(t)) { return false; @@ -1357,6 +1374,11 @@ Type *integer_endian_type_to_platform_type(Type *t) { case Basic_u32be: return t_u32; case Basic_i64be: return t_i64; case Basic_u64be: return t_u64; + + case Basic_f32le: return t_f32; + case Basic_f32be: return t_f32; + case Basic_f64le: return t_f64; + case Basic_f64be: return t_f64; } return t; |