aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorCharles Hannum <mycroft@gnu.org>1992-07-07 02:14:24 +0000
committerCharles Hannum <mycroft@gnu.org>1992-07-07 02:14:24 +0000
commit7529ac93b8c05abf91c607f259d5d5c4907cc6d4 (patch)
tree440caa60c123066e2caddabf2e315c5ffd336134 /gcc/emit-rtl.c
parent592252adb8d84c69f69c7003913dcd02359b06c3 (diff)
downloadgcc-7529ac93b8c05abf91c607f259d5d5c4907cc6d4.zip
gcc-7529ac93b8c05abf91c607f259d5d5c4907cc6d4.tar.gz
gcc-7529ac93b8c05abf91c607f259d5d5c4907cc6d4.tar.bz2
entered into RCS
From-SVN: r1496
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r--gcc/emit-rtl.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 8af05c5..250eb81 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -804,15 +804,19 @@ operand_subword (op, i, validate_address, mode)
&& GET_MODE_CLASS (mode) == MODE_FLOAT
&& GET_MODE_SIZE (mode) == 2 * UNITS_PER_WORD
&& GET_CODE (op) == CONST_DOUBLE)
- return GEN_INT (i ^ (WORDS_BIG_ENDIAN !=
-/* The constant is stored in the host's word-ordering,
- but we want to access it in the target's word-ordering. */
+ {
+ /* The constant is stored in the host's word-ordering,
+ but we want to access it in the target's word-ordering. Some
+ compilers don't like a conditional inside macro args, so we have two
+ copies of the return. */
#ifdef HOST_WORDS_BIG_ENDIAN
- 1
+ return GEN_INT (i == WORDS_BIG_ENDIAN
+ ? CONST_DOUBLE_HIGH (op) : CONST_DOUBLE_LOW (op));
#else
- 0
+ return GEN_INT (i != WORDS_BIG_ENDIAN
+ ? CONST_DOUBLE_HIGH (op) : CONST_DOUBLE_LOW (op));
#endif
- ) ? CONST_DOUBLE_HIGH (op) : CONST_DOUBLE_LOW (op));
+ }
/* Single word float is a little harder, since single- and double-word
values often do not have the same high-order bits. We have already