summaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-06 02:30:39 +0000
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-06 02:30:39 +0000
commita1000ec6cd72a6e83b95dd969bd2e95504aa047f (patch)
tree52f5f0d8f590ea0ca4c6cb014b86be4ce68e1471 /gcc/expr.c
parent7faec079cc2ffbbe5d379c7205ebbd7e068b8207 (diff)
downloadgcc-a1000ec6cd72a6e83b95dd969bd2e95504aa047f.tar.gz
Allow PARALLEL return value for complex type represented as a CONCAT.
* expr.c (emit_group_load): Allow src to be a CONCAT. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@28546 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index a76ee1a270d..6cbd69945e8 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1967,6 +1967,17 @@ emit_group_load (dst, orig_src, ssize, align)
plus_constant (XEXP (src, 0),
bytepos)));
}
+ else if (GET_CODE (src) == CONCAT)
+ {
+ if (bytepos == 0
+ && bytelen == GET_MODE_SIZE (GET_MODE (XEXP (src, 0))))
+ tmps[i] = XEXP (src, 0);
+ else if (bytepos == GET_MODE_SIZE (GET_MODE (XEXP (src, 0)))
+ && bytelen == GET_MODE_SIZE (GET_MODE (XEXP (src, 1))))
+ tmps[i] = XEXP (src, 1);
+ else
+ abort ();
+ }
else
{
tmps[i] = extract_bit_field (src, bytelen*BITS_PER_UNIT,