]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
IBM Z: Fix testsuite useable_hw check
authorAndreas Krebbel <krebbel@linux.ibm.com>
Tue, 5 Nov 2019 15:25:26 +0000 (15:25 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Tue, 5 Nov 2019 15:25:26 +0000 (15:25 +0000)
This fixes various issues with the useable_hw check in s390.exp.  The
check is supposed to verify whether a testcase can be run on the
current hardware.

- the test never returned true for -m31 because vzero is not available
  in ESA mode and -m31 defaults to -mesa
- the missing v0 clobber on the vzero instruction made the check fail
  if the stack pointer got saved in f0
- the lcbb instruction used for checking whether we are on a z13
  also requires vx.  Replace it with an instruction from the generic
  instruction set extensions.
- no support for z14 and z15 so far

gcc/testsuite/ChangeLog:

2019-11-05  Andreas Krebbel  <krebbel@linux.ibm.com>

Backport from mainline
2019-11-05  Andreas Krebbel  <krebbel@linux.ibm.com>

* gcc.target/s390/s390.exp
(check_effective_target_s390_useable_hw): Add inline asm for z14
and z15. Replace instruction for z13 with lochiz. Add register
clobbers. Check also for __zarch__ when doing the __VX__ test.

From-SVN: r277842

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/s390.exp

index 17f417ecbf580701815f4b283a65ea4e9225ec07..dde8e96551a938aba57bb2c2c35d7807e5e743d6 100644 (file)
@@ -1,3 +1,13 @@
+2019-11-05  Andreas Krebbel  <krebbel@linux.ibm.com>
+
+       Backport from mainline
+       2019-11-05  Andreas Krebbel  <krebbel@linux.ibm.com>
+
+       * gcc.target/s390/s390.exp
+       (check_effective_target_s390_useable_hw): Add inline asm for z14
+       and z15. Replace instruction for z13 with lochiz. Add register
+       clobbers. Check also for __zarch__ when doing the __VX__ test.
+
 2019-11-04  Iain Sandoe  <iain@sandoe.co.uk>
 
        Backport from mainline.
index 86f7e4398eb8d94251ebd7062c85dac4e7dfe3b1..ee94a8067667d232066306dc73bb59f94b1d380b 100644 (file)
@@ -86,18 +86,22 @@ proc check_effective_target_s390_useable_hw { } {
        int main (void)
        {
            asm (".machinemode zarch" : : );
-       #if __ARCH__ >= 11
-           asm ("lcbb %%r2,0(%%r15),0" : : );
+       #if __ARCH__ >= 13
+           asm ("ncrk %%r2,%%r2,%%r2" : : : "r2");
+       #elif __ARCH__ >= 12
+           asm ("agh %%r2,0(%%r15)" : : : "r2");
+       #elif __ARCH__ >= 11
+           asm ("lochiz %%r2,42" : : : "r2");
        #elif __ARCH__ >= 10
-           asm ("risbgn %%r2,%%r2,0,0,0" : : );
+           asm ("risbgn %%r2,%%r2,0,0,0" : : : "r2");
        #elif __ARCH__ >= 9
-           asm ("sgrk %%r2,%%r2,%%r2" : : );
+           asm ("sgrk %%r2,%%r2,%%r2" : : : "r2");
        #elif __ARCH__ >= 8
-           asm ("rosbg %%r2,%%r2,0,0,0" : : );
+           asm ("rosbg %%r2,%%r2,0,0,0" : : : "r2");
        #elif __ARCH__ >= 7
-           asm ("nilf %%r2,0" : : );
+           asm ("nilf %%r2,0" : : : "r2");
        #elif __ARCH__ >= 6
-           asm ("lay %%r2,0(%%r15)" : : );
+           asm ("lay %%r2,0(%%r15)" : : : "r2");
        #elif __ARCH__ >= 5
            asm ("tam" : : );
        #endif
@@ -107,8 +111,8 @@ proc check_effective_target_s390_useable_hw { } {
            asm ("etnd %0" : "=d" (nd));
          }
        #endif
-       #ifdef __VX__
-           asm ("vzero %%v0" : : );
+       #if defined (__VX__) && defined (__zarch__)
+           asm ("vzero %%v0" : : : "v0");
        #endif
          return 0;
        }