2015-05-19 Christophe Lyon <christophe.lyon@linaro.org>
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / advsimd-intrinsics / vmlXl_lane.inc
blobca451349c07f1045c4542ede30a4063bd22e008d
1 #define FNNAME1(NAME) exec_ ## NAME
2 #define FNNAME(NAME) FNNAME1(NAME)
4 void FNNAME (INSN_NAME) (void)
6   /* vector_res = vmlxl_lane(vector, vector3, vector4, lane),
7      then store the result.  */
8 #define TEST_VMLXL_LANE1(INSN, T1, T2, W, W2, N, V)                     \
9   VECT_VAR(vector_res, T1, W, N) =                                      \
10     INSN##_##T2##W2(VECT_VAR(vector, T1, W, N),                         \
11                     VECT_VAR(vector3, T1, W2, N),                       \
12                     VECT_VAR(vector4, T1, W2, N),                       \
13                     V);                                                 \
14   vst1q_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
16 #define TEST_VMLXL_LANE(INSN, T1, T2, W, W2, N, V)                      \
17   TEST_VMLXL_LANE1(INSN, T1, T2, W, W2, N, V)
19   DECL_VARIABLE(vector, int, 32, 4);
20   DECL_VARIABLE(vector3, int, 16, 4);
21   DECL_VARIABLE(vector4, int, 16, 4);
22   DECL_VARIABLE(vector_res, int, 32, 4);
24   DECL_VARIABLE(vector, int, 64, 2);
25   DECL_VARIABLE(vector3, int, 32, 2);
26   DECL_VARIABLE(vector4, int, 32, 2);
27   DECL_VARIABLE(vector_res, int, 64, 2);
29   DECL_VARIABLE(vector, uint, 32, 4);
30   DECL_VARIABLE(vector3, uint, 16, 4);
31   DECL_VARIABLE(vector4, uint, 16, 4);
32   DECL_VARIABLE(vector_res, uint, 32, 4);
34   DECL_VARIABLE(vector, uint, 64, 2);
35   DECL_VARIABLE(vector3, uint, 32, 2);
36   DECL_VARIABLE(vector4, uint, 32, 2);
37   DECL_VARIABLE(vector_res, uint, 64, 2);
39   clean_results ();
41   VLOAD(vector, buffer, q, int, s, 32, 4);
42   VLOAD(vector, buffer, q, int, s, 64, 2);
43   VLOAD(vector, buffer, q, uint, u, 32, 4);
44   VLOAD(vector, buffer, q, uint, u, 64, 2);
46   VDUP(vector3, , int, s, 16, 4, 0x55);
47   VDUP(vector4, , int, s, 16, 4, 0xBB);
48   VDUP(vector3, , int, s, 32, 2, 0x55);
49   VDUP(vector4, , int, s, 32, 2, 0xBB);
50   VDUP(vector3, , uint, u, 16, 4, 0x55);
51   VDUP(vector4, , uint, u, 16, 4, 0xBB);
52   VDUP(vector3, , uint, u, 32, 2, 0x55);
53   VDUP(vector4, , uint, u, 32, 2, 0xBB);
55   TEST_VMLXL_LANE(INSN_NAME, int, s, 32, 16, 4, 2);
56   TEST_VMLXL_LANE(INSN_NAME, int, s, 64, 32, 2, 1);
57   TEST_VMLXL_LANE(INSN_NAME, uint, u, 32, 16, 4, 2);
58   TEST_VMLXL_LANE(INSN_NAME, uint, u, 64, 32, 2, 1);
60   CHECK(TEST_MSG, int, 32, 4, PRIx32, expected, "");
61   CHECK(TEST_MSG, int, 64, 2, PRIx64, expected, "");
62   CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
63   CHECK(TEST_MSG, uint, 64, 2, PRIx64, expected, "");
66 int main (void)
68   FNNAME (INSN_NAME) ();
69   return 0;