[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / p9-minmax-2.c
blob73ec1607a729848bbf072b7d3cefff8f6f27f25a
1 /* { dg-do compile } */
2 /* { dg-require-effective-target powerpc_vsx_ok } */
3 /* { dg-options "-mdejagnu-cpu=power9 -mvsx -O2 -mpower9-minmax" } */
4 /* { dg-final { scan-assembler-not "fsel" } } */
5 /* { dg-final { scan-assembler "xscmpeqdp" } } */
6 /* { dg-final { scan-assembler "xscmpgtdp" } } */
7 /* { dg-final { scan-assembler-not "xscmpodp" } } */
8 /* { dg-final { scan-assembler-not "xscmpudp" } } */
9 /* { dg-final { scan-assembler "xsmaxcdp" } } */
10 /* { dg-final { scan-assembler-not "xsmaxdp" } } */
11 /* { dg-final { scan-assembler "xsmincdp" } } */
12 /* { dg-final { scan-assembler-not "xsmindp" } } */
13 /* { dg-final { scan-assembler "xxsel" } } */
15 /* Due to NaN support, <= and >= are not handled presently unless -ffast-math
16 is used. At some point this will be fixed and the xscmpgedp instruction can
17 be generated normally. The <= and >= tests are bracketed with
18 #ifdef DO_GE_LE. */
20 #ifdef DO_GE_LE
21 double
22 dbl_max1 (double a, double b)
24 return (a >= b) ? a : b;
26 #endif
28 double
29 dbl_max2 (double a, double b)
31 return (a > b) ? a : b;
34 double
35 dbl_min1 (double a, double b)
37 return (a < b) ? a : b;
40 #ifdef DO_GE_LE
41 double
42 dbl_min2 (double a, double b)
44 return (a <= b) ? a : b;
46 #endif
48 double
49 dbl_cmp_eq (double a, double b, double c, double d)
51 return (a == b) ? c : d;
54 double
55 dbl_cmp_ne (double a, double b, double c, double d)
57 return (a != b) ? c : d;
60 double
61 dbl_cmp_gt (double a, double b, double c, double d)
63 return (a > b) ? c : d;
66 #ifdef DO_GE_LE
67 double
68 dbl_cmp_ge (double a, double b, double c, double d)
70 return (a >= b) ? c : d;
72 #endif
74 double
75 dbl_cmp_lt (double a, double b, double c, double d)
77 return (a < b) ? c : d;
80 #ifdef DO_GE_LE
81 double
82 dbl_cmp_le (double a, double b, double c, double d)
84 return (a <= b) ? c : d;
86 #endif
88 #ifdef DO_GE_LE
89 float
90 flt_max1 (float a, float b)
92 return (a >= b) ? a : b;
94 #endif
96 float
97 flt_max2 (float a, float b)
99 return (a > b) ? a : b;
102 float
103 flt_min1 (float a, float b)
105 return (a < b) ? a : b;
108 #ifdef DO_GE_LE
109 float
110 flt_min2 (float a, float b)
112 return (a <= b) ? a : b;
114 #endif
116 float
117 flt_cmp_eq (float a, float b, float c, float d)
119 return (a == b) ? c : d;
122 float
123 flt_cmp_ne (float a, float b, float c, float d)
125 return (a != b) ? c : d;
128 float
129 flt_cmp_gt (float a, float b, float c, float d)
131 return (a > b) ? c : d;
134 #ifdef DO_GE_LE
135 float
136 flt_cmp_ge (float a, float b, float c, float d)
138 return (a >= b) ? c : d;
140 #endif
142 float
143 flt_cmp_lt (float a, float b, float c, float d)
145 return (a < b) ? c : d;
148 #ifdef DO_GE_LE
149 float
150 flt_cmp_le (float a, float b, float c, float d)
152 return (a <= b) ? c : d;
154 #endif
156 double
157 dbl_flt_max1 (float a, float b)
159 return (a > b) ? a : b;
162 double
163 dbl_flt_max2 (double a, float b)
165 return (a > b) ? a : b;
168 double
169 dbl_flt_max3 (float a, double b)
171 return (a > b) ? a : b;
174 double
175 dbl_flt_min1 (float a, float b)
177 return (a < b) ? a : b;
180 double
181 dbl_flt_min2 (double a, float b)
183 return (a < b) ? a : b;
186 double
187 dbl_flt_min3 (float a, double b)
189 return (a < b) ? a : b;