1 /* { dg-do compile } */
2 /* { dg-require-effective-target powerpc_vsx_ok } */
3 /* { dg-options "-mdejagnu-cpu=power9 -mvsx -O2 -mpower9-minmax -ffast-math" } */
4 /* { dg-final { scan-assembler-not "fsel" } } */
5 /* { dg-final { scan-assembler "xscmpeqdp" } } */
6 /* { dg-final { scan-assembler "xscmpgtdp" } } */
7 /* { dg-final { scan-assembler "xscmpgedp" } } */
8 /* { dg-final { scan-assembler-not "xscmpodp" } } */
9 /* { dg-final { scan-assembler-not "xscmpudp" } } */
10 /* { dg-final { scan-assembler "xsmaxcdp" } } */
11 /* { dg-final { scan-assembler-not "xsmaxdp" } } */
12 /* { dg-final { scan-assembler "xsmincdp" } } */
13 /* { dg-final { scan-assembler-not "xsmindp" } } */
14 /* { dg-final { scan-assembler "xxsel" } } */
17 dbl_max1 (double a
, double b
)
19 return (a
>= b
) ? a
: b
;
23 dbl_max2 (double a
, double b
)
25 return (a
> b
) ? a
: b
;
29 dbl_min1 (double a
, double b
)
31 return (a
< b
) ? a
: b
;
35 dbl_min2 (double a
, double b
)
37 return (a
<= b
) ? a
: b
;
41 dbl_cmp_eq (double a
, double b
, double c
, double d
)
43 return (a
== b
) ? c
: d
;
47 dbl_cmp_ne (double a
, double b
, double c
, double d
)
49 return (a
!= b
) ? c
: d
;
53 dbl_cmp_gt (double a
, double b
, double c
, double d
)
55 return (a
> b
) ? c
: d
;
59 dbl_cmp_ge (double a
, double b
, double c
, double d
)
61 return (a
>= b
) ? c
: d
;
65 dbl_cmp_lt (double a
, double b
, double c
, double d
)
67 return (a
< b
) ? c
: d
;
71 dbl_cmp_le (double a
, double b
, double c
, double d
)
73 return (a
<= b
) ? c
: d
;
77 flt_max1 (float a
, float b
)
79 return (a
>= b
) ? a
: b
;
83 flt_max2 (float a
, float b
)
85 return (a
> b
) ? a
: b
;
89 flt_min1 (float a
, float b
)
91 return (a
< b
) ? a
: b
;
95 flt_min2 (float a
, float b
)
97 return (a
<= b
) ? a
: b
;
101 flt_cmp_eq (float a
, float b
, float c
, float d
)
103 return (a
== b
) ? c
: d
;
107 flt_cmp_ne (float a
, float b
, float c
, float d
)
109 return (a
!= b
) ? c
: d
;
113 flt_cmp_gt (float a
, float b
, float c
, float d
)
115 return (a
> b
) ? c
: d
;
119 flt_cmp_ge (float a
, float b
, float c
, float d
)
121 return (a
>= b
) ? c
: d
;
125 flt_cmp_lt (float a
, float b
, float c
, float d
)
127 return (a
< b
) ? c
: d
;
131 flt_cmp_le (float a
, float b
, float c
, float d
)
133 return (a
<= b
) ? c
: d
;
137 dbl_flt_max1 (float a
, float b
)
139 return (a
> b
) ? a
: b
;
143 dbl_flt_max2 (double a
, float b
)
145 return (a
> b
) ? a
: b
;
149 dbl_flt_max3 (float a
, double b
)
151 return (a
> b
) ? a
: b
;
155 dbl_flt_min1 (float a
, float b
)
157 return (a
< b
) ? a
: b
;
161 dbl_flt_min2 (double a
, float b
)
163 return (a
< b
) ? a
: b
;
167 dbl_flt_min3 (float a
, double b
)
169 return (a
< b
) ? a
: b
;