1/* { dg-do compile } */ 2/* { dg-options "-O2 -ftree-vectorize -mavx -mtune=generic" } */ 3/* { dg-skip-if "" { x86_64-*-mingw* } { "*" } { "" } } */ 4/* { dg-final { scan-assembler "and\[lq\]?\[\\t \]*\\$-32,\[\\t \]*%\[re\]?sp" } } */ 5/* { dg-final { scan-assembler "vmovaps\[\\t \]*%ymm" } } */ 6 7extern void abort (void); 8 9static float Yf[] = { 2.0, -2.0, -2.0, -2.0, -2.0, 2.0, -0.0, __builtin_inff () }; 10static const float Zf[] = { 1.0, -1.0, -1.0, -0.0, -0.0, 0.0, -__builtin_inff (), __builtin_nanf ("") }; 11 12void testf (void) 13{ 14 float xxxxx[8]; 15 int i; 16 xxxxx[0] = __builtin_copysignf (1.0, Yf[0]); 17 xxxxx[1] = __builtin_copysignf (1.0, Yf[1]); 18 xxxxx[2] = __builtin_copysignf (-1.0, Yf[2]); 19 xxxxx[3] = __builtin_copysignf (0.0, Yf[3]); 20 xxxxx[4] = __builtin_copysignf (-0.0, Yf[4]); 21 xxxxx[5] = __builtin_copysignf (-0.0, Yf[5]); 22 xxxxx[6] = __builtin_copysignf (__builtin_inff (), Yf[6]); 23 xxxxx[7] = __builtin_copysignf (-__builtin_nanf (""), Yf[7]); 24 for (i = 0; i < 8; ++i) 25 if (__builtin_memcmp (xxxxx+i, Zf+i, sizeof(float)) != 0) 26 abort (); 27} 28