diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1588c6f00d7211ff6a996e1509010bf8a6cbf69b..f525643c9e9c659b24a7dbea4d54817897448dfb 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 77b3353ac3e338ced850c4d53b7e06986a364b51..82cac42dadfbc57ea26b69d938c758d4ca9bf301 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 81991067b838ca9ff547cb1c003632a64ca7f5b5..839523fc873eff750b983224a93826ab62bdc043 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 99b46b5b2e28116c85f58abc0ba079248799a718..7629a886e5c709d990d9eae85ede21a0a369a59c 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"