aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorJim Wilson <wilson@cygnus.com>1999-08-06 02:30:39 +0000
committerJim Wilson <wilson@gcc.gnu.org>1999-08-05 19:30:39 -0700
commit7c4a6db02372eada584693014aa9c4f4ab9d6d4e (patch)
tree52f5f0d8f590ea0ca4c6cb014b86be4ce68e1471 /gcc/expr.c
parent9d29e7afe1d191b14c296cbcf72f53fdbaa46b95 (diff)
downloadgcc-7c4a6db02372eada584693014aa9c4f4ab9d6d4e.zip
gcc-7c4a6db02372eada584693014aa9c4f4ab9d6d4e.tar.gz
gcc-7c4a6db02372eada584693014aa9c4f4ab9d6d4e.tar.bz2
Allow PARALLEL return value for complex type represented as a CONCAT.
* expr.c (emit_group_load): Allow src to be a CONCAT. From-SVN: r28546
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 a76ee1a..6cbd699 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,