200x-xx-xx Richard Sandiford <richard@codesourcery.com> Julian Brown <julian@codesour...
authorRichard Sandiford <richard@codesourcery.com>
Fri, 19 Jan 2007 13:30:35 +0000 (13:30 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 19 Jan 2007 13:30:35 +0000 (13:30 +0000)
gcc/
200x-xx-xx  Richard Sandiford  <richard@codesourcery.com>
    Julian Brown  <julian@codesourcery.com>

* config/m68k/m68k.h (CONST_OK_FOR_LETTER_P): Add an 'R' case.
* config/m68k/m68k.md (*movsi_cfv4): Fold into...
(*movsi_cf): ...here.  Remove unnecessary 'R' from 'Rg'.
Add commentary.

Co-Authored-By: Julian Brown <julian@codesourcery.com>
From-SVN: r120958

gcc/ChangeLog
gcc/config/m68k/m68k.h
gcc/config/m68k/m68k.md

index 47177baeb56260b92065866ca244b5f923c8556d..014c268ee8d37be9e31caea0bf0cdf703344d12c 100644 (file)
@@ -1,3 +1,11 @@
+2007-01-19  Richard Sandiford  <richard@codesourcery.com>
+           Julian Brown  <julian@codesourcery.com>
+
+       * config/m68k/m68k.h (CONST_OK_FOR_LETTER_P): Add an 'R' case.
+       * config/m68k/m68k.md (*movsi_cfv4): Fold into...
+       (*movsi_cf): ...here.  Remove unnecessary 'R' from 'Rg'.
+       Add commentary.
+
 2007-01-19  Richard Sandiford  <richard@codesourcery.com>
 
        * config/m68k/m68k-protos.h (valid_mov3q_const): Take a HOST_WIDE_INT
index 5f0808d7f0b6d67f5b847a93b8d5f58ca2977dbb..d373be7c468827f47b58b651ce21b24dc7c36770 100644 (file)
@@ -493,7 +493,8 @@ extern enum reg_class regno_reg_class[];
    `M' is for numbers that moveq+notb can't handle.
    'N' is for range 24 to 31, rotatert:SI 8 to 1 expressed as rotate.
    'O' is for 16 (for rotate using swap).
-   'P' is for range 8 to 15, rotatert:HI 8 to 1 expressed as rotate.  */
+   'P' is for range 8 to 15, rotatert:HI 8 to 1 expressed as rotate.
+   'R' is for numbers that mov3q can handle.  */
 #define CONST_OK_FOR_LETTER_P(VALUE, C) \
   ((C) == 'I' ? (VALUE) > 0 && (VALUE) <= 8 : \
    (C) == 'J' ? (VALUE) >= -0x8000 && (VALUE) <= 0x7FFF : \
@@ -502,7 +503,8 @@ extern enum reg_class regno_reg_class[];
    (C) == 'M' ? (VALUE) < -0x100 || (VALUE) >= 0x100 : \
    (C) == 'N' ? (VALUE) >= 24 && (VALUE) <= 31 : \
    (C) == 'O' ? (VALUE) == 16 : \
-   (C) == 'P' ? (VALUE) >= 8 && (VALUE) <= 15 : 0)
+   (C) == 'P' ? (VALUE) >= 8 && (VALUE) <= 15 : \
+   (C) == 'R' ? valid_mov3q_const (VALUE) : 0)
 
 /* "G" defines all of the floating constants that are *NOT* 68881
    constants.  This is so 68881 constants get reloaded and the
index 0768b5a8a2649246b07a759258ed0429a0ed2053..c953ec2d4349a391cf60d1e48eb102ca0884e5ee 100644 (file)
   return output_move_simode (operands);
 })
 
+;; ColdFire move instructions can have at most one operand of mode >= 6.
 (define_insn "*movsi_cf"
   [(set (match_operand:SI 0 "nonimmediate_operand" "=r<Q>,g,U")
-       (match_operand:SI 1 "general_operand" "g,r<Q>,U"))]
-  "TARGET_COLDFIRE && !TARGET_ISAB"
-  "* return output_move_simode (operands);")
-
-(define_insn "*movsi_cfv4"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "=r<Q>,g,U")
-       (match_operand:SI 1 "general_operand" "Rg,Rr<Q>,U"))]
-  "TARGET_ISAB"
+       (match_operand:SI 1 "general_operand" "g,Rr<Q>,U"))]
+  "TARGET_COLDFIRE"
   "* return output_move_simode (operands);")
 
 ;; Special case of fullword move, where we need to get a non-GOT PIC