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