annotate gcc/testsuite/gcc.dg/20050922-1.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* This revealed a bug when rotates are expanded into
kono
parents:
diff changeset
2 two shifts. */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 /* { dg-do run } */
kono
parents:
diff changeset
5 /* { dg-options "-O1 -std=c99" } */
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 extern void abort (void);
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 #if __INT_MAX__ == 2147483647
kono
parents:
diff changeset
10 typedef unsigned int uint32_t;
kono
parents:
diff changeset
11 #elif __LONG_MAX__ == 2147483647
kono
parents:
diff changeset
12 typedef unsigned long uint32_t;
kono
parents:
diff changeset
13 #else
kono
parents:
diff changeset
14 #error unable to find 32-bit integer type
kono
parents:
diff changeset
15 #endif
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 uint32_t
kono
parents:
diff changeset
18 f (uint32_t *S, int j)
kono
parents:
diff changeset
19 {
kono
parents:
diff changeset
20 uint32_t A, B, k, L[2] = {1234, 5678};
kono
parents:
diff changeset
21 int i, m;
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 A = B = 0;
kono
parents:
diff changeset
24 for (i = 0; i < j; i++)
kono
parents:
diff changeset
25 {
kono
parents:
diff changeset
26 k = (S[i] + A + B) & 0xffffffffL;
kono
parents:
diff changeset
27 A = S[i] =
kono
parents:
diff changeset
28 ((k << (3 & 0x1f)) | ((k & 0xffffffff) >> (32 - (3 & 0x1f))));
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 m = (int) (A + B);
kono
parents:
diff changeset
31 k = (L[i] + A + B) & 0xffffffffL;
kono
parents:
diff changeset
32 B = L[i] =
kono
parents:
diff changeset
33 ((k << (m & 0x1f)) | ((k & 0xffffffff) >> (32 - (m & 0x1f))));
kono
parents:
diff changeset
34 }
kono
parents:
diff changeset
35 return L[0] + L[1];
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 int
kono
parents:
diff changeset
39 main ()
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 uint32_t S[2] = {0xffff, 0xffffff};
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 if (f (S,2)!= 1392607300)
kono
parents:
diff changeset
44 abort();
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 return 0;
kono
parents:
diff changeset
47 }