diff mbox series

S/390: Emit vector alignment hints for z13 if AS accepts them

Message ID 20200616082627.2560620-1-stefansf@linux.ibm.com
State New
Headers show
Series S/390: Emit vector alignment hints for z13 if AS accepts them | expand

Commit Message

Stefan Schulze Frielinghaus June 16, 2020, 8:26 a.m. UTC
Since 87cb9423add vector alignment hints are emitted for target z13,
too.  This patch changes this behaviour in the sense that alignment
hints are only emitted for target z13 if the assembler accepts them.

Bootstrapped and regtested on S/390. Ok for master?

gcc/ChangeLog:

	* config.in: Regenerate.
	* config/s390/s390.c (print_operand): Emit vector alignment hints
	for target z13, if AS accepts them.  For other targets the logic
	stays the same.
	* config/s390/s390.h (TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS): Define
	macro.
	* configure: Regenerate.
	* configure.ac: Check HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13.
---
 gcc/config.in          |  7 +++++++
 gcc/config/s390/s390.c |  4 +---
 gcc/config/s390/s390.h |  7 +++++++
 gcc/configure          | 31 +++++++++++++++++++++++++++++++
 gcc/configure.ac       |  5 +++++
 5 files changed, 51 insertions(+), 3 deletions(-)

Comments

Andreas Krebbel June 16, 2020, 3:14 p.m. UTC | #1
On 16.06.20 10:26, Stefan Schulze Frielinghaus wrote:
> Since 87cb9423add vector alignment hints are emitted for target z13,
> too.  This patch changes this behaviour in the sense that alignment
> hints are only emitted for target z13 if the assembler accepts them.
> 
> Bootstrapped and regtested on S/390. Ok for master?
> 
> gcc/ChangeLog:
> 
> 	* config.in: Regenerate.
> 	* config/s390/s390.c (print_operand): Emit vector alignment hints
> 	for target z13, if AS accepts them.  For other targets the logic
> 	stays the same.
> 	* config/s390/s390.h (TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS): Define
> 	macro.
> 	* configure: Regenerate.
> 	* configure.ac: Check HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13.

Ok. Thanks!

Andreas

> ---
>  gcc/config.in          |  7 +++++++
>  gcc/config/s390/s390.c |  4 +---
>  gcc/config/s390/s390.h |  7 +++++++
>  gcc/configure          | 31 +++++++++++++++++++++++++++++++
>  gcc/configure.ac       |  5 +++++
>  5 files changed, 51 insertions(+), 3 deletions(-)
> 
> diff --git a/gcc/config.in b/gcc/config.in
> index 809e7b26823..364eba47737 100644
> --- a/gcc/config.in
> +++ b/gcc/config.in
> @@ -706,6 +706,13 @@
>  #endif
>  
>  
> +/* Define if your assembler supports vl/vst/vlm/vstm with an optional
> +   alignment hint argument on z13. */
> +#ifndef USED_FOR_TARGET
> +#undef HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13
> +#endif
> +
> +
>  /* Define if your assembler supports VSX instructions. */
>  #ifndef USED_FOR_TARGET
>  #undef HAVE_AS_VSX
> diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
> index 56e3e87425a..758315c0c72 100644
> --- a/gcc/config/s390/s390.c
> +++ b/gcc/config/s390/s390.c
> @@ -7853,15 +7853,13 @@ print_operand (FILE *file, rtx x, int code)
>    switch (code)
>      {
>      case 'A':
> -#ifdef HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS
> -      if (TARGET_Z13 && MEM_P (x))
> +      if (TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS && MEM_P (x))
>  	{
>  	  if (MEM_ALIGN (x) >= 128)
>  	    fprintf (file, ",4");
>  	  else if (MEM_ALIGN (x) == 64)
>  	    fprintf (file, ",3");
>  	}
> -#endif
>        return;
>      case 'C':
>        fprintf (file, s390_branch_condition_mnemonic (x, FALSE));
> diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
> index 2e29dbe97e8..e4ef63e4080 100644
> --- a/gcc/config/s390/s390.h
> +++ b/gcc/config/s390/s390.h
> @@ -167,6 +167,13 @@ enum processor_flags
>  	(TARGET_VX && TARGET_CPU_VXE2)
>  #define TARGET_VXE2_P(opts)						\
>  	(TARGET_VX_P (opts) && TARGET_CPU_VXE2_P (opts))
> +#if defined(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13)
> +#define TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS TARGET_Z13
> +#elif defined(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS)
> +#define TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS TARGET_Z14
> +#else
> +#define TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS 0
> +#endif
>  
>  #ifdef HAVE_AS_MACHINE_MACHINEMODE
>  #define S390_USE_TARGET_ATTRIBUTE 1
> diff --git a/gcc/configure b/gcc/configure
> index def9d9a48be..f224679ed3e 100755
> --- a/gcc/configure
> +++ b/gcc/configure
> @@ -28241,6 +28241,37 @@ if test $gcc_cv_as_s390_vector_loadstore_alignment_hints = yes; then
>  
>  $as_echo "#define HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS 1" >>confdefs.h
>  
> +fi
> +
> +    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for vector load/store alignment hints on z13" >&5
> +$as_echo_n "checking assembler for vector load/store alignment hints on z13... " >&6; }
> +if ${gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13+:} false; then :
> +  $as_echo_n "(cached) " >&6
> +else
> +  gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13=no
> +  if test x$gcc_cv_as != x; then
> +    $as_echo '	vl %v24,0(%r15),3 ' > conftest.s
> +    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mzarch -march=z13 -o conftest.o conftest.s >&5'
> +  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
> +  (eval $ac_try) 2>&5
> +  ac_status=$?
> +  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
> +  test $ac_status = 0; }; }
> +    then
> +	gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13=yes
> +    else
> +      echo "configure: failed program was" >&5
> +      cat conftest.s >&5
> +    fi
> +    rm -f conftest.o conftest.s
> +  fi
> +fi
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13" >&5
> +$as_echo "$gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13" >&6; }
> +if test $gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13 = yes; then
> +
> +$as_echo "#define HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13 1" >>confdefs.h
> +
>  fi
>  
>  
> diff --git a/gcc/configure.ac b/gcc/configure.ac
> index e769c9c87d4..e83f0833ef3 100644
> --- a/gcc/configure.ac
> +++ b/gcc/configure.ac
> @@ -5106,6 +5106,11 @@ configured with --enable-newlib-nano-formatted-io.])
>        [	vl %v24,0(%r15),3 ],,
>        [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS, 1,
>  	  [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument.])])
> +    gcc_GAS_CHECK_FEATURE([vector load/store alignment hints on z13],
> +      gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13,, [-mzarch -march=z13],
> +      [	vl %v24,0(%r15),3 ],,
> +      [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13, 1,
> +	  [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument on z13.])])
>  
>      ;;
>  esac
>
diff mbox series

