Raymond Toy pushed to branch issue-156-take-2-nan-comparison at cmucl / cmucl

Commits:

1 changed file:

Changes:

  • src/compiler/x86/float-sse2.lisp
    ... ... @@ -972,12 +972,42 @@
    972 972
     		       (inst jmp ,yep target)
    
    973 973
     		       (emit-label not-lab)))))))))
    
    974 974
       (frob < single comiss :b :nb)
    
    975
    -  (frob <= single comiss :be :nbe)
    
    976 975
       (frob > single comiss :a :na)
    
    977
    -  (frob >= single comiss :ae :nae)
    
    978 976
       (frob < double comisd :b :nb)
    
    977
    +  (frob > double comisd :a :na))
    
    978
    +
    
    979
    +
    
    980
    +
    
    981
    +(macrolet
    
    982
    +    ((frob (op size inst yep nope)
    
    983
    +       (let ((ea (ecase size
    
    984
    +		   (single
    
    985
    +		    'ea-for-sf-desc)
    
    986
    +		   (double
    
    987
    +		    'ea-for-df-desc)))
    
    988
    +	     (name (symbolicate op "/" size "-FLOAT"))
    
    989
    +	     (sc-type (symbolicate size "-REG"))
    
    990
    +	     (inherit (symbolicate size "-FLOAT-COMPARE")))
    
    991
    +	 `(define-vop (,name ,inherit)
    
    992
    +	    (:translate ,op)
    
    993
    +	    (:info target not-p)
    
    994
    +	    (:generator 3
    
    995
    +	      (sc-case y
    
    996
    +		(,sc-type
    
    997
    +		 (inst ,inst x y))
    
    998
    +		(descriptor-reg
    
    999
    +		 (inst ,inst x (,ea y))))
    
    1000
    +	      (cond (not-p
    
    1001
    +		     (inst jmp :p target)
    
    1002
    +		     (inst jmp ,nope target))
    
    1003
    +		    (t
    
    1004
    +		     (let ((not-lab (gen-label)))
    
    1005
    +		       (inst jmp :p not-lab)
    
    1006
    +		       (inst jmp ,yep target)
    
    1007
    +		       (emit-label not-lab)))))))))
    
    1008
    +  (frob <= single comiss :be :nbe)
    
    1009
    +  (frob >= single comiss :ae :nae)
    
    979 1010
       (frob <= double comisd :be :nbe)
    
    980
    -  (frob > double comisd :a :na)
    
    981 1011
       (frob >= double comisd :ae :nae))
    
    982 1012
     
    
    983 1013