aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-09-25 15:38:56 +0100
committergingerBill <bill@gingerbill.org>2021-09-25 15:38:56 +0100
commitfa0d58f96ea0d576cf4adbd77480cfd4ce0510c4 (patch)
tree6dcb43d5498b94bbacf647672d42dc24fb27787a /src
parentebc09d5e4ee956e2ffa7e18f9f0c57af6433c64b (diff)
Correct f64 -> u128/i128 generation
Diffstat (limited to 'src')
-rw-r--r--src/checker.cpp2
-rw-r--r--src/llvm_backend_expr.cpp2
-rw-r--r--src/types.cpp2
3 files changed, 5 insertions, 1 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index 8d85784fa..fd3de3552 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -1980,6 +1980,8 @@ void generate_minimum_dependency_set(Checker *c, Entity *start) {
str_lit("modti3"),
str_lit("divti3"),
str_lit("fixdfti"),
+ str_lit("fixunsdfti"),
+ str_lit("fixunsdfdi"),
str_lit("floattidf"),
str_lit("floattidf_unsigned"),
str_lit("truncsfhf2"),
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index b2ef6d0d0..0f05e9b45 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -1194,7 +1194,7 @@ lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) {
res = lb_emit_conv(p, value, platform_src_type);
res = lb_emit_conv(p, res, platform_dst_type);
if (is_type_different_to_arch_endianness(dst)) {
- res = lb_emit_byte_swap(p, res, t);
+ res = lb_emit_byte_swap(p, res, platform_dst_type);
}
return lb_emit_conv(p, res, t);
}
diff --git a/src/types.cpp b/src/types.cpp
index 568516007..97552240f 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -1518,6 +1518,7 @@ Type *integer_endian_type_to_platform_type(Type *t) {
case Basic_u32le: return t_u32;
case Basic_i64le: return t_i64;
case Basic_u64le: return t_u64;
+ case Basic_i128le: return t_i128;
case Basic_u128le: return t_u128;
case Basic_i16be: return t_i16;
@@ -1526,6 +1527,7 @@ 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_i128be: return t_i128;
case Basic_u128be: return t_u128;
case Basic_f16le: return t_f16;