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
      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
      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  }