summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-01-19 13:30:35 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-01-19 13:30:35 +0000
commit9b84b1a02fcbc02d79ae96d975f49e0a47f62ff7 (patch)
treeb4ddc49f2fb66bd0e7dbad119a6a088795bbc092
parent92b2fb42ab0fc0d0e6afe4fbbb810f639ef8a023 (diff)
downloadppe42-gcc-9b84b1a02fcbc02d79ae96d975f49e0a47f62ff7.tar.gz
ppe42-gcc-9b84b1a02fcbc02d79ae96d975f49e0a47f62ff7.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120958 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/m68k/m68k.h6
-rw-r--r--gcc/config/m68k/m68k.md11
3 files changed, 15 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 47177baeb56..014c268ee8d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,12 @@
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
and return a bool.
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index 5f0808d7f0b..d373be7c468 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -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
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index 0768b5a8a26..c953ec2d434 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -667,16 +667,11 @@
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
OpenPOWER on IntegriCloud