1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
3 /* { dg-require-effective-target powerpc_p9vector_ok } */
4 /* { dg-options "-mcpu=power9 -O2 -mpower9-minmax -ffast-math" } */
5 /* { dg-final { scan-assembler-not "fsel" } } */
6 /* { dg-final { scan-assembler "xscmpeqdp" } } */
7 /* { dg-final { scan-assembler "xscmpgtdp" } } */
8 /* { dg-final { scan-assembler "xscmpgedp" } } */
9 /* { dg-final { scan-assembler-not "xscmpodp" } } */
10 /* { dg-final { scan-assembler-not "xscmpudp" } } */
11 /* { dg-final { scan-assembler "xsmaxcdp" } } */
12 /* { dg-final { scan-assembler-not "xsmaxdp" } } */
13 /* { dg-final { scan-assembler "xsmincdp" } } */
14 /* { dg-final { scan-assembler-not "xsmindp" } } */
15 /* { dg-final { scan-assembler "xxsel" } } */
18 dbl_max1 (double a
, double b
)
20 return (a
>= b
) ? a
: b
;
24 dbl_max2 (double a
, double b
)
26 return (a
> b
) ? a
: b
;
30 dbl_min1 (double a
, double b
)
32 return (a
< b
) ? a
: b
;
36 dbl_min2 (double a
, double b
)
38 return (a
<= b
) ? a
: b
;
42 dbl_cmp_eq (double a
, double b
, double c
, double d
)
44 return (a
== b
) ? c
: d
;
48 dbl_cmp_ne (double a
, double b
, double c
, double d
)
50 return (a
!= b
) ? c
: d
;
54 dbl_cmp_gt (double a
, double b
, double c
, double d
)
56 return (a
> b
) ? c
: d
;
60 dbl_cmp_ge (double a
, double b
, double c
, double d
)
62 return (a
>= b
) ? c
: d
;
66 dbl_cmp_lt (double a
, double b
, double c
, double d
)
68 return (a
< b
) ? c
: d
;
72 dbl_cmp_le (double a
, double b
, double c
, double d
)
74 return (a
<= b
) ? c
: d
;
78 flt_max1 (float a
, float b
)
80 return (a
>= b
) ? a
: b
;
84 flt_max2 (float a
, float b
)
86 return (a
> b
) ? a
: b
;
90 flt_min1 (float a
, float b
)
92 return (a
< b
) ? a
: b
;
96 flt_min2 (float a
, float b
)
98 return (a
<= b
) ? a
: b
;
102 flt_cmp_eq (float a
, float b
, float c
, float d
)
104 return (a
== b
) ? c
: d
;
108 flt_cmp_ne (float a
, float b
, float c
, float d
)
110 return (a
!= b
) ? c
: d
;
114 flt_cmp_gt (float a
, float b
, float c
, float d
)
116 return (a
> b
) ? c
: d
;
120 flt_cmp_ge (float a
, float b
, float c
, float d
)
122 return (a
>= b
) ? c
: d
;
126 flt_cmp_lt (float a
, float b
, float c
, float d
)
128 return (a
< b
) ? c
: d
;
132 flt_cmp_le (float a
, float b
, float c
, float d
)
134 return (a
<= b
) ? c
: d
;
138 dbl_flt_max1 (float a
, float b
)
140 return (a
> b
) ? a
: b
;
144 dbl_flt_max2 (double a
, float b
)
146 return (a
> b
) ? a
: b
;
150 dbl_flt_max3 (float a
, double b
)
152 return (a
> b
) ? a
: b
;
156 dbl_flt_min1 (float a
, float b
)
158 return (a
< b
) ? a
: b
;
162 dbl_flt_min2 (double a
, float b
)
164 return (a
< b
) ? a
: b
;
168 dbl_flt_min3 (float a
, double b
)
170 return (a
< b
) ? a
: b
;