aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPeter Barada <peter@the-baradas.com>2004-05-29 15:10:41 +0000
committerBernardo Innocenti <bernie@gcc.gnu.org>2004-05-29 17:10:41 +0200
commitd1fe6168c0c4a9c5bba9e04afea5aad5cc7dc2bb (patch)
tree8ebf935ce774bc4229a4d85e2e6675da192056ca /gcc
parent803cb0b5c9ff81ba0b4ec018fff529a9b7cf43f2 (diff)
downloadgcc-d1fe6168c0c4a9c5bba9e04afea5aad5cc7dc2bb.zip
gcc-d1fe6168c0c4a9c5bba9e04afea5aad5cc7dc2bb.tar.gz
gcc-d1fe6168c0c4a9c5bba9e04afea5aad5cc7dc2bb.tar.bz2
m68k.h (EXTRA_CONSTRAINT): add 'U' for register offset addressing.
* config/m68k/m68k.h(EXTRA_CONSTRAINT): add 'U' for register offset addressing. * config/m68k/m68k.md: Add 'U,U' alternative to ColdFire variants of movsi,movhi,movqi insn patterns. From-SVN: r82420
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/m68k/m68k.h11
-rw-r--r--gcc/config/m68k/m68k.md12
3 files changed, 22 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 055155c..ca2b422 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2004-05-29 Peter Barada <peter@the-baradas.com>
+
+ * config/m68k/m68k.h(EXTRA_CONSTRAINT): add 'U' for register offset
+ addressing.
+ * config/m68k/m68k.md: Add 'U,U' alternative to ColdFire variants of
+ movsi,movhi,movqi insn patterns.
+
2005-05-28 Andrew Pinski <pinskia@physics.uc.edu>
* c-semantics.c (emit_local_var): Remove code for DECL_INITIAL.
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index 522f0dc..c7cc76b 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -735,7 +735,8 @@ extern enum reg_class regno_reg_class[];
`Q' means address register indirect addressing mode.
`S' is for operands that satisfy 'm' when -mpcrel is in effect.
- `T' is for operands that satisfy 's' when -mpcrel is not in effect. */
+ `T' is for operands that satisfy 's' when -mpcrel is not in effect.
+ `U' is for register offset addressing. */
#define EXTRA_CONSTRAINT(OP,CODE) \
(((CODE) == 'S') \
@@ -755,7 +756,13 @@ extern enum reg_class regno_reg_class[];
? (GET_CODE (OP) == MEM \
&& GET_CODE (XEXP (OP, 0)) == REG) \
: \
- 0)))
+ (((CODE) == 'U') \
+ ? (GET_CODE (OP) == MEM \
+ && GET_CODE (XEXP (OP, 0)) == PLUS \
+ && GET_CODE (XEXP (XEXP (OP, 0), 0)) == REG \
+ && GET_CODE (XEXP (XEXP (OP, 0), 1)) == CONST_INT) \
+ : \
+ 0))))
/* Given an rtx X being reloaded into a reg required to be
in class CLASS, return the class of reg to actually use.
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index e674ca2..2603195 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -676,8 +676,8 @@
})
(define_insn ""
- [(set (match_operand:SI 0 "nonimmediate_operand" "=r<Q>,g")
- (match_operand:SI 1 "general_operand" "g,r<Q>"))]
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=r<Q>,g,U")
+ (match_operand:SI 1 "general_operand" "g,r<Q>,U"))]
"TARGET_COLDFIRE"
"* return output_move_simode (operands);")
@@ -706,8 +706,8 @@
"* return output_move_himode (operands);")
(define_insn ""
- [(set (match_operand:HI 0 "nonimmediate_operand" "=r<Q>,g")
- (match_operand:HI 1 "general_operand" "g,r<Q>"))]
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=r<Q>,g,U")
+ (match_operand:HI 1 "general_operand" "g,r<Q>,U"))]
"TARGET_COLDFIRE"
"* return output_move_himode (operands);")
@@ -742,8 +742,8 @@
"* return output_move_qimode (operands);")
(define_insn ""
- [(set (match_operand:QI 0 "nonimmediate_operand" "=d<Q>,dm,d*a")
- (match_operand:QI 1 "general_src_operand" "dmi,d<Q>,di*a"))]
+ [(set (match_operand:QI 0 "nonimmediate_operand" "=d<Q>,dm,U,d*a")
+ (match_operand:QI 1 "general_src_operand" "dmi,d<Q>,U,di*a"))]
"TARGET_COLDFIRE"
"* return output_move_qimode (operands);")