diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1588c6f00d7..f525643c9e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2011-02-03 Nick Clifton + + * 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 PR target/47312 diff --git a/gcc/config/rx/predicates.md b/gcc/config/rx/predicates.md index 77b3353ac3e..82cac42dadf 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 81991067b83..839523fc873 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 99b46b5b2e2..7629a886e5c 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"