Compare commits

...
Author SHA1 Message Date
Szabolcs Nagy 9179115ee0 aarch64: add vector sin, cos, log and pow abi symbols
Add simple assembly implementations that fall back to scalar code,
similar to the vector exp code.

2019-07-15  Szabolcs Nagy  <szabolcs.nagy@arm.com>

	* sysdeps/aarch64/fpu/Makefile: Add functions.
	* sysdeps/aarch64/fpu/Versions: Add symbols.
	* sysdeps/aarch64/fpu/libmvec_double_vlen2_cos.S: New file.
	* sysdeps/aarch64/fpu/libmvec_double_vlen2_log.S: New file.
	* sysdeps/aarch64/fpu/libmvec_double_vlen2_pow.S: New file.
	* sysdeps/aarch64/fpu/libmvec_double_vlen2_sin.S: New file.
	* sysdeps/aarch64/fpu/libmvec_float_vlen4_cosf.S: New file.
	* sysdeps/aarch64/fpu/libmvec_float_vlen4_logf.S: New file.
	* sysdeps/aarch64/fpu/libmvec_float_vlen4_powf.S: New file.
	* sysdeps/aarch64/fpu/libmvec_float_vlen4_sinf.S: New file.
	* sysdeps/aarch64/fpu/test-double-vlen2-wrappers.c: Add wrappers.
	* sysdeps/aarch64/fpu/test-float-vlen4-wrappers.c: Add wrappers.
	* sysdeps/aarch64/libm-test-ulps: Update.
	* sysdeps/unix/sysv/linux/aarch64/libmvec.abilist: Update.
2019-07-16 11:01:51 +01:00
Szabolcs Nagy 80792b6102 Aarch64: Add simd exp/expf ABI symbols
The implementation is in assembly and just calls the scalar math code.
This ensures that old compiler without vector call abi support can
build libmvec. The abi is supported since GCC 9.1, the specification is

https://developer.arm.com/tools-and-software/server-and-hpc/arm-architecture-tools/arm-compiler-for-hpc/vector-function-abi

Vector functions require a STO_AARCH64_VARIANT_PCS marking in the
dynamic symbol table for lazy bound calls to work. This will be
missing in libmvec, which works because the marking only affects
the behaviour if there are calls to the symbols in the binary.

Testing requires vector call abi support, which is detected.

Header declarations are not added yet, so the symbols will not be used
by the compiler: they are just added so the abi is in place which
enables backporting later. Currently we cannot add correct declarations
that only declare the specific symbols we provide: the OpenMP pragma
mechanism would declare both AdvSIMD and SVE variants.

2019-07-15  Steve Ellcey  <sellcey@marvell.com>
	    Szabolcs Nagy  <szabolcs.nagy@arm.com>

	* sysdeps/aarch64/configure.ac (build_mathvec): Enable.
	(test-mathvec): Enable if ABI is supported.
	* sysdeps/aarch64/configure: Regenerate.
	* sysdeps/aarch64/fpu/Makefile
	(libmvec-support): Add libmvec_double_vlen2_exp,
	libmvec_float_vlen4_expf to list.
	(libmvec_nonshared.a): Use make-dummy-lib.
	(libmvec-tests): Add double-vlen2, float-vlen4 to list.
	(double-vlen2-funcs): Add new vector function name.
	(float-vlen4-funcs): Add new vector function name.
	* sysdeps/aarch64/fpu/Versions: New file.
	* sysdeps/aarch64/fpu/libmvec_double_vlen2.h: New file.
	* sysdeps/aarch64/fpu/libmvec_double_vlen2_exp.S: New file.
	* sysdeps/aarch64/fpu/libmvec_float_vlen4.h: New file.
	* sysdeps/aarch64/fpu/libmvec_float_vlen4_expf.S: New file.
	* sysdeps/aarch64/fpu/test-double-vlen2-wrappers.c: New file.
	* sysdeps/aarch64/fpu/test-float-vlen4-wrappers.c: New file.
	* sysdeps/aarch64/libm-test-ulps (exp_vlen2): New entry.
	(exp_vlen4): Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libmvec.abilist: New file.
