aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1993-08-08 15:10:02 -0700
committerJim Wilson <wilson@gcc.gnu.org>1993-08-08 15:10:02 -0700
commit302484ff4a3f38eedece5cc70d0cce7698689f12 (patch)
treeaaed0982d8740a60a4e39feed2ef919586ebe1ca
parent96f69de58d87a0a58f6bfebfbf746ee87d6146f8 (diff)
downloadgcc-302484ff4a3f38eedece5cc70d0cce7698689f12.zip
gcc-302484ff4a3f38eedece5cc70d0cce7698689f12.tar.gz
gcc-302484ff4a3f38eedece5cc70d0cce7698689f12.tar.bz2
(reg_or_0_operand): Use fp_zero_operand.
(fp_zero_operand): New function. From-SVN: r5113
-rw-r--r--gcc/config/sparc/sparc.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index ae0c45e..6f0f389 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -96,13 +96,28 @@ reg_or_0_operand (op, mode)
{
if (op == const0_rtx || register_operand (op, mode))
return 1;
- if (GET_CODE (op) == CONST_DOUBLE
+ if (GET_MODE (op) == DImode && GET_CODE (op) == CONST_DOUBLE
&& CONST_DOUBLE_HIGH (op) == 0
&& CONST_DOUBLE_LOW (op) == 0)
return 1;
+ if (GET_MODE_CLASS (GET_MODE (op)) == MODE_FLOAT
+ && GET_CODE (op) == CONST_DOUBLE
+ && fp_zero_operand (op))
+ return 1;
return 0;
}
+/* Nonzero if OP is a floating point value with value 0.0. */
+int
+fp_zero_operand (op)
+ rtx op;
+{
+ REAL_VALUE_TYPE r;
+
+ REAL_VALUE_FROM_CONST_DOUBLE (r, op);
+ return REAL_VALUES_EQUAL (r, dconst0);
+}
+
/* Nonzero if OP can appear as the dest of a RESTORE insn. */
int
restore_operand (op, mode)