From: Patrik Nordebo Date: Wed, 29 Oct 2003 06:38:40 +0000 (+0000) Subject: 0.8.5.13: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=35b5e97163c45e89659dbd75c91d653b49c758d3;p=sbcl.git 0.8.5.13: G5/PPC970 fix: ... Replace all uses of the mcrxr instruction with the mtxer instruction, because mcrxr is reallly slooow on the PPC970 and we didn't actually want it for anything but clearing XER. --- diff --git a/src/assembly/ppc/arith.lisp b/src/assembly/ppc/arith.lisp index 8cb8c42..ce82af9 100644 --- a/src/assembly/ppc/arith.lisp +++ b/src/assembly/ppc/arith.lisp @@ -31,7 +31,7 @@ (:temp ocfp any-reg ocfp-offset)) ; Clear the damned "sticky overflow" bit in :cr0 and :xer - (inst mcrxr :cr0) + (inst mtxer zero-tn) (inst or temp x y) (inst andi. temp temp 3) (inst bne DO-STATIC-FUN) @@ -77,7 +77,7 @@ (:temp ocfp any-reg ocfp-offset)) ; Clear the damned "sticky overflow" bit in :cr0 - (inst mcrxr :cr0) + (inst mtxer zero-tn) (inst or temp x y) (inst andi. temp temp 3) @@ -130,7 +130,7 @@ (:temp ocfp any-reg ocfp-offset)) ;; If either arg is not a fixnum, call the static function. But first ... - (inst mcrxr :cr0) + (inst mtxer zero-tn) (inst or temp x y) (inst andi. temp temp 3) diff --git a/src/compiler/ppc/arith.lisp b/src/compiler/ppc/arith.lisp index 5570dc5..cb02b1a 100644 --- a/src/compiler/ppc/arith.lisp +++ b/src/compiler/ppc/arith.lisp @@ -239,7 +239,7 @@ (:note "safe inline fixnum arithmetic") (:generator 4 (let* ((no-overflow (gen-label))) - (inst mcrxr :cr0) + (inst mtxer zero-tn) (inst addo. r x y) (inst bns no-overflow) (inst unimp (logior (ash (reg-tn-encoding r) 5) @@ -254,7 +254,7 @@ (:note "safe inline fixnum arithmetic") (:generator 4 (let* ((no-overflow (gen-label))) - (inst mcrxr :cr0) + (inst mtxer zero-tn) (inst subo. r x y) (inst bns no-overflow) (inst unimp (logior (ash (reg-tn-encoding r) 5) diff --git a/src/compiler/ppc/move.lisp b/src/compiler/ppc/move.lisp index 8d00afc..9ef0641 100644 --- a/src/compiler/ppc/move.lisp +++ b/src/compiler/ppc/move.lisp @@ -208,7 +208,7 @@ (:generator 20 (move x arg) (let ((done (gen-label))) - (inst mcrxr :cr0) ; clear sticky overflow bits in XER, CR0 + (inst mtxer zero-tn) ; clear sticky overflow bit in XER, CR0 (inst addo temp x x) ; set XER OV if top two bits differ (inst addo. temp temp temp) ; set CR0 SO if any top three bits differ (inst slwi y x 2) ; assume fixnum (tagged ok, maybe lost some high bits) diff --git a/version.lisp-expr b/version.lisp-expr index 2bcb03a..498224a 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".) -"0.8.5.12" +"0.8.5.13"