diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1994-03-21 14:05:05 -0800 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1994-03-21 14:05:05 -0800 |
commit | 387fd02d7e0ec8bdca519b096dc464d2f267a979 (patch) | |
tree | 89086df532e2a473dbc29162958a41814475b275 /gcc | |
parent | ce0e109b79a541106262867f004c937fac67c47c (diff) | |
download | gcc-387fd02d7e0ec8bdca519b096dc464d2f267a979.zip gcc-387fd02d7e0ec8bdca519b096dc464d2f267a979.tar.gz gcc-387fd02d7e0ec8bdca519b096dc464d2f267a979.tar.bz2 |
(seq, sne, sgt, slt, sge, sle): Add support for
!TARGET_HARD_QUAD.
From-SVN: r6839
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/sparc/sparc.md | 58 |
1 files changed, 52 insertions, 6 deletions
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index fa937c1..c6f6392 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -264,12 +264,19 @@ (eq:SI (match_dup 1) (const_int 0)))] "" " -{ if (GET_MODE (sparc_compare_op0) == SImode) +{ + if (GET_MODE (sparc_compare_op0) == SImode) { emit_insn (gen_seq_special (operands[0], sparc_compare_op0, sparc_compare_op1)); DONE; } + else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD) + { + emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, EQ); + emit_insn (gen_sne (operands[0])); + DONE; + } else operands[1] = gen_compare_reg (EQ, sparc_compare_op0, sparc_compare_op1); }") @@ -279,12 +286,19 @@ (ne:SI (match_dup 1) (const_int 0)))] "" " -{ if (GET_MODE (sparc_compare_op0) == SImode) +{ + if (GET_MODE (sparc_compare_op0) == SImode) { emit_insn (gen_sne_special (operands[0], sparc_compare_op0, sparc_compare_op1)); DONE; } + else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD) + { + emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, NE); + emit_insn (gen_sne (operands[0])); + DONE; + } else operands[1] = gen_compare_reg (NE, sparc_compare_op0, sparc_compare_op1); }") @@ -294,28 +308,60 @@ (gt:SI (match_dup 1) (const_int 0)))] "" " -{ operands[1] = gen_compare_reg (GT, sparc_compare_op0, sparc_compare_op1); }") +{ + if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD) + { + emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GT); + emit_insn (gen_sne (operands[0])); + DONE; + } + operands[1] = gen_compare_reg (GT, sparc_compare_op0, sparc_compare_op1); +}") (define_expand "slt" [(set (match_operand:SI 0 "register_operand" "") (lt:SI (match_dup 1) (const_int 0)))] "" " -{ operands[1] = gen_compare_reg (LT, sparc_compare_op0, sparc_compare_op1); }") +{ + if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD) + { + emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LT); + emit_insn (gen_sne (operands[0])); + DONE; + } + operands[1] = gen_compare_reg (LT, sparc_compare_op0, sparc_compare_op1); +}") (define_expand "sge" [(set (match_operand:SI 0 "register_operand" "") (ge:SI (match_dup 1) (const_int 0)))] "" " -{ operands[1] = gen_compare_reg (GE, sparc_compare_op0, sparc_compare_op1); }") +{ + if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD) + { + emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GE); + emit_insn (gen_sne (operands[0])); + DONE; + } + operands[1] = gen_compare_reg (GE, sparc_compare_op0, sparc_compare_op1); +}") (define_expand "sle" [(set (match_operand:SI 0 "register_operand" "") (le:SI (match_dup 1) (const_int 0)))] "" " -{ operands[1] = gen_compare_reg (LE, sparc_compare_op0, sparc_compare_op1); }") +{ + if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD) + { + emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LE); + emit_insn (gen_sne (operands[0])); + DONE; + } + operands[1] = gen_compare_reg (LE, sparc_compare_op0, sparc_compare_op1); +}") (define_expand "sgtu" [(set (match_operand:SI 0 "register_operand" "") |