1.0.26.2: alloc_code_object facelift
[sbcl.git] / src / compiler / x86-64 / float.lisp
index 63ae040..b642b5c 100644 (file)
 ;;;; comparison
 
 (define-vop (float-compare)
-  (:conditional)
-  (:info target not-p)
   (:policy :fast-safe)
   (:vop-var vop)
   (:save-p :compute-only)
 
 (define-vop (single-float-compare float-compare)
   (:args (x :scs (single-reg)) (y :scs (single-reg)))
-  (:conditional)
   (:arg-types single-float single-float))
 (define-vop (double-float-compare float-compare)
   (:args (x :scs (double-reg)) (y :scs (double-reg)))
-  (:conditional)
   (:arg-types double-float double-float))
 
 (define-vop (=/single-float single-float-compare)
     (:translate =)
-  (:info target not-p)
+  (:info)
+  (:conditional not :p :ne)
   (:vop-var vop)
   (:generator 3
     (note-this-location vop :internal-error)
     (inst comiss x y)
     ;; if PF&CF, there was a NaN involved => not equal
     ;; otherwise, ZF => equal
-    (cond (not-p
-           (inst jmp :p target)
-           (inst jmp :ne target))
-          (t
-           (let ((not-lab (gen-label)))
-             (inst jmp :p not-lab)
-             (inst jmp :e target)
-             (emit-label not-lab))))))
+    ))
 
 (define-vop (=/double-float double-float-compare)
     (:translate =)
-  (:info target not-p)
+  (:info)
+  (:conditional not :p :ne)
   (:vop-var vop)
   (:generator 3
     (note-this-location vop :internal-error)
-    (inst comisd x y)
-    (cond (not-p
-           (inst jmp :p target)
-           (inst jmp :ne target))
-          (t
-           (let ((not-lab (gen-label)))
-             (inst jmp :p not-lab)
-             (inst jmp :e target)
-             (emit-label not-lab))))))
-
-;; XXX all of these probably have bad NaN behaviour
+    (inst comisd x y)))
+
 (define-vop (<double-float double-float-compare)
   (:translate <)
-  (:info target not-p)
-  (:generator 2
-    (inst comisd x y)
-    (inst jmp (if not-p :nc :c) target)))
+  (:info)
+  (:conditional not :p :nc)
+  (:generator 3
+    (inst comisd x y)))
 
 (define-vop (<single-float single-float-compare)
   (:translate <)
-  (:info target not-p)
-  (:generator 2
-    (inst comiss x y)
-    (inst jmp (if not-p :nc :c) target)))
+  (:info)
+  (:conditional not :p :nc)
+  (:generator 3
+    (inst comiss x y)))
 
 (define-vop (>double-float double-float-compare)
   (:translate >)
-  (:info target not-p)
-  (:generator 2
-    (inst comisd x y)
-    (inst jmp (if not-p :na :a) target)))
+  (:info)
+  (:conditional not :p :na)
+  (:generator 3
+    (inst comisd x y)))
 
 (define-vop (>single-float single-float-compare)
   (:translate >)
-  (:info target not-p)
-  (:generator 2
-    (inst comiss x y)
-    (inst jmp (if not-p :na :a) target)))
+  (:info)
+  (:conditional not :p :na)
+  (:generator 3
+    (inst comiss x y)))
 
 
 \f