Merge from mainline (165734:167278).
[official-gcc/graphite-test-results.git] / gcc / testsuite / gcc.target / i386 / fma4-builtin.c
blob5659cf4f02f6605f3ac5e14133b630840482dc4e
1 /* Test that the compiler properly generates floating point multiply
2 and add instructions FMA4 systems. */
4 /* { dg-do compile } */
5 /* { dg-require-effective-target lp64 } */
6 /* { dg-options "-O2 -mfma4" } */
8 #ifndef __FP_FAST_FMAF
9 # error "__FP_FAST_FMAF should be defined"
10 #endif
11 #ifndef __FP_FAST_FMA
12 # error "__FP_FAST_FMA should be defined"
13 #endif
15 float
16 flt_mul_add (float a, float b, float c)
18 return __builtin_fmaf (a, b, c);
21 double
22 dbl_mul_add (double a, double b, double c)
24 return __builtin_fma (a, b, c);
27 float
28 flt_mul_sub (float a, float b, float c)
30 return __builtin_fmaf (a, b, -c);
33 double
34 dbl_mul_sub (double a, double b, double c)
36 return __builtin_fma (a, b, -c);
39 float
40 flt_neg_mul_add_1 (float a, float b, float c)
42 return __builtin_fmaf (-a, b, c);
45 double
46 dbl_neg_mul_add_1 (double a, double b, double c)
48 return __builtin_fma (-a, b, c);
51 float
52 flt_neg_mul_add_2 (float a, float b, float c)
54 return __builtin_fmaf (a, -b, c);
57 double
58 dbl_neg_mul_add_2 (double a, double b, double c)
60 return __builtin_fma (a, -b, c);
63 float
64 flt_neg_mul_sub (float a, float b, float c)
66 return __builtin_fmaf (-a, b, -c);
69 double
70 dbl_neg_mul_sub (double a, double b, double c)
72 return __builtin_fma (-a, b, -c);
75 /* { dg-final { scan-assembler-times "vfmaddss" 1 } } */
76 /* { dg-final { scan-assembler-times "vfmaddsd" 1 } } */
77 /* { dg-final { scan-assembler-times "vfmsubss" 1 } } */
78 /* { dg-final { scan-assembler-times "vfmsubsd" 1 } } */
79 /* { dg-final { scan-assembler-times "vfnmaddss" 2 } } */
80 /* { dg-final { scan-assembler-times "vfnmaddsd" 2 } } */
81 /* { dg-final { scan-assembler-times "vfnmsubss" 1 } } */
82 /* { dg-final { scan-assembler-times "vfnmsubsd" 1 } } */