PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / pr61375.c
blob325f340932f925986af4687d25655dd61feb0deb
1 #ifdef __UINT64_TYPE__
2 typedef __UINT64_TYPE__ uint64_t;
3 #else
4 typedef unsigned long long uint64_t;
5 #endif
7 #ifndef __SIZEOF_INT128__
8 #define __int128 long long
9 #endif
11 /* Some version of bswap optimization would ICE when analyzing a mask constant
12 too big for an uint64_t variable (PR210931). */
14 __attribute__ ((noinline, noclone)) uint64_t
15 uint128_central_bitsi_ior (unsigned __int128 in1, uint64_t in2)
17 __int128 mask = (__int128)0xffff << 56;
18 return ((in1 & mask) >> 56) | in2;
21 int
22 main(int argc, char **argv)
24 __int128 in = 1;
25 #ifdef __SIZEOF_INT128__
26 in <<= 64;
27 #endif
28 if (sizeof (uint64_t) * __CHAR_BIT__ != 64)
29 return 0;
30 if (sizeof (unsigned __int128) * __CHAR_BIT__ != 128)
31 return 0;
32 if (uint128_central_bitsi_ior (in, 2) != 0x102)
33 __builtin_abort ();
34 return 0;