From: Richard Kenner Date: Mon, 25 May 1992 21:21:34 +0000 (-0400) Subject: *** empty log message *** X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b3bf132d2c543fe8c52b31e4139435895c63142f;p=gcc.git *** empty log message *** From-SVN: r1084 --- diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index ad8089bec12..6de03151295 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -565,8 +565,9 @@ gen_lowpart_common (mode, x) value. If the machine-parameters allow it, simulate that union here and return the result. */ - else if (HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT - && HOST_BITS_PER_INT == BITS_PER_WORD + else if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT + && HOST_BITS_PER_INT == BITS_PER_WORD) + || flag_pretend_float) && GET_MODE_CLASS (mode) == MODE_FLOAT && (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE) && GET_MODE (x) == VOIDmode @@ -589,13 +590,27 @@ gen_lowpart_common (mode, x) return immed_real_const_1 (u.d, mode); } + /* Similarly, if this is converting a floating-point value into a + single-word integer. Only do this is the host and target parameters are + compatible. */ + + else if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT + && HOST_BITS_PER_INT == BITS_PER_WORD) + || flag_pretend_float) + && GET_MODE_CLASS (mode) == MODE_INT + && GET_CODE (x) == CONST_DOUBLE + && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT + && GET_MODE_BITSIZE (mode) == BITS_PER_WORD) + return operand_subword (x, 0, 0, GET_MODE (x)); + /* Similarly, if this is converting a floating-point value into a two-word integer, we can do this one word at a time and make an integer. Only do this is the host and target parameters are compatible. */ - else if (HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT - && HOST_BITS_PER_INT == BITS_PER_WORD + else if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT + && HOST_BITS_PER_INT == BITS_PER_WORD) + || flag_pretend_float) && GET_MODE_CLASS (mode) == MODE_INT && GET_CODE (x) == CONST_DOUBLE && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT