diff options
author | Richard Earnshaw <erich@gnu.org> | 1996-02-19 11:57:13 +0000 |
---|---|---|
committer | Richard Earnshaw <erich@gnu.org> | 1996-02-19 11:57:13 +0000 |
commit | a5559dbc829b3c8e1ea5a7120f3c14397e547ecf (patch) | |
tree | 095251b7affbbbbb96a1f553708dc2613a58d652 /gcc/emit-rtl.c | |
parent | 4ae27eb62f59baed4be6cc11d154ac24db4a235d (diff) | |
download | gcc-a5559dbc829b3c8e1ea5a7120f3c14397e547ecf.zip gcc-a5559dbc829b3c8e1ea5a7120f3c14397e547ecf.tar.gz gcc-a5559dbc829b3c8e1ea5a7120f3c14397e547ecf.tar.bz2 |
(operand_subword): For 32-bit targets, return
the appropriate subword of extended precision CONST_DOUBLEs.
From-SVN: r11300
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 748bb29..f04ba5f 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1157,6 +1157,20 @@ operand_subword (op, i, validate_address, mode) else abort (); } + else if (HOST_BITS_PER_WIDE_INT >= BITS_PER_WORD + && GET_MODE_CLASS (mode) == MODE_FLOAT + && GET_MODE_BITSIZE (mode) > 64 + && GET_CODE (op) == CONST_DOUBLE) + { + long k[4]; + REAL_VALUE_TYPE rv; + + REAL_VALUE_FROM_CONST_DOUBLE (rv, op); + REAL_VALUE_TO_TARGET_LONG_DOUBLE (rv, k); + + if (BITS_PER_WORD == 32) + return GEN_INT ((HOST_WIDE_INT) k[i]); + } #else /* no REAL_ARITHMETIC */ if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && HOST_BITS_PER_WIDE_INT == BITS_PER_WORD) |