(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
advsimd-intrinsics/
vrndi_f16_1.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
       3  /* { dg-add-options arm_v8_2a_fp16_neon } */
       4  /* { dg-skip-if "" { arm*-*-* } } */
       5  
       6  #include <arm_neon.h>
       7  #include "arm-neon-ref.h"
       8  #include "compute-ref-data.h"
       9  
      10  #define FP16_C(a) ((__fp16) a)
      11  #define A FP16_C (123.4)
      12  #define RNDI_A 0x57B0 /* FP16_C (123).  */
      13  #define B FP16_C (-567.5)
      14  #define RNDI_B 0xE070 /* FP16_C (-568).  */
      15  #define C FP16_C (-34.8)
      16  #define RNDI_C 0xD060 /* FP16_C (-35).  */
      17  #define D FP16_C (1024)
      18  #define RNDI_D 0x6400 /* FP16_C (1024).  */
      19  #define E FP16_C (663.1)
      20  #define RNDI_E 0x612E /* FP16_C (663).  */
      21  #define F FP16_C (169.1)
      22  #define RNDI_F 0x5948 /* FP16_C (169).  */
      23  #define G FP16_C (-4.8)
      24  #define RNDI_G 0xC500 /* FP16_C (-5).  */
      25  #define H FP16_C (77.5)
      26  #define RNDI_H 0x54E0 /* FP16_C (78).  */
      27  
      28  /* Expected results for vrndi.  */
      29  VECT_VAR_DECL (expected_static, hfloat, 16, 4) []
      30    = { RNDI_A, RNDI_B, RNDI_C, RNDI_D };
      31  
      32  VECT_VAR_DECL (expected_static, hfloat, 16, 8) []
      33    = { RNDI_A, RNDI_B, RNDI_C, RNDI_D, RNDI_E, RNDI_F, RNDI_G, RNDI_H };
      34  
      35  void exec_vrndi_f16 (void)
      36  {
      37  #undef TEST_MSG
      38  #define TEST_MSG "VRNDI (FP16)"
      39    clean_results ();
      40  
      41    DECL_VARIABLE(vsrc, float, 16, 4);
      42    VECT_VAR_DECL (buf_src, float, 16, 4) [] = {A, B, C, D};
      43    VLOAD (vsrc, buf_src, , float, f, 16, 4);
      44    DECL_VARIABLE (vector_res, float, 16, 4)
      45      = vrndi_f16 (VECT_VAR (vsrc, float, 16, 4));
      46    vst1_f16 (VECT_VAR (result, float, 16, 4),
      47  	    VECT_VAR (vector_res, float, 16, 4));
      48  
      49    CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_static, "");
      50  
      51  #undef TEST_MSG
      52  #define TEST_MSG "VRNDIQ (FP16)"
      53    clean_results ();
      54  
      55    DECL_VARIABLE(vsrc, float, 16, 8);
      56    VECT_VAR_DECL (buf_src, float, 16, 8) [] = {A, B, C, D, E, F, G, H};
      57    VLOAD (vsrc, buf_src, q, float, f, 16, 8);
      58    DECL_VARIABLE (vector_res, float, 16, 8)
      59      = vrndiq_f16 (VECT_VAR (vsrc, float, 16, 8));
      60    vst1q_f16 (VECT_VAR (result, float, 16, 8),
      61  	     VECT_VAR (vector_res, float, 16, 8));
      62  
      63    CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_static, "");
      64  }
      65  
      66  int
      67  main (void)
      68  {
      69    exec_vrndi_f16 ();
      70    return 0;
      71  }