| /* { dg-do run } */ |
| /* { dg-require-effective-target vsx_hw } */ |
| /* { dg-options "-O2 -mvsx" } */ |
| |
| #include "vec-perm-ctor.h" |
| |
| #include <stdlib.h> |
| |
| int |
| main () |
| { |
| du a_du = 100ULL; |
| du b_du = 200ULL; |
| |
| di a_di = -100; |
| di b_di = 200; |
| |
| df a_df = 10.0; |
| df b_df = 20.0; |
| |
| si a_si = 12; |
| si b_si = -25; |
| si c_si = -37; |
| si d_si = 50; |
| |
| sf a_sf = 30.0f; |
| sf b_sf = 40.0f; |
| sf c_sf = 50.0f; |
| sf d_sf = 60.0f; |
| |
| hu a_hu = 10; |
| hu b_hu = 20; |
| hu c_hu = 30; |
| hu d_hu = 40; |
| hu e_hu = 50; |
| hu f_hu = 60; |
| hu g_hu = 70; |
| hu h_hu = 80; |
| |
| qi a_qi = 10; |
| qi b_qi = 20; |
| qi c_qi = -30; |
| qi d_qi = 40; |
| qi e_qi = -50; |
| qi f_qi = 60; |
| qi g_qi = 70; |
| qi h_qi = -80; |
| |
| v2du res1 = test_ctor_ctor_same_du (a_du, b_du); |
| if (res1[0] != a_du || res1[1] != b_du) |
| abort (); |
| |
| v2df res2 = test_ctor_ctor_same_df (a_df, b_df); |
| if (res2[0] != a_df || res2[1] != b_df) |
| abort (); |
| |
| v4si res3 = test_ctor_ctor_same_si (a_si, b_si, c_si, d_si); |
| if (res3[0] != a_si || res3[1] != b_si || res3[2] != c_si || res3[3] != d_si) |
| abort (); |
| |
| v4sf res4 = test_ctor_ctor_same_sf (a_sf, b_sf, c_sf, d_sf); |
| if (res4[0] != a_sf || res4[1] != b_sf || res4[2] != c_sf || res4[3] != d_sf) |
| abort (); |
| |
| v8hu res5 |
| = test_ctor_ctor_same_hu (a_hu, b_hu, c_hu, d_hu, e_hu, f_hu, g_hu, h_hu); |
| |
| if (res5[0] != a_hu || res5[1] != b_hu || res5[2] != c_hu || res5[3] != d_hu |
| || res5[4] != e_hu || res5[5] != f_hu || res5[6] != g_hu |
| || res5[7] != h_hu) |
| abort (); |
| |
| v16qi res6 |
| = test_ctor_ctor_same_qi (a_qi, b_qi, c_qi, d_qi, e_qi, f_qi, g_qi, h_qi); |
| |
| if (res6[0] != a_qi || res6[1] != b_qi || res6[2] != c_qi || res6[3] != d_qi |
| || res6[4] != a_qi || res6[5] != b_qi || res6[6] != c_qi |
| || res6[7] != d_qi || res6[8] != e_qi || res6[9] != f_qi |
| || res6[10] != g_qi || res6[11] != h_qi || res6[12] != e_qi |
| || res6[13] != f_qi || res6[14] != g_qi || res6[15] != h_qi) |
| abort (); |
| |
| v2du res7 = test_ctor_cst_same_du (a_du, b_du); |
| if (res7[0] != a_du || res7[1] != 100) |
| abort (); |
| |
| v4sf res8 = test_ctor_cst_same_sf (a_sf, b_sf); |
| if (res8[0] != a_sf || res8[1] != 2.0f || res8[2] != b_sf || res8[3] != 4.0f) |
| abort (); |
| |
| v2df res9 = test_ctor_cst_same_df (a_df, b_df); |
| if (res9[0] != b_df || res9[1] != 200.0) |
| abort (); |
| |
| v4si res10 = test_cst_ctor_same_si (a_si, b_si); |
| if (res10[0] != 1 || res10[1] != 3 || res10[2] != a_si || res10[3] != b_si) |
| abort (); |
| |
| v2di res11 = test_ctor_cst_diff_di_si (a_di, b_di); |
| /* Need to take care of the endianness since the function converts vector |
| const to one different vector type (element size), the endianness |
| determines the reinterpreted layout. Same reason for res12 below. */ |
| if (res11[0] != -100 || |
| #ifdef __LITTLE_ENDIAN__ |
| res11[1] != 3 |
| #else |
| res11[1] != 0x300000000LL |
| #endif |
| ) |
| abort (); |
| |
| v2du res12 = test_cst_ctor_diff_sf_du (a_du, b_du); |
| if ( |
| #ifdef __LITTLE_ENDIAN__ |
| res12[0] != 0x400000003f800000ULL |
| #else |
| res12[0] != 0x3f80000040000000ULL |
| #endif |
| || res12[1] != 100) |
| abort (); |
| |
| return 0; |
| } |
| |