aboutsummaryrefslogtreecommitdiffstats
path: root/ref_vsli_n.c
diff options
context:
space:
mode:
authorChristophe Lyon <christophe.lyon@st.com>2011-02-08 18:15:05 +0100
committerChristophe Lyon <christophe.lyon@st.com>2011-02-08 18:28:48 +0100
commitf0ecb5a040ce3b9baf1e8ddd53f02e46470fd965 (patch)
treec4e61604a5e3fc6b35bcf1b83c65d6334c56d8aa /ref_vsli_n.c
parent2eeafa4af3fffbc655074e549236c118eea2548a (diff)
downloadplatform_external_arm-neon-tests-f0ecb5a040ce3b9baf1e8ddd53f02e46470fd965.tar.gz
platform_external_arm-neon-tests-f0ecb5a040ce3b9baf1e8ddd53f02e46470fd965.tar.bz2
platform_external_arm-neon-tests-f0ecb5a040ce3b9baf1e8ddd53f02e46470fd965.zip
Restore tests for vsli/vsri. Add tests with maximum allowed shift amount.
Diffstat (limited to 'ref_vsli_n.c')
-rw-r--r--ref_vsli_n.c70
1 files changed, 27 insertions, 43 deletions
diff --git a/ref_vsli_n.c b/ref_vsli_n.c
index 2666af6..5f6ed23 100644
--- a/ref_vsli_n.c
+++ b/ref_vsli_n.c
@@ -23,35 +23,19 @@ THE SOFTWARE.
*/
-#ifdef __arm__
-#include <arm_neon.h>
-#else
-#error Target not supported
-#endif
-
-#include "stm-arm-neon-ref.h"
-
-#ifndef INSN_NAME
#define INSN_NAME vsli
#define TEST_MSG "VSLI_N"
-#endif
-#define FNNAME1(NAME) void exec_ ## NAME ##_n (void)
-#define FNNAME(NAME) FNNAME1(NAME)
+/* Extra tests for functions requiring corner cases tests */
+void vsli_extra(void);
+#define EXTRA_TESTS vsli_extra
-FNNAME (INSN_NAME)
-{
- /* vector_res = vmlx_n(vector, vector2, val),
- then store the result. */
-#define TEST_VMLX_N1(INSN, Q, T1, T2, W, N, V) \
- VECT_VAR(vector_res, T1, W, N) = \
- INSN##Q##_n_##T2##W(VECT_VAR(vector, T1, W, N), \
- VECT_VAR(vector2, T1, W, N), \
- V); \
- vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
+#include "ref_vsXi_n.c"
-#define TEST_VMLX_N(INSN, Q, T1, T2, W, N, V) \
- TEST_VMLX_N1(INSN, Q, T1, T2, W, N, V)
+void vsli_extra(void)
+{
+ /* Test cases with maximum shift amount (this amount is different
+ * from vsri. */
/* With ARM RVCT, we need to declare variables before any executable
statement */
@@ -82,23 +66,23 @@ FNNAME (INSN_NAME)
TEST_VDUP(vector2, q, uint, u, 32, 4, 55);
TEST_VDUP(vector2, q, uint, u, 64, 2, 3);
- /* Choose shift amount arbitrarily */
- TEST_VMLX_N(INSN_NAME, , int, s, 8, 8, 4);
- TEST_VMLX_N(INSN_NAME, , int, s, 16, 4, 3);
- TEST_VMLX_N(INSN_NAME, , int, s, 32, 2, 1);
- TEST_VMLX_N(INSN_NAME, , int, s, 64, 1, 32);
- TEST_VMLX_N(INSN_NAME, , uint, u, 8, 8, 2);
- TEST_VMLX_N(INSN_NAME, , uint, u, 16, 4, 10);
- TEST_VMLX_N(INSN_NAME, , uint, u, 32, 2, 30);
- TEST_VMLX_N(INSN_NAME, , uint, u, 64, 1, 3);
- TEST_VMLX_N(INSN_NAME, q, int, s, 8, 16, 5);
- TEST_VMLX_N(INSN_NAME, q, int, s, 16, 8, 3);
- TEST_VMLX_N(INSN_NAME, q, int, s, 32, 4, 20);
- TEST_VMLX_N(INSN_NAME, q, int, s, 64, 2, 16);
- TEST_VMLX_N(INSN_NAME, q, uint, u, 8, 16, 3);
- TEST_VMLX_N(INSN_NAME, q, uint, u, 16, 8, 12);
- TEST_VMLX_N(INSN_NAME, q, uint, u, 32, 4, 23);
- TEST_VMLX_N(INSN_NAME, q, uint, u, 64, 2, 53);
-
- dump_results_hex (TEST_MSG);
+ /* Use maximum allowed shift amount */
+ TEST_VSXI_N(INSN_NAME, , int, s, 8, 8, 7);
+ TEST_VSXI_N(INSN_NAME, , int, s, 16, 4, 15);
+ TEST_VSXI_N(INSN_NAME, , int, s, 32, 2, 31);
+ TEST_VSXI_N(INSN_NAME, , int, s, 64, 1, 63);
+ TEST_VSXI_N(INSN_NAME, , uint, u, 8, 8, 7);
+ TEST_VSXI_N(INSN_NAME, , uint, u, 16, 4, 15);
+ TEST_VSXI_N(INSN_NAME, , uint, u, 32, 2, 31);
+ TEST_VSXI_N(INSN_NAME, , uint, u, 64, 1, 63);
+ TEST_VSXI_N(INSN_NAME, q, int, s, 8, 16, 7);
+ TEST_VSXI_N(INSN_NAME, q, int, s, 16, 8, 15);
+ TEST_VSXI_N(INSN_NAME, q, int, s, 32, 4, 31);
+ TEST_VSXI_N(INSN_NAME, q, int, s, 64, 2, 63);
+ TEST_VSXI_N(INSN_NAME, q, uint, u, 8, 16, 7);
+ TEST_VSXI_N(INSN_NAME, q, uint, u, 16, 8, 15);
+ TEST_VSXI_N(INSN_NAME, q, uint, u, 32, 4, 31);
+ TEST_VSXI_N(INSN_NAME, q, uint, u, 64, 2, 63);
+
+ dump_results_hex2 (TEST_MSG, "max shift amount");
}