PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / pr65401.c
blob82cfafc04c0614b3acc1e4cb6a8821ce64b4f65d
1 /* PR rtl-optimization/65401 */
3 struct S { unsigned short s[64]; };
5 __attribute__((noinline, noclone)) void
6 foo (struct S *x)
8 unsigned int i;
9 unsigned char *s;
11 s = (unsigned char *) x->s;
12 for (i = 0; i < 64; i++)
13 x->s[i] = s[i * 2] | (s[i * 2 + 1] << 8);
16 __attribute__((noinline, noclone)) void
17 bar (struct S *x)
19 unsigned int i;
20 unsigned char *s;
22 s = (unsigned char *) x->s;
23 for (i = 0; i < 64; i++)
24 x->s[i] = (s[i * 2] << 8) | s[i * 2 + 1];
27 int
28 main ()
30 unsigned int i;
31 struct S s;
32 if (sizeof (unsigned short) != 2)
33 return 0;
34 for (i = 0; i < 64; i++)
35 s.s[i] = i + ((64 - i) << 8);
36 foo (&s);
37 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
38 for (i = 0; i < 64; i++)
39 if (s.s[i] != (64 - i) + (i << 8))
40 __builtin_abort ();
41 #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
42 for (i = 0; i < 64; i++)
43 if (s.s[i] != i + ((64 - i) << 8))
44 __builtin_abort ();
45 #endif
46 for (i = 0; i < 64; i++)
47 s.s[i] = i + ((64 - i) << 8);
48 bar (&s);
49 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
50 for (i = 0; i < 64; i++)
51 if (s.s[i] != (64 - i) + (i << 8))
52 __builtin_abort ();
53 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
54 for (i = 0; i < 64; i++)
55 if (s.s[i] != i + ((64 - i) << 8))
56 __builtin_abort ();
57 #endif
58 return 0;