1.0.37.9: atomic STOREW for large integer constants on x86-64
authorNikodemus Siivola <nikodemus@random-state.net>
Sun, 28 Mar 2010 16:29:13 +0000 (16:29 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Sun, 28 Mar 2010 16:29:13 +0000 (16:29 +0000)
 * 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.

src/compiler/x86-64/macros.lisp
version.lisp-expr

index 675700f..b7b0aa9 100644 (file)
   (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)))))
 
index e29c4bc..cfbfc4d 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.37.8"
+"1.0.37.9"