From 0ccf103160f0aaf8854306979efdee6a02562236 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 27 Mar 2021 12:48:29 +0000 Subject: Fix byte swapping for endian specific types in `-llvm-api` --- src/llvm_backend.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/llvm_backend.cpp') diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index e7ba224b3..e199b01a0 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -6886,6 +6886,17 @@ lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) { i64 sz = type_size_of(default_type(src)); i64 dz = type_size_of(default_type(dst)); + + if (sz == dz) { + if (dz > 1 && !types_have_same_internal_endian(src, dst)) { + return lb_emit_byte_swap(p, value, t); + } + lbValue res = {}; + res.value = value.value; + res.type = t; + return res; + } + if (sz > 1 && is_type_different_to_arch_endianness(src)) { Type *platform_src_type = integer_endian_type_to_platform_type(src); value = lb_emit_byte_swap(p, value, platform_src_type); -- cgit v1.2.3