Fix x86-64 MOVE-ARG-DOUBLE-FLOAT VOP for non-rsp fps (code
inherited from x86 assumed doubles use two words of stack space,
which is no longer true for x86-64).
(:double '((inst movsd ea x)))))
(let ((ea (make-ea
:dword :base fp
- :disp (- (* (+ (tn-offset y)
- ,(case format
- (:single 1)
- (:double 2) ))
+ :disp (- (* (1+ (tn-offset y))
n-word-bytes)))))
,@(ecase format
(:single '((inst movss ea x)))
(test atanh)
(test exp))
+;;; Broken move-arg-double-float for non-rsp frame pointers on x86-64
+(defun test (y)
+ (declare (optimize speed))
+ (multiple-value-bind (x)
+ (labels ((aux (x)
+ (declare (double-float x))
+ (etypecase y
+ (double-float
+ nil)
+ (fixnum
+ (aux x))
+ (complex
+ (format t "y=~s~%" y)))
+ (values x)))
+ (aux 2.0d0))
+ x))
+
+(assert (= (test 1.0d0) 2.0d0))
+
;;; success
(quit :unix-status 104)
;;; 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".)
-"0.9.3.61"
+"0.9.3.62"