aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-12-10 07:40:23 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-12-10 07:40:23 -0500
commit6f2f831199b6c3562f6c8338ef2e3e2ce1d56521 (patch)
tree715db0cce24a9324ca5c63740a994819e7f40eed
parent25c341fa216dca726db5420520af9b8a2508d94f (diff)
downloadgcc-6f2f831199b6c3562f6c8338ef2e3e2ce1d56521.zip
gcc-6f2f831199b6c3562f6c8338ef2e3e2ce1d56521.tar.gz
gcc-6f2f831199b6c3562f6c8338ef2e3e2ce1d56521.tar.bz2
(easy_fp_constant): Use input_operand to see if each word can be
loaded in one insn. From-SVN: r6200
-rw-r--r--gcc/config/rs6000/rs6000.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 415c90e..0477d4a 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -287,13 +287,9 @@ reg_or_cint_operand (op, mode)
return GET_CODE (op) == CONST_INT || gpc_reg_operand (op, mode);
}
-/* Return 1 if the operand is a CONST_DOUBLE and it can be put into a
- register with one instruction per word. For SFmode, this means that
- the low 16-bits are zero. For DFmode, it means the low 16-bits of
- the first word are zero and the high 16 bits of the second word
- are zero (usually all bits in the low-order word will be zero).
-
- We only do this if we can safely read CONST_DOUBLE_{LOW,HIGH}. */
+/* Return 1 if the operand is a CONST_DOUBLE and it can be put into a register
+ with one instruction per word. We only do this if we can safely read
+ CONST_DOUBLE_{LOW,HIGH}. */
int
easy_fp_constant (op, mode)
@@ -310,12 +306,11 @@ easy_fp_constant (op, mode)
high = operand_subword (op, 0, 0, mode);
low = operand_subword (op, 1, 0, mode);
- if (high == 0 || GET_CODE (high) != CONST_INT || (INTVAL (high) & 0xffff))
+ if (high == 0 || ! input_operand (high, word_mode))
return 0;
return (mode == SFmode
- || (low != 0 && GET_CODE (low) == CONST_INT
- && (INTVAL (low) & 0xffff0000) == 0));
+ || (low != 0 && input_operand (low, word_mode)));
}
/* Return 1 if the operand is either a floating-point register, a pseudo