From e5bc2c586e644fc7fe7a1e48d495600c8d27a19f Mon Sep 17 00:00:00 2001
From: Raymond Toy <toy.raymond@gmail.com>
Date: Sat, 2 Aug 2014 19:28:54 -0700
Subject: [PATCH] Use correct flags to generate sse2 instructions in the C code
 and update to include the rest of the fdlibm routines.

With this change, all of the C code should now use sse2 instructions
as needed, which means no more -ffloat-store, and the couple of test
cases like tan.exceptions no longer fail because we signal execptions
as expected.
---
 src/lisp/Config.x86_linux | 39 +++++++++++++++++++++++++++++++++------
 1 file changed, 33 insertions(+), 6 deletions(-)

diff --git a/src/lisp/Config.x86_linux b/src/lisp/Config.x86_linux
index 9c4cbc1c9..8c06baeeb 100644
--- a/src/lisp/Config.x86_linux
+++ b/src/lisp/Config.x86_linux
@@ -1,11 +1,7 @@
 # -*- Mode: makefile -*-
 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
+CPPFLAGS += -m32 -rdynamic -D__NO_CTYPE -D_GNU_SOURCE -march=pentium4 -mfpmath=sse -msse2
 
 UNDEFSYMPATTERN = -Xlinker -u -Xlinker &
 ASSEM_SRC +=  linux-stubs.S
@@ -16,7 +12,12 @@ OS_LINK_FLAGS += -Wl,-z,noexecstack
 
 EXEC_FINAL_OBJ = exec-final.o
 
-OS_SRC += k_sin.c k_cos.c k_tan.c s_sin.c s_cos.c s_tan.c sincos.c s_log1p.c s_expm1.c e_pow.c
+OS_SRC += k_sin.c k_cos.c k_tan.c s_sin.c s_cos.c s_tan.c sincos.c \
+	s_log1p.c s_expm1.c e_pow.c e_exp.c e_log.c \
+	e_acos.c e_asin.c s_atan.c \
+	e_cosh.c e_sinh.c s_tanh.c \
+	e_acosh.c s_asinh.c e_atanh.c \
+	e_atan2.c
 
 k_sin.o : k_sin.c
 	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
@@ -42,4 +43,30 @@ s_exmp1.o : s_expm1.c
 
 e_pow.o : e_pow.c
 	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+e_exp.o : e_exp.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+e_log.o : e_log.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+
+e_acos.o : e_acos.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+e_asin.o : e_asin.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+s_atan.o : s_atan.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
 
+e_cosh.o : e_cosh.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+e_sinh.o : e_sinh.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+s_tanh.o : s_tanh.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+e_acosh.o : e_acosh.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+e_asinh.o : s_asinh.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+e_atanh.o : e_atanh.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
+
+e_atan2.o : e_atan2.c
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $<
-- 
GitLab