This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/14] [x86_64] Vector math functions (vector cos)


This patch breaks x86_64 builds with Binutils 2.24 (Fedora 21):

../sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S: Assembler messages: ../sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S:281: Error: operand type mismatch for `vandpd' ../sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S:327: Error: operand type mismatch for `vxorpd' /build/glibc-trunk/sysd-rules:1549: recipe for target '/build/glibc-trunk/mathvec/svml_d_cos8_core_avx512.o' failed

(with other similar errors in other files).

The first instruction the assembler complains about is:

        vandpd 0(%rax), %zmm6, %zmm1

As from Binutils 2.25 accepts the code.

Martin

On 05/25/2015 12:26 PM, Andrew Senkevich wrote:
2015-05-22 18:31 GMT+03:00 Joseph Myers <joseph@codesourcery.com>:
On Thu, 21 May 2015, Andrew Senkevich wrote:

diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile
index 12b0526..5ccf97b 100644
--- a/sysdeps/x86_64/fpu/multiarch/Makefile
+++ b/sysdeps/x86_64/fpu/multiarch/Makefile
@@ -51,3 +51,7 @@ CFLAGS-slowexp-avx.c = -msse2avx -DSSE2AVX
  CFLAGS-s_tan-avx.c = -msse2avx -DSSE2AVX
  endif
  endif
+
+ifeq ($(subdir),mathvec)
+libmvec-support += svml_d_cos2_core svml_d_cos8_core
+endif

As far as I can tell, if you use --disable-multi-arch, then these files
won't be built into libmvec, and nothing else will provide the
_ZGVbN2v_cos and _ZGVeN8v_cos symbols.  See other multiarch code for
examples of how such things are handled - typically, the file outside the
multiarch directory implements things for an always-supported architecture
variant (in this case, that would be a variant guaranteed to be supported
if the given entry point gets called), then, in the multiarch directory,
there are the implementations for other variants, and a file with the same
name as that outside the multiarch directory, that (a) provides the IFUNC
resolver and (b) defines some macros before #including the file in the
directory above, so that the basic version of the function gets defined
under a different name.

Hi, Joseph, updated patch is attached. Is it ok?

2015-05-25  Andrew Senkevich  <andrew.senkevich@intel.com>

         * sysdeps/x86_64/fpu/Makefile: New file.
         * sysdeps/x86_64/fpu/Versions: New file.
         * sysdeps/x86_64/fpu/svml_d_cos_data.S: New file.
         * sysdeps/x86_64/fpu/svml_d_cos_data.h: New file.
         * sysdeps/x86_64/fpu/svml_d_cos2_core.S: New file.
         * sysdeps/x86_64/fpu/svml_d_cos4_core.S: New file.
         * sysdeps/x86_64/fpu/svml_d_cos4_core_avx.S: New file.
         * sysdeps/x86_64/fpu/svml_d_cos8_core.S: New file.
         * sysdeps/x86_64/fpu/svml_d_wrapper_impl.h: New file.
         * sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S: New file.
         * sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core_sse4.S: New file.
         * sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S: New file.
         * sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core_avx2.S: New file.
         * sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S: New file.
         * sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S: New file.
         * sysdeps/x86_64/fpu/multiarch/Makefile (libmvec-sysdep_routines): Added
         build of SSE, AVX2 and AVX512 versions which are IFUNC.
         * sysdeps/x86/fpu/bits/math-vector.h: Added SIMD declaration for cos.
         * math/bits/mathcalls.h: Added cos declaration with __MATHCALL_VEC.
         * sysdeps/x86_64/configure.ac: Options for libmvec build.
         * sysdeps/x86_64/configure: Regenerated.
         * sysdeps/x86_64/sysdep.h (cfi_offset_rel_rsp): New macro.
         * sysdeps/unix/sysv/linux/x86_64/libmvec.abilist: New file.


--
WBR,
Andrew



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]