1.0.2.21:
authorNathan Froyd <froydnj@cs.rice.edu>
Wed, 7 Feb 2007 19:12:42 +0000 (19:12 +0000)
committerNathan Froyd <froydnj@cs.rice.edu>
Wed, 7 Feb 2007 19:12:42 +0000 (19:12 +0000)
Make ASH VOPs use 'LEA <reg>, [<reg>+<reg>]' instead of
  'LEA <reg>, [<reg>*2]' on x86 and x86-64, resulting in
  shorter code.

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

index e0a4d3c..d90e2f4 100644 (file)
   (:note "inline ASH")
   (:generator 2
     (cond ((and (= amount 1) (not (location= number result)))
-           (inst lea result (make-ea :qword :index number :scale 2)))
+           (inst lea result (make-ea :qword :base number :index number)))
           ((and (= amount 2) (not (location= number result)))
            (inst lea result (make-ea :qword :index number :scale 4)))
           ((and (= amount 3) (not (location= number result)))
   (:note "inline ASH")
   (:generator 3
     (cond ((and (= amount 1) (not (location= number result)))
-           (inst lea result (make-ea :qword :index number :scale 2)))
+           (inst lea result (make-ea :qword :base number :index number)))
           ((and (= amount 2) (not (location= number result)))
            (inst lea result (make-ea :qword :index number :scale 4)))
           ((and (= amount 3) (not (location= number result)))
   (:note "inline ASH")
   (:generator 3
     (cond ((and (= amount 1) (not (location= number result)))
-           (inst lea result (make-ea :qword :index number :scale 2)))
+           (inst lea result (make-ea :qword :base number :index number)))
           ((and (= amount 2) (not (location= number result)))
            (inst lea result (make-ea :qword :index number :scale 4)))
           ((and (= amount 3) (not (location= number result)))
index 1380cdb..ad66b62 100644 (file)
   (:note "inline ASH")
   (:generator 2
     (cond ((and (= amount 1) (not (location= number result)))
-           (inst lea result (make-ea :dword :index number :scale 2)))
+           (inst lea result (make-ea :dword :base number :index number)))
           ((and (= amount 2) (not (location= number result)))
            (inst lea result (make-ea :dword :index number :scale 4)))
           ((and (= amount 3) (not (location= number result)))
   (:note "inline ASH")
   (:generator 3
     (cond ((and (= amount 1) (not (location= number result)))
-           (inst lea result (make-ea :dword :index number :scale 2)))
+           (inst lea result (make-ea :dword :base number :index number)))
           ((and (= amount 2) (not (location= number result)))
            (inst lea result (make-ea :dword :index number :scale 4)))
           ((and (= amount 3) (not (location= number result)))
   (:note "inline ASH")
   (:generator 3
     (cond ((and (= amount 1) (not (location= number result)))
-           (inst lea result (make-ea :dword :index number :scale 2)))
+           (inst lea result (make-ea :dword :base number :index number)))
           ((and (= amount 2) (not (location= number result)))
            (inst lea result (make-ea :dword :index number :scale 4)))
           ((and (= amount 3) (not (location= number result)))
index baabdd3..c50c25d 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.2.20"
+"1.0.2.21"