diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1993-12-10 07:40:23 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1993-12-10 07:40:23 -0500 |
commit | 6f2f831199b6c3562f6c8338ef2e3e2ce1d56521 (patch) | |
tree | 715db0cce24a9324ca5c63740a994819e7f40eed | |
parent | 25c341fa216dca726db5420520af9b8a2508d94f (diff) | |
download | gcc-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.c | 15 |
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 |