(root)/
glibc-2.38/
sysdeps/
aarch64/
fpu/
test-double-sve-wrappers.c
       1  /* Scalar wrappers for double-precision SVE vector math functions.
       2  
       3     Copyright (C) 2023 Free Software Foundation, Inc.
       4     This file is part of the GNU C Library.
       5  
       6     The GNU C Library is free software; you can redistribute it and/or
       7     modify it under the terms of the GNU Lesser General Public
       8     License as published by the Free Software Foundation; either
       9     version 2.1 of the License, or (at your option) any later version.
      10  
      11     The GNU C Library is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14     Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public
      17     License along with the GNU C Library; if not, see
      18     <https://www.gnu.org/licenses/>.  */
      19  
      20  #include <arm_sve.h>
      21  
      22  #include "test-double-sve.h"
      23  
      24  /* Wrapper from scalar to SVE function. Cannot just use VECTOR_WRAPPER due to
      25     predication.  */
      26  #define SVE_VECTOR_WRAPPER(scalar_func, vector_func)                          \
      27    extern VEC_TYPE vector_func (VEC_TYPE, svbool_t);                           \
      28    FLOAT scalar_func (FLOAT x)                                                 \
      29    {                                                                           \
      30      VEC_TYPE mx = svdup_n_f64 (x);                                            \
      31      VEC_TYPE mr = vector_func (mx, svptrue_b64 ());                           \
      32      return svlastb_f64 (svptrue_b64 (), mr);                                  \
      33    }
      34  
      35  SVE_VECTOR_WRAPPER (cos_sve, _ZGVsMxv_cos)
      36  SVE_VECTOR_WRAPPER (exp_sve, _ZGVsMxv_exp)
      37  SVE_VECTOR_WRAPPER (log_sve, _ZGVsMxv_log)
      38  SVE_VECTOR_WRAPPER (sin_sve, _ZGVsMxv_sin)