PR target/83368
[official-gcc.git] / gcc / testsuite / gcc.dg / vmx / merge-vsx-be-order.c
blobb01208d5f4011ac0147894b1b9c4c3eac22e37fc
1 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
2 /* { dg-require-effective-target powerpc_vsx_ok } */
3 /* { dg-options "-maltivec=be -mabi=altivec -std=gnu99 -mvsx" } */
5 #include "harness.h"
7 static int vec_long_long_eq (vector long long x, vector long long y)
9 return (x[0] == y[0] && x[1] == y[1]);
12 static int vec_double_eq (vector double x, vector double y)
14 return (x[0] == y[0] && x[1] == y[1]);
17 static void test()
19 /* Input vectors. */
20 vector long long vla = {-2,-1};
21 vector long long vlb = {0,1};
22 vector double vda = {-2.0,-1.0};
23 vector double vdb = {0.0,1.0};
24 vector unsigned int vuia = {0,1,2,3};
25 vector unsigned int vuib = {4,5,6,7};
26 vector signed int vsia = {-4,-3,-2,-1};
27 vector signed int vsib = {0,1,2,3};
28 vector float vfa = {-4.0,-3.0,-2.0,-1.0};
29 vector float vfb = {0.0,1.0,2.0,3.0};
31 /* Result vectors. */
32 vector long long vlh, vll;
33 vector double vdh, vdl;
34 vector unsigned int vuih, vuil;
35 vector signed int vsih, vsil;
36 vector float vfh, vfl;
38 /* Expected result vectors. */
39 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
40 vector long long vlrh = {1,-1};
41 vector long long vlrl = {0,-2};
42 vector double vdrh = {1.0,-1.0};
43 vector double vdrl = {0.0,-2.0};
44 vector unsigned int vuirh = {6,2,7,3};
45 vector unsigned int vuirl = {4,0,5,1};
46 vector signed int vsirh = {2,-2,3,-1};
47 vector signed int vsirl = {0,-4,1,-3};
48 vector float vfrh = {2.0,-2.0,3.0,-1.0};
49 vector float vfrl = {0.0,-4.0,1.0,-3.0};
50 #else
51 vector long long vlrh = {-2,0};
52 vector long long vlrl = {-1,1};
53 vector double vdrh = {-2.0,0.0};
54 vector double vdrl = {-1.0,1.0};
55 vector unsigned int vuirh = {0,4,1,5};
56 vector unsigned int vuirl = {2,6,3,7};
57 vector signed int vsirh = {-4,0,-3,1};
58 vector signed int vsirl = {-2,2,-1,3};
59 vector float vfrh = {-4.0,0.0,-3.0,1.0};
60 vector float vfrl = {-2.0,2.0,-1.0,3.0};
61 #endif
63 vlh = vec_mergeh (vla, vlb);
64 vll = vec_mergel (vla, vlb);
65 vdh = vec_mergeh (vda, vdb);
66 vdl = vec_mergel (vda, vdb);
67 vuih = vec_mergeh (vuia, vuib);
68 vuil = vec_mergel (vuia, vuib);
69 vsih = vec_mergeh (vsia, vsib);
70 vsil = vec_mergel (vsia, vsib);
71 vfh = vec_mergeh (vfa, vfb );
72 vfl = vec_mergel (vfa, vfb );
74 check (vec_long_long_eq (vlh, vlrh), "vlh");
75 check (vec_long_long_eq (vll, vlrl), "vll");
76 check (vec_double_eq (vdh, vdrh), "vdh" );
77 check (vec_double_eq (vdl, vdrl), "vdl" );
78 check (vec_all_eq (vuih, vuirh), "vuih");
79 check (vec_all_eq (vuil, vuirl), "vuil");
80 check (vec_all_eq (vsih, vsirh), "vsih");
81 check (vec_all_eq (vsil, vsirl), "vsil");
82 check (vec_all_eq (vfh, vfrh), "vfh");
83 check (vec_all_eq (vfl, vfrl), "vfl");