2 #include "arm-neon-ref.h"
3 #include "compute-ref-data.h"
5 /* Expected results. */
6 VECT_VAR_DECL(expected
,int,8,8) [] = { 0x33, 0x33, 0x33, 0x33,
7 0x33, 0x33, 0x33, 0x33 };
8 VECT_VAR_DECL(expected
,int,16,4) [] = { 0x3333, 0x3333, 0x3333, 0x3333 };
9 VECT_VAR_DECL(expected
,int,32,2) [] = { 0x33333333, 0x33333333 };
10 VECT_VAR_DECL(expected
,int,64,1) [] = { 0x3333333333333333 };
11 VECT_VAR_DECL(expected
,uint
,8,8) [] = { 0x33, 0x33, 0x33, 0x33,
12 0x33, 0x33, 0x33, 0x33 };
13 VECT_VAR_DECL(expected
,uint
,16,4) [] = { 0x3333, 0x3333, 0x3333, 0x3333 };
14 VECT_VAR_DECL(expected
,uint
,32,2) [] = { 0x33333333, 0x33333333 };
15 VECT_VAR_DECL(expected
,uint
,64,1) [] = { 0x3333333333333333 };
16 VECT_VAR_DECL(expected
,poly
,8,8) [] = { 0x33, 0x33, 0x33, 0x33,
17 0x33, 0x33, 0x33, 0x33 };
18 VECT_VAR_DECL(expected
,poly
,16,4) [] = { 0x3333, 0x3333, 0x3333, 0x3333 };
19 VECT_VAR_DECL(expected
,hfloat
,32,2) [] = { 0x33333333, 0x33333333 };
20 VECT_VAR_DECL(expected
,int,8,16) [] = { 0x33, 0x33, 0x33, 0x33,
21 0x33, 0x33, 0x33, 0x33,
22 0x33, 0x33, 0x33, 0x33,
23 0x33, 0x33, 0x33, 0x33 };
24 VECT_VAR_DECL(expected
,int,16,8) [] = { 0xffe3, 0xffe4, 0xffe5, 0xffe6,
25 0xffe7, 0xffe8, 0xffe9, 0xffea };
26 VECT_VAR_DECL(expected
,int,32,4) [] = { 0xffffffe2, 0xffffffe3,
27 0xffffffe4, 0xffffffe5 };
28 VECT_VAR_DECL(expected
,int,64,2) [] = { 0xffffffffffffffe0,
30 VECT_VAR_DECL(expected
,uint
,8,16) [] = { 0x33, 0x33, 0x33, 0x33,
31 0x33, 0x33, 0x33, 0x33,
32 0x33, 0x33, 0x33, 0x33,
33 0x33, 0x33, 0x33, 0x33 };
34 VECT_VAR_DECL(expected
,uint
,16,8) [] = { 0xe3, 0xe4, 0xe5, 0xe6,
35 0xe7, 0xe8, 0xe9, 0xea };
36 VECT_VAR_DECL(expected
,uint
,32,4) [] = { 0xffe1, 0xffe2,
38 VECT_VAR_DECL(expected
,uint
,64,2) [] = { 0xffffffe0, 0xffffffe1 };
39 VECT_VAR_DECL(expected
,poly
,8,16) [] = { 0x33, 0x33, 0x33, 0x33,
40 0x33, 0x33, 0x33, 0x33,
41 0x33, 0x33, 0x33, 0x33,
42 0x33, 0x33, 0x33, 0x33 };
43 VECT_VAR_DECL(expected
,poly
,16,8) [] = { 0x3333, 0x3333, 0x3333, 0x3333,
44 0x3333, 0x3333, 0x3333, 0x3333 };
45 VECT_VAR_DECL(expected
,hfloat
,32,4) [] = { 0x33333333, 0x33333333,
46 0x33333333, 0x33333333 };
48 #define INSN_NAME vaddw
49 #define TEST_MSG "VADDW"
51 #define FNNAME1(NAME) exec_ ## NAME
52 #define FNNAME(NAME) FNNAME1(NAME)
54 void FNNAME (INSN_NAME
) (void)
56 /* Basic test: y=vaddw(x1,x2), then store the result. */
57 #define TEST_VADDW1(INSN, T1, T2, W, W2, N) \
58 VECT_VAR(vector_res, T1, W2, N) = \
59 INSN##_##T2##W(VECT_VAR(vector, T1, W2, N), \
60 VECT_VAR(vector2, T1, W, N)); \
61 vst1q_##T2##W2(VECT_VAR(result, T1, W2, N), VECT_VAR(vector_res, T1, W2, N))
63 #define TEST_VADDW(INSN, T1, T2, W, W2, N) \
64 TEST_VADDW1(INSN, T1, T2, W, W2, N)
66 DECL_VARIABLE(vector
, int, 16, 8);
67 DECL_VARIABLE(vector
, int, 32, 4);
68 DECL_VARIABLE(vector
, int, 64, 2);
69 DECL_VARIABLE(vector
, uint
, 16, 8);
70 DECL_VARIABLE(vector
, uint
, 32, 4);
71 DECL_VARIABLE(vector
, uint
, 64, 2);
73 DECL_VARIABLE(vector2
, int, 8, 8);
74 DECL_VARIABLE(vector2
, int, 16, 4);
75 DECL_VARIABLE(vector2
, int, 32, 2);
76 DECL_VARIABLE(vector2
, uint
, 8, 8);
77 DECL_VARIABLE(vector2
, uint
, 16, 4);
78 DECL_VARIABLE(vector2
, uint
, 32, 2);
80 DECL_VARIABLE(vector_res
, int, 16, 8);
81 DECL_VARIABLE(vector_res
, int, 32, 4);
82 DECL_VARIABLE(vector_res
, int, 64, 2);
83 DECL_VARIABLE(vector_res
, uint
, 16, 8);
84 DECL_VARIABLE(vector_res
, uint
, 32, 4);
85 DECL_VARIABLE(vector_res
, uint
, 64, 2);
89 /* Initialize input "vector" from "buffer". */
90 VLOAD(vector
, buffer
, q
, int, s
, 16, 8);
91 VLOAD(vector
, buffer
, q
, int, s
, 32, 4);
92 VLOAD(vector
, buffer
, q
, int, s
, 64, 2);
93 VLOAD(vector
, buffer
, q
, uint
, u
, 16, 8);
94 VLOAD(vector
, buffer
, q
, uint
, u
, 32, 4);
95 VLOAD(vector
, buffer
, q
, uint
, u
, 64, 2);
97 /* Choose init value arbitrarily. */
98 VDUP(vector2
, , int, s
, 8, 8, -13);
99 VDUP(vector2
, , int, s
, 16, 4, -14);
100 VDUP(vector2
, , int, s
, 32, 2, -16);
101 VDUP(vector2
, , uint
, u
, 8, 8, 0xf3);
102 VDUP(vector2
, , uint
, u
, 16, 4, 0xfff1);
103 VDUP(vector2
, , uint
, u
, 32, 2, 0xfffffff0);
105 /* Execute the tests. */
106 TEST_VADDW(INSN_NAME
, int, s
, 8, 16, 8);
107 TEST_VADDW(INSN_NAME
, int, s
, 16, 32, 4);
108 TEST_VADDW(INSN_NAME
, int, s
, 32, 64, 2);
109 TEST_VADDW(INSN_NAME
, uint
, u
, 8, 16, 8);
110 TEST_VADDW(INSN_NAME
, uint
, u
, 16, 32, 4);
111 TEST_VADDW(INSN_NAME
, uint
, u
, 32, 64, 2);
113 CHECK_RESULTS (TEST_MSG
, "");
118 FNNAME (INSN_NAME
) ();