[ARM/AArch64][testsuite] Add vmlal_n and vmlsl_n tests.
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / advsimd-intrinsics / vmlXl_n.inc
bloba9685841cd02d20359a56554a05d97710a459b42
1 #define FNNAME1(NAME) exec_ ## NAME
2 #define FNNAME(NAME) FNNAME1(NAME)
4 void FNNAME (INSN_NAME) (void)
6   /* vector_res = vmlxl_n(vector, vector2, val),
7      then store the result.  */
8 #define TEST_VMLXL_N1(INSN, T1, T2, W, W2, N, V)                        \
9   VECT_VAR(vector_res, T1, W, N) = INSN##_##T2##W2(VECT_VAR(vector, T1, W, N), \
10                                                    VECT_VAR(vector2, T1, W2, N), \
11                                                    V);                  \
12   vst1q_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
14 #define TEST_VMLXL_N(INSN, T1, T2, W, W2, N, V)                 \
15   TEST_VMLXL_N1(INSN, T1, T2, W, W2, N, V)
17   DECL_VARIABLE(vector, int, 32, 4);
18   DECL_VARIABLE(vector2, int, 16, 4);
19   DECL_VARIABLE(vector_res, int, 32, 4);
21   DECL_VARIABLE(vector, int, 64, 2);
22   DECL_VARIABLE(vector2, int, 32, 2);
23   DECL_VARIABLE(vector_res, int, 64, 2);
25   DECL_VARIABLE(vector, uint, 32, 4);
26   DECL_VARIABLE(vector2, uint, 16, 4);
27   DECL_VARIABLE(vector_res, uint, 32, 4);
29   DECL_VARIABLE(vector, uint, 64, 2);
30   DECL_VARIABLE(vector2, uint, 32, 2);
31   DECL_VARIABLE(vector_res, uint, 64, 2);
33   clean_results ();
35   VLOAD(vector, buffer, q, int, s, 32, 4);
36   VLOAD(vector, buffer, q, int, s, 64, 2);
37   VLOAD(vector, buffer, q, uint, u, 32, 4);
38   VLOAD(vector, buffer, q, uint, u, 64, 2);
40   VDUP(vector2, , int, s, 16, 4, 0x55);
41   VDUP(vector2, , int, s, 32, 2, 0x55);
42   VDUP(vector2, , uint, u, 16, 4, 0x55);
43   VDUP(vector2, , uint, u, 32, 2, 0x55);
45   /* Choose multiplier arbitrarily.  */
46   TEST_VMLXL_N(INSN_NAME, int, s, 32, 16, 4, 0x11);
47   TEST_VMLXL_N(INSN_NAME, int, s, 64, 32, 2, 0x22);
48   TEST_VMLXL_N(INSN_NAME, uint, u, 32, 16, 4, 0x33);
49   TEST_VMLXL_N(INSN_NAME, uint, u, 64, 32, 2, 0x33);
51   CHECK(TEST_MSG, int, 32, 4, PRIx32, expected, "");
52   CHECK(TEST_MSG, int, 64, 2, PRIx64, expected, "");
53   CHECK(TEST_MSG, uint, 32, 4, PRIx32, expected, "");
54   CHECK(TEST_MSG, uint, 64, 2, PRIx64, expected, "");
57 int main (void)
59   FNNAME (INSN_NAME) ();
60   return 0;