/* { dg-do run { target { powerpc*-*-linux* } } } */ /* { dg-require-effective-target vsx_hw } */ /* { dg-require-effective-target p9vector_hw } */ /* { dg-options "-mdejagnu-cpu=power9 -O2" } */ #include #include __attribute__ ((__noinline__)) vector float insert_0 (vector float v, float f) { return vec_insert (f, v, 0); } __attribute__ ((__noinline__)) vector float insert_1 (vector float v, float f) { return vec_insert (f, v, 1); } __attribute__ ((__noinline__)) vector float insert_2 (vector float v, float f) { return vec_insert (f, v, 2); } __attribute__ ((__noinline__)) vector float insert_3 (vector float v, float f) { return vec_insert (f, v, 3); } __attribute__ ((__noinline__)) void test_insert (void) { vector float v1 = { 1.0f, 2.0f, 3.0f, 4.0f }; vector float v2 = { 5.0f, 6.0f, 7.0f, 8.0f }; v1 = insert_0 (v1, 5.0f); v1 = insert_1 (v1, 6.0f); v1 = insert_2 (v1, 7.0f); v1 = insert_3 (v1, 8.0f); if (vec_any_ne (v1, v2)) abort (); } __attribute__ ((__noinline__)) vector float insert_extract_0_3 (vector float v1, vector float v2) { return vec_insert (vec_extract (v2, 3), v1, 0); } __attribute__ ((__noinline__)) vector float insert_extract_1_2 (vector float v1, vector float v2) { return vec_insert (vec_extract (v2, 2), v1, 1); } __attribute__ ((__noinline__)) vector float insert_extract_2_1 (vector float v1, vector float v2) { return vec_insert (vec_extract (v2, 1), v1, 2); } __attribute__ ((__noinline__)) vector float insert_extract_3_0 (vector float v1, vector float v2) { return vec_insert (vec_extract (v2, 0), v1, 3); } __attribute__ ((__noinline__)) void test_insert_extract (void) { vector float v1 = { 1.0f, 2.0f, 3.0f, 4.0f }; vector float v2 = { 5.0f, 6.0f, 7.0f, 8.0f }; vector float v3 = { 8.0f, 7.0f, 6.0f, 5.0f }; v1 = insert_extract_0_3 (v1, v2); v1 = insert_extract_1_2 (v1, v2); v1 = insert_extract_2_1 (v1, v2); v1 = insert_extract_3_0 (v1, v2); if (vec_any_ne (v1, v3)) abort (); } int main (void) { test_insert (); test_insert_extract (); return 0; }