aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1994-03-21 14:05:05 -0800
committerJim Wilson <wilson@gcc.gnu.org>1994-03-21 14:05:05 -0800
commit387fd02d7e0ec8bdca519b096dc464d2f267a979 (patch)
tree89086df532e2a473dbc29162958a41814475b275 /gcc
parentce0e109b79a541106262867f004c937fac67c47c (diff)
downloadgcc-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.md58
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" "")