1 /* { dg-do run { target { powerpc*-*-linux* } } } */
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-require-effective-target p9vector_hw } */
4 /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
9 __attribute__ ((__noinline__
))
11 insert_0 (vector
float v
, float f
)
13 return vec_insert (f
, v
, 0);
16 __attribute__ ((__noinline__
))
18 insert_1 (vector
float v
, float f
)
20 return vec_insert (f
, v
, 1);
23 __attribute__ ((__noinline__
))
25 insert_2 (vector
float v
, float f
)
27 return vec_insert (f
, v
, 2);
30 __attribute__ ((__noinline__
))
32 insert_3 (vector
float v
, float f
)
34 return vec_insert (f
, v
, 3);
37 __attribute__ ((__noinline__
))
41 vector
float v1
= { 1.0f
, 2.0f
, 3.0f
, 4.0f
};
42 vector
float v2
= { 5.0f
, 6.0f
, 7.0f
, 8.0f
};
44 v1
= insert_0 (v1
, 5.0f
);
45 v1
= insert_1 (v1
, 6.0f
);
46 v1
= insert_2 (v1
, 7.0f
);
47 v1
= insert_3 (v1
, 8.0f
);
49 if (vec_any_ne (v1
, v2
))
53 __attribute__ ((__noinline__
))
55 insert_extract_0_3 (vector
float v1
, vector
float v2
)
57 return vec_insert (vec_extract (v2
, 3), v1
, 0);
60 __attribute__ ((__noinline__
))
62 insert_extract_1_2 (vector
float v1
, vector
float v2
)
64 return vec_insert (vec_extract (v2
, 2), v1
, 1);
67 __attribute__ ((__noinline__
))
69 insert_extract_2_1 (vector
float v1
, vector
float v2
)
71 return vec_insert (vec_extract (v2
, 1), v1
, 2);
74 __attribute__ ((__noinline__
))
76 insert_extract_3_0 (vector
float v1
, vector
float v2
)
78 return vec_insert (vec_extract (v2
, 0), v1
, 3);
81 __attribute__ ((__noinline__
))
83 test_insert_extract (void)
85 vector
float v1
= { 1.0f
, 2.0f
, 3.0f
, 4.0f
};
86 vector
float v2
= { 5.0f
, 6.0f
, 7.0f
, 8.0f
};
87 vector
float v3
= { 8.0f
, 7.0f
, 6.0f
, 5.0f
};
89 v1
= insert_extract_0_3 (v1
, v2
);
90 v1
= insert_extract_1_2 (v1
, v2
);
91 v1
= insert_extract_2_1 (v1
, v2
);
92 v1
= insert_extract_3_0 (v1
, v2
);
94 if (vec_any_ne (v1
, v3
))
102 test_insert_extract ();