0.8.13.67:
[sbcl.git] / src / compiler / sparc / float.lisp
index 329d8be..b96cecc 100644 (file)
 (defun move-long-reg (dst src)
   (cond
     ((member :sparc-v9 *backend-subfeatures*)
-     (inst fmovq dst src)
+     (inst fmovq dst src))
     (t
      (dotimes (i 4)
        (let ((dst (make-random-tn :kind :normal
             (src (make-random-tn :kind :normal
                                  :sc (sc-or-lose 'single-reg)
                                  :offset (+ i (tn-offset src)))))
-        (inst fmovs dst src)))))))
+        (inst fmovs dst src))))))
 
 (macrolet ((frob (vop sc format)
             `(progn
 (defun %%min (x y)
   (declare (type (or (unsigned-byte 32) (signed-byte 32)
                     single-float double-float) x y))
-  (if (< x y)
+  (if (<= x y)
       x y))
 
 #+nil
 (defun %%max (x y)
   (declare (type (or (unsigned-byte 32) (signed-byte 32)
                     single-float double-float) x y))
-  (if (> x y)
+  (if (>= x y)
       x y))
 #+nil  
 (macrolet
 ;;; expression since we don't have to do branches.
   
 (define-source-transform min (&rest args)
-  (if (member :sparc-v9 sb!vm:*backend-subfeatures*)
+  (if (member :sparc-v9 *backend-subfeatures*)
       (case (length args)
        ((0 2) (values nil t))
        (1 `(values ,(first args)))
       (values nil t)))
 
 (define-source-transform max (&rest args)
-  (if (member :sparc-v9 sb!vm:*backend-subfeatures*)
+  (if (member :sparc-v9 *backend-subfeatures*)
       (case (length args)
        ((0 2) (values nil t))
        (1 `(values ,(first args)))
   (multiple-value-bind (definitely-< definitely->=)
       (ir1-transform-<-helper x y)
     (cond (definitely-<
-             (continuation-type y))
+             (lvar-type y))
          (definitely->=
-             (continuation-type x))
+             (lvar-type x))
          (t
-          (make-canonical-union-type (list (continuation-type x)
-                                           (continuation-type y)))))))
+          (make-canonical-union-type (list (lvar-type x)
+                                           (lvar-type y)))))))
 
 (defoptimizer (min derive-type) ((x y))
-  (multiple-value-bind (definitely-< definitely->=)
-      (ir1-transform-<-helper x y)
-    (cond (definitely-<
-             (continuation-type x))
-         (definitely->=
-             (continuation-type y))
+  (multiple-value-bind (definitely-> definitely-<=)
+      (ir1-transform-<-helper y x)
+    (cond (definitely-<=
+             (lvar-type x))
+         (definitely->
+             (lvar-type y))
          (t
-          (make-canonical-union-type (list (continuation-type x)
-                                           (continuation-type y)))))))
+          (make-canonical-union-type (list (lvar-type x)
+                                           (lvar-type y)))))))
 
 (deftransform max ((x y) (number number) *)
-  (let ((x-type (continuation-type x))
-       (y-type (continuation-type y))
-       (signed (specifier-type '(signed-byte #.sb!vm:n-word-bits)))
-       (unsigned (specifier-type '(unsigned-byte #.sb!vm:n-word-bits)))
+  (let ((x-type (lvar-type x))
+       (y-type (lvar-type y))
+       (signed (specifier-type '(signed-byte #.n-word-bits)))
+       (unsigned (specifier-type '(unsigned-byte #.n-word-bits)))
        (d-float (specifier-type 'double-float))
        (s-float (specifier-type 'single-float)))
     ;; Use %%max if both args are good types of the same type.  As a
                 (arg2 (gensym)))
             `(let ((,arg1 x)
                    (,arg2 y))
-              (if (> ,arg1 ,arg2)
+              (if (>= ,arg1 ,arg2)
                   ,arg1 ,arg2)))))))
 
 (deftransform min ((x y) (real real) *)
-  (let ((x-type (continuation-type x))
-       (y-type (continuation-type y))
-       (signed (specifier-type '(signed-byte #.sb!vm:n-word-bits)))
-       (unsigned (specifier-type '(unsigned-byte #.sb!vm:n-word-bits)))
+  (let ((x-type (lvar-type x))
+       (y-type (lvar-type y))
+       (signed (specifier-type '(signed-byte #.n-word-bits)))
+       (unsigned (specifier-type '(unsigned-byte #.n-word-bits)))
        (d-float (specifier-type 'double-float))
        (s-float (specifier-type 'single-float)))
     (cond ((and (csubtypep x-type signed)
                 (arg2 (gensym)))
             `(let ((,arg1 x)
                    (,arg2 y))
-               (if (< ,arg1 ,arg2)
+               (if (<= ,arg1 ,arg2)
                    ,arg1 ,arg2)))))))
 
 ) ; PROGN