summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>2007-08-31 14:27:19 +0000
committernickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>2007-08-31 14:27:19 +0000
commitc171b8cfaaa9c0f84227d8d9d77cf01a3809df4d (patch)
tree1941024908613b72d58e911912e79a36cf7b20f9
parent4f4473ffb33cbcd346042013b9f02807a54b8066 (diff)
downloadppe42-gcc-c171b8cfaaa9c0f84227d8d9d77cf01a3809df4d.tar.gz
ppe42-gcc-c171b8cfaaa9c0f84227d8d9d77cf01a3809df4d.zip
PR target/33132
* config/m32r/constraints.md: Add W constraint for integer zero. * config/m32r/m32r.md (get_pc): Use W and i constraints. Fix length calculation by using alternatives. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127992 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/m32r/constraints.md7
-rw-r--r--gcc/config/m32r/m32r.md17
3 files changed, 20 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index efbaba08c57..50832cf78bf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2007-08-31 Nick Clifton <nickc@redhat.com>
+
+ PR target/33132
+ * config/m32r/constraints.md: Add W constraint for integer zero.
+ * config/m32r/m32r.md (get_pc): Use W and i constraints.
+ Fix length calculation by using alternatives.
+
2007-08-31 Richard Sandiford <richard@codesourcery.com>
* optabs.c (shift_optab_p, commutative_optab_p): New functions,
diff --git a/gcc/config/m32r/constraints.md b/gcc/config/m32r/constraints.md
index 3608802c777..da126c27c4b 100644
--- a/gcc/config/m32r/constraints.md
+++ b/gcc/config/m32r/constraints.md
@@ -39,6 +39,7 @@
;; S is for stores with pre {inc,dec}rement
;; T is for indirect of a pointer.
;; U is for loads with post increment.
+;; W is used for an immediate value of 0.
;;
;; Register constraints
@@ -128,3 +129,9 @@
"A load with post increment."
(and (match_code "mem")
(match_test "LOAD_POSTINC_P (GET_MODE (op), XEXP (op, 0))")))
+
+(define_constraint "W"
+ "zero immediate."
+ (and (match_code "const_int")
+ (match_test "ival == 0")))
+
diff --git a/gcc/config/m32r/m32r.md b/gcc/config/m32r/m32r.md
index e875f96b6e9..84cf4f954e0 100644
--- a/gcc/config/m32r/m32r.md
+++ b/gcc/config/m32r/m32r.md
@@ -2637,19 +2637,14 @@
(define_insn "get_pc"
[(clobber (reg:SI 14))
- (set (match_operand 0 "register_operand" "=r")
+ (set (match_operand 0 "register_operand" "=r,r")
(unspec [(match_operand 1 "" "")] UNSPEC_GET_PC))
- (use (match_operand:SI 2 "immediate_operand" ""))]
+ (use (match_operand:SI 2 "immediate_operand" "W,i"))]
"flag_pic"
- "*
-{
- if (INTVAL(operands[2]))
- return \"bl.s .+4\;ld24 %0,%#%1\;add %0,lr\";
- else
- return \"bl.s .+4\;seth %0,%#shigh(%1)\;add3 %0,%0,%#low(%1+4)\;add %0,lr\";}"
- [(set (attr "length") (if_then_else (ne (match_dup 2) (const_int 0))
- (const_int 8)
- (const_int 12)))])
+ "@
+ bl.s .+4\;seth %0,%#shigh(%1)\;add3 %0,%0,%#low(%1+4)\;add %0,lr
+ bl.s .+4\;ld24 %0,%#%1\;add %0,lr"
+ [(set_attr "length" "12,8")])
(define_expand "builtin_setjmp_receiver"
[(label_ref (match_operand 0 "" ""))]
OpenPOWER on IntegriCloud