diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a83625b9d854bd89bf1765c08348f79f5e2dcbf8..004ec9c9a806b1b2f0dcbb98470f833624c0673b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2006-12-18  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* config/rs6000/rs6000.md (*movdf_hardfloat32): Use %X format to
+	determine if memory operand is an indexed address or not.
+
 2006-12-17  Steven Bosscher  <steven@gcc.gnu.org>
 
 	* cselib.c (struct cselib_val_struct): Make val_rtx its
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 04eab3a4384c22463f7a9ed54929cdbcdafc2ae8..a4902c4e561e6269ba94f149418e82b82073ce1e 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -8359,15 +8359,15 @@
 				 operands[1], 0))
 	    {
 	      output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
-	      output_asm_insn (\"{lx|lwzx} %L0,%1\", operands);
+	      output_asm_insn (\"{l%X1|lwz%X1} %L0,%1\", operands);
 	      output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
-	      return \"{lx|lwzx} %0,%1\";
+	      return \"{l%X1|lwz%X1} %0,%1\";
 	    }
 	  else
 	    {
-	      output_asm_insn (\"{lx|lwzx} %0,%1\", operands);
+	      output_asm_insn (\"{l%X1|lwz%X1} %0,%1\", operands);
 	      output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
-	      output_asm_insn (\"{lx|lwzx} %L0,%1\", operands);
+	      output_asm_insn (\"{l%X1|lwz%X1} %L0,%1\", operands);
 	      output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
 	      return \"\";
 	    }
@@ -8384,9 +8384,9 @@
 	  rtx addreg;
 
 	  addreg = find_addr_reg (XEXP (operands[0], 0));
-	  output_asm_insn (\"{stx|stwx} %1,%0\", operands);
+	  output_asm_insn (\"{st%X0|stw%X0} %1,%0\", operands);
 	  output_asm_insn (\"{cal|la} %0,4(%0)\", &addreg);
-	  output_asm_insn (\"{stx|stwx} %L1,%0\", operands);
+	  output_asm_insn (\"{st%X0|stw%X0} %L1,%0\", operands);
 	  output_asm_insn (\"{cal|la} %0,-4(%0)\", &addreg);
 	  return \"\";
 	}