Allow PARALLEL return value for complex type represented as a CONCAT.
authorJim Wilson <wilson@cygnus.com>
Fri, 6 Aug 1999 02:30:39 +0000 (02:30 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Fri, 6 Aug 1999 02:30:39 +0000 (19:30 -0700)
* expr.c (emit_group_load): Allow src to be a CONCAT.

From-SVN: r28546

gcc/ChangeLog
gcc/expr.c

index 58ecbdf2fe22acfce8d3af3dee8f0442460486ec..4ef10b1b46b86c83577d4788dd7f203b8847821b 100644 (file)
@@ -1,3 +1,7 @@
+Thu Aug  5 19:29:39 1999  Jim Wilson  <wilson@cygnus.com>
+
+       * expr.c (emit_group_load): Allow src to be a CONCAT.
+
 Thu Aug  5 22:27:15 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * config/sh/lib1funcs.asm (___movstrSI0): Change or r0,r0,r0 to nop.
index a76ee1a270d3aadeb4a53ce883c4b594f309213b..6cbd69945e8655a7fd567a921308e3747b6de3bd 100644 (file)
@@ -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,