1.0.29.44: Complex float improvements
authorPaul Khuong <pvk@pvk.ca>
Thu, 25 Jun 2009 15:37:05 +0000 (15:37 +0000)
committerPaul Khuong <pvk@pvk.ca>
Thu, 25 Jun 2009 15:37:05 +0000 (15:37 +0000)
commita157ed0be79751f85b8243c06102eea95af06aa3
treed1dfa6f34b86444e1f1dda062019662aa0285c58
parentaecec1def1de06cf40003917e9091d3ffe1ba16b
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.
18 files changed:
base-target-features.lisp-expr
make-config.sh
package-data-list.lisp-expr
src/compiler/assem.lisp
src/compiler/float-tran.lisp
src/compiler/generic/genesis.lisp
src/compiler/generic/objdef.lisp
src/compiler/generic/vm-tran.lisp
src/compiler/srctran.lisp
src/compiler/x86-64/array.lisp
src/compiler/x86-64/cell.lisp
src/compiler/x86-64/float.lisp
src/compiler/x86-64/insts.lisp
src/compiler/x86-64/macros.lisp
src/compiler/x86-64/vm.lisp
src/runtime/print.c
tests/arith.pure.lisp
tests/float.pure.lisp