* 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
+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
)
(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.
switch (code)
{
case LT:
- ret = "n";
+ ret = "lt";
break;
case GE:
- ret = "pz";
+ ret = "ge";
break;
case GT:
ret = "gt";
{
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;
(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"