(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-nop-move.c
       1  /* { dg-require-effective-target vect_float } */
       2  
       3  #include "tree-vect.h"
       4  
       5  extern void abort (void);
       6  
       7  #define NOINLINE __attribute__((noinline))
       8  
       9  typedef float float32x4_t __attribute__ ((__vector_size__ (16)));
      10  typedef float float32x2_t __attribute__ ((__vector_size__ (8)));
      11  
      12  NOINLINE float
      13  foo32x4_be (float32x4_t x)
      14  {
      15    return x[3];
      16  }
      17  
      18  NOINLINE float
      19  foo32x4_le (float32x4_t x)
      20  {
      21    return x[0];
      22  }
      23  
      24  NOINLINE float
      25  bar (float a)
      26  {
      27    return a;
      28  }
      29  
      30  NOINLINE float
      31  foo32x2_be (float32x2_t x)
      32  {
      33  #ifdef __i386__
      34    /* ix86 passes float32x2 vector arguments in mmx registers.  We need to
      35       emit emms to empty MMS state and reenable x87 stack before float value
      36       can be loaded to and passed in x87 floating-point return register.  */
      37    __builtin_ia32_emms ();
      38  #endif
      39    return bar (x[1]);
      40  }
      41  
      42  NOINLINE float
      43  foo32x2_le (float32x2_t x)
      44  {
      45  #ifdef __i386__
      46    __builtin_ia32_emms ();
      47  #endif
      48    return bar (x[0]);
      49  }
      50  
      51  NOINLINE int
      52  test (void)
      53  {
      54    float32x4_t a = { 0.0f, 1.0f, 2.0f, 3.0f };
      55    float32x2_t b = { 0.0f, 1.0f };
      56  
      57    if (foo32x2_be (b) != 1.0f)
      58      abort ();
      59  
      60    if (foo32x2_le (b) != 0.0f)
      61      abort ();
      62  
      63    if (foo32x4_be (a) != 3.0f)
      64      abort ();
      65  
      66    if (foo32x4_le (a) != 0.0f)
      67      abort ();
      68  
      69    return 0;
      70  }
      71  
      72  int
      73  main ()
      74  {
      75    check_vect ();
      76    return test ();
      77  }