From: Paul K. <pk...@us...> - 2009-06-25 15:38:09
|
Update of /cvsroot/sbcl/sbcl/src/runtime In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv7140/src/runtime Modified Files: print.c Log Message: 1.0.29.44: Complex float improvements * On all platforms: - Slightly more stable complex-complex float (double and single) division; - New transform for real-complex division; - complex-real and real-complex float addition and subtraction behave as though the real was first upgraded to a complex, thus losing the sign of any imaginary zero. * On x86-64 - Complexes floats are represented packed in a single SSE register; - VOPs for all four arithmetic operations, complex-complex, but also complex-real and real-complex, except for complex-complex and real-complex division; - VOPs for =, negate and conjugate of complexes (complex-real and complex-complex); - VOPs for EQL of floats (real and complexes). - Full register moves for float values in SSE registers should also speed scalar operations up. Index: print.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/print.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- print.c 17 Jan 2009 10:43:57 -0000 1.32 +++ print.c 25 Jun 2009 15:37:06 -0000 1.33 @@ -549,9 +549,17 @@ #ifdef COMPLEX_SINGLE_FLOAT_WIDETAG case COMPLEX_SINGLE_FLOAT_WIDETAG: NEWLINE_OR_RETURN; +#ifdef LISP_FEATURE_X86_64 + printf("%g", ((struct complex_single_float *)native_pointer(obj))->data.data[0]); +#else printf("%g", ((struct complex_single_float *)native_pointer(obj))->real); +#endif NEWLINE_OR_RETURN; +#ifdef LISP_FEATURE_X86_64 + printf("%g", ((struct complex_single_float *)native_pointer(obj))->data.data[1]); +#else printf("%g", ((struct complex_single_float *)native_pointer(obj))->imag); +#endif break; #endif |