(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
adx-addcarryx32-2.c
       1  /* { dg-do run } */
       2  /* { dg-options "-madx -O2" } */
       3  /* { dg-require-effective-target adx } */
       4  
       5  #include <x86intrin.h>
       6  #include "adx-check.h"
       7  
       8  static void
       9  adx_test (void)
      10  {
      11    volatile unsigned char c;
      12    unsigned int x;
      13    volatile unsigned int y, sum_ref;
      14  
      15    c = 0;
      16    x = y = 0xFFFFFFFF;
      17    sum_ref = 0xFFFFFFFE;
      18  
      19    /* X = 0xFFFFFFFF, Y = 0xFFFFFFFF, C = 0.  */
      20    c = _addcarryx_u32 (c, x, y, &x);
      21    /* X = 0xFFFFFFFE, Y = 0xFFFFFFFF, C = 1.  */
      22    c = _addcarryx_u32 (c, x, y, &x);
      23    /* X = 0xFFFFFFFE, Y = 0xFFFFFFFF, C = 1.  */
      24  
      25    if (x != sum_ref)
      26      abort ();
      27  
      28    c = 0;
      29    x = y = 0xFFFFFFFF;
      30    sum_ref = 0xFFFFFFFE;
      31  
      32    /* X = 0xFFFFFFFF, Y = 0xFFFFFFFF, C = 0.  */
      33    c = _addcarry_u32 (c, x, y, &x);
      34    /* X = 0xFFFFFFFE, Y = 0xFFFFFFFF, C = 1.  */
      35    c = _addcarry_u32 (c, x, y, &x);
      36    /* X = 0xFFFFFFFE, Y = 0xFFFFFFFF, C = 1.  */
      37  
      38    if (x != sum_ref)
      39      abort ();
      40  
      41    c = 0;
      42    x = 1;
      43    y = 0;
      44    sum_ref = 0x0;
      45  
      46    /* X = 0x00000001, Y = 0x00000000, C = 0.  */
      47    c = _subborrow_u32 (c, y, x, &x);
      48    /* X = 0xFFFFFFFF, Y = 0x00000000, C = 1.  */
      49    c = _subborrow_u32 (c, y, x, &x);
      50    /* X = 0xFFFFFFFF, Y = 0xFFFFFFFF, C = 1.  */
      51  
      52    if (x != sum_ref)
      53      abort ();
      54  }