1 /* { dg-do compile } */
2 /* { dg-options "-mno-mips16 -mfp64 -mhard-float -mmsa" } */
3
4 typedef int v4i32 __attribute__ ((vector_size(16)));
5 typedef float v4f32 __attribute__ ((vector_size(16)));
6
7 /* Test MSA signed min/max immediate for correct assembly output. */
8
9 void
min_s_msa(v4i32 * vx,v4i32 * vy)10 min_s_msa (v4i32 *vx, v4i32 *vy)
11 {
12 *vy = __builtin_msa_mini_s_w (*vx, -15);
13 }
14 /* { dg-final { scan-assembler "-15" } } */
15
16 void
max_s_msa(v4i32 * vx,v4i32 * vy)17 max_s_msa (v4i32 *vx, v4i32 *vy)
18 {
19 *vy = __builtin_msa_maxi_s_w (*vx, -15);
20 }
21 /* { dg-final { scan-assembler "-15" } } */
22
23 /* Test MSA min_a/max_a instructions for forward propagation optimization. */
24
25 #define FUNC(NAME, TYPE, RETTYPE) RETTYPE NAME##_a_msa (TYPE *vx, TYPE *vy) \
26 { \
27 TYPE dest = __builtin_msa_##NAME##_a_w (*vx, *vy); \
28 return dest[0]; \
29 }
30
31 FUNC(fmin, v4f32, float)
32 /* { dg-final { scan-assembler "fmin_a.w" } } */
33 FUNC(fmax, v4f32, float)
34 /* { dg-final { scan-assembler "fmax_a.w" } } */
35 FUNC(min, v4i32, int)
36 /* { dg-final { scan-assembler "min_a.w" } } */
37 FUNC(max, v4i32, int)
38 /* { dg-final { scan-assembler "max_a.w" } } */
39