projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
1.0.44.2: don't add pointless TYPEP T constraints
[sbcl.git]
/
src
/
compiler
/
x86-64
/
float.lisp
diff --git
a/src/compiler/x86-64/float.lisp
b/src/compiler/x86-64/float.lisp
index
227e1f9
..
601dabd
100644
(file)
--- a/
src/compiler/x86-64/float.lisp
+++ b/
src/compiler/x86-64/float.lisp
@@
-51,9
+51,7
@@
(+ (tn-offset ,tn)
(cond ((= (tn-offset ,base) rsp-offset)
sp->fp-offset)
(+ (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
(ecase ,kind
(:single
(ecase ,slot
@@
-794,6
+792,8
@@
(:vop-var vop)
(:save-p :compute-only)
(:generator 1
(:vop-var vop)
(:save-p :compute-only)
(:generator 1
+ (unless (location= x y)
+ (inst xorpd y y))
(note-this-location vop :internal-error)
(inst sqrtsd y x)))
\f
(note-this-location vop :internal-error)
(inst sqrtsd y x)))
\f
@@
-1071,6
+1071,9
@@
(:vop-var vop)
(:save-p :compute-only)
(:generator 5
(:vop-var vop)
(:save-p :compute-only)
(:generator 5
+ (sc-case y
+ (single-reg (inst xorps y y))
+ (double-reg (inst xorpd y y)))
(note-this-location vop :internal-error)
(inst ,inst y x)))))
(frob %single-float/signed %single-float cvtsi2ss single-reg single-float)
(note-this-location vop :internal-error)
(inst ,inst y x)))))
(frob %single-float/signed %single-float cvtsi2ss single-reg single-float)
@@
-1088,10
+1091,18
@@
(:vop-var vop)
(:save-p :compute-only)
(:generator 2
(:vop-var vop)
(:save-p :compute-only)
(:generator 2
+ (unless (location= x y)
+ (sc-case y
+ (single-reg (inst xorps y y))
+ (double-reg (inst xorpd y y))))
(note-this-location vop :internal-error)
(inst ,inst y (sc-case x
(,(first from-scs) x)
(note-this-location vop :internal-error)
(inst ,inst y (sc-case x
(,(first from-scs) x)
- (,(second from-scs) (,ea-func x))))))))
+ (,(second from-scs) (,ea-func x))))
+ ,(when (and (eq from-type 'double-float) ; if the input is wider
+ (eq to-type 'single-float)) ; than the output, clear
+ `(when (location= x y) ; noise in the high part
+ (inst shufps y y #4r3330)))))))
(frob %single-float/double-float %single-float cvtsd2ss
(double-reg double-stack) double-float ea-for-df-stack
single-reg single-float)
(frob %single-float/double-float %single-float cvtsd2ss
(double-reg double-stack) double-float ea-for-df-stack
single-reg single-float)