2019-07-16 11:01:46 +01:00
20 changed files with 629 additions and 0 deletions
+31
View File
@@ -172,3 +172,34 @@ else
config_vars="$config_vars
default-abi = lp64"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pcs attribute support" >&5
$as_echo_n "checking for pcs attribute support... " >&6; }
if ${libc_cv_gcc_pcs_attribute+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.c <<EOF
__attribute__((aarch64_vector_pcs)) extern void foo (void);
EOF
libc_cv_gcc_pcs_attribute=no
if ${CC-cc} -c -Wall -Werror conftest.c -o conftest.o 1>&5 \
2>&5 ; then
libc_cv_gcc_pcs_attribute=yes
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_gcc_pcs_attribute" >&5
$as_echo "$libc_cv_gcc_pcs_attribute" >&6; }
# Enable libmvec by default.
if test x"$build_mathvec" = xnotset; then
build_mathvec=yes
fi
# Only test libmvec if the compiler supports aarch64_vector_pcs.
if test x"$build_mathvec" = xyes; then
if test $libc_cv_gcc_pcs_attribute = yes; then
config_vars="$config_vars
test-mathvec = yes"
fi
fi
+24
View File
@@ -20,3 +20,27 @@ if test $libc_cv_aarch64_be = yes; then
else
LIBC_CONFIG_VAR([default-abi], [lp64])
fi
AC_CACHE_CHECK([for pcs attribute support],
libc_cv_gcc_pcs_attribute, [dnl
cat > conftest.c <<EOF
__attribute__((aarch64_vector_pcs)) extern void foo (void);
EOF
libc_cv_gcc_pcs_attribute=no
if ${CC-cc} -c -Wall -Werror conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD \
2>&AS_MESSAGE_LOG_FD ; then
libc_cv_gcc_pcs_attribute=yes
fi
rm -f conftest*])
# Enable libmvec by default.
if test x"$build_mathvec" = xnotset; then
build_mathvec=yes
fi
# Only test libmvec if the compiler supports aarch64_vector_pcs.
if test x"$build_mathvec" = xyes; then
if test $libc_cv_gcc_pcs_attribute = yes; then
LIBC_CONFIG_VAR([test-mathvec], [yes])
fi
fi
+27
View File
@@ -12,3 +12,30 @@ CFLAGS-s_fmaxf.c += -ffinite-math-only
CFLAGS-s_fmin.c += -ffinite-math-only
CFLAGS-s_fminf.c += -ffinite-math-only
endif
ifeq ($(subdir),mathvec)
libmvec-support += \
libmvec_double_vlen2_cos \
libmvec_double_vlen2_exp \
libmvec_double_vlen2_log \
libmvec_double_vlen2_pow \
libmvec_double_vlen2_sin \
libmvec_float_vlen4_cosf \
libmvec_float_vlen4_expf \
libmvec_float_vlen4_logf \
libmvec_float_vlen4_powf \
libmvec_float_vlen4_sinf \
install-lib += libmvec_nonshared.a
$(objpfx)libmvec_nonshared.a: $(dep-dummy-lib); $(make-dummy-lib)
endif
ifeq ($(subdir),math)
ifeq ($(build-mathvec),yes)
double-vlen2-funcs = cos exp log pow sin
float-vlen4-funcs = cos exp log pow sin
ifeq ($(test-mathvec),yes)
libmvec-tests += double-vlen2 float-vlen4
endif
endif
endif
+9
View File
@@ -0,0 +1,9 @@
libmvec {
GLIBC_2.30 {
_ZGVnN2v_cos; _ZGVnN4v_cosf;
_ZGVnN2v_exp; _ZGVnN4v_expf;
_ZGVnN2v_log; _ZGVnN4v_logf;
_ZGVnN2vv_pow; _ZGVnN4vv_powf;
_ZGVnN2v_sin; _ZGVnN4v_sinf;
}
}
@@ -0,0 +1,59 @@
/* Double-precision 2 element vector function template.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
ENTRY (VECTOR_FUNCTION)
stp x29, x30, [sp, -288]!
cfi_adjust_cfa_offset (288)
cfi_rel_offset (x29, 0)
cfi_rel_offset (x30, 8)
mov x29, sp
stp q8, q9, [sp, 16]
stp q10, q11, [sp, 48]
stp q12, q13, [sp, 80]
stp q14, q15, [sp, 112]
stp q16, q17, [sp, 144]
stp q18, q19, [sp, 176]
stp q20, q21, [sp, 208]
stp q22, q23, [sp, 240]
// Use per lane load/store to avoid endianness issues.
str q0, [sp, 272]
ldr d0, [sp, 272]
bl SCALAR_FUNCTION
str d0, [sp, 272]
ldr d0, [sp, 280]
bl SCALAR_FUNCTION
str d0, [sp, 280]
ldr q0, [sp, 272]
ldp q8, q9, [sp, 16]
ldp q10, q11, [sp, 48]
ldp q12, q13, [sp, 80]
ldp q14, q15, [sp, 112]
ldp q16, q17, [sp, 144]
ldp q18, q19, [sp, 176]
ldp q20, q21, [sp, 208]
ldp q22, q23, [sp, 240]
ldp x29, x30, [sp], 288
cfi_adjust_cfa_offset (288)
cfi_restore (x29)
cfi_restore (x30)
ret
END (VECTOR_FUNCTION)
@@ -0,0 +1,21 @@
/* Double-precision 2 element vector cos function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#define SCALAR_FUNCTION cos
#define VECTOR_FUNCTION _ZGVnN2v_cos
#include "libmvec_double_vlen2.h"
@@ -0,0 +1,21 @@
/* Double-precision 2 element vector e^x function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#define SCALAR_FUNCTION exp
#define VECTOR_FUNCTION _ZGVnN2v_exp
#include "libmvec_double_vlen2.h"
@@ -0,0 +1,21 @@
/* Double-precision 2 element vector log function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#define SCALAR_FUNCTION log
#define VECTOR_FUNCTION _ZGVnN2v_log
#include "libmvec_double_vlen2.h"
@@ -0,0 +1,62 @@
/* Double-precision 2 element vector x^y function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
ENTRY (_ZGVnN2vv_pow)
stp x29, x30, [sp, -304]!
cfi_adjust_cfa_offset (304)
cfi_rel_offset (x29, 0)
cfi_rel_offset (x30, 8)
mov x29, sp
stp q8, q9, [sp, 16]
stp q10, q11, [sp, 48]
stp q12, q13, [sp, 80]
stp q14, q15, [sp, 112]
stp q16, q17, [sp, 144]
stp q18, q19, [sp, 176]
stp q20, q21, [sp, 208]
stp q22, q23, [sp, 240]
// Use per lane load/store to avoid endianness issues.
str q0, [sp, 272]
str q1, [sp, 288]
ldr d0, [sp, 272]
ldr d1, [sp, 288]
bl pow
str d0, [sp, 272]
ldr d0, [sp, 280]
ldr d1, [sp, 296]
bl pow
str d0, [sp, 280]
ldr q0, [sp, 272]
ldp q8, q9, [sp, 16]
ldp q10, q11, [sp, 48]
ldp q12, q13, [sp, 80]
ldp q14, q15, [sp, 112]
ldp q16, q17, [sp, 144]
ldp q18, q19, [sp, 176]
ldp q20, q21, [sp, 208]
ldp q22, q23, [sp, 240]
ldp x29, x30, [sp], 304
cfi_adjust_cfa_offset (304)
cfi_restore (x29)
cfi_restore (x30)
ret
END (_ZGVnN2vv_pow)
@@ -0,0 +1,21 @@
/* Double-precision 2 element vector sin function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#define SCALAR_FUNCTION sin
#define VECTOR_FUNCTION _ZGVnN2v_sin
#include "libmvec_double_vlen2.h"
+65
View File
@@ -0,0 +1,65 @@
/* Single-precision 4 element vector function template.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
ENTRY (VECTOR_FUNCTION)
stp x29, x30, [sp, -288]!
cfi_adjust_cfa_offset (288)
cfi_rel_offset (x29, 0)
cfi_rel_offset (x30, 8)
mov x29, sp
stp q8, q9, [sp, 16]
stp q10, q11, [sp, 48]
stp q12, q13, [sp, 80]
stp q14, q15, [sp, 112]
stp q16, q17, [sp, 144]
stp q18, q19, [sp, 176]
stp q20, q21, [sp, 208]
stp q22, q23, [sp, 240]
// Use per lane load/store to avoid endianness issues.
str q0, [sp, 272]
ldr s0, [sp, 272]
bl SCALAR_FUNCTION
str s0, [sp, 272]
ldr s0, [sp, 276]
bl SCALAR_FUNCTION
str s0, [sp, 276]
ldr s0, [sp, 280]
bl SCALAR_FUNCTION
str s0, [sp, 280]
ldr s0, [sp, 284]
bl SCALAR_FUNCTION
str s0, [sp, 284]
ldr q0, [sp, 272]
ldp q8, q9, [sp, 16]
ldp q10, q11, [sp, 48]
ldp q12, q13, [sp, 80]
ldp q14, q15, [sp, 112]
ldp q16, q17, [sp, 144]
ldp q18, q19, [sp, 176]
ldp q20, q21, [sp, 208]
ldp q22, q23, [sp, 240]
ldp x29, x30, [sp], 288
cfi_adjust_cfa_offset (288)
cfi_restore (x29)
cfi_restore (x30)
ret
END (VECTOR_FUNCTION)
@@ -0,0 +1,21 @@
/* Single-precision 4 element vector cos function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#define SCALAR_FUNCTION cosf
#define VECTOR_FUNCTION _ZGVnN4v_cosf
#include "libmvec_float_vlen4.h"
@@ -0,0 +1,21 @@
/* Single-precision 4 element vector e^x function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#define SCALAR_FUNCTION expf
#define VECTOR_FUNCTION _ZGVnN4v_expf
#include "libmvec_float_vlen4.h"
@@ -0,0 +1,21 @@
/* Single-precision 4 element vector log function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#define SCALAR_FUNCTION logf
#define VECTOR_FUNCTION _ZGVnN4v_logf
#include "libmvec_float_vlen4.h"
@@ -0,0 +1,70 @@
/* Single-precision 4 element vector x^y function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
ENTRY (_ZGVnN4vv_powf)
stp x29, x30, [sp, -304]!
cfi_adjust_cfa_offset (304)
cfi_rel_offset (x29, 0)
cfi_rel_offset (x30, 8)
mov x29, sp
stp q8, q9, [sp, 16]
stp q10, q11, [sp, 48]
stp q12, q13, [sp, 80]
stp q14, q15, [sp, 112]
stp q16, q17, [sp, 144]
stp q18, q19, [sp, 176]
stp q20, q21, [sp, 208]
stp q22, q23, [sp, 240]
// Use per lane load/store to avoid endianness issues.
str q0, [sp, 272]
str q1, [sp, 288]
ldr s0, [sp, 272]
ldr s1, [sp, 288]
bl powf
str s0, [sp, 272]
ldr s0, [sp, 276]
ldr s1, [sp, 292]
bl powf
str s0, [sp, 276]
ldr s0, [sp, 280]
ldr s1, [sp, 296]
bl powf
str s0, [sp, 280]
ldr s0, [sp, 284]
ldr s1, [sp, 300]
bl powf
str s0, [sp, 284]
ldr q0, [sp, 272]
ldp q8, q9, [sp, 16]
ldp q10, q11, [sp, 48]
ldp q12, q13, [sp, 80]
ldp q14, q15, [sp, 112]
ldp q16, q17, [sp, 144]
ldp q18, q19, [sp, 176]
ldp q20, q21, [sp, 208]
ldp q22, q23, [sp, 240]
ldp x29, x30, [sp], 304
cfi_adjust_cfa_offset (304)
cfi_restore (x29)
cfi_restore (x30)
ret
END (_ZGVnN4vv_powf)
@@ -0,0 +1,21 @@
/* Single-precision 4 element vector sin function.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#define SCALAR_FUNCTION sinf
#define VECTOR_FUNCTION _ZGVnN4v_sinf
#include "libmvec_float_vlen4.h"
@@ -0,0 +1,40 @@
/* Wrapper part of tests for aarch64 double vector math functions.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <arm_neon.h>
#include "test-double-vlen2.h"
#define VEC_TYPE float64x2_t
/* Hack: VECTOR_WRAPPER declares the vector function without the pcs attribute,
placing it here happens to work, should be fixed in test-math-vector.h. */
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER (WRAPPER_NAME (cos), _ZGVnN2v_cos)
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER (WRAPPER_NAME (exp), _ZGVnN2v_exp)
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER (WRAPPER_NAME (log), _ZGVnN2v_log)
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER_ff (WRAPPER_NAME (pow), _ZGVnN2vv_pow)
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER (WRAPPER_NAME (sin), _ZGVnN2v_sin)
@@ -0,0 +1,40 @@
/* Wrapper part of tests for float aarch64 vector math functions.
Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <arm_neon.h>
#include "test-float-vlen4.h"
#define VEC_TYPE float32x4_t
/* Hack: VECTOR_WRAPPER declares the vector function without the pcs attribute,
placing it here happens to work, should be fixed in test-math-vector.h. */
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER (WRAPPER_NAME (cosf), _ZGVnN4v_cosf)
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER (WRAPPER_NAME (expf), _ZGVnN4v_expf)
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER (WRAPPER_NAME (logf), _ZGVnN4v_logf)
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER_ff (WRAPPER_NAME (powf), _ZGVnN4vv_powf)
__attribute__ ((aarch64_vector_pcs))
VECTOR_WRAPPER (WRAPPER_NAME (sinf), _ZGVnN4v_sinf)
+24
View File
@@ -1043,6 +1043,12 @@ ifloat: 1
ildouble: 2
ldouble: 2
Function: "cos_vlen2":
double: 1
Function: "cos_vlen4":
float: 1
Function: "cosh":
double: 1
float: 1
@@ -1601,6 +1607,12 @@ float: 1
idouble: 1
ifloat: 1
Function: "exp_vlen2":
double: 1
Function: "exp_vlen4":
float: 1
Function: "expm1":
double: 1
float: 1
@@ -1971,6 +1983,12 @@ ifloat: 1
ildouble: 2
ldouble: 2
Function: "pow_vlen2":
double: 1
Function: "pow_vlen4":
float: 1
Function: "sin":
double: 1
float: 1
@@ -2003,6 +2021,12 @@ ifloat: 1
ildouble: 3
ldouble: 3
Function: "sin_vlen2":
double: 1
Function: "sin_vlen4":
float: 1
Function: "sincos":
double: 1
float: 1
@@ -0,0 +1,10 @@
GLIBC_2.30 _ZGVnN2v_cos F
GLIBC_2.30 _ZGVnN2v_exp F
GLIBC_2.30 _ZGVnN2v_log F
GLIBC_2.30 _ZGVnN2v_sin F
GLIBC_2.30 _ZGVnN2vv_pow F
GLIBC_2.30 _ZGVnN4v_cosf F
GLIBC_2.30 _ZGVnN4v_expf F
GLIBC_2.30 _ZGVnN4v_logf F
GLIBC_2.30 _ZGVnN4v_sinf F
GLIBC_2.30 _ZGVnN4vv_powf F