(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
advsimd-intrinsics/
vld1x2.c
       1  /* We haven't implemented these intrinsics for arm yet.  */
       2  /* { dg-do run } */
       3  /* { dg-skip-if "unimplemented" { arm*-*-* } } */
       4  /* { dg-options "-O3" } */
       5  
       6  #include <arm_neon.h>
       7  
       8  extern void abort (void);
       9  
      10  #define TESTMETH(BASE, ELTS, SUFFIX)	\
      11  int __attribute__ ((noinline))			\
      12  test_vld##SUFFIX##_x2 ()			\
      13  {						\
      14    BASE##_t data[ELTS * 2];			\
      15    BASE##_t temp[ELTS * 2];			\
      16    BASE##x##ELTS##x##2##_t vectors;		\
      17    int i,j;					\
      18    for (i = 0; i < ELTS * 2; i++)		\
      19      data [i] = (BASE##_t) 2*i + 1;		\
      20    asm volatile ("" : : : "memory");		\
      21    vectors = vld1##SUFFIX##_x2 (data);		\
      22    vst1##SUFFIX (temp, vectors.val[0]);		\
      23    vst1##SUFFIX (&temp[ELTS], vectors.val[1]);	\
      24    asm volatile ("" : : : "memory");		\
      25    for (j = 0; j < ELTS * 2; j++)		\
      26      if (temp[j] != data[j])			\
      27        return 1;					\
      28    return 0;					\
      29  }
      30  
      31  #define VARIANTS_1(VARIANT)	\
      32  VARIANT (uint8, 8, _u8)		\
      33  VARIANT (uint16, 4, _u16)	\
      34  VARIANT (uint32, 2, _u32)	\
      35  VARIANT (uint64, 1, _u64)	\
      36  VARIANT (int8, 8, _s8)		\
      37  VARIANT (int16, 4, _s16)	\
      38  VARIANT (int32, 2, _s32)	\
      39  VARIANT (int64, 1, _s64)	\
      40  VARIANT (poly8, 8, _p8)		\
      41  VARIANT (poly16, 4, _p16)	\
      42  VARIANT (float16, 4, _f16)	\
      43  VARIANT (float32, 2, _f32)	\
      44  VARIANT (uint8, 16, q_u8)	\
      45  VARIANT (uint16, 8, q_u16)	\
      46  VARIANT (uint32, 4, q_u32)	\
      47  VARIANT (uint64, 2, q_u64)	\
      48  VARIANT (int8, 16, q_s8)	\
      49  VARIANT (int16, 8, q_s16)	\
      50  VARIANT (int32, 4, q_s32)	\
      51  VARIANT (int64, 2, q_s64)	\
      52  VARIANT (poly8, 16, q_p8)	\
      53  VARIANT (poly16, 8, q_p16)	\
      54  VARIANT (float16, 8, q_f16)	\
      55  VARIANT (float32, 4, q_f32)
      56  
      57  #ifdef __aarch64__
      58  #define VARIANTS(VARIANT) VARIANTS_1(VARIANT)	\
      59  VARIANT (float64, 1, _f64)			\
      60  VARIANT (float64, 2, q_f64)
      61  #else
      62  #define VARIANTS(VARIANT) VARIANTS_1(VARIANT)
      63  #endif
      64  
      65  /* Tests of vld1_x2 and vld1q_x2.  */
      66  VARIANTS (TESTMETH)
      67  
      68  #define CHECK(BASE, ELTS, SUFFIX)	\
      69    if (test_vld##SUFFIX##_x2 () != 0)	\
      70      abort ();
      71  
      72  int
      73  main (int argc, char **argv)
      74  {
      75    VARIANTS (CHECK)
      76  
      77    return 0;
      78  }
      79