From c8175361ebb5ae99c62d956c475d374a49f90402 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 12 Aug 2018 21:01:34 +0800 Subject: [PATCH] Target - Set alignment for u64/i64 to 4 on 32-bit platforms (fixes #78) --- src/trans/target.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/trans/target.cpp b/src/trans/target.cpp index c1dce9726..004b0bf1a 100644 --- a/src/trans/target.cpp +++ b/src/trans/target.cpp @@ -684,13 +684,14 @@ bool Target_GetSizeAndAlignOf(const Span& sp, const StaticTraitResolve& resolve, case ::HIR::CoreType::U64: case ::HIR::CoreType::I64: out_size = 8; - out_align = 8; + // TODO: on x86, u64/i64 has an alignment of 4, while x86_64 has 8. What do other platforms have? + out_align = g_target.m_arch.m_pointer_bits == 32 ? 4 : 8; return true; case ::HIR::CoreType::U128: case ::HIR::CoreType::I128: out_size = 16; - // TODO: If i128 is emulated, this can be 8 - out_align = 16; + // TODO: If i128 is emulated, this can be 8 (as it is on x86, where it's actually 4 due to the above comment) + out_align = g_target.m_arch.m_pointer_bits == 32 ? 4 : 16; return true; case ::HIR::CoreType::Usize: case ::HIR::CoreType::Isize: