1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-require-effective-target vmx_hw } */
/* Test vector merge for 16-bit element size,
it will abort if the RTL pattern isn't expected. */
#include "altivec.h"
__attribute__((noipa))
signed short elem_2 (vector signed short a, vector signed short b)
{
vector signed short c = vec_mergeh (a,b);
return vec_extract (c, 2);
}
__attribute__((noipa))
unsigned short elem_7 (vector unsigned short a, vector unsigned short b)
{
vector unsigned short c = vec_mergel (a,b);
return vec_extract (c, 7);
}
int
main ()
{
vector unsigned short v1 = {3, 22, 12, 34, 5, 25, 30, 11};
vector unsigned short v2 = {84, 168, 267, 966, 65, 399, 999, 99};
signed short x1 = elem_2 ((vector signed short) v1, (vector signed short) v2);
unsigned short x2 = elem_7 (v1, v2);
if (x1 != 22 || x2 != 99)
__builtin_abort ();
return 0;
}
|