/* { dg-do compile { target int128 } } */ /* { dg-options "-Og -march=cascadelake" } */ typedef unsigned char u8; typedef unsigned short u16; typedef unsigned long long u64; u8 g; void foo (__int128 i, u8 *r) { u16 a = __builtin_sub_overflow_p (0, i * g, 0); i ^= g & i; u64 s = (i >> 64) + i; *r = ((union { u16 a; u8 b[2]; }) a).b[1] + s; } int bar (void) { u8 x; foo (5, &x); if (x != 5) __builtin_abort (); return 0; } /* { dg-final { scan-assembler-not "andn\[ \\t\]+%rdi, %r11, %rdi" } } */