Patch

diff --git a/gcc/config.in b/gcc/config.in
index 809e7b26823..364eba47737 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -706,6 +706,13 @@ 
 #endif
 
 
+/* Define if your assembler supports vl/vst/vlm/vstm with an optional
+   alignment hint argument on z13. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13
+#endif
+
+
 /* Define if your assembler supports VSX instructions. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_AS_VSX
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 56e3e87425a..758315c0c72 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -7853,15 +7853,13 @@  print_operand (FILE *file, rtx x, int code)
   switch (code)
     {
     case 'A':
-#ifdef HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS
-      if (TARGET_Z13 && MEM_P (x))
+      if (TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS && MEM_P (x))
 	{
 	  if (MEM_ALIGN (x) >= 128)
 	    fprintf (file, ",4");
 	  else if (MEM_ALIGN (x) == 64)
 	    fprintf (file, ",3");
 	}
-#endif
       return;
     case 'C':
       fprintf (file, s390_branch_condition_mnemonic (x, FALSE));
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index 2e29dbe97e8..e4ef63e4080 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -167,6 +167,13 @@  enum processor_flags
 	(TARGET_VX && TARGET_CPU_VXE2)
 #define TARGET_VXE2_P(opts)						\
 	(TARGET_VX_P (opts) && TARGET_CPU_VXE2_P (opts))
+#if defined(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13)
+#define TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS TARGET_Z13
+#elif defined(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS)
+#define TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS TARGET_Z14
+#else
+#define TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS 0
+#endif
 
 #ifdef HAVE_AS_MACHINE_MACHINEMODE
 #define S390_USE_TARGET_ATTRIBUTE 1
diff --git a/gcc/configure b/gcc/configure
index def9d9a48be..f224679ed3e 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -28241,6 +28241,37 @@  if test $gcc_cv_as_s390_vector_loadstore_alignment_hints = yes; then
 
 $as_echo "#define HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS 1" >>confdefs.h
 
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for vector load/store alignment hints on z13" >&5
+$as_echo_n "checking assembler for vector load/store alignment hints on z13... " >&6; }
+if ${gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13=no
+  if test x$gcc_cv_as != x; then
+    $as_echo '	vl %v24,0(%r15),3 ' > conftest.s
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mzarch -march=z13 -o conftest.o conftest.s >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+    then
+	gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13=yes
+    else
+      echo "configure: failed program was" >&5
+      cat conftest.s >&5
+    fi
+    rm -f conftest.o conftest.s
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13" >&5
+$as_echo "$gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13" >&6; }
+if test $gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13 = yes; then
+
+$as_echo "#define HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13 1" >>confdefs.h
+
 fi
 
 
diff --git a/gcc/configure.ac b/gcc/configure.ac
index e769c9c87d4..e83f0833ef3 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -5106,6 +5106,11 @@  configured with --enable-newlib-nano-formatted-io.])
       [	vl %v24,0(%r15),3 ],,
       [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS, 1,
 	  [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument.])])
+    gcc_GAS_CHECK_FEATURE([vector load/store alignment hints on z13],
+      gcc_cv_as_s390_vector_loadstore_alignment_hints_on_z13,, [-mzarch -march=z13],
+      [	vl %v24,0(%r15),3 ],,
+      [AC_DEFINE(HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13, 1,
+	  [Define if your assembler supports vl/vst/vlm/vstm with an optional alignment hint argument on z13.])])
 
     ;;
 esac