* config/spu/spu.c (array_to_constant): Fix (latent) wrong-code
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 9 Feb 2009 14:35:38 +0000 (14:35 +0000)
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 9 Feb 2009 14:35:38 +0000 (14:35 +0000)
generation due to implicit sign extension.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144034 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/spu/spu.c

index b1e2ae8..267bada 100644 (file)
@@ -1,3 +1,8 @@
+2009-02-09  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       * config/spu/spu.c (array_to_constant): Fix (latent) wrong-code
+       generation due to implicit sign extension.
+
 2009-02-09  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR middle-end/38981
index cd7f6ed..75f7853 100644 (file)
@@ -4722,9 +4722,8 @@ array_to_constant (enum machine_mode mode, unsigned char arr[16])
     }
   if (mode == DFmode)
     {
-      val = (arr[0] << 24) | (arr[1] << 16) | (arr[2] << 8) | arr[3];
-      val <<= 32;
-      val |= (arr[4] << 24) | (arr[5] << 16) | (arr[6] << 8) | arr[7];
+      for (i = 0, val = 0; i < 8; i++)
+       val = (val << 8) | arr[i];
       return hwint_to_const_double (DFmode, val);
     }