This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMU Common Lisp".
The branch, master has been updated via cc7145cac2b298800b0650938d559c11c35caa24 (commit) via 7a11c612892beceb575257c8b2e7fe239964f0e7 (commit) from e934d7ccdc07f355d29014b670605d1bc0b92dc1 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit cc7145cac2b298800b0650938d559c11c35caa24 Author: Raymond Toy toy.raymond@gmail.com Date: Tue Jul 22 08:09:42 2014 -0700
Comment out all of the trig functions in lisp in favor of calling out to C. Also add interface to sincos function in C.
This needs more testing and currently some tests fail.
diff --git a/src/code/irrat.lisp b/src/code/irrat.lisp index bcd40c3..6d17c6c 100644 --- a/src/code/irrat.lisp +++ b/src/code/irrat.lisp @@ -197,6 +197,20 @@ (y0 double-float :out) (y1 double-float :out))
+(declaim (inline %%sincos)) +(alien:def-alien-routine ("sincos" %%sincos) c-call:void + (x double-float) + (s double-float :out) + (c double-float :out)) + +(declaim (inline %sincos)) +(defun %sincos (x) + (declare (double-float x)) + (multiple-value-bind (ign s c) + (%%sincos x) + (values s c))) + +#|| ;; Implement sin/cos/tan in Lisp. These are based on the routines ;; from fdlibm.
@@ -603,7 +617,7 @@ (let ((flag (- 1 (ash (logand n 1) 1)))) ;; flag = 1 if n even, -1 if n odd (kernel-tan y0 y1 flag))))))) - +||# ;; Compute sin and cos of x, simultaneously. (defun %sincos (x) (declare (double-float x) @@ -628,7 +642,7 @@ (3 (values (- (kernel-cos y0 y1)) (kernel-sin y0 y1 1)))))))) -(declaim (ext:end-block)) +;;(declaim (ext:end-block))
;;;; Power functions.
commit 7a11c612892beceb575257c8b2e7fe239964f0e7 Author: Raymond Toy toy.raymond@gmail.com Date: Tue Jul 22 08:07:31 2014 -0700
Add implmeentation of sincos in C.
Darwin/x86 doesn't have sincos in libm so include sincos when building on Darwin.
diff --git a/src/lisp/Config.x86_darwin b/src/lisp/Config.x86_darwin index 39c09bd..2af8d77 100644 --- a/src/lisp/Config.x86_darwin +++ b/src/lisp/Config.x86_darwin @@ -17,3 +17,14 @@ OS_LINK_FLAGS = -m32 $(MIN_VER) OS_LIBS =
EXEC_FINAL_OBJ = exec-final.o + +OS_SRC += sincos.c k_sin.o k_cos.o + +sincos.o : sincos.c + $(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $< + +k_sin.o : k_sin.c + $(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $< + +k_cos.o : k_cos.c + $(CC) -c $(CFLAGS) $(CPPFLAGS) $(CC_REM_PIO2) $< diff --git a/src/lisp/sincos.c b/src/lisp/sincos.c new file mode 100644 index 0000000..f5db8b3 --- /dev/null +++ b/src/lisp/sincos.c @@ -0,0 +1,43 @@ +#include "fdlibm.h" + +void sincos (double x, double *s, double *c) +{ + int ix; + union { int i[2]; double d; } ux; + + ux.d = x; + ix = ux.i[HIWORD] & 0x7fffffff; + + /* |x| ~< pi/4 */ + if (ix < 0x3fe921fb) { + *s = __kernel_sin(x, 0.0, 0); + *c = __kernel_cos(x, 0.0); + } else { + /* Argument reduction needed */ + double y[2]; + int n; + + n = __ieee754_rem_pio2(x, y); + + switch (n & 3) { + case 0: + *s = __kernel_sin(y[0], y[1], 1); + *c = __kernel_cos(y[0], y[1]); + break; + case 1: + *s = __kernel_cos(y[0], y[1]); + *c = - __kernel_sin(y[0], y[1], 1); + break; + case 2: + *s = - __kernel_sin(y[0], y[1], 1); + *c = - __kernel_cos(y[0], y[1]); + break; + case 3: + *s = - __kernel_cos(y[0], y[1]); + *c = __kernel_sin(y[0], y[1], 1); + break; + } + } + + return; +}
-----------------------------------------------------------------------
Summary of changes: src/code/irrat.lisp | 18 ++++++++++++++++-- src/lisp/Config.x86_darwin | 11 +++++++++++ src/lisp/sincos.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/lisp/sincos.c
hooks/post-receive