1.0.42.23: x86-64: Fix passing of unboxed complex float arguments.
authorAlastair Bridgewater <lisphacker@users.sourceforge.net>
Thu, 2 Sep 2010 00:34:28 +0000 (00:34 +0000)
committerAlastair Bridgewater <lisphacker@users.sourceforge.net>
Thu, 2 Sep 2010 00:34:28 +0000 (00:34 +0000)
  * This has been broken since 1.0.27.14 (x86oid frame pointer
bias).

  * The "move-arg" VOPs for complex floats required a different
adjustment when being placed relative to the normal frame base
pointer, due to the bias, than when being placed relative to
other base pointers.  Unfortunately, a new requirement was also
added that restricted the appropriate registers for use as
frame base pointers to one, and one which would not normally be
selected, leading to "Unexpected offset" errors.

  * Removed the restriction.

  * The logic in EA-FOR-CXF-STACK is still broken: The frame bias
is only applied when the frame pointer is RSP, which will never
happen, and is not applied when the frame pointer is any other
register.  At the same time, so far as I can tell, the bias seems
to be unneccessary.

  * Bug reported by sykopomp in #lispgames.

src/compiler/x86-64/float.lisp
tests/compiler.pure.lisp
version.lisp-expr

index 583a7a4..601dabd 100644 (file)
@@ -51,9 +51,7 @@
                       (+ (tn-offset ,tn)
                        (cond ((= (tn-offset ,base) rsp-offset)
                               sp->fp-offset)
-                             ((= (tn-offset ,base) rbp-offset)
-                              0)
-                             (t (error "Unexpected offset.")))
+                             (t 0))
                        (ecase ,kind
                          (:single
                             (ecase ,slot
index 118fce2..ff5d41b 100644 (file)
                           (let ((iterator+976 #'iterator+976))
                             (funcall iterator+976))))))))
 
-(with-test (:name :complex-float-local-fun-args :fails-on :x86-64)
+(with-test (:name :complex-float-local-fun-args)
   ;; As of 1.0.27.14, the lambda below failed to compile due to the
   ;; compiler attempting to pass unboxed complex floats to Z and the
   ;; MOVE-ARG method not expecting the register being used as a
index c403779..f609b1b 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.42.22"
+"1.0.42.23"