Index: gcc/config/arm/arm.h
===================================================================
--- gcc/config/arm/arm.h	(revision 199090)
+++ gcc/config/arm/arm.h	(working copy)
@@ -1280,7 +1280,8 @@
   ((TARGET_VFP && TARGET_HARD_FLOAT				\
     && IS_VFP_CLASS (CLASS))					\
    ? coproc_secondary_reload_class (MODE, X, FALSE)		\
-   : (TARGET_IWMMXT && (CLASS) == IWMMXT_REGS)			\
+   : (TARGET_IWMMXT && ((CLASS) == IWMMXT_REGS)			\
+                        || (CLASS) == IWMMXT_GR_REGS)		\
    ? coproc_secondary_reload_class (MODE, X, TRUE)		\
    : TARGET_32BIT						\
    ? (((MODE) == HImode && ! arm_arch4 && true_regnum (X) == -1) \
@@ -1293,7 +1294,8 @@
   ((TARGET_VFP && TARGET_HARD_FLOAT				\
     && IS_VFP_CLASS (CLASS))					\
     ? coproc_secondary_reload_class (MODE, X, FALSE) :		\
-    (TARGET_IWMMXT && (CLASS) == IWMMXT_REGS) ?			\
+    (TARGET_IWMMXT && ((CLASS) == IWMMXT_REGS			\
+                       || (CLASS) == IWMMXT_GR_REGS)) ?		\
     coproc_secondary_reload_class (MODE, X, TRUE) :		\
    (TARGET_32BIT ?						\
     (((CLASS) == IWMMXT_REGS || (CLASS) == IWMMXT_GR_REGS)	\
Index: gcc/testsuite/gcc.target/arm/mmx-3.c
===================================================================
--- gcc/testsuite/gcc.target/arm/mmx-3.c	(revision 0)
+++ gcc/testsuite/gcc.target/arm/mmx-3.c	(revision 0)
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
+/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
+/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
+/* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-require-effective-target arm_iwmmxt_ok } */
+/* { dg-options "-march=iwmmxt -O" } */
+
+#define N 64
+
+signed int b[N];
+signed long long j[N], d[N];
+
+void
+foo (void)
+{
+  int i;
+  for (i = 0; i < N; i++)
+    j[i] = d[i] << b[i];
+}
