1 /* PR target/97387 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -fomit-frame-pointer" } */
4 /* { dg-final { scan-assembler-times "\taddl\t" 1 } } */
5 /* { dg-final { scan-assembler-times "\tadcl\t" 3 } } */
6 /* { dg-final { scan-assembler-times "\tsubl\t" 1 } } */
7 /* { dg-final { scan-assembler-times "\tsbbl\t" 3 } } */
8 /* { dg-final { scan-assembler-not "\tset\[bc]\t" } } */
9 /* { dg-final { scan-assembler-not "\taddb\t" } } */
10 
11 #include <x86intrin.h>
12 
13 void
foo(unsigned int a[4],unsigned int b[4])14 foo (unsigned int a[4], unsigned int b[4])
15 {
16   unsigned char carry = 0;
17   carry = _addcarry_u32 (carry, a[0], b[0], &a[0]);
18   carry = _addcarry_u32 (carry, a[1], b[1], &a[1]);
19   carry = _addcarry_u32 (carry, a[2], b[2], &a[2]);
20   _addcarry_u32 (carry, a[3], b[3], &a[3]);
21 }
22 
23 void
bar(unsigned int a[4],unsigned int b[4])24 bar (unsigned int a[4], unsigned int b[4])
25 {
26   unsigned char carry = 0;
27   carry = _subborrow_u32 (carry, a[0], b[0], &a[0]);
28   carry = _subborrow_u32 (carry, a[1], b[1], &a[1]);
29   carry = _subborrow_u32 (carry, a[2], b[2], &a[2]);
30   _subborrow_u32 (carry, a[3], b[3], &a[3]);
31 }
32