OLD | NEW |
1 /* Test whether using target specific options, we can generate SSE5 code. */ | 1 /* Test whether using target specific options, we can generate FMA4 code. */ |
2 /* { dg-do compile } */ | 2 /* { dg-do compile } */ |
3 /* { dg-require-effective-target lp64 } */ | 3 /* { dg-require-effective-target lp64 } */ |
4 /* { dg-options "-O2 -march=k8" } */ | 4 /* { dg-options "-O2 -march=k8" } */ |
5 | 5 |
6 extern void exit (int); | 6 extern void exit (int); |
7 | 7 |
8 #define SSE5_ATTR __attribute__((__target__("sse5,fused-madd"))) | 8 #define FMA4_ATTR __attribute__((__target__("fma4"))) |
9 extern float flt_mul_add (float a, float b, float c) SSE5_ATTR; | 9 extern float flt_mul_add (float a, float b, float c) FMA4_ATTR; |
10 extern float flt_mul_sub (float a, float b, float c) SSE5_ATTR; | 10 extern float flt_mul_sub (float a, float b, float c) FMA4_ATTR; |
11 extern float flt_neg_mul_add (float a, float b, float c) SSE5_ATTR; | 11 extern float flt_neg_mul_add (float a, float b, float c) FMA4_ATTR; |
12 extern float flt_neg_mul_sub (float a, float b, float c) SSE5_ATTR; | 12 extern float flt_neg_mul_sub (float a, float b, float c) FMA4_ATTR; |
13 | 13 |
14 extern double dbl_mul_add (double a, double b, double c) SSE5_ATTR; | 14 extern double dbl_mul_add (double a, double b, double c) FMA4_ATTR; |
15 extern double dbl_mul_sub (double a, double b, double c) SSE5_ATTR; | 15 extern double dbl_mul_sub (double a, double b, double c) FMA4_ATTR; |
16 extern double dbl_neg_mul_add (double a, double b, double c) SSE5_ATTR; | 16 extern double dbl_neg_mul_add (double a, double b, double c) FMA4_ATTR; |
17 extern double dbl_neg_mul_sub (double a, double b, double c) SSE5_ATTR; | 17 extern double dbl_neg_mul_sub (double a, double b, double c) FMA4_ATTR; |
18 | 18 |
19 float | 19 float |
20 flt_mul_add (float a, float b, float c) | 20 flt_mul_add (float a, float b, float c) |
21 { | 21 { |
22 return (a * b) + c; | 22 return (a * b) + c; |
23 } | 23 } |
24 | 24 |
25 double | 25 double |
26 dbl_mul_add (double a, double b, double c) | 26 dbl_mul_add (double a, double b, double c) |
27 { | 27 { |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 f[5] = flt_neg_mul_add (f[0], f[1], f[2]); | 74 f[5] = flt_neg_mul_add (f[0], f[1], f[2]); |
75 f[6] = flt_neg_mul_sub (f[0], f[1], f[2]); | 75 f[6] = flt_neg_mul_sub (f[0], f[1], f[2]); |
76 | 76 |
77 d[3] = dbl_mul_add (d[0], d[1], d[2]); | 77 d[3] = dbl_mul_add (d[0], d[1], d[2]); |
78 d[4] = dbl_mul_sub (d[0], d[1], d[2]); | 78 d[4] = dbl_mul_sub (d[0], d[1], d[2]); |
79 d[5] = dbl_neg_mul_add (d[0], d[1], d[2]); | 79 d[5] = dbl_neg_mul_add (d[0], d[1], d[2]); |
80 d[6] = dbl_neg_mul_sub (d[0], d[1], d[2]); | 80 d[6] = dbl_neg_mul_sub (d[0], d[1], d[2]); |
81 exit (0); | 81 exit (0); |
82 } | 82 } |
83 | 83 |
84 /* { dg-final { scan-assembler "fmaddss" } } */ | 84 /* { dg-final { scan-assembler "vfmaddss" } } */ |
85 /* { dg-final { scan-assembler "fmaddsd" } } */ | 85 /* { dg-final { scan-assembler "vfmaddsd" } } */ |
86 /* { dg-final { scan-assembler "fmsubss" } } */ | 86 /* { dg-final { scan-assembler "vfmsubss" } } */ |
87 /* { dg-final { scan-assembler "fmsubsd" } } */ | 87 /* { dg-final { scan-assembler "vfmsubsd" } } */ |
88 /* { dg-final { scan-assembler "fnmaddss" } } */ | 88 /* { dg-final { scan-assembler "vfnmaddss" } } */ |
89 /* { dg-final { scan-assembler "fnmaddsd" } } */ | 89 /* { dg-final { scan-assembler "vfnmaddsd" } } */ |
90 /* { dg-final { scan-assembler "fnmsubss" } } */ | 90 /* { dg-final { scan-assembler "vfnmsubss" } } */ |
91 /* { dg-final { scan-assembler "fnmsubsd" } } */ | 91 /* { dg-final { scan-assembler "vfnmsubsd" } } */ |
92 /* { dg-final { scan-assembler "call\t(.*)flt_mul_add" } } */ | 92 /* { dg-final { scan-assembler "call\t(.*)flt_mul_add" } } */ |
93 /* { dg-final { scan-assembler "call\t(.*)flt_mul_sub" } } */ | 93 /* { dg-final { scan-assembler "call\t(.*)flt_mul_sub" } } */ |
94 /* { dg-final { scan-assembler "call\t(.*)flt_neg_mul_add" } } */ | 94 /* { dg-final { scan-assembler "call\t(.*)flt_neg_mul_add" } } */ |
95 /* { dg-final { scan-assembler "call\t(.*)flt_neg_mul_sub" } } */ | 95 /* { dg-final { scan-assembler "call\t(.*)flt_neg_mul_sub" } } */ |
96 /* { dg-final { scan-assembler "call\t(.*)dbl_mul_add" } } */ | 96 /* { dg-final { scan-assembler "call\t(.*)dbl_mul_add" } } */ |
97 /* { dg-final { scan-assembler "call\t(.*)dbl_mul_sub" } } */ | 97 /* { dg-final { scan-assembler "call\t(.*)dbl_mul_sub" } } */ |
98 /* { dg-final { scan-assembler "call\t(.*)dbl_neg_mul_add" } } */ | 98 /* { dg-final { scan-assembler "call\t(.*)dbl_neg_mul_add" } } */ |
99 /* { dg-final { scan-assembler "call\t(.*)dbl_neg_mul_sub" } } */ | 99 /* { dg-final { scan-assembler "call\t(.*)dbl_neg_mul_sub" } } */ |
OLD | NEW |