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
|
// { dg-options "-march=armv8.2-a+sve" }
// { dg-do run { target aarch64_sve_hw } }
#include <arm_neon_sve_bridge.h>
extern void abort (void);
int
svget_neonq_test ()
{
int64_t val1 = 987654321;
int64_t val2 = 123456789;
svint64_t sveInput = svdupq_n_s64 (val1, val2);
int64x2_t neonReturn = svget_neonq_s64 (sveInput);
int64_t val1Return = vgetq_lane_s64 (neonReturn, 0);
int64_t val2Return = vgetq_lane_s64 (neonReturn, 1);
if (val1 == val1Return && val2 == val2Return)
return 0;
return 1;
}
int
svset_neonq_test ()
{
int64_t val1 = 987654321;
int64_t val2 = 123456789;
int64x2_t NeonInput;
NeonInput = vsetq_lane_s64 (val1, NeonInput, 0);
NeonInput = vsetq_lane_s64 (val2, NeonInput, 1);
svint64_t sveReturn = svset_neonq_s64 (sveReturn, NeonInput);
int64_t val1Return = svlasta_s64 (svptrue_b64(), sveReturn);
int64_t val2Return = svlastb_s64 (svptrue_pat_b8(SV_VL16), sveReturn);
if (val1 == val1Return && val2 == val2Return)
return 0;
return 1;
}
int
svdup_neonq_test ()
{
int64_t val1 = 987654321;
int64_t val2 = 123456789;
int64x2_t NeonInput;
NeonInput = vsetq_lane_s64 (val1, NeonInput, 0);
NeonInput = vsetq_lane_s64 (val2, NeonInput, 1);
svint64_t sveReturn = svdup_neonq_s64 (NeonInput);
int64_t val1Return = svlasta_s64 (svptrue_b64(), sveReturn);
int64_t val2Return = svlastb_s64 (svptrue_b64(), sveReturn);
if (val1 == val1Return && val2 == val2Return)
return 0;
return 1;
}
int
main ()
{
if (svget_neonq_test () == 1)
abort ();
if (svset_neonq_test () == 1)
abort ();
if (svdup_neonq_test () == 1)
abort ();
return 0;
}
|