Update of /cvsroot/sbcl/sbcl/src/compiler/x86-64
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv6480/src/compiler/x86-64
Modified Files:
macros.lisp
Log Message:
1.0.37.9: atomic STOREW for large integer constants on x86-64
* First move the constant into TEMP-REG-TN, then into memory -- not
into memory in two stages. Even though memory is probably
write-combining, an interrupt could still leave us with a bogus
value.
Index: macros.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86-64/macros.lisp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- macros.lisp 1 Mar 2010 13:09:00 -0000 1.35
+++ macros.lisp 28 Mar 2010 16:29:13 -0000 1.36
@@ -41,11 +41,8 @@
(once-only ((value value))
`(cond ((and (integerp ,value)
(not (typep ,value '(signed-byte 32))))
- (multiple-value-bind (lo hi) (dwords-for-quad ,value)
- (inst mov (make-ea-for-object-slot-half
- ,ptr ,slot ,lowtag) lo)
- (inst mov (make-ea-for-object-slot-half
- ,ptr (+ ,slot 1/2) ,lowtag) hi)))
+ (inst mov temp-reg-tn ,value)
+ (inst mov (make-ea-for-object-slot ,ptr ,slot ,lowtag) temp-reg-tn))
(t
(inst mov (make-ea-for-object-slot ,ptr ,slot ,lowtag) ,value)))))
|