diff --git a/src/lisp/Config.x86_common b/src/lisp/Config.x86_common index 6f0ec952f8df4e665a4cc130ca38daa8d38c1adc..f263d403d62578ba20b7ac76056f812171ca7549 100644 --- a/src/lisp/Config.x86_common +++ b/src/lisp/Config.x86_common @@ -65,7 +65,13 @@ NM = nm -gp DEPEND_FLAGS = -MM # This no longer has aliasing problems, so no need to use -# -ffloat-store and -fno-strict-aliasing anymore. +# -fno-strict-aliasing anymore. However, if we're building with x87, +# we MUST use -ffloat-store to get proper double-float rounding. e_rem_pio2.o : e_rem_pio2.c - $(CC) -c $(CFLAGS) $(CPPFLAGS) $< + $(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $< + +k_rem_pio2.o : k_rem_pio2.c + $(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $< + + diff --git a/src/lisp/Config.x86_freebsd b/src/lisp/Config.x86_freebsd index a050e50f9dd8cb7a2fd9551ed05982b185213db5..911e2c2578f9dd6f91bc1b40652b19ba87968757 100644 --- a/src/lisp/Config.x86_freebsd +++ b/src/lisp/Config.x86_freebsd @@ -1,6 +1,10 @@ # -*- Mode: makefile -*- include Config.x86_common +# Need -ffloat-store for e_rem_pio2 and k_rem_pio2 to get properly +# rounded double-floats while using x87 extended precision. +CC_REM_PIO2 = -ffloat-store + UNDEFSYMPATTERN = -Xlinker -u -Xlinker & OS_SRC += FreeBSD-os.c elf.c OS_LINK_FLAGS = -dynamic -export-dynamic diff --git a/src/lisp/Config.x86_linux b/src/lisp/Config.x86_linux index 569f4f5f9d2d5c30eb64eef6931dc17be9423928..13eb01219ac10a96bf244428c5ed89b6c46baba9 100644 --- a/src/lisp/Config.x86_linux +++ b/src/lisp/Config.x86_linux @@ -3,6 +3,10 @@ include Config.x86_common CPPFLAGS += -m32 -rdynamic -D__NO_CTYPE -D_GNU_SOURCE +# Need -ffloat-store for e_rem_pio2 and k_rem_pio2 to get properly +# rounded double-floats while using x87 extended precision. +CC_REM_PIO2 = -ffloat-store + UNDEFSYMPATTERN = -Xlinker -u -Xlinker & ASSEM_SRC += linux-stubs.S OS_SRC += Linux-os.c elf.c