From: Debian Haskell Group Date: Sat, 24 Sep 2022 07:06:11 +0000 (+0100) Subject: Use native x86_64 instructions on x32 X-Git-Tag: archive/raspbian/9.0.2-4+rpi1~1^2~11 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=57bbf75059865c7b4f7b73342511b2b425ba7916;p=ghc.git Use native x86_64 instructions on x32 This patch enables a few native 64-bit integer instructions on x32 which are available on this architecture despite using 32-bit pointers. These instructions are present on x86_64 but not on x86 and ghc checks the size of (void *) to determine that. This method fails on x32 since despite using 32-bit pointers and hence sizeof(void *) == 4, it still uses the full x86_64 instruction set and software-emulated variants of the aforementioned 64-bit integer instructions are therefore not present in the toolchain which will make ghc fail to build on x32. See: https://ghc.haskell.org/trac/ghc/ticket/11571 Gbp-Pq: Name x32-use-native-x86_64-insn.patch --- diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c index 130f0b2c..91dbed9e 100644 --- a/rts/RtsSymbols.c +++ b/rts/RtsSymbols.c @@ -1010,7 +1010,7 @@ extern char **environ; // 64-bit support functions in libgcc.a -#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32) +#if defined(__GNUC__) && SIZEOF_VOID_P <= 4 && !defined(_ABIN32) && !(defined(__x86_64__) && defined(__ILP32__)) #define RTS_LIBGCC_SYMBOLS \ SymI_NeedsProto(__divdi3) \ SymI_NeedsProto(__udivdi3) \