[2/4] ARMv8.2-A testsuite for new data movement intrinsics
gcc/testsuite/ * gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h (FP16_SUPPORTED): Enable AArch64. * gcc.target/aarch64/advsimd-intrinsics/vdup_lane.c: Add support for vdup*_laneq. * gcc.target/aarch64/advsimd-intrinsics/vduph_lane.c: New. * gcc.target/aarch64/advsimd-intrinsics/vtrn_half.c: New. * gcc.target/aarch64/advsimd-intrinsics/vuzp_half.c: New. * gcc.target/aarch64/advsimd-intrinsics/vzip_half.c: New. From-SVN: r240922
This commit is contained in:
parent
6e49f922a6
commit
8f3edb0732
7 changed files with 1053 additions and 15 deletions
|
@ -1,3 +1,14 @@
|
|||
2016-10-10 Jiong Wang <jiong.wang@arm.com>
|
||||
|
||||
* gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h (FP16_SUPPORTED):
|
||||
Enable AArch64.
|
||||
* gcc.target/aarch64/advsimd-intrinsics/vdup_lane.c: Add support for
|
||||
vdup*_laneq.
|
||||
* gcc.target/aarch64/advsimd-intrinsics/vduph_lane.c: New.
|
||||
* gcc.target/aarch64/advsimd-intrinsics/vtrn_half.c: New.
|
||||
* gcc.target/aarch64/advsimd-intrinsics/vuzp_half.c: New.
|
||||
* gcc.target/aarch64/advsimd-intrinsics/vzip_half.c: New.
|
||||
|
||||
2016-10-10 Matthew Wahab <matthew.wahab@arm.com>
|
||||
Jiong Wang <jiong.wang@arm.com>
|
||||
|
||||
|
|
|
@ -17,9 +17,8 @@ extern void *memcpy(void *, const void *, size_t);
|
|||
extern size_t strlen(const char *);
|
||||
|
||||
/* Helper macro to select FP16 tests. */
|
||||
#if (!defined (__aarch64__) \
|
||||
&& (defined (__ARM_FP16_FORMAT_IEEE) \
|
||||
|| defined (__ARM_FP16_FORMAT_ALTERNATIVE)))
|
||||
#if (defined (__ARM_FP16_FORMAT_IEEE) \
|
||||
|| defined (__ARM_FP16_FORMAT_ALTERNATIVE))
|
||||
#define FP16_SUPPORTED (1)
|
||||
#else
|
||||
#undef FP16_SUPPORTED
|
||||
|
@ -520,17 +519,6 @@ static void clean_results (void)
|
|||
/* Helpers to initialize vectors. */
|
||||
#define VDUP(VAR, Q, T1, T2, W, N, V) \
|
||||
VECT_VAR(VAR, T1, W, N) = vdup##Q##_n_##T2##W(V)
|
||||
#if (defined (__aarch64__) \
|
||||
&& (defined (__ARM_FP16_FORMAT_IEEE) \
|
||||
|| defined (__ARM_FP16_FORMAT_ALTERNATIVE)))
|
||||
/* Work around that there is no vdup_n_f16 intrinsic. */
|
||||
#define vdup_n_f16(VAL) \
|
||||
__extension__ \
|
||||
({ \
|
||||
float16_t f = VAL; \
|
||||
vld1_dup_f16(&f); \
|
||||
})
|
||||
#endif
|
||||
|
||||
#define VSET_LANE(VAR, Q, T1, T2, W, N, L, V) \
|
||||
VECT_VAR(VAR, T1, W, N) = vset##Q##_lane_##T2##W(V, \
|
||||
|
|
|
@ -56,7 +56,7 @@ VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xca80, 0xca80,
|
|||
VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1700000, 0xc1700000,
|
||||
0xc1700000, 0xc1700000 };
|
||||
|
||||
#define TEST_MSG "VDUP_LANE/VDUP_LANEQ"
|
||||
#define TEST_MSG "VDUP_LANE/VDUPQ_LANE"
|
||||
void exec_vdup_lane (void)
|
||||
{
|
||||
/* Basic test: vec1=vdup_lane(vec2, lane), then store the result. */
|
||||
|
@ -114,6 +114,123 @@ void exec_vdup_lane (void)
|
|||
#else
|
||||
CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
|
||||
#endif
|
||||
|
||||
#if defined (__aarch64__)
|
||||
|
||||
#undef TEST_MSG
|
||||
#define TEST_MSG "VDUP_LANEQ/VDUPQ_LANEQ"
|
||||
|
||||
/* Expected results for vdup*_laneq tests. */
|
||||
VECT_VAR_DECL(expected2,int,8,8) [] = { 0xfd, 0xfd, 0xfd, 0xfd,
|
||||
0xfd, 0xfd, 0xfd, 0xfd };
|
||||
VECT_VAR_DECL(expected2,int,16,4) [] = { 0xfff2, 0xfff2, 0xfff2, 0xfff2 };
|
||||
VECT_VAR_DECL(expected2,int,32,2) [] = { 0xfffffff1, 0xfffffff1 };
|
||||
VECT_VAR_DECL(expected2,int,64,1) [] = { 0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected2,uint,8,8) [] = { 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff };
|
||||
VECT_VAR_DECL(expected2,uint,16,4) [] = { 0xfff3, 0xfff3, 0xfff3, 0xfff3 };
|
||||
VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xfffffff1, 0xfffffff1 };
|
||||
VECT_VAR_DECL(expected2,uint,64,1) [] = { 0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected2,poly,8,8) [] = { 0xf7, 0xf7, 0xf7, 0xf7,
|
||||
0xf7, 0xf7, 0xf7, 0xf7 };
|
||||
VECT_VAR_DECL(expected2,poly,16,4) [] = { 0xfff3, 0xfff3, 0xfff3, 0xfff3 };
|
||||
VECT_VAR_DECL(expected2,hfloat,32,2) [] = { 0xc1700000, 0xc1700000 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected2, hfloat, 16, 4) [] = { 0xca80, 0xca80,
|
||||
0xca80, 0xca80 };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected2,int,8,16) [] = { 0xfb, 0xfb, 0xfb, 0xfb,
|
||||
0xfb, 0xfb, 0xfb, 0xfb,
|
||||
0xfb, 0xfb, 0xfb, 0xfb,
|
||||
0xfb, 0xfb, 0xfb, 0xfb };
|
||||
VECT_VAR_DECL(expected2,int,16,8) [] = { 0xfff7, 0xfff7, 0xfff7, 0xfff7,
|
||||
0xfff7, 0xfff7, 0xfff7, 0xfff7 };
|
||||
VECT_VAR_DECL(expected2,int,32,4) [] = { 0xfffffff1, 0xfffffff1,
|
||||
0xfffffff1, 0xfffffff1 };
|
||||
VECT_VAR_DECL(expected2,int,64,2) [] = { 0xfffffffffffffff0,
|
||||
0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected2,uint,8,16) [] = { 0xf5, 0xf5, 0xf5, 0xf5,
|
||||
0xf5, 0xf5, 0xf5, 0xf5,
|
||||
0xf5, 0xf5, 0xf5, 0xf5,
|
||||
0xf5, 0xf5, 0xf5, 0xf5 };
|
||||
VECT_VAR_DECL(expected2,uint,16,8) [] = { 0xfff1, 0xfff1, 0xfff1, 0xfff1,
|
||||
0xfff1, 0xfff1, 0xfff1, 0xfff1 };
|
||||
VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xfffffff0, 0xfffffff0,
|
||||
0xfffffff0, 0xfffffff0 };
|
||||
VECT_VAR_DECL(expected2,uint,64,2) [] = { 0xfffffffffffffff0,
|
||||
0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected2,poly,8,16) [] = { 0xf5, 0xf5, 0xf5, 0xf5,
|
||||
0xf5, 0xf5, 0xf5, 0xf5,
|
||||
0xf5, 0xf5, 0xf5, 0xf5,
|
||||
0xf5, 0xf5, 0xf5, 0xf5 };
|
||||
VECT_VAR_DECL(expected2,poly,16,8) [] = { 0xfff1, 0xfff1, 0xfff1, 0xfff1,
|
||||
0xfff1, 0xfff1, 0xfff1, 0xfff1 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected2, hfloat, 16, 8) [] = { 0xc880, 0xc880,
|
||||
0xc880, 0xc880,
|
||||
0xc880, 0xc880,
|
||||
0xc880, 0xc880 };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected2,hfloat,32,4) [] = { 0xc1700000, 0xc1700000,
|
||||
0xc1700000, 0xc1700000 };
|
||||
|
||||
/* Clean all results for vdup*_laneq tests. */
|
||||
clean_results ();
|
||||
/* Basic test: vec1=vdup_lane(vec2, lane), then store the result. */
|
||||
#define TEST_VDUP_LANEQ(Q, T1, T2, W, N, N2, L) \
|
||||
VECT_VAR(vector_res, T1, W, N) = \
|
||||
vdup##Q##_laneq_##T2##W(VECT_VAR(vector, T1, W, N2), L); \
|
||||
vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
|
||||
|
||||
/* Input vector can only have 64 bits. */
|
||||
DECL_VARIABLE_128BITS_VARIANTS(vector);
|
||||
|
||||
clean_results ();
|
||||
|
||||
TEST_MACRO_128BITS_VARIANTS_2_5(VLOAD, vector, buffer);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VLOAD(vector, buffer, q, float, f, 16, 8);
|
||||
#endif
|
||||
VLOAD(vector, buffer, q, float, f, 32, 4);
|
||||
|
||||
/* Choose lane arbitrarily. */
|
||||
TEST_VDUP_LANEQ(, int, s, 8, 8, 16, 13);
|
||||
TEST_VDUP_LANEQ(, int, s, 16, 4, 8, 2);
|
||||
TEST_VDUP_LANEQ(, int, s, 32, 2, 4, 1);
|
||||
TEST_VDUP_LANEQ(, int, s, 64, 1, 2, 0);
|
||||
TEST_VDUP_LANEQ(, uint, u, 8, 8, 16, 15);
|
||||
TEST_VDUP_LANEQ(, uint, u, 16, 4, 8, 3);
|
||||
TEST_VDUP_LANEQ(, uint, u, 32, 2, 4, 1);
|
||||
TEST_VDUP_LANEQ(, uint, u, 64, 1, 2, 0);
|
||||
TEST_VDUP_LANEQ(, poly, p, 8, 8, 16, 7);
|
||||
TEST_VDUP_LANEQ(, poly, p, 16, 4, 8, 3);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VDUP_LANEQ(, float, f, 16, 4, 8, 3);
|
||||
#endif
|
||||
TEST_VDUP_LANEQ(, float, f, 32, 2, 4, 1);
|
||||
|
||||
TEST_VDUP_LANEQ(q, int, s, 8, 16, 16, 11);
|
||||
TEST_VDUP_LANEQ(q, int, s, 16, 8, 8, 7);
|
||||
TEST_VDUP_LANEQ(q, int, s, 32, 4, 4, 1);
|
||||
TEST_VDUP_LANEQ(q, int, s, 64, 2, 2, 0);
|
||||
TEST_VDUP_LANEQ(q, uint, u, 8, 16, 16, 5);
|
||||
TEST_VDUP_LANEQ(q, uint, u, 16, 8, 8, 1);
|
||||
TEST_VDUP_LANEQ(q, uint, u, 32, 4, 4, 0);
|
||||
TEST_VDUP_LANEQ(q, uint, u, 64, 2, 2, 0);
|
||||
TEST_VDUP_LANEQ(q, poly, p, 8, 16, 16, 5);
|
||||
TEST_VDUP_LANEQ(q, poly, p, 16, 8, 8, 1);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VDUP_LANEQ(q, float, f, 16, 8, 8, 7);
|
||||
#endif
|
||||
TEST_VDUP_LANEQ(q, float, f, 32, 4, 4, 1);
|
||||
|
||||
CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
|
||||
#if defined (FP16_SUPPORTED)
|
||||
CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected2, "");
|
||||
CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected2, "");
|
||||
#endif
|
||||
|
||||
#endif /* __aarch64__. */
|
||||
}
|
||||
|
||||
int main (void)
|
||||
|
|
137
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vduph_lane.c
Normal file
137
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vduph_lane.c
Normal file
|
@ -0,0 +1,137 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-skip-if "" { arm*-*-* } } */
|
||||
|
||||
#include <arm_neon.h>
|
||||
#include "arm-neon-ref.h"
|
||||
#include "compute-ref-data.h"
|
||||
|
||||
#define A -16
|
||||
#define B -15
|
||||
#define C -14
|
||||
#define D -13
|
||||
#define E -12
|
||||
#define F -11
|
||||
#define G -10
|
||||
#define H -9
|
||||
|
||||
#define F16_C(a) ((__fp16) a)
|
||||
#define AF F16_C (A)
|
||||
#define BF F16_C (B)
|
||||
#define CF F16_C (C)
|
||||
#define DF F16_C (D)
|
||||
#define EF F16_C (E)
|
||||
#define FF F16_C (F)
|
||||
#define GF F16_C (G)
|
||||
#define HF F16_C (H)
|
||||
|
||||
#define S16_C(a) ((int16_t) a)
|
||||
#define AS S16_C (A)
|
||||
#define BS S16_C (B)
|
||||
#define CS S16_C (C)
|
||||
#define DS S16_C (D)
|
||||
#define ES S16_C (E)
|
||||
#define FS S16_C (F)
|
||||
#define GS S16_C (G)
|
||||
#define HS S16_C (H)
|
||||
|
||||
#define U16_C(a) ((int16_t) a)
|
||||
#define AU U16_C (A)
|
||||
#define BU U16_C (B)
|
||||
#define CU U16_C (C)
|
||||
#define DU U16_C (D)
|
||||
#define EU U16_C (E)
|
||||
#define FU U16_C (F)
|
||||
#define GU U16_C (G)
|
||||
#define HU U16_C (H)
|
||||
|
||||
#define P16_C(a) ((poly16_t) a)
|
||||
#define AP P16_C (A)
|
||||
#define BP P16_C (B)
|
||||
#define CP P16_C (C)
|
||||
#define DP P16_C (D)
|
||||
#define EP P16_C (E)
|
||||
#define FP P16_C (F)
|
||||
#define GP P16_C (G)
|
||||
#define HP P16_C (H)
|
||||
|
||||
/* Expected results for vduph_lane. */
|
||||
float16_t expected_f16 = AF;
|
||||
int16_t expected_s16 = DS;
|
||||
uint16_t expected_u16 = BU;
|
||||
poly16_t expected_p16 = CP;
|
||||
|
||||
/* Expected results for vduph_laneq. */
|
||||
float16_t expected_q_f16 = EF;
|
||||
int16_t expected_q_s16 = BS;
|
||||
uint16_t expected_q_u16 = GU;
|
||||
poly16_t expected_q_p16 = FP;
|
||||
|
||||
void exec_vduph_lane_f16 (void)
|
||||
{
|
||||
/* vduph_lane. */
|
||||
DECL_VARIABLE(vsrc, float, 16, 4);
|
||||
DECL_VARIABLE(vsrc, int, 16, 4);
|
||||
DECL_VARIABLE(vsrc, uint, 16, 4);
|
||||
DECL_VARIABLE(vsrc, poly, 16, 4);
|
||||
VECT_VAR_DECL (buf_src, float, 16, 4) [] = {AF, BF, CF, DF};
|
||||
VECT_VAR_DECL (buf_src, int, 16, 4) [] = {AS, BS, CS, DS};
|
||||
VECT_VAR_DECL (buf_src, uint, 16, 4) [] = {AU, BU, CU, DU};
|
||||
VECT_VAR_DECL (buf_src, poly, 16, 4) [] = {AP, BP, CP, DP};
|
||||
VLOAD (vsrc, buf_src, , int, s, 16, 4);
|
||||
VLOAD (vsrc, buf_src, , float, f, 16, 4);
|
||||
VLOAD (vsrc, buf_src, , uint, u, 16, 4);
|
||||
VLOAD (vsrc, buf_src, , poly, p, 16, 4);
|
||||
|
||||
float16_t res_f = vduph_lane_f16 (VECT_VAR (vsrc, float, 16, 4), 0);
|
||||
if (* (unsigned short *) &res_f != * (unsigned short *) &expected_f16)
|
||||
abort ();
|
||||
|
||||
int16_t res_s = vduph_lane_s16 (VECT_VAR (vsrc, int, 16, 4), 3);
|
||||
if (* (unsigned short *) &res_s != * (unsigned short *) &expected_s16)
|
||||
abort ();
|
||||
|
||||
uint16_t res_u = vduph_lane_u16 (VECT_VAR (vsrc, uint, 16, 4), 1);
|
||||
if (* (unsigned short *) &res_u != * (unsigned short *) &expected_u16)
|
||||
abort ();
|
||||
|
||||
poly16_t res_p = vduph_lane_p16 (VECT_VAR (vsrc, poly, 16, 4), 2);
|
||||
if (* (unsigned short *) &res_p != * (unsigned short *) &expected_p16)
|
||||
abort ();
|
||||
|
||||
/* vduph_laneq. */
|
||||
DECL_VARIABLE(vsrc, float, 16, 8);
|
||||
DECL_VARIABLE(vsrc, int, 16, 8);
|
||||
DECL_VARIABLE(vsrc, uint, 16, 8);
|
||||
DECL_VARIABLE(vsrc, poly, 16, 8);
|
||||
VECT_VAR_DECL (buf_src, float, 16, 8) [] = {AF, BF, CF, DF, EF, FF, GF, HF};
|
||||
VECT_VAR_DECL (buf_src, int, 16, 8) [] = {AS, BS, CS, DS, ES, FS, GS, HS};
|
||||
VECT_VAR_DECL (buf_src, uint, 16, 8) [] = {AU, BU, CU, DU, EU, FU, GU, HU};
|
||||
VECT_VAR_DECL (buf_src, poly, 16, 8) [] = {AP, BP, CP, DP, EP, FP, GP, HP};
|
||||
VLOAD (vsrc, buf_src, q, int, s, 16, 8);
|
||||
VLOAD (vsrc, buf_src, q, float, f, 16, 8);
|
||||
VLOAD (vsrc, buf_src, q, uint, u, 16, 8);
|
||||
VLOAD (vsrc, buf_src, q, poly, p, 16, 8);
|
||||
|
||||
res_f = vduph_laneq_f16 (VECT_VAR (vsrc, float, 16, 8), 4);
|
||||
if (* (unsigned short *) &res_f != * (unsigned short *) &expected_q_f16)
|
||||
abort ();
|
||||
|
||||
res_s = vduph_laneq_s16 (VECT_VAR (vsrc, int, 16, 8), 1);
|
||||
if (* (unsigned short *) &res_s != * (unsigned short *) &expected_q_s16)
|
||||
abort ();
|
||||
|
||||
res_u = vduph_laneq_u16 (VECT_VAR (vsrc, uint, 16, 8), 6);
|
||||
if (* (unsigned short *) &res_u != * (unsigned short *) &expected_q_u16)
|
||||
abort ();
|
||||
|
||||
res_p = vduph_laneq_p16 (VECT_VAR (vsrc, poly, 16, 8), 5);
|
||||
if (* (unsigned short *) &res_p != * (unsigned short *) &expected_q_p16)
|
||||
abort ();
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
exec_vduph_lane_f16 ();
|
||||
return 0;
|
||||
}
|
263
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vtrn_half.c
Normal file
263
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vtrn_half.c
Normal file
|
@ -0,0 +1,263 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-skip-if "" { arm*-*-* } } */
|
||||
|
||||
#include <arm_neon.h>
|
||||
#include "arm-neon-ref.h"
|
||||
#include "compute-ref-data.h"
|
||||
|
||||
/* Expected results. */
|
||||
VECT_VAR_DECL(expected,int,8,8) [] = { 0xf0, 0x11, 0xf2, 0x11,
|
||||
0xf4, 0x11, 0xf6, 0x11 };
|
||||
VECT_VAR_DECL(expected,int,16,4) [] = { 0xfff0, 0x22, 0xfff2, 0x22 };
|
||||
VECT_VAR_DECL(expected,int,32,2) [] = { 0xfffffff0, 0x33 };
|
||||
VECT_VAR_DECL(expected,int,64,1) [] = { 0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf0, 0x55, 0xf2, 0x55,
|
||||
0xf4, 0x55, 0xf6, 0x55 };
|
||||
VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff0, 0x66, 0xfff2, 0x66 };
|
||||
VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff0, 0x77 };
|
||||
VECT_VAR_DECL(expected,uint,64,1) [] = { 0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected,poly,8,8) [] = { 0xf0, 0x55, 0xf2, 0x55,
|
||||
0xf4, 0x55, 0xf6, 0x55 };
|
||||
VECT_VAR_DECL(expected,poly,16,4) [] = { 0xfff0, 0x66, 0xfff2, 0x66 };
|
||||
VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1800000, 0x42066666 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0x4b4d,
|
||||
0xcb00, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected,int,8,16) [] = { 0xf0, 0x11, 0xf2, 0x11,
|
||||
0xf4, 0x11, 0xf6, 0x11,
|
||||
0xf8, 0x11, 0xfa, 0x11,
|
||||
0xfc, 0x11, 0xfe, 0x11 };
|
||||
VECT_VAR_DECL(expected,int,16,8) [] = { 0xfff0, 0x22, 0xfff2, 0x22,
|
||||
0xfff4, 0x22, 0xfff6, 0x22 };
|
||||
VECT_VAR_DECL(expected,int,32,4) [] = { 0xfffffff0, 0x33,
|
||||
0xfffffff2, 0x33 };
|
||||
VECT_VAR_DECL(expected,int,64,2) [] = { 0xfffffffffffffff0,
|
||||
0x44 };
|
||||
VECT_VAR_DECL(expected,uint,8,16) [] = { 0xf0, 0x55, 0xf2, 0x55,
|
||||
0xf4, 0x55, 0xf6, 0x55,
|
||||
0xf8, 0x55, 0xfa, 0x55,
|
||||
0xfc, 0x55, 0xfe, 0x55 };
|
||||
VECT_VAR_DECL(expected,uint,16,8) [] = { 0xfff0, 0x66, 0xfff2, 0x66,
|
||||
0xfff4, 0x66, 0xfff6, 0x66 };
|
||||
VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffffff0, 0x77,
|
||||
0xfffffff2, 0x77 };
|
||||
VECT_VAR_DECL(expected,uint,64,2) [] = { 0xfffffffffffffff0,
|
||||
0x88 };
|
||||
VECT_VAR_DECL(expected,poly,8,16) [] = { 0xf0, 0x55, 0xf2, 0x55,
|
||||
0xf4, 0x55, 0xf6, 0x55,
|
||||
0xf8, 0x55, 0xfa, 0x55,
|
||||
0xfc, 0x55, 0xfe, 0x55 };
|
||||
VECT_VAR_DECL(expected,poly,16,8) [] = { 0xfff0, 0x66, 0xfff2, 0x66,
|
||||
0xfff4, 0x66, 0xfff6, 0x66 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0x4b4d,
|
||||
0xcb00, 0x4b4d,
|
||||
0xca00, 0x4b4d,
|
||||
0xc900, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1800000, 0x42073333,
|
||||
0xc1600000, 0x42073333 };
|
||||
|
||||
#define TEST_MSG "VTRN1"
|
||||
void exec_vtrn_half (void)
|
||||
{
|
||||
#define TEST_VTRN(PART, Q, T1, T2, W, N) \
|
||||
VECT_VAR(vector_res, T1, W, N) = \
|
||||
vtrn##PART##Q##_##T2##W(VECT_VAR(vector, T1, W, N), \
|
||||
VECT_VAR(vector2, T1, W, N)); \
|
||||
vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
|
||||
|
||||
#define TEST_VTRN1(Q, T1, T2, W, N) TEST_VTRN(1, Q, T1, T2, W, N)
|
||||
|
||||
/* Input vector can only have 64 bits. */
|
||||
DECL_VARIABLE_ALL_VARIANTS(vector);
|
||||
DECL_VARIABLE_ALL_VARIANTS(vector2);
|
||||
DECL_VARIABLE(vector, float, 64, 2);
|
||||
DECL_VARIABLE(vector2, float, 64, 2);
|
||||
|
||||
DECL_VARIABLE_ALL_VARIANTS(vector_res);
|
||||
DECL_VARIABLE(vector_res, float, 64, 2);
|
||||
|
||||
clean_results ();
|
||||
/* We don't have vtrn1_T64x1, so set expected to the clean value. */
|
||||
CLEAN(expected, int, 64, 1);
|
||||
CLEAN(expected, uint, 64, 1);
|
||||
|
||||
TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VLOAD(vector, buffer, , float, f, 16, 4);
|
||||
VLOAD(vector, buffer, q, float, f, 16, 8);
|
||||
#endif
|
||||
VLOAD(vector, buffer, , float, f, 32, 2);
|
||||
VLOAD(vector, buffer, q, float, f, 32, 4);
|
||||
VLOAD(vector, buffer, q, float, f, 64, 2);
|
||||
|
||||
/* Choose arbitrary initialization values. */
|
||||
VDUP(vector2, , int, s, 8, 8, 0x11);
|
||||
VDUP(vector2, , int, s, 16, 4, 0x22);
|
||||
VDUP(vector2, , int, s, 32, 2, 0x33);
|
||||
VDUP(vector2, , uint, u, 8, 8, 0x55);
|
||||
VDUP(vector2, , uint, u, 16, 4, 0x66);
|
||||
VDUP(vector2, , uint, u, 32, 2, 0x77);
|
||||
VDUP(vector2, , poly, p, 8, 8, 0x55);
|
||||
VDUP(vector2, , poly, p, 16, 4, 0x66);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VDUP (vector2, , float, f, 16, 4, 14.6f); /* 14.6f is 0x4b4d. */
|
||||
#endif
|
||||
VDUP(vector2, , float, f, 32, 2, 33.6f);
|
||||
|
||||
VDUP(vector2, q, int, s, 8, 16, 0x11);
|
||||
VDUP(vector2, q, int, s, 16, 8, 0x22);
|
||||
VDUP(vector2, q, int, s, 32, 4, 0x33);
|
||||
VDUP(vector2, q, int, s, 64, 2, 0x44);
|
||||
VDUP(vector2, q, uint, u, 8, 16, 0x55);
|
||||
VDUP(vector2, q, uint, u, 16, 8, 0x66);
|
||||
VDUP(vector2, q, uint, u, 32, 4, 0x77);
|
||||
VDUP(vector2, q, uint, u, 64, 2, 0x88);
|
||||
VDUP(vector2, q, poly, p, 8, 16, 0x55);
|
||||
VDUP(vector2, q, poly, p, 16, 8, 0x66);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VDUP (vector2, q, float, f, 16, 8, 14.6f);
|
||||
#endif
|
||||
VDUP(vector2, q, float, f, 32, 4, 33.8f);
|
||||
VDUP(vector2, q, float, f, 64, 2, 33.8f);
|
||||
|
||||
TEST_VTRN1(, int, s, 8, 8);
|
||||
TEST_VTRN1(, int, s, 16, 4);
|
||||
TEST_VTRN1(, int, s, 32, 2);
|
||||
TEST_VTRN1(, uint, u, 8, 8);
|
||||
TEST_VTRN1(, uint, u, 16, 4);
|
||||
TEST_VTRN1(, uint, u, 32, 2);
|
||||
TEST_VTRN1(, poly, p, 8, 8);
|
||||
TEST_VTRN1(, poly, p, 16, 4);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VTRN1(, float, f, 16, 4);
|
||||
#endif
|
||||
TEST_VTRN1(, float, f, 32, 2);
|
||||
|
||||
TEST_VTRN1(q, int, s, 8, 16);
|
||||
TEST_VTRN1(q, int, s, 16, 8);
|
||||
TEST_VTRN1(q, int, s, 32, 4);
|
||||
TEST_VTRN1(q, int, s, 64, 2);
|
||||
TEST_VTRN1(q, uint, u, 8, 16);
|
||||
TEST_VTRN1(q, uint, u, 16, 8);
|
||||
TEST_VTRN1(q, uint, u, 32, 4);
|
||||
TEST_VTRN1(q, uint, u, 64, 2);
|
||||
TEST_VTRN1(q, poly, p, 8, 16);
|
||||
TEST_VTRN1(q, poly, p, 16, 8);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VTRN1(q, float, f, 16, 8);
|
||||
#endif
|
||||
TEST_VTRN1(q, float, f, 32, 4);
|
||||
TEST_VTRN1(q, float, f, 64, 2);
|
||||
|
||||
#if defined (FP16_SUPPORTED)
|
||||
CHECK_RESULTS (TEST_MSG, "");
|
||||
#else
|
||||
CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
|
||||
#endif
|
||||
|
||||
#undef TEST_MSG
|
||||
#define TEST_MSG "VTRN2"
|
||||
|
||||
#define TEST_VTRN2(Q, T1, T2, W, N) TEST_VTRN(2, Q, T1, T2, W, N)
|
||||
|
||||
/* Expected results. */
|
||||
VECT_VAR_DECL(expected2,int,8,8) [] = { 0xf1, 0x11, 0xf3, 0x11,
|
||||
0xf5, 0x11, 0xf7, 0x11 };
|
||||
VECT_VAR_DECL(expected2,int,16,4) [] = { 0xfff1, 0x22, 0xfff3, 0x22 };
|
||||
VECT_VAR_DECL(expected2,int,32,2) [] = { 0xfffffff1, 0x33 };
|
||||
VECT_VAR_DECL(expected2,int,64,1) [] = { 0xfffffffffffffff1 };
|
||||
VECT_VAR_DECL(expected2,uint,8,8) [] = { 0xf1, 0x55, 0xf3, 0x55,
|
||||
0xf5, 0x55, 0xf7, 0x55 };
|
||||
VECT_VAR_DECL(expected2,uint,16,4) [] = { 0xfff1, 0x66, 0xfff3, 0x66 };
|
||||
VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xfffffff1, 0x77 };
|
||||
VECT_VAR_DECL(expected2,uint,64,1) [] = { 0xfffffffffffffff1 };
|
||||
VECT_VAR_DECL(expected2,poly,8,8) [] = { 0xf1, 0x55, 0xf3, 0x55,
|
||||
0xf5, 0x55, 0xf7, 0x55 };
|
||||
VECT_VAR_DECL(expected2,poly,16,4) [] = { 0xfff1, 0x66, 0xfff3, 0x66 };
|
||||
VECT_VAR_DECL(expected2,hfloat,32,2) [] = { 0xc1700000, 0x42066666 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected2, hfloat, 16, 4) [] = { 0xcb80, 0x4b4d,
|
||||
0xca80, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected2,int,8,16) [] = { 0xf1, 0x11, 0xf3, 0x11,
|
||||
0xf5, 0x11, 0xf7, 0x11,
|
||||
0xf9, 0x11, 0xfb, 0x11,
|
||||
0xfd, 0x11, 0xff, 0x11 };
|
||||
VECT_VAR_DECL(expected2,int,16,8) [] = { 0xfff1, 0x22, 0xfff3, 0x22,
|
||||
0xfff5, 0x22, 0xfff7, 0x22 };
|
||||
VECT_VAR_DECL(expected2,int,32,4) [] = { 0xfffffff1, 0x33,
|
||||
0xfffffff3, 0x33 };
|
||||
VECT_VAR_DECL(expected2,int,64,2) [] = { 0xfffffffffffffff1,
|
||||
0x44 };
|
||||
VECT_VAR_DECL(expected2,uint,8,16) [] = { 0xf1, 0x55, 0xf3, 0x55,
|
||||
0xf5, 0x55, 0xf7, 0x55,
|
||||
0xf9, 0x55, 0xfb, 0x55,
|
||||
0xfd, 0x55, 0xff, 0x55 };
|
||||
VECT_VAR_DECL(expected2,uint,16,8) [] = { 0xfff1, 0x66, 0xfff3, 0x66,
|
||||
0xfff5, 0x66, 0xfff7, 0x66 };
|
||||
VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xfffffff1, 0x77,
|
||||
0xfffffff3, 0x77 };
|
||||
VECT_VAR_DECL(expected2,uint,64,2) [] = { 0xfffffffffffffff1,
|
||||
0x88 };
|
||||
VECT_VAR_DECL(expected2,poly,8,16) [] = { 0xf1, 0x55, 0xf3, 0x55,
|
||||
0xf5, 0x55, 0xf7, 0x55,
|
||||
0xf9, 0x55, 0xfb, 0x55,
|
||||
0xfd, 0x55, 0xff, 0x55 };
|
||||
VECT_VAR_DECL(expected2,poly,16,8) [] = { 0xfff1, 0x66, 0xfff3, 0x66,
|
||||
0xfff5, 0x66, 0xfff7, 0x66 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected2, hfloat, 16, 8) [] = { 0xcb80, 0x4b4d,
|
||||
0xca80, 0x4b4d,
|
||||
0xc980, 0x4b4d,
|
||||
0xc880, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected2,hfloat,32,4) [] = { 0xc1700000, 0x42073333,
|
||||
0xc1500000, 0x42073333 };
|
||||
clean_results ();
|
||||
CLEAN(expected2, int, 64, 1);
|
||||
CLEAN(expected2, uint, 64, 1);
|
||||
|
||||
TEST_VTRN2(, int, s, 8, 8);
|
||||
TEST_VTRN2(, int, s, 16, 4);
|
||||
TEST_VTRN2(, int, s, 32, 2);
|
||||
TEST_VTRN2(, uint, u, 8, 8);
|
||||
TEST_VTRN2(, uint, u, 16, 4);
|
||||
TEST_VTRN2(, uint, u, 32, 2);
|
||||
TEST_VTRN2(, poly, p, 8, 8);
|
||||
TEST_VTRN2(, poly, p, 16, 4);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VTRN2(, float, f, 16, 4);
|
||||
#endif
|
||||
TEST_VTRN2(, float, f, 32, 2);
|
||||
|
||||
TEST_VTRN2(q, int, s, 8, 16);
|
||||
TEST_VTRN2(q, int, s, 16, 8);
|
||||
TEST_VTRN2(q, int, s, 32, 4);
|
||||
TEST_VTRN2(q, int, s, 64, 2);
|
||||
TEST_VTRN2(q, uint, u, 8, 16);
|
||||
TEST_VTRN2(q, uint, u, 16, 8);
|
||||
TEST_VTRN2(q, uint, u, 32, 4);
|
||||
TEST_VTRN2(q, uint, u, 64, 2);
|
||||
TEST_VTRN2(q, poly, p, 8, 16);
|
||||
TEST_VTRN2(q, poly, p, 16, 8);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VTRN2(q, float, f, 16, 8);
|
||||
#endif
|
||||
TEST_VTRN2(q, float, f, 32, 4);
|
||||
TEST_VTRN2(q, float, f, 64, 2);
|
||||
|
||||
CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
|
||||
#if defined (FP16_SUPPORTED)
|
||||
CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected2, "");
|
||||
CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected2, "");
|
||||
#endif
|
||||
}
|
||||
|
||||
int main (void)
|
||||
{
|
||||
exec_vtrn_half ();
|
||||
return 0;
|
||||
}
|
259
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vuzp_half.c
Normal file
259
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vuzp_half.c
Normal file
|
@ -0,0 +1,259 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-skip-if "" { arm*-*-* } } */
|
||||
|
||||
#include <arm_neon.h>
|
||||
#include "arm-neon-ref.h"
|
||||
#include "compute-ref-data.h"
|
||||
|
||||
/* Expected results. */
|
||||
VECT_VAR_DECL(expected,int,8,8) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
|
||||
0x11, 0x11, 0x11, 0x11 };
|
||||
VECT_VAR_DECL(expected,int,16,4) [] = { 0xfff0, 0xfff2, 0x22, 0x22 };
|
||||
VECT_VAR_DECL(expected,int,32,2) [] = { 0xfffffff0, 0x33 };
|
||||
VECT_VAR_DECL(expected,int,64,1) [] = { 0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
|
||||
0x55, 0x55, 0x55, 0x55 };
|
||||
VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff0, 0xfff2, 0x66, 0x66 };
|
||||
VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff0, 0x77 };
|
||||
VECT_VAR_DECL(expected,uint,64,1) [] = { 0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected,poly,8,8) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
|
||||
0x55, 0x55, 0x55, 0x55 };
|
||||
VECT_VAR_DECL(expected,poly,16,4) [] = { 0xfff0, 0xfff2, 0x66, 0x66 };
|
||||
VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1800000, 0x42066666 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0xcb00,
|
||||
0x4b4d, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected,int,8,16) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
|
||||
0xf8, 0xfa, 0xfc, 0xfe,
|
||||
0x11, 0x11, 0x11, 0x11,
|
||||
0x11, 0x11, 0x11, 0x11 };
|
||||
VECT_VAR_DECL(expected,int,16,8) [] = { 0xfff0, 0xfff2, 0xfff4, 0xfff6,
|
||||
0x22, 0x22, 0x22, 0x22 };
|
||||
VECT_VAR_DECL(expected,int,32,4) [] = { 0xfffffff0, 0xfffffff2,
|
||||
0x33, 0x33 };
|
||||
VECT_VAR_DECL(expected,int,64,2) [] = { 0xfffffffffffffff0,
|
||||
0x44 };
|
||||
VECT_VAR_DECL(expected,uint,8,16) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
|
||||
0xf8, 0xfa, 0xfc, 0xfe,
|
||||
0x55, 0x55, 0x55, 0x55,
|
||||
0x55, 0x55, 0x55, 0x55 };
|
||||
VECT_VAR_DECL(expected,uint,16,8) [] = { 0xfff0, 0xfff2, 0xfff4, 0xfff6,
|
||||
0x66, 0x66, 0x66, 0x66 };
|
||||
VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffffff0, 0xfffffff2, 0x77, 0x77 };
|
||||
VECT_VAR_DECL(expected,uint,64,2) [] = { 0xfffffffffffffff0,
|
||||
0x88 };
|
||||
VECT_VAR_DECL(expected,poly,8,16) [] = { 0xf0, 0xf2, 0xf4, 0xf6,
|
||||
0xf8, 0xfa, 0xfc, 0xfe,
|
||||
0x55, 0x55, 0x55, 0x55,
|
||||
0x55, 0x55, 0x55, 0x55 };
|
||||
VECT_VAR_DECL(expected,poly,16,8) [] = { 0xfff0, 0xfff2, 0xfff4, 0xfff6,
|
||||
0x66, 0x66, 0x66, 0x66 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0xcb00, 0xca00, 0xc900,
|
||||
0x4b4d, 0x4b4d, 0x4b4d, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1800000, 0xc1600000,
|
||||
0x42073333, 0x42073333 };
|
||||
|
||||
#define TEST_MSG "VUZP1"
|
||||
void exec_vuzp_half (void)
|
||||
{
|
||||
#define TEST_VUZP(PART, Q, T1, T2, W, N) \
|
||||
VECT_VAR(vector_res, T1, W, N) = \
|
||||
vuzp##PART##Q##_##T2##W(VECT_VAR(vector, T1, W, N), \
|
||||
VECT_VAR(vector2, T1, W, N)); \
|
||||
vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
|
||||
|
||||
#define TEST_VUZP1(Q, T1, T2, W, N) TEST_VUZP(1, Q, T1, T2, W, N)
|
||||
|
||||
/* Input vector can only have 64 bits. */
|
||||
DECL_VARIABLE_ALL_VARIANTS(vector);
|
||||
DECL_VARIABLE_ALL_VARIANTS(vector2);
|
||||
DECL_VARIABLE(vector, float, 64, 2);
|
||||
DECL_VARIABLE(vector2, float, 64, 2);
|
||||
|
||||
DECL_VARIABLE_ALL_VARIANTS(vector_res);
|
||||
DECL_VARIABLE(vector_res, float, 64, 2);
|
||||
|
||||
clean_results ();
|
||||
/* We don't have vuzp1_T64x1, so set expected to the clean value. */
|
||||
CLEAN(expected, int, 64, 1);
|
||||
CLEAN(expected, uint, 64, 1);
|
||||
|
||||
TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VLOAD(vector, buffer, , float, f, 16, 4);
|
||||
VLOAD(vector, buffer, q, float, f, 16, 8);
|
||||
#endif
|
||||
VLOAD(vector, buffer, , float, f, 32, 2);
|
||||
VLOAD(vector, buffer, q, float, f, 32, 4);
|
||||
VLOAD(vector, buffer, q, float, f, 64, 2);
|
||||
|
||||
/* Choose arbitrary initialization values. */
|
||||
VDUP(vector2, , int, s, 8, 8, 0x11);
|
||||
VDUP(vector2, , int, s, 16, 4, 0x22);
|
||||
VDUP(vector2, , int, s, 32, 2, 0x33);
|
||||
VDUP(vector2, , uint, u, 8, 8, 0x55);
|
||||
VDUP(vector2, , uint, u, 16, 4, 0x66);
|
||||
VDUP(vector2, , uint, u, 32, 2, 0x77);
|
||||
VDUP(vector2, , poly, p, 8, 8, 0x55);
|
||||
VDUP(vector2, , poly, p, 16, 4, 0x66);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VDUP (vector2, , float, f, 16, 4, 14.6f); /* 14.6f is 0x4b4d. */
|
||||
#endif
|
||||
VDUP(vector2, , float, f, 32, 2, 33.6f);
|
||||
|
||||
VDUP(vector2, q, int, s, 8, 16, 0x11);
|
||||
VDUP(vector2, q, int, s, 16, 8, 0x22);
|
||||
VDUP(vector2, q, int, s, 32, 4, 0x33);
|
||||
VDUP(vector2, q, int, s, 64, 2, 0x44);
|
||||
VDUP(vector2, q, uint, u, 8, 16, 0x55);
|
||||
VDUP(vector2, q, uint, u, 16, 8, 0x66);
|
||||
VDUP(vector2, q, uint, u, 32, 4, 0x77);
|
||||
VDUP(vector2, q, uint, u, 64, 2, 0x88);
|
||||
VDUP(vector2, q, poly, p, 8, 16, 0x55);
|
||||
VDUP(vector2, q, poly, p, 16, 8, 0x66);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VDUP (vector2, q, float, f, 16, 8, 14.6f);
|
||||
#endif
|
||||
VDUP(vector2, q, float, f, 32, 4, 33.8f);
|
||||
VDUP(vector2, q, float, f, 64, 2, 33.8f);
|
||||
|
||||
TEST_VUZP1(, int, s, 8, 8);
|
||||
TEST_VUZP1(, int, s, 16, 4);
|
||||
TEST_VUZP1(, int, s, 32, 2);
|
||||
TEST_VUZP1(, uint, u, 8, 8);
|
||||
TEST_VUZP1(, uint, u, 16, 4);
|
||||
TEST_VUZP1(, uint, u, 32, 2);
|
||||
TEST_VUZP1(, poly, p, 8, 8);
|
||||
TEST_VUZP1(, poly, p, 16, 4);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VUZP1(, float, f, 16, 4);
|
||||
#endif
|
||||
TEST_VUZP1(, float, f, 32, 2);
|
||||
|
||||
TEST_VUZP1(q, int, s, 8, 16);
|
||||
TEST_VUZP1(q, int, s, 16, 8);
|
||||
TEST_VUZP1(q, int, s, 32, 4);
|
||||
TEST_VUZP1(q, int, s, 64, 2);
|
||||
TEST_VUZP1(q, uint, u, 8, 16);
|
||||
TEST_VUZP1(q, uint, u, 16, 8);
|
||||
TEST_VUZP1(q, uint, u, 32, 4);
|
||||
TEST_VUZP1(q, uint, u, 64, 2);
|
||||
TEST_VUZP1(q, poly, p, 8, 16);
|
||||
TEST_VUZP1(q, poly, p, 16, 8);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VUZP1(q, float, f, 16, 8);
|
||||
#endif
|
||||
TEST_VUZP1(q, float, f, 32, 4);
|
||||
TEST_VUZP1(q, float, f, 64, 2);
|
||||
|
||||
#if defined (FP16_SUPPORTED)
|
||||
CHECK_RESULTS (TEST_MSG, "");
|
||||
#else
|
||||
CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
|
||||
#endif
|
||||
|
||||
#undef TEST_MSG
|
||||
#define TEST_MSG "VUZP2"
|
||||
|
||||
#define TEST_VUZP2(Q, T1, T2, W, N) TEST_VUZP(2, Q, T1, T2, W, N)
|
||||
|
||||
/* Expected results. */
|
||||
VECT_VAR_DECL(expected2,int,8,8) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
|
||||
0x11, 0x11, 0x11, 0x11 };
|
||||
VECT_VAR_DECL(expected2,int,16,4) [] = { 0xfff1, 0xfff3, 0x22, 0x22 };
|
||||
VECT_VAR_DECL(expected2,int,32,2) [] = { 0xfffffff1, 0x33 };
|
||||
VECT_VAR_DECL(expected2,int,64,1) [] = { 0xfffffffffffffff1 };
|
||||
VECT_VAR_DECL(expected2,uint,8,8) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
|
||||
0x55, 0x55, 0x55, 0x55 };
|
||||
VECT_VAR_DECL(expected2,uint,16,4) [] = { 0xfff1, 0xfff3, 0x66, 0x66 };
|
||||
VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xfffffff1, 0x77 };
|
||||
VECT_VAR_DECL(expected2,uint,64,1) [] = { 0xfffffffffffffff1 };
|
||||
VECT_VAR_DECL(expected2,poly,8,8) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
|
||||
0x55, 0x55, 0x55, 0x55 };
|
||||
VECT_VAR_DECL(expected2,poly,16,4) [] = { 0xfff1, 0xfff3, 0x66, 0x66 };
|
||||
VECT_VAR_DECL(expected2,hfloat,32,2) [] = { 0xc1700000, 0x42066666 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected2, hfloat, 16, 4) [] = { 0xcb80, 0xca80,
|
||||
0x4b4d, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected2,int,8,16) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
|
||||
0xf9, 0xfb, 0xfd, 0xff,
|
||||
0x11, 0x11, 0x11, 0x11,
|
||||
0x11, 0x11, 0x11, 0x11 };
|
||||
VECT_VAR_DECL(expected2,int,16,8) [] = { 0xfff1, 0xfff3, 0xfff5, 0xfff7,
|
||||
0x22, 0x22, 0x22, 0x22 };
|
||||
VECT_VAR_DECL(expected2,int,32,4) [] = { 0xfffffff1, 0xfffffff3,
|
||||
0x33, 0x33 };
|
||||
VECT_VAR_DECL(expected2,int,64,2) [] = { 0xfffffffffffffff1,
|
||||
0x44 };
|
||||
VECT_VAR_DECL(expected2,uint,8,16) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
|
||||
0xf9, 0xfb, 0xfd, 0xff,
|
||||
0x55, 0x55, 0x55, 0x55,
|
||||
0x55, 0x55, 0x55, 0x55 };
|
||||
VECT_VAR_DECL(expected2,uint,16,8) [] = { 0xfff1, 0xfff3, 0xfff5, 0xfff7,
|
||||
0x66, 0x66, 0x66, 0x66 };
|
||||
VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xfffffff1, 0xfffffff3, 0x77, 0x77 };
|
||||
VECT_VAR_DECL(expected2,uint,64,2) [] = { 0xfffffffffffffff1,
|
||||
0x88 };
|
||||
VECT_VAR_DECL(expected2,poly,8,16) [] = { 0xf1, 0xf3, 0xf5, 0xf7,
|
||||
0xf9, 0xfb, 0xfd, 0xff,
|
||||
0x55, 0x55, 0x55, 0x55,
|
||||
0x55, 0x55, 0x55, 0x55 };
|
||||
VECT_VAR_DECL(expected2,poly,16,8) [] = { 0xfff1, 0xfff3, 0xfff5, 0xfff7,
|
||||
0x66, 0x66, 0x66, 0x66 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected2, hfloat, 16, 8) [] = { 0xcb80, 0xca80, 0xc980, 0xc880,
|
||||
0x4b4d, 0x4b4d, 0x4b4d, 0x4b4d
|
||||
};
|
||||
#endif
|
||||
VECT_VAR_DECL(expected2,hfloat,32,4) [] = { 0xc1700000, 0xc1500000,
|
||||
0x42073333, 0x42073333 };
|
||||
|
||||
clean_results ();
|
||||
CLEAN(expected2, int, 64, 1);
|
||||
CLEAN(expected2, uint, 64, 1);
|
||||
|
||||
TEST_VUZP2(, int, s, 8, 8);
|
||||
TEST_VUZP2(, int, s, 16, 4);
|
||||
TEST_VUZP2(, int, s, 32, 2);
|
||||
TEST_VUZP2(, uint, u, 8, 8);
|
||||
TEST_VUZP2(, uint, u, 16, 4);
|
||||
TEST_VUZP2(, uint, u, 32, 2);
|
||||
TEST_VUZP2(, poly, p, 8, 8);
|
||||
TEST_VUZP2(, poly, p, 16, 4);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VUZP2(, float, f, 16, 4);
|
||||
#endif
|
||||
TEST_VUZP2(, float, f, 32, 2);
|
||||
|
||||
TEST_VUZP2(q, int, s, 8, 16);
|
||||
TEST_VUZP2(q, int, s, 16, 8);
|
||||
TEST_VUZP2(q, int, s, 32, 4);
|
||||
TEST_VUZP2(q, int, s, 64, 2);
|
||||
TEST_VUZP2(q, uint, u, 8, 16);
|
||||
TEST_VUZP2(q, uint, u, 16, 8);
|
||||
TEST_VUZP2(q, uint, u, 32, 4);
|
||||
TEST_VUZP2(q, uint, u, 64, 2);
|
||||
TEST_VUZP2(q, poly, p, 8, 16);
|
||||
TEST_VUZP2(q, poly, p, 16, 8);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VUZP2(q, float, f, 16, 8);
|
||||
#endif
|
||||
TEST_VUZP2(q, float, f, 32, 4);
|
||||
TEST_VUZP2(q, float, f, 64, 2);
|
||||
|
||||
CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
|
||||
#if defined (FP16_SUPPORTED)
|
||||
CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected2, "");
|
||||
CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected2, "");
|
||||
#endif
|
||||
}
|
||||
|
||||
int main (void)
|
||||
{
|
||||
exec_vuzp_half ();
|
||||
return 0;
|
||||
}
|
263
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vzip_half.c
Normal file
263
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vzip_half.c
Normal file
|
@ -0,0 +1,263 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-skip-if "" { arm*-*-* } } */
|
||||
|
||||
#include <arm_neon.h>
|
||||
#include "arm-neon-ref.h"
|
||||
#include "compute-ref-data.h"
|
||||
|
||||
/* Expected results. */
|
||||
VECT_VAR_DECL(expected,int,8,8) [] = { 0xf0, 0x11, 0xf1, 0x11,
|
||||
0xf2, 0x11, 0xf3, 0x11 };
|
||||
VECT_VAR_DECL(expected,int,16,4) [] = { 0xfff0, 0x22, 0xfff1, 0x22 };
|
||||
VECT_VAR_DECL(expected,int,32,2) [] = { 0xfffffff0, 0x33 };
|
||||
VECT_VAR_DECL(expected,int,64,1) [] = { 0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected,uint,8,8) [] = { 0xf0, 0x55, 0xf1, 0x55,
|
||||
0xf2, 0x55, 0xf3, 0x55 };
|
||||
VECT_VAR_DECL(expected,uint,16,4) [] = { 0xfff0, 0x66, 0xfff1, 0x66 };
|
||||
VECT_VAR_DECL(expected,uint,32,2) [] = { 0xfffffff0, 0x77 };
|
||||
VECT_VAR_DECL(expected,uint,64,1) [] = { 0xfffffffffffffff0 };
|
||||
VECT_VAR_DECL(expected,poly,8,8) [] = { 0xf0, 0x55, 0xf1, 0x55,
|
||||
0xf2, 0x55, 0xf3, 0x55 };
|
||||
VECT_VAR_DECL(expected,poly,16,4) [] = { 0xfff0, 0x66, 0xfff1, 0x66 };
|
||||
VECT_VAR_DECL(expected,hfloat,32,2) [] = { 0xc1800000, 0x42066666 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected, hfloat, 16, 4) [] = { 0xcc00, 0x4b4d,
|
||||
0xcb80, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected,int,8,16) [] = { 0xf0, 0x11, 0xf1, 0x11,
|
||||
0xf2, 0x11, 0xf3, 0x11,
|
||||
0xf4, 0x11, 0xf5, 0x11,
|
||||
0xf6, 0x11, 0xf7, 0x11 };
|
||||
VECT_VAR_DECL(expected,int,16,8) [] = { 0xfff0, 0x22, 0xfff1, 0x22,
|
||||
0xfff2, 0x22, 0xfff3, 0x22 };
|
||||
VECT_VAR_DECL(expected,int,32,4) [] = { 0xfffffff0, 0x33,
|
||||
0xfffffff1, 0x33 };
|
||||
VECT_VAR_DECL(expected,int,64,2) [] = { 0xfffffffffffffff0,
|
||||
0x44 };
|
||||
VECT_VAR_DECL(expected,uint,8,16) [] = { 0xf0, 0x55, 0xf1, 0x55,
|
||||
0xf2, 0x55, 0xf3, 0x55,
|
||||
0xf4, 0x55, 0xf5, 0x55,
|
||||
0xf6, 0x55, 0xf7, 0x55 };
|
||||
VECT_VAR_DECL(expected,uint,16,8) [] = { 0xfff0, 0x66, 0xfff1, 0x66,
|
||||
0xfff2, 0x66, 0xfff3, 0x66 };
|
||||
VECT_VAR_DECL(expected,uint,32,4) [] = { 0xfffffff0, 0x77,
|
||||
0xfffffff1, 0x77 };
|
||||
VECT_VAR_DECL(expected,uint,64,2) [] = { 0xfffffffffffffff0,
|
||||
0x88 };
|
||||
VECT_VAR_DECL(expected,poly,8,16) [] = { 0xf0, 0x55, 0xf1, 0x55,
|
||||
0xf2, 0x55, 0xf3, 0x55,
|
||||
0xf4, 0x55, 0xf5, 0x55,
|
||||
0xf6, 0x55, 0xf7, 0x55 };
|
||||
VECT_VAR_DECL(expected,poly,16,8) [] = { 0xfff0, 0x66, 0xfff1, 0x66,
|
||||
0xfff2, 0x66, 0xfff3, 0x66 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected, hfloat, 16, 8) [] = { 0xcc00, 0x4b4d,
|
||||
0xcb80, 0x4b4d,
|
||||
0xcb00, 0x4b4d,
|
||||
0xca80, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected,hfloat,32,4) [] = { 0xc1800000, 0x42073333,
|
||||
0xc1700000, 0x42073333 };
|
||||
|
||||
#define TEST_MSG "VZIP1"
|
||||
void exec_vzip_half (void)
|
||||
{
|
||||
#define TEST_VZIP(PART, Q, T1, T2, W, N) \
|
||||
VECT_VAR(vector_res, T1, W, N) = \
|
||||
vzip##PART##Q##_##T2##W(VECT_VAR(vector, T1, W, N), \
|
||||
VECT_VAR(vector2, T1, W, N)); \
|
||||
vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
|
||||
|
||||
#define TEST_VZIP1(Q, T1, T2, W, N) TEST_VZIP(1, Q, T1, T2, W, N)
|
||||
|
||||
/* Input vector can only have 64 bits. */
|
||||
DECL_VARIABLE_ALL_VARIANTS(vector);
|
||||
DECL_VARIABLE_ALL_VARIANTS(vector2);
|
||||
DECL_VARIABLE(vector, float, 64, 2);
|
||||
DECL_VARIABLE(vector2, float, 64, 2);
|
||||
|
||||
DECL_VARIABLE_ALL_VARIANTS(vector_res);
|
||||
DECL_VARIABLE(vector_res, float, 64, 2);
|
||||
|
||||
clean_results ();
|
||||
/* We don't have vzip1_T64x1, so set expected to the clean value. */
|
||||
CLEAN(expected, int, 64, 1);
|
||||
CLEAN(expected, uint, 64, 1);
|
||||
|
||||
TEST_MACRO_ALL_VARIANTS_2_5(VLOAD, vector, buffer);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VLOAD(vector, buffer, , float, f, 16, 4);
|
||||
VLOAD(vector, buffer, q, float, f, 16, 8);
|
||||
#endif
|
||||
VLOAD(vector, buffer, , float, f, 32, 2);
|
||||
VLOAD(vector, buffer, q, float, f, 32, 4);
|
||||
VLOAD(vector, buffer, q, float, f, 64, 2);
|
||||
|
||||
/* Choose arbitrary initialization values. */
|
||||
VDUP(vector2, , int, s, 8, 8, 0x11);
|
||||
VDUP(vector2, , int, s, 16, 4, 0x22);
|
||||
VDUP(vector2, , int, s, 32, 2, 0x33);
|
||||
VDUP(vector2, , uint, u, 8, 8, 0x55);
|
||||
VDUP(vector2, , uint, u, 16, 4, 0x66);
|
||||
VDUP(vector2, , uint, u, 32, 2, 0x77);
|
||||
VDUP(vector2, , poly, p, 8, 8, 0x55);
|
||||
VDUP(vector2, , poly, p, 16, 4, 0x66);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VDUP (vector2, , float, f, 16, 4, 14.6f); /* 14.6f is 0x4b4d. */
|
||||
#endif
|
||||
VDUP(vector2, , float, f, 32, 2, 33.6f);
|
||||
|
||||
VDUP(vector2, q, int, s, 8, 16, 0x11);
|
||||
VDUP(vector2, q, int, s, 16, 8, 0x22);
|
||||
VDUP(vector2, q, int, s, 32, 4, 0x33);
|
||||
VDUP(vector2, q, int, s, 64, 2, 0x44);
|
||||
VDUP(vector2, q, uint, u, 8, 16, 0x55);
|
||||
VDUP(vector2, q, uint, u, 16, 8, 0x66);
|
||||
VDUP(vector2, q, uint, u, 32, 4, 0x77);
|
||||
VDUP(vector2, q, uint, u, 64, 2, 0x88);
|
||||
VDUP(vector2, q, poly, p, 8, 16, 0x55);
|
||||
VDUP(vector2, q, poly, p, 16, 8, 0x66);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VDUP (vector2, q, float, f, 16, 8, 14.6f);
|
||||
#endif
|
||||
VDUP(vector2, q, float, f, 32, 4, 33.8f);
|
||||
VDUP(vector2, q, float, f, 64, 2, 33.8f);
|
||||
|
||||
TEST_VZIP1(, int, s, 8, 8);
|
||||
TEST_VZIP1(, int, s, 16, 4);
|
||||
TEST_VZIP1(, int, s, 32, 2);
|
||||
TEST_VZIP1(, uint, u, 8, 8);
|
||||
TEST_VZIP1(, uint, u, 16, 4);
|
||||
TEST_VZIP1(, uint, u, 32, 2);
|
||||
TEST_VZIP1(, poly, p, 8, 8);
|
||||
TEST_VZIP1(, poly, p, 16, 4);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VZIP1(, float, f, 16, 4);
|
||||
#endif
|
||||
TEST_VZIP1(, float, f, 32, 2);
|
||||
|
||||
TEST_VZIP1(q, int, s, 8, 16);
|
||||
TEST_VZIP1(q, int, s, 16, 8);
|
||||
TEST_VZIP1(q, int, s, 32, 4);
|
||||
TEST_VZIP1(q, int, s, 64, 2);
|
||||
TEST_VZIP1(q, uint, u, 8, 16);
|
||||
TEST_VZIP1(q, uint, u, 16, 8);
|
||||
TEST_VZIP1(q, uint, u, 32, 4);
|
||||
TEST_VZIP1(q, uint, u, 64, 2);
|
||||
TEST_VZIP1(q, poly, p, 8, 16);
|
||||
TEST_VZIP1(q, poly, p, 16, 8);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VZIP1(q, float, f, 16, 8);
|
||||
#endif
|
||||
TEST_VZIP1(q, float, f, 32, 4);
|
||||
TEST_VZIP1(q, float, f, 64, 2);
|
||||
|
||||
#if defined (FP16_SUPPORTED)
|
||||
CHECK_RESULTS (TEST_MSG, "");
|
||||
#else
|
||||
CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
|
||||
#endif
|
||||
|
||||
#undef TEST_MSG
|
||||
#define TEST_MSG "VZIP2"
|
||||
|
||||
#define TEST_VZIP2(Q, T1, T2, W, N) TEST_VZIP(2, Q, T1, T2, W, N)
|
||||
|
||||
/* Expected results. */
|
||||
VECT_VAR_DECL(expected2,int,8,8) [] = { 0xf4, 0x11, 0xf5, 0x11,
|
||||
0xf6, 0x11, 0xf7, 0x11 };
|
||||
VECT_VAR_DECL(expected2,int,16,4) [] = { 0xfff2, 0x22, 0xfff3, 0x22 };
|
||||
VECT_VAR_DECL(expected2,int,32,2) [] = { 0xfffffff1, 0x33 };
|
||||
VECT_VAR_DECL(expected2,int,64,1) [] = { 0xfffffffffffffff1 };
|
||||
VECT_VAR_DECL(expected2,uint,8,8) [] = { 0xf4, 0x55, 0xf5, 0x55,
|
||||
0xf6, 0x55, 0xf7, 0x55 };
|
||||
VECT_VAR_DECL(expected2,uint,16,4) [] = { 0xfff2, 0x66, 0xfff3, 0x66 };
|
||||
VECT_VAR_DECL(expected2,uint,32,2) [] = { 0xfffffff1, 0x77 };
|
||||
VECT_VAR_DECL(expected2,uint,64,1) [] = { 0xfffffffffffffff1 };
|
||||
VECT_VAR_DECL(expected2,poly,8,8) [] = { 0xf4, 0x55, 0xf5, 0x55,
|
||||
0xf6, 0x55, 0xf7, 0x55 };
|
||||
VECT_VAR_DECL(expected2,poly,16,4) [] = { 0xfff2, 0x66, 0xfff3, 0x66 };
|
||||
VECT_VAR_DECL(expected2,hfloat,32,2) [] = { 0xc1700000, 0x42066666 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected2, hfloat, 16, 4) [] = { 0xcb00, 0x4b4d,
|
||||
0xca80, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected2,int,8,16) [] = { 0xf8, 0x11, 0xf9, 0x11,
|
||||
0xfa, 0x11, 0xfb, 0x11,
|
||||
0xfc, 0x11, 0xfd, 0x11,
|
||||
0xfe, 0x11, 0xff, 0x11 };
|
||||
VECT_VAR_DECL(expected2,int,16,8) [] = { 0xfff4, 0x22, 0xfff5, 0x22,
|
||||
0xfff6, 0x22, 0xfff7, 0x22 };
|
||||
VECT_VAR_DECL(expected2,int,32,4) [] = { 0xfffffff2, 0x33,
|
||||
0xfffffff3, 0x33 };
|
||||
VECT_VAR_DECL(expected2,int,64,2) [] = { 0xfffffffffffffff1,
|
||||
0x44 };
|
||||
VECT_VAR_DECL(expected2,uint,8,16) [] = { 0xf8, 0x55, 0xf9, 0x55,
|
||||
0xfa, 0x55, 0xfb, 0x55,
|
||||
0xfc, 0x55, 0xfd, 0x55,
|
||||
0xfe, 0x55, 0xff, 0x55 };
|
||||
VECT_VAR_DECL(expected2,uint,16,8) [] = { 0xfff4, 0x66, 0xfff5, 0x66,
|
||||
0xfff6, 0x66, 0xfff7, 0x66 };
|
||||
VECT_VAR_DECL(expected2,uint,32,4) [] = { 0xfffffff2, 0x77,
|
||||
0xfffffff3, 0x77 };
|
||||
VECT_VAR_DECL(expected2,uint,64,2) [] = { 0xfffffffffffffff1,
|
||||
0x88 };
|
||||
VECT_VAR_DECL(expected2,poly,8,16) [] = { 0xf8, 0x55, 0xf9, 0x55,
|
||||
0xfa, 0x55, 0xfb, 0x55,
|
||||
0xfc, 0x55, 0xfd, 0x55,
|
||||
0xfe, 0x55, 0xff, 0x55 };
|
||||
VECT_VAR_DECL(expected2,poly,16,8) [] = { 0xfff4, 0x66, 0xfff5, 0x66,
|
||||
0xfff6, 0x66, 0xfff7, 0x66 };
|
||||
#if defined (FP16_SUPPORTED)
|
||||
VECT_VAR_DECL (expected2, hfloat, 16, 8) [] = { 0xca00, 0x4b4d,
|
||||
0xc980, 0x4b4d,
|
||||
0xc900, 0x4b4d,
|
||||
0xc880, 0x4b4d };
|
||||
#endif
|
||||
VECT_VAR_DECL(expected2,hfloat,32,4) [] = { 0xc1600000, 0x42073333,
|
||||
0xc1500000, 0x42073333 };
|
||||
clean_results ();
|
||||
CLEAN(expected2, int, 64, 1);
|
||||
CLEAN(expected2, uint, 64, 1);
|
||||
|
||||
TEST_VZIP2(, int, s, 8, 8);
|
||||
TEST_VZIP2(, int, s, 16, 4);
|
||||
TEST_VZIP2(, int, s, 32, 2);
|
||||
TEST_VZIP2(, uint, u, 8, 8);
|
||||
TEST_VZIP2(, uint, u, 16, 4);
|
||||
TEST_VZIP2(, uint, u, 32, 2);
|
||||
TEST_VZIP2(, poly, p, 8, 8);
|
||||
TEST_VZIP2(, poly, p, 16, 4);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VZIP2(, float, f, 16, 4);
|
||||
#endif
|
||||
TEST_VZIP2(, float, f, 32, 2);
|
||||
|
||||
TEST_VZIP2(q, int, s, 8, 16);
|
||||
TEST_VZIP2(q, int, s, 16, 8);
|
||||
TEST_VZIP2(q, int, s, 32, 4);
|
||||
TEST_VZIP2(q, int, s, 64, 2);
|
||||
TEST_VZIP2(q, uint, u, 8, 16);
|
||||
TEST_VZIP2(q, uint, u, 16, 8);
|
||||
TEST_VZIP2(q, uint, u, 32, 4);
|
||||
TEST_VZIP2(q, uint, u, 64, 2);
|
||||
TEST_VZIP2(q, poly, p, 8, 16);
|
||||
TEST_VZIP2(q, poly, p, 16, 8);
|
||||
#if defined (FP16_SUPPORTED)
|
||||
TEST_VZIP2(q, float, f, 16, 8);
|
||||
#endif
|
||||
TEST_VZIP2(q, float, f, 32, 4);
|
||||
TEST_VZIP2(q, float, f, 64, 2);
|
||||
|
||||
CHECK_RESULTS_NAMED (TEST_MSG, expected2, "");
|
||||
#if defined (FP16_SUPPORTED)
|
||||
CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected2, "");
|
||||
CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected2, "");
|
||||
#endif
|
||||
}
|
||||
|
||||
int main (void)
|
||||
{
|
||||
exec_vzip_half ();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue