diff --git a/ghc/compiler/nativeGen/PprMach.lhs b/ghc/compiler/nativeGen/PprMach.lhs
index 80c0c0251acf974d5b3208d8456c3168c34b0b90..a016d3e3603d85f62421cd15571306fa3dfab406 100644
--- a/ghc/compiler/nativeGen/PprMach.lhs
+++ b/ghc/compiler/nativeGen/PprMach.lhs
@@ -1121,6 +1121,16 @@ pprCondInstr name cond arg
 
 -- a clumsy hack for now, to handle possible double alignment problems
 
+-- even clumsier, to allow for RegReg regs that show when doing indexed
+-- reads (bytearrays).
+--
+pprInstr (LD DF (AddrRegReg g1 g2) reg)
+  = hcat [
+	ptext SLIT("\tadd\t"), pprReg g1,comma,pprReg g2,comma,pprReg g1, char '\n',
+	pp_ld_lbracket, pprReg g1, pp_rbracket_comma, pprReg reg, char '\n',
+	pp_ld_lbracket, pprReg g1, ptext SLIT("+4]"), comma, pprReg (fPair reg)
+    ]
+
 pprInstr (LD DF addr reg) | maybeToBool off_addr
   = hcat [
 	pp_ld_lbracket,
@@ -1151,18 +1161,24 @@ pprInstr (LD size addr reg)
 
 -- The same clumsy hack as above
 
-pprInstr (ST DF reg addr) | maybeToBool off_addr
-  = hcat [
+pprInstr (ST DF reg (AddrRegReg g1 g2))
+ = hcat [
+	ptext SLIT("\tadd\t"),
+		      pprReg g1,comma,pprReg g2,comma,pprReg g1, char '\n',
+	ptext SLIT("\tst\t"),    
+	      pprReg reg, pp_comma_lbracket, pprReg g1,
+	ptext SLIT("]\n\tst\t"), 
+	      pprReg (fPair reg), pp_comma_lbracket, pprReg g1, ptext SLIT("+4]")
+    ]
+
+pprInstr (ST DF reg addr) | maybeToBool off_addr 
+ = hcat [
 	ptext SLIT("\tst\t"),
-	pprReg reg,
-	pp_comma_lbracket,
-	pprAddr addr,
+	pprReg reg, pp_comma_lbracket,	pprAddr addr,
 
 	ptext SLIT("]\n\tst\t"),
-	pprReg (fPair reg),
-	pp_comma_lbracket,
-	pprAddr addr2,
-	rbrack
+	pprReg (fPair reg), pp_comma_lbracket,
+	pprAddr addr2, rbrack
     ]
   where
     off_addr = addrOffset addr 4