(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
vrecpx.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O3 --save-temps" } */
       3  
       4  #include <arm_neon.h>
       5  #include <math.h>
       6  #include <stdlib.h>
       7  
       8  float32_t in_f[] =
       9  {2.0, 4.0, 8.0, 16.0, 1.0, 0.5, 0.25, 0.125};
      10  float32_t rec_f[] =
      11  {1.0, 0.5, 0.25, 0.125, 2.0, 4.0, 8.0, 16.0};
      12  float64_t in_d[] =
      13  {2.0, 4.0, 8.0, 16.0, 1.0, 0.5, 0.25, 0.125};
      14  float32_t rec_d[] =
      15  {1.0, 0.5, 0.25, 0.125, 2.0, 4.0, 8.0, 16.0};
      16  
      17  int
      18  test_frecpx_float32_t (void)
      19  {
      20    int i = 0;
      21    int ret = 1;
      22    for (i = 0; i < 8; i++)
      23      ret &= fabs (vrecpxs_f32 (in_f[i]) - rec_f[i]) < 0.001;
      24  
      25    return ret;
      26  }
      27  
      28  /* { dg-final { scan-assembler "frecpx\\ts\[0-9\]+, s\[0-9\]+" } } */
      29  
      30  int
      31  test_frecpx_float64_t (void)
      32  {
      33    int i = 0;
      34    int ret = 1;
      35    for (i = 0; i < 8; i++)
      36      ret &= fabs (vrecpxd_f64 (in_d[i]) - rec_d[i]) < 0.001;
      37  
      38    return ret;
      39  }
      40  
      41  /* { dg-final { scan-assembler "frecpx\\td\[0-9\]+, d\[0-9\]+" } } */
      42  
      43  int
      44  main (int argc, char **argv)
      45  {
      46    if (!test_frecpx_float32_t ())
      47      abort ();
      48    if (!test_frecpx_float64_t ())
      49      abort ();
      50  
      51    return 0;
      52  }
      53