aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2011-02-03 11:38:35 +0000
committerNick Clifton <nickc@gcc.gnu.org>2011-02-03 11:38:35 +0000
commit6479ed4b0718c1032a5b4ff926897a63cb935c14 (patch)
tree1491923fd5e9f8d9ef2190f4b9931291ba830428
parent65450d64b7ea2c26eb03dd0557703440c24a112a (diff)
downloadgcc-6479ed4b0718c1032a5b4ff926897a63cb935c14.zip
gcc-6479ed4b0718c1032a5b4ff926897a63cb935c14.tar.gz
gcc-6479ed4b0718c1032a5b4ff926897a63cb935c14.tar.bz2
predicates.md (rx_zs_comparison_operator): Remove lt and ge.
* config/rx/predicates.md (rx_zs_comparison_operator): Remove lt and ge. * config/rx/rx.md (abssi2_flags): Use CC_ZSmode rather than CC_ZSOmode. * config/rx/rx.c (rx_print_operand): Use "lt" and "ge" suffixes instead of "n" and "pz". (flags_from_code): LT and GE tests need CC_FLAG_O as well as CC_FLAG_S. From-SVN: r169787
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/rx/predicates.md2
-rw-r--r--gcc/config/rx/rx.c6
-rw-r--r--gcc/config/rx/rx.md5
4 files changed, 19 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1588c6f..f525643 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2011-02-03 Nick Clifton <nickc@redhat.com>
+
+ * config/rx/predicates.md (rx_zs_comparison_operator): Remove
+ lt and ge.
+ * config/rx/rx.md (abssi2_flags): Use CC_ZSmode rather than
+ CC_ZSOmode.
+ * config/rx/rx.c (rx_print_operand): Use "lt" and "ge" suffixes
+ instead of "n" and "pz".
+ (flags_from_code): LT and GE tests need CC_FLAG_O as well as
+ CC_FLAG_S.
+
2011-02-03 Jakub Jelinek <jakub@redhat.com>
PR target/47312
diff --git a/gcc/config/rx/predicates.md b/gcc/config/rx/predicates.md
index 77b3353..82cac42 100644
--- a/gcc/config/rx/predicates.md
+++ b/gcc/config/rx/predicates.md
@@ -284,7 +284,7 @@
)
(define_predicate "rx_zs_comparison_operator"
- (match_code "eq,ne,lt,ge")
+ (match_code "eq,ne")
)
;; GT and LE omitted due to operand swap required.
diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c
index 8199106..839523f 100644
--- a/gcc/config/rx/rx.c
+++ b/gcc/config/rx/rx.c
@@ -450,10 +450,10 @@ rx_print_operand (FILE * file, rtx op, int letter)
switch (code)
{
case LT:
- ret = "n";
+ ret = "lt";
break;
case GE:
- ret = "pz";
+ ret = "ge";
break;
case GT:
ret = "gt";
@@ -2625,7 +2625,7 @@ flags_from_code (enum rtx_code code)
{
case LT:
case GE:
- return CC_FLAG_S;
+ return CC_FLAG_S | CC_FLAG_O;
case GT:
case LE:
return CC_FLAG_S | CC_FLAG_O | CC_FLAG_Z;
diff --git a/gcc/config/rx/rx.md b/gcc/config/rx/rx.md
index 99b46b5..7629a88 100644
--- a/gcc/config/rx/rx.md
+++ b/gcc/config/rx/rx.md
@@ -797,7 +797,10 @@
(set (reg CC_REG)
(compare (abs:SI (match_dup 1))
(const_int 0)))]
- "reload_completed && rx_match_ccmode (insn, CC_ZSOmode)"
+ ;; Note - although the ABS instruction does set the O bit in the processor
+ ;; status word, it does not do so in a way that is comparable with the CMP
+ ;; instruction. Hence we use CC_ZSmode rather than CC_ZSOmode.
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
"@
abs\t%0
abs\t%1, %0"