0.8.5.13:
authorPatrik Nordebo <patrik@nordebo.com>
Wed, 29 Oct 2003 06:38:40 +0000 (06:38 +0000)
committerPatrik Nordebo <patrik@nordebo.com>
Wed, 29 Oct 2003 06:38:40 +0000 (06:38 +0000)
        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.

src/assembly/ppc/arith.lisp
src/compiler/ppc/arith.lisp
src/compiler/ppc/move.lisp
version.lisp-expr

index 8cb8c42..ce82af9 100644 (file)
@@ -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)
    (: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)
index 5570dc5..cb02b1a 100644 (file)
   (: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)
   (: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)
index 8d00afc..9ef0641 100644 (file)
   (: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)
index 2bcb03a..498224a 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".)
-"0.8.5.12"
+"0.8.5.13"