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 8static void 9adx_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, x, y, &x); 48 /* X = 0xFFFFFFFF, Y = 0x00000000, C = 1. */ 49 c = _subborrow_u32 (c, x, y, &x); 50 /* X = 0xFFFFFFFF, Y = 0xFFFFFFFF, C = 1. */ 51 52 if (x != sum_ref) 53 abort (); 54} 55