| /* PR target/95046 */ |
| /* { dg-do compile { target { ! ia32 } } } */ |
| /* { dg-options "-O3 -msse2" } */ |
| |
| |
| float r[2], a[2], b[2]; |
| |
| float copysignf (float, float); |
| |
| void |
| test_copysign (void) |
| { |
| for (int i = 0; i < 2; i++) |
| r[i] = copysignf (a[i], b[i]); |
| } |
| |
| /* { dg-final { scan-assembler "\tv?andnps" } } */ |
| |
| void |
| test_xorsign (void) |
| { |
| for (int i = 0; i < 2; i++) |
| r[i] = a[i] * copysignf (1.0f, b[i]); |
| } |
| |
| /* { dg-final { scan-assembler "\tv?xorps" } } */ |
| |
| int s[2]; |
| |
| int signbitf (float); |
| |
| void |
| test_signbitf (void) |
| { |
| for (int i = 0; i < 2; i++) |
| s[i] = signbitf (a[i]); |
| } |
| |
| /* { dg-final { scan-assembler "\tv?psrld" } } */ |