OSDN Git Service

* gcc.dg/20050922-1.c: Skip on Solaris 2.5.1 to 9.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / 20050922-1.c
1 /* This revealed a bug when rotates are expanded into
2    two shifts.  */
3
4 /* { dg-do run } */
5 /* { dg-options "-O1 -std=c99" } */
6 /* { dg-skip-if "" { *-*-solaris2.5.1 *-*-solaris2.[5-9] } "*" "" } */
7
8 #include <stdint.h>
9
10 extern void abort (void);
11
12 uint32_t
13 f (uint32_t *S, int j)
14 {
15   uint32_t A, B, k, L[2] = {1234, 5678};
16   int i, m;
17
18   A = B = 0;
19   for (i = 0; i < j; i++)
20     {
21       k = (S[i] + A + B) & 0xffffffffL;
22       A = S[i] =
23       ((k << (3 & 0x1f)) | ((k & 0xffffffff) >> (32 - (3 & 0x1f)))); 
24
25       m = (int) (A + B);
26       k = (L[i] + A + B) & 0xffffffffL;
27       B = L[i] =
28         ((k << (m & 0x1f)) | ((k & 0xffffffff) >> (32 - (m & 0x1f))));
29     }
30   return L[0] + L[1];
31 }
32
33 int
34 main ()
35 {
36   uint32_t S[2] = {0xffff, 0xffffff};
37
38   if (f (S,2)!= 1392607300)
39     abort();
40
41   return 0;
42 }