1 /* PR target/81300 */
2 /* { dg-do run { target { ! ia32 } } } */
3 /* { dg-options "-O2" } */
4 
5 int
6 __attribute__((noinline, noclone))
foo(void)7 foo (void)
8 {
9   unsigned long long _discard = 0, zero = 0, maxull = 0;
10   unsigned char zero1 = __builtin_ia32_addcarryx_u64 (0, 0, 0, &_discard);
11   unsigned char zero2 = __builtin_ia32_addcarryx_u64 (zero1, 0, 0, &zero);
12   __builtin_ia32_sbb_u64 (0x0, 2, -1, &_discard);
13   unsigned char one = __builtin_ia32_sbb_u64 (0, zero, 1, &maxull);
14   unsigned long long x = __builtin_ia32_sbb_u64 (one, zero2, 0, &_discard);
15 
16   unsigned long long z1 = 0;
17   __asm__ ("mov{q}\t{%1, %0|%0, %1}" : "+r" (z1) : "r" (x));
18   unsigned long long z2 = 3;
19   __asm__ ("mov{q}\t{%1, %0|%0, %1}" : "+r" (z2) : "r" (x));
20 
21   return 1 - (z1 | z2);
22 }
23 
main()24 int main ()
25 {
26   if (foo ())
27     __builtin_abort ();
28 
29   return 0;
30 }
31