aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/aarch64/fmov-5-be.c
blob: 0fcefa7c9489ebd66a318d553c9ee935f4dc518e (plain)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/* { dg-do compile } */
/* { dg-options "-O2 -mbig-endian" } */
/* { dg-final { check-function-bodies "**" "" "" } } */

#pragma GCC target ("arch=armv8.2-a+fp16")

typedef __fp16 v4hf __attribute__ ((vector_size (8)));
typedef __fp16 v8hf __attribute__ ((vector_size (16)));
typedef __bf16 v4bf __attribute__ ((vector_size (8)));
typedef __bf16 v8bf __attribute__ ((vector_size (16)));
typedef short v4hi __attribute__ ((vector_size (8)));
typedef short v8hi __attribute__ ((vector_size (16)));

/*
** f_v4hf:
**	fmov	h0, h0
**	ret
*/
v4hf
f_v4hf (v4hf x)
{
  return __builtin_shuffle (x, (v4hf){ 0, 0, 0, 0 }, (v4hi){ 4, 5, 6, 3 });
}

/*
** g_v4hf:
**	fmov	h0, h0
**	ret
*/
v4hf
g_v4hf (v4hf x)
{
  return __builtin_shuffle ((v4hf){ 0, 0, 0, 0 }, x, (v4hi){ 0, 1, 2, 7 });
}

/*
** h_v4hf:
**	fmov	s0, s0
**	ret
*/
v4hf
h_v4hf (v4hf x)
{
  return __builtin_shuffle (x, (v4hf){ 0, 0, 0, 0 }, (v4hi){ 4, 5, 2, 3 });
}

/*
** f_v8hf:
**	fmov	h0, h0
**	ret
*/
v8hf
f_v8hf (v8hf x)
{
  return __builtin_shuffle (x, (v8hf){ 0, 0, 0, 0, 0, 0, 0, 0 },
			    (v8hi){ 8, 9, 10, 11, 12, 13, 14, 7 });
}

/*
** g_v8hf:
**	fmov	h0, h0
**	ret
*/
v8hf
g_v8hf (v8hf x)
{
  return __builtin_shuffle ((v8hf){ 0, 0, 0, 0, 0, 0, 0, 0 }, x,
			    (v8hi){ 0, 1, 2, 3, 4, 5, 6, 15 });
}

/*
** h_v8hf:
**	fmov	s0, s0
**	ret
*/
v8hf
h_v8hf (v8hf x)
{
  return __builtin_shuffle (x, (v8hf){ 0, 0, 0, 0, 0, 0, 0, 0 },
			    (v8hi){ 8, 9, 10, 11, 12, 13, 6, 7 });
}

/*
** f_v4bf:
**	fmov	h0, h0
**	ret
*/
v4bf
f_v4bf (v4bf x)
{
  return __builtin_shuffle (x, (v4bf){ 0, 0, 0, 0 }, (v4hi){ 4, 5, 6, 3 });
}

/*
** g_v4bf:
**	fmov	h0, h0
**	ret
*/
v4bf
g_v4bf (v4bf x)
{
  return __builtin_shuffle ((v4bf){ 0, 0, 0, 0 }, x, (v4hi){ 0, 1, 2, 7 });
}

/*
** h_v4bf:
**	fmov	s0, s0
**	ret
*/
v4bf
h_v4bf (v4bf x)
{
  return __builtin_shuffle (x, (v4bf){ 0, 0, 0, 0 }, (v4hi){ 4, 5, 2, 3 });
}

/*
** f_v8bf:
**	fmov	h0, h0
**	ret
*/
v8bf
f_v8bf (v8bf x)
{
  return __builtin_shuffle (x, (v8bf){ 0, 0, 0, 0, 0, 0, 0, 0 },
			    (v8hi){ 8, 9, 10, 11, 12, 13, 14, 7 });
}

/*
** g_v8bf:
**	fmov	h0, h0
**	ret
*/
v8bf
g_v8bf (v8bf x)
{
  return __builtin_shuffle ((v8bf){ 0, 0, 0, 0, 0, 0, 0, 0 }, x,
			    (v8hi){ 0, 1, 2, 3, 4, 5, 6, 15 });
}

/*
** h_v8bf:
**	fmov	s0, s0
**	ret
*/
v8bf
h_v8bf (v8bf x)
{
  return __builtin_shuffle (x, (v8bf){ 0, 0, 0, 0, 0, 0, 0, 0 },
			    (v8hi){ 8, 9, 10, 11, 12, 13, 6, 7 });
}