Index: /trunk/source/compiler/PPC/PPC32/ppc32-vinsns.lisp
===================================================================
--- /trunk/source/compiler/PPC/PPC32/ppc32-vinsns.lisp	(revision 15016)
+++ /trunk/source/compiler/PPC/PPC32/ppc32-vinsns.lisp	(revision 15017)
@@ -281,5 +281,5 @@
                                      (idx :u32const))
                                     ())
-  (lwz dest (:apply + ppc32::misc-data-offset (:apply ash idx -5)) v)
+  (lwz dest (:apply + ppc32::misc-data-offset (:apply ash (:apply ash idx -5) 2)) v)
   (rlwinm dest dest (:apply 1+ (:apply logand idx #x1f)) 31 31))
 
@@ -288,5 +288,5 @@
                                             (idx :u32const))
                                            ((temp :u32)))
-  (lwz temp (:apply + ppc32::misc-data-offset (:apply ash idx -5)) v)
+  (lwz temp (:apply + ppc32::misc-data-offset (:apply ash (:apply ash idx -5) 2)) v)
   (rlwinm dest 
           temp
Index: /trunk/source/compiler/PPC/PPC64/ppc64-vinsns.lisp
===================================================================
--- /trunk/source/compiler/PPC/PPC64/ppc64-vinsns.lisp	(revision 15016)
+++ /trunk/source/compiler/PPC/PPC64/ppc64-vinsns.lisp	(revision 15017)
@@ -326,5 +326,5 @@
 				     (idx :u32const))
 				    ())
-  (lwz dest (:apply + ppc64::misc-data-offset (:apply ash idx -5)) v)
+  (lwz dest (:apply + ppc64::misc-data-offset (:apply ash (:apply ash idx -5) 2)) v)
   (rlwinm dest dest (:apply 1+ (:apply logand idx #x1f)) 31 31))
 
@@ -333,5 +333,5 @@
 					    (idx :u32const))
 					   ((temp :u32)))
-  (lwz temp (:apply + ppc64::misc-data-offset (:apply ash idx -5)) v)
+  (lwz temp (:apply + ppc64::misc-data-offset (:apply ash (:apply ash idx -5) 2)) v)
   (rlwinm dest 
 	  temp
Index: /trunk/source/compiler/PPC/ppc2.lisp
===================================================================
--- /trunk/source/compiler/PPC/ppc2.lisp	(revision 15016)
+++ /trunk/source/compiler/PPC/ppc2.lisp	(revision 15017)
@@ -1608,4 +1608,6 @@
                   (! 2d-dim1 dim1 src))
                 (! 2d-unscaled-index idx-reg dim1 unscaled-i unscaled-j))
+              (when (and constidx needs-memoization)
+                (! lri idx-reg (ash constidx *ppc2-target-fixnum-shift*)))
               (let* ((v ($ ppc::arg_x)))
                 (! array-data-vector-ref v src)
@@ -1683,4 +1685,6 @@
                     (! 3d-dims dim1 dim2 src))
                   (! 3d-unscaled-index idx-reg dim1 dim2 unscaled-i unscaled-j unscaled-k))
+                (if (and constidx needs-memoization)
+                  (! lri idx-reg (ash constidx *ppc2-target-fixnum-shift*)))
                 (let* ((v ($ ppc::arg_x)))
                   (! array-data-vector-ref v src)
