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