GCC uses x87 floating point instructions when building 32-bit x86 code by default. This is true even for x86-64 multilib.
Using the x87 floating point unit can lead to strange behavior when calculating intermediate values for single and double precision floats. It uses 80 bits for all calculations, which is larger than the 32 or 64 bits specified for floats and doubles. Using the SSE2 instructions available on x86-64 for floating point arithmetic leads to more consistent behavior, and is usually faster. Reference: https://gcc.gnu.org/wiki/x87note Signed-off-by: Mike Gilbert <flop...@gentoo.org> --- profiles/arch/amd64/make.defaults | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/profiles/arch/amd64/make.defaults b/profiles/arch/amd64/make.defaults index 0c05dec124e..e7e18ff6a91 100644 --- a/profiles/arch/amd64/make.defaults +++ b/profiles/arch/amd64/make.defaults @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 ARCH="amd64" @@ -28,7 +28,7 @@ LDFLAGS_amd64="-m elf_x86_64" CHOST_amd64="x86_64-pc-linux-gnu" # 32bit specific settings. -CFLAGS_x86="-m32" +CFLAGS_x86="-m32 -mfpmath=sse" LDFLAGS_x86="-m elf_i386" CHOST_x86="i686-pc-linux-gnu" -- 2.37.3