arrfab / rpms / glibc

Forked from rpms/glibc 4 years ago
Clone

Blame SOURCES/glibc-rh1268008-8.patch

147e83
From 2d04109858181ed8c7dc3e4ae42923a26c1d3591 Mon Sep 17 00:00:00 2001
147e83
From: Stefan Liebler <stli@linux.vnet.ibm.com>
147e83
Date: Thu, 8 Oct 2015 10:47:37 +0200
147e83
Subject: [PATCH 08/30] S390: configure check for vector instruction support in
147e83
 assembler.
147e83
147e83
upstream-commit-id: 4f0a1cea34c05fb2acc16f1a2d291f53230eb4fb
147e83
https://www.sourceware.org/ml/libc-alpha/2015-07/msg00153.html
147e83
147e83
The S390 specific test checks if the assembler has support for the new z13
147e83
vector instructions by compiling a vector instruction. The .machine and
147e83
.machinemode directives are needed to compile the vector instruction without
147e83
-march=z13 option on 31/64 bit.
147e83
On success the macro HAVE_S390_VX_ASM_SUPPORT is defined. This macro is used
147e83
to determine if the optimized functions can be build without compile errors.
147e83
If the used assembler lacks vector support, then a warning is dumped while
147e83
configuring and only the common code functions are build.
147e83
147e83
The z13 instruction support was introduced in
147e83
"[Committed] S/390: Add support for IBM z13."
147e83
(https://sourceware.org/ml/binutils/2015-01/msg00197.html)
147e83
147e83
ChangeLog:
147e83
147e83
	* config.h.in (HAVE_S390_VX_ASM_SUPPORT): New macro undefine.
147e83
	* sysdeps/s390/configure.ac: Add test for S390 vector instruction
147e83
	assembler support.
147e83
	* sysdeps/s390/configure: Regenerated.
147e83
---
147e83
 config.h.in               |  3 +++
147e83
 sysdeps/s390/configure    | 39 +++++++++++++++++++++++++++++++++++++++
147e83
 sysdeps/s390/configure.in | 27 +++++++++++++++++++++++++++
147e83
 3 files changed, 69 insertions(+)
147e83
147e83
diff --git a/config.h.in b/config.h.in
147e83
index 68321d4..f7f2388 100644
147e83
--- a/config.h.in
147e83
+++ b/config.h.in
147e83
@@ -110,6 +110,9 @@
147e83
 /* Define if assembler supports Intel MPX.  */
147e83
 #undef  HAVE_MPX_SUPPORT
147e83
 
147e83
+/* Define if assembler supports vector instructions on S390.  */
147e83
+#undef  HAVE_S390_VX_ASM_SUPPORT
147e83
+
147e83
 /* Define if gcc supports FMA4.  */
147e83
 #undef	HAVE_FMA4_SUPPORT
147e83
 
147e83
diff --git a/sysdeps/s390/configure b/sysdeps/s390/configure
147e83
index 669bb9b..cc4c1e0 100644
147e83
--- a/sysdeps/s390/configure
147e83
+++ b/sysdeps/s390/configure
147e83
@@ -3,3 +3,42 @@
147e83
 
147e83
 $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
147e83
 
147e83
+
147e83
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for S390 vector instruction support" >&5
147e83
+$as_echo_n "checking for S390 vector instruction support... " >&6; }
147e83
+if ${libc_cv_asm_s390_vx+:} false; then :
147e83
+  $as_echo_n "(cached) " >&6
147e83
+else
147e83
+  cat > conftest.c <<\EOF
147e83
+void testvecinsn ()
147e83
+{
147e83
+    __asm__ (".machine \"z13\" \n\t"
147e83
+	     ".machinemode \"zarch_nohighgprs\" \n\t"
147e83
+	     "vistrbs %%v16,%%v17 \n\t"
147e83
+	     "locghie %%r1,0" : :);
147e83
+}
147e83
+EOF
147e83
+if { ac_try='${CC-cc} --shared conftest.c -o conftest.o &> /dev/null'
147e83
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
147e83
+  (eval $ac_try) 2>&5
147e83
+  ac_status=$?
147e83
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
147e83
+  test $ac_status = 0; }; } ;
147e83
+then
147e83
+  libc_cv_asm_s390_vx=yes
147e83
+else
147e83
+  libc_cv_asm_s390_vx=no
147e83
+fi
147e83
+rm -f conftest*
147e83
+fi
147e83
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_s390_vx" >&5
147e83
+$as_echo "$libc_cv_asm_s390_vx" >&6; }
147e83
+
147e83
+if test "$libc_cv_asm_s390_vx" = yes ;
147e83
+then
147e83
+  $as_echo "#define HAVE_S390_VX_ASM_SUPPORT 1" >>confdefs.h
147e83
+
147e83
+else
147e83
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Use binutils with vector-support in order to use optimized implementations." >&5
147e83
+$as_echo "$as_me: WARNING: Use binutils with vector-support in order to use optimized implementations." >&2;}
147e83
+fi
147e83
diff --git a/sysdeps/s390/configure.in b/sysdeps/s390/configure.in
147e83
index b5af4e1..733e356 100644
147e83
--- a/sysdeps/s390/configure.in
147e83
+++ b/sysdeps/s390/configure.in
147e83
@@ -4,3 +4,30 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
147e83
 dnl It is always possible to access static and hidden symbols in an
147e83
 dnl position independent way.
147e83
 AC_DEFINE(PI_STATIC_AND_HIDDEN)
147e83
+
147e83
+AC_CACHE_CHECK(for S390 vector instruction support, libc_cv_asm_s390_vx, [dnl
147e83
+cat > conftest.c <<\EOF
147e83
+void testvecinsn ()
147e83
+{
147e83
+    __asm__ (".machine \"z13\" \n\t"
147e83
+	     ".machinemode \"zarch_nohighgprs\" \n\t"
147e83
+	     "vistrbs %%v16,%%v17 \n\t"
147e83
+	     "locghie %%r1,0" : :);
147e83
+}
147e83
+EOF
147e83
+dnl
147e83
+dnl test, if assembler supports S390 vector instructions
147e83
+if AC_TRY_COMMAND([${CC-cc} --shared conftest.c -o conftest.o &> /dev/null]) ;
147e83
+then
147e83
+  libc_cv_asm_s390_vx=yes
147e83
+else
147e83
+  libc_cv_asm_s390_vx=no
147e83
+fi
147e83
+rm -f conftest* ])
147e83
+
147e83
+if test "$libc_cv_asm_s390_vx" = yes ;
147e83
+then
147e83
+  AC_DEFINE(HAVE_S390_VX_ASM_SUPPORT)
147e83
+else
147e83
+  AC_MSG_WARN([Use binutils with vector-support in order to use optimized implementations.])
147e83
+fi
147e83
-- 
147e83
2.3.0
147e83