From 90593fe6ae1a66ea5037140d14c7666fd073894c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 11 Apr 2020 21:34:55 +0100 Subject: Endian specific floating point types (e.g. f32be) --- src/types.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/types.cpp') 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; -- cgit v1.2.3