OSDN Git Service

* mn10300.md (movqi, movhi): Split i->d*a case into two cases to
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Aug 2008 16:12:20 +0000 (16:12 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Aug 2008 16:12:20 +0000 (16:12 +0000)
avoid the possibility of getting DATA_OR_ADDRESS_REGS as the
preferred class when copying a constant into a partial word register.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@139600 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mn10300/mn10300.md

index 68763ec..8768053 100644 (file)
@@ -1,3 +1,9 @@
+2008-08-26  Jeff Law  <law@redhat.com>
+
+       * mn10300.md (movqi, movhi): Split i->d*a case into two cases to
+       avoid the possibility of getting DATA_OR_ADDRESS_REGS as the
+       preferred class when copying a constant into a partial word register.
+
 2008-08-26  Ben Elliston  <bje@au.ibm.com>
 
        * rtlanal.c: Fix uses of "it's" with "its" where appropriate.
index 73043e9..8fbbdc8 100644 (file)
   [(set_attr "cc" "none,clobber,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")])
 
 (define_insn ""
-  [(set (match_operand:QI 0 "nonimmediate_operand" "=d*a,d,d*a,d,m")
-       (match_operand:QI 1 "general_operand" "0,I,dai,m,d"))]
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=d*a,d,d,!*a,d*a,d,m")
+       (match_operand:QI 1 "general_operand" "0,I,i,i,da,m,d"))]
   "register_operand (operands[0], QImode)
    || register_operand (operands[1], QImode)"
   "*
     case 1:
       return \"clr %0\";
     case 2:
+    case 3:
+    case 4:
       if (GET_CODE (operands[1]) == CONST_DOUBLE)
        {
          rtx xoperands[2];
        }
 
       return \"mov %1,%0\";
-    case 3:
-    case 4:
+    case 5:
+    case 6:
       return \"movbu %1,%0\";
     default:
       gcc_unreachable ();
     }
 }"
-  [(set_attr "cc" "none,clobber,none_0hit,none_0hit,none_0hit")])
+  [(set_attr "cc" "none,clobber,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")])
 
 ;; movhi
 
   [(set_attr "cc" "none,clobber,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")])
 
 (define_insn ""
-  [(set (match_operand:HI 0 "nonimmediate_operand" "=d*a,d,d*a,d,m")
-       (match_operand:HI 1 "general_operand" "0,I,dai,m,d"))]
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=d*a,d,d,!*a,d*a,d,m")
+       (match_operand:HI 1 "general_operand" "0,I,i,i,da,m,d"))]
   "register_operand (operands[0], HImode)
    || register_operand (operands[1], HImode)"
   "*
     case 1:
       return \"clr %0\";
     case 2:
+    case 3:
+    case 4:
       if (GET_CODE (operands[1]) == CONST_DOUBLE)
        {
          rtx xoperands[2];
          return \"\";
        }
       return \"mov %1,%0\";
-    case 3:
-    case 4:
+    case 5:
+    case 6:
       return \"movhu %1,%0\";
     default:
       gcc_unreachable ();
     }
 }"
-  [(set_attr "cc" "none,clobber,none_0hit,none_0hit,none_0hit")])
+  [(set_attr "cc" "none,clobber,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")])
 
 ;; movsi and helpers