From: Nikodemus Siivola Date: Sun, 28 Mar 2010 16:29:13 +0000 (+0000) Subject: 1.0.37.9: atomic STOREW for large integer constants on x86-64 X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=48fb9976298ca77d4a7e4ec4d8427f041d2bf327;p=sbcl.git 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. --- diff --git a/src/compiler/x86-64/macros.lisp b/src/compiler/x86-64/macros.lisp index 675700f..b7b0aa9 100644 --- a/src/compiler/x86-64/macros.lisp +++ b/src/compiler/x86-64/macros.lisp @@ -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))))) diff --git a/version.lisp-expr b/version.lisp-expr index e29c4bc..cfbfc4d 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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"