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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
/* { dg-do compile } */
/* { dg-options "-O2 -mvsx" } */
/* { dg-require-effective-target powerpc_vsx } */
#include <altivec.h>
vector float b = {0.0f, 0.0f, 0.0f, 0.0f};
vector float foo1 (vector float x)
{
vector int c = {0, 1, 4, 5};
return __builtin_shuffle (x, b, c);
}
vector float foo2 (vector float x)
{
vector int c = {2, 3, 4, 5};
return __builtin_shuffle (x, b, c);
}
vector float foo3 (vector float x)
{
vector int c = {0, 1, 6, 7};
return __builtin_shuffle (x, b, c);
}
vector float foo4 (vector float x)
{
vector int c = {2, 3, 6, 7};
return __builtin_shuffle (x, b, c);
}
vector unsigned char foo5 (vector unsigned char x)
{
vector unsigned char c = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7};
return __builtin_shuffle (x, c);
}
vector unsigned char foo6 (vector unsigned char x)
{
vector unsigned char c = {8, 9, 10, 11, 12, 13, 14, 15, 8, 9, 10, 11, 12, 13, 14, 15};
return __builtin_shuffle (x, c);
}
vector unsigned char foo7 (vector unsigned char x)
{
vector unsigned char c = {8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7};
return __builtin_shuffle (x, c);
}
/* { dg-final { scan-assembler-times {\mxxpermdi\M} 7 { target has_arch_pwr9 } } } */
/* { dg-final { scan-assembler-times {\mxxpermdi\M} 7 { target { {! has_arch_pwr9} && be } } } } */
/* { dg-final { scan-assembler-times {\mxxpermdi\M} 11 { target { {! has_arch_pwr9} && le } } } } */
|