1  /* { dg-do assemble } */
       2  /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */
       3  /* { dg-add-options arm_v8_1m_mve_fp } */
       4  /* { dg-additional-options "-O3 -funsafe-math-optimizations" } */
       5  
       6  /* float 32 tests.  */
       7  
       8  #ifndef ELEM_TYPE
       9  #define ELEM_TYPE float
      10  #endif
      11  #ifndef INT_ELEM_TYPE
      12  #define INT_ELEM_TYPE __INT32_TYPE__
      13  #endif
      14  
      15  #define COMPARE(NAME, OP)			\
      16    int_vec					\
      17    cmp_##NAME##_reg (vec a, vec b)		\
      18    {						\
      19      return a OP b;				\
      20    }
      21  
      22  typedef INT_ELEM_TYPE int_vec __attribute__((vector_size(16)));
      23  typedef ELEM_TYPE vec __attribute__((vector_size(16)));
      24  
      25  COMPARE (eq, ==)
      26  COMPARE (ne, !=)
      27  COMPARE (lt, <)
      28  COMPARE (le, <=)
      29  COMPARE (gt, >)
      30  COMPARE (ge, >=)
      31  
      32  /* eq, ne, lt, le, gt, ge.
      33  /* { dg-final { scan-assembler-times {\tvcmp.f32\teq, q[0-9]+, q[0-9]+\n} 1 } } */
      34  /* { dg-final { scan-assembler-times {\tvcmp.f32\tne, q[0-9]+, q[0-9]+\n} 1 } } */
      35  /* { dg-final { scan-assembler-times {\tvcmp.f32\tlt, q[0-9]+, q[0-9]+\n} 1 } } */
      36  /* { dg-final { scan-assembler-times {\tvcmp.f32\tle, q[0-9]+, q[0-9]+\n} 1 } } */
      37  /* { dg-final { scan-assembler-times {\tvcmp.f32\tgt, q[0-9]+, q[0-9]+\n} 1 } } */
      38  /* { dg-final { scan-assembler-times {\tvcmp.f32\tge, q[0-9]+, q[0-9]+\n} 1 } } */