diff --git a/ChangeLog b/ChangeLog index d32e8daa7f..e89c14e634 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2015-05-14 Andrew Senkevich + * Makeconfig (rpath-dirs, all-subdirs): Added mathvec folder. + (libmvec): New variable. + * configure.ac: Added option for mathvec build. + * configure: Regenerated. + * mathvec/Depend: New file. + * mathvec/Makefile: New file. + * shlib-versions: Added libmvec. + * math/Makefile: Added rule for libm.so installation. + * bits/math-vector.h: New file. * bits/libm-simd-decl-stubs.h: New header. * math/Makefile (headers): Added new header diff --git a/Makeconfig b/Makeconfig index 77752c0bb4..d32a0fdc65 100644 --- a/Makeconfig +++ b/Makeconfig @@ -498,7 +498,7 @@ link-libc = $(link-libc-rpath-link) $(link-libc-before-gnulib) $(gnulib) link-libc-tests = $(link-libc-tests-rpath-link) \ $(link-libc-before-gnulib) $(gnulib-tests) # This is how to find at build-time things that will be installed there. -rpath-dirs = math elf dlfcn nss nis rt resolv crypt +rpath-dirs = math elf dlfcn nss nis rt resolv crypt mathvec rpath-link = \ $(common-objdir):$(subst $(empty) ,:,$(patsubst ../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%))) else @@ -1074,8 +1074,10 @@ endif ifeq ($(build-shared),yes) libm = $(common-objpfx)math/libm.so$(libm.so-version) +libmvec = $(common-objpfx)mathvec/libmvec.so$(libmvec.so-version) else libm = $(common-objpfx)math/libm.a +libmvec = $(common-objpfx)mathvec/libmvec.a endif # These are the subdirectories containing the library source. The order @@ -1085,7 +1087,7 @@ all-subdirs = csu assert ctype locale intl catgets math setjmp signal \ stdlib stdio-common libio malloc string wcsmbs time dirent \ grp pwd posix io termios resource misc socket sysvipc gmon \ gnulib iconv iconvdata wctype manual shadow gshadow po argp \ - crypt localedata timezone rt conform debug \ + crypt localedata timezone rt conform debug mathvec \ $(add-on-subdirs) dlfcn elf ifndef avoid-generated diff --git a/configure b/configure index 97e549eef5..1e4138b524 100755 --- a/configure +++ b/configure @@ -777,6 +777,7 @@ enable_systemtap enable_build_nscd enable_nscd enable_pt_chown +enable_mathvec with_cpu ' ac_precious_vars='build_alias @@ -1441,6 +1442,8 @@ Optional Features: --disable-build-nscd disable building and installing the nscd daemon --disable-nscd library functions will not contact the nscd daemon --enable-pt_chown Enable building and installing pt_chown + --enable-mathvec Enable building and installing mathvec [default + depends on architecture] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -3845,6 +3848,14 @@ gnu*) ;; esac +# Check whether --enable-mathvec was given. +if test "${enable_mathvec+set}" = set; then : + enableval=$enable_mathvec; build_mathvec=$enableval +else + build_mathvec=notset +fi + + # We keep the original values in `$config_*' and never modify them, so we # can write them unchanged into config.make. Everything else uses # $machine, $vendor, and $os, and changes them whenever convenient. @@ -7215,6 +7226,12 @@ $as_echo "running configure fragment for $dir" >&6; } fi done +if test x"$build_mathvec" = xnotset; then + build_mathvec=no +fi +config_vars="$config_vars +build-mathvec = $build_mathvec" + diff --git a/configure.ac b/configure.ac index def655ab8b..ff66b875e3 100644 --- a/configure.ac +++ b/configure.ac @@ -381,6 +381,12 @@ gnu*) ;; esac +AC_ARG_ENABLE([mathvec], + [AS_HELP_STRING([--enable-mathvec], + [Enable building and installing mathvec @<:@default depends on architecture@:>@])], + [build_mathvec=$enableval], + [build_mathvec=notset]) + # We keep the original values in `$config_*' and never modify them, so we # can write them unchanged into config.make. Everything else uses # $machine, $vendor, and $os, and changes them whenever convenient. @@ -1994,6 +2000,11 @@ for dir in $sysnames; do fi done +if test x"$build_mathvec" = xnotset; then + build_mathvec=no +fi +LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec]) + AC_SUBST(libc_extra_cflags) AC_SUBST(libc_extra_cppflags) diff --git a/math/Makefile b/math/Makefile index 4f66162a09..9a3cf3228b 100644 --- a/math/Makefile +++ b/math/Makefile @@ -86,6 +86,22 @@ generated += $(foreach s,.c .S l.c l.S f.c f.S,$(calls:s_%=m_%$s)) routines = $(calls) $(calls:=f) $(long-c-$(long-double-fcts)) long-c-yes = $(calls:=l) +ifeq ($(build-mathvec),yes) +# We need to install libm.so as linker script +# for more comfortable use of vector math library. +install-lib-ldscripts := libm.so +install_subdir: $(inst_libdir)/libm.so +$(inst_libdir)/libm.so: $(common-objpfx)format.lds \ + $(libm) \ + $(libmvec) \ + $(+force) + (echo '/* GNU ld script'; echo '*/';\ + cat $<; \ + echo 'GROUP ( $(slibdir)/libm.so$(libm.so-version) ' \ + 'AS_NEEDED ( $(slibdir)/libmvec.so$(libmvec.so-version) ) )' \ + ) > $@ +endif + # Rules for the test suite. tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \ test-misc test-fpucw test-fpucw-ieee tst-definitions test-tgmath \ diff --git a/mathvec/Depend b/mathvec/Depend new file mode 100644 index 0000000000..ede10ab61b --- /dev/null +++ b/mathvec/Depend @@ -0,0 +1 @@ +math diff --git a/mathvec/Makefile b/mathvec/Makefile new file mode 100644 index 0000000000..37e0864f64 --- /dev/null +++ b/mathvec/Makefile @@ -0,0 +1,35 @@ +# Copyright (C) 2014-2015 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 +# . + +# Makefile for the vector math library. + +subdir := mathvec + +include ../Makeconfig + +ifeq ($(build-mathvec),yes) +extra-libs := libmvec +extra-libs-others = $(extra-libs) + +libmvec-routines = $(strip $(libmvec-support)) + +$(objpfx)libmvec.so: $(libm) +endif + +# Rules for the test suite are in math directory. + +include ../Rules diff --git a/shlib-versions b/shlib-versions index e05b248e8d..fa3cf1da44 100644 --- a/shlib-versions +++ b/shlib-versions @@ -71,3 +71,6 @@ libanl=1 # This defines the libgcc soname version this glibc is to load for # asynchronous cancellation to work correctly. libgcc_s=1 + +# The vector math library +libmvec=1