Beispiel #1
0
void exec_vmovn (void)
{
  /* Basic test: vec64=vmovn(vec128), then store the result.  */
#define TEST_VMOVN(T1, T2, W, W2, N)					\
  VECT_VAR(vector64, T1, W2, N) =					\
    vmovn_##T2##W(VECT_VAR(vector128, T1, W, N));			\
  vst1_##T2##W2(VECT_VAR(result, T1, W2, N), VECT_VAR(vector64, T1, W2, N))

  DECL_VARIABLE_64BITS_VARIANTS(vector64);
  DECL_VARIABLE_128BITS_VARIANTS(vector128);

  TEST_MACRO_128BITS_VARIANTS_2_5(VLOAD, vector128, buffer);

  clean_results ();

  TEST_VMOVN(int, s, 16, 8, 8);
  TEST_VMOVN(int, s, 32, 16, 4);
  TEST_VMOVN(int, s, 64, 32, 2);
  TEST_VMOVN(uint, u, 16, 8, 8);
  TEST_VMOVN(uint, u, 32, 16, 4);
  TEST_VMOVN(uint, u, 64, 32, 2);

  CHECK(TEST_MSG, int, 8, 8, PRIx32, expected, "");
  CHECK(TEST_MSG, int, 16, 4, PRIx64, expected, "");
  CHECK(TEST_MSG, int, 32, 2, PRIx32, expected, "");
  CHECK(TEST_MSG, uint, 8, 8, PRIx32, expected, "");
  CHECK(TEST_MSG, uint, 16, 4, PRIx64, expected, "");
  CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
}
Beispiel #2
0
void exec_vdup_lane (void)
{
  /* Basic test: vec1=vdup_lane(vec2, lane), then store the result.  */
#define TEST_VDUP_LANE(Q, T1, T2, W, N, N2, L)				\
  VECT_VAR(vector_res, T1, W, N) =					\
    vdup##Q##_lane_##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_64BITS_VARIANTS(vector);

  DECL_VARIABLE_ALL_VARIANTS(vector_res);

  clean_results ();

  TEST_MACRO_64BITS_VARIANTS_2_5(VLOAD, vector, buffer);
#if defined (FP16_SUPPORTED)
  VLOAD(vector, buffer, , float, f, 16, 4);
#endif
  VLOAD(vector, buffer, , float, f, 32, 2);

  /* Choose lane arbitrarily.  */
  TEST_VDUP_LANE(, int, s, 8, 8, 8, 1);
  TEST_VDUP_LANE(, int, s, 16, 4, 4, 2);
  TEST_VDUP_LANE(, int, s, 32, 2, 2, 1);
  TEST_VDUP_LANE(, int, s, 64, 1, 1, 0);
  TEST_VDUP_LANE(, uint, u, 8, 8, 8, 7);
  TEST_VDUP_LANE(, uint, u, 16, 4, 4, 3);
  TEST_VDUP_LANE(, uint, u, 32, 2, 2, 1);
  TEST_VDUP_LANE(, uint, u, 64, 1, 1, 0);
  TEST_VDUP_LANE(, poly, p, 8, 8, 8, 7);
  TEST_VDUP_LANE(, poly, p, 16, 4, 4, 3);
#if defined (FP16_SUPPORTED)
  TEST_VDUP_LANE(, float, f, 16, 4, 4, 3);
#endif
  TEST_VDUP_LANE(, float, f, 32, 2, 2, 1);

  TEST_VDUP_LANE(q, int, s, 8, 16, 8, 2);
  TEST_VDUP_LANE(q, int, s, 16, 8, 4, 3);
  TEST_VDUP_LANE(q, int, s, 32, 4, 2, 1);
  TEST_VDUP_LANE(q, int, s, 64, 2, 1, 0);
  TEST_VDUP_LANE(q, uint, u, 8, 16, 8, 5);
  TEST_VDUP_LANE(q, uint, u, 16, 8, 4, 1);
  TEST_VDUP_LANE(q, uint, u, 32, 4, 2, 0);
  TEST_VDUP_LANE(q, uint, u, 64, 2, 1, 0);
  TEST_VDUP_LANE(q, poly, p, 8, 16, 8, 5);
  TEST_VDUP_LANE(q, poly, p, 16, 8, 4, 1);
#if defined (FP16_SUPPORTED)
  TEST_VDUP_LANE(q, float, f, 16, 8, 4, 3);
#endif
  TEST_VDUP_LANE(q, float, f, 32, 4, 2, 1);

#if defined (FP16_SUPPORTED)
  CHECK_RESULTS (TEST_MSG, "");
#else
  CHECK_RESULTS_NO_FP16 (TEST_MSG, "");
#endif
}
Beispiel #3
0
void exec_vget_low (void)
{
  /* Basic test: vec64=vget_low(vec128), then store the result.  */
#define TEST_VGET_LOW(T1, T2, W, N, N2)					\
  VECT_VAR(vector64, T1, W, N) =					\
    vget_low_##T2##W(VECT_VAR(vector128, T1, W, N2));			\
  vst1_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector64, T1, W, N))

  DECL_VARIABLE_64BITS_VARIANTS(vector64);
  DECL_VARIABLE_128BITS_VARIANTS(vector128);

  TEST_MACRO_128BITS_VARIANTS_2_5(VLOAD, vector128, buffer);
  VLOAD(vector128, buffer, q, float, f, 32, 4);

  clean_results ();

  /* Execute the tests.  */
  TEST_VGET_LOW(int, s, 8, 8, 16);
  TEST_VGET_LOW(int, s, 16, 4, 8);
  TEST_VGET_LOW(int, s, 32, 2, 4);
  TEST_VGET_LOW(int, s, 64, 1, 2);
  TEST_VGET_LOW(uint, u, 8, 8, 16);
  TEST_VGET_LOW(uint, u, 16, 4, 8);
  TEST_VGET_LOW(uint, u, 32, 2, 4);
  TEST_VGET_LOW(uint, u, 64, 1, 2);
  TEST_VGET_LOW(poly, p, 8, 8, 16);
  TEST_VGET_LOW(poly, p, 16, 4, 8);
  TEST_VGET_LOW(float, f, 32, 2, 4);

  CHECK(TEST_MSG, int, 8, 8, PRIx8, expected, "");
  CHECK(TEST_MSG, int, 16, 4, PRIx16, expected, "");
  CHECK(TEST_MSG, int, 32, 2, PRIx32, expected, "");
  CHECK(TEST_MSG, int, 64, 1, PRIx64, expected, "");
  CHECK(TEST_MSG, uint, 8, 8, PRIx8, expected, "");
  CHECK(TEST_MSG, uint, 16, 4, PRIx16, expected, "");
  CHECK(TEST_MSG, uint, 32, 2, PRIx32, expected, "");
  CHECK(TEST_MSG, uint, 64, 1, PRIx64, expected, "");
  CHECK(TEST_MSG, poly, 8, 8, PRIx8, expected, "");
  CHECK(TEST_MSG, poly, 16, 4, PRIx16, expected, "");
  CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, "");
}