cpu-future.c: Require powerpc_future_ok.
authorBill Schmidt <wschmidt@linux.ibm.com>
Fri, 31 May 2019 12:22:52 +0000 (12:22 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Fri, 31 May 2019 12:22:52 +0000 (12:22 +0000)
2019-05-31  Bill Schmidt  <wschmidt@linux.ibm.com>
    Michael Meissner  <meissner@linux.ibm.com>

* gcc.target/powerpc/cpu-future.c: Require powerpc_future_ok.
* gcc.target/powerpc/localentry-1.c: Likewise.
* gcc.target/powerpc/localentry-direct-1.c: Likewise.
* gcc.target/powerpc/notoc-direct-1.c: Likewise.
* gcc.target/powerpc/pcrel-sibcall-1.c: Likewise.
* lib/target-supports.exp (check_powerpc_future_hw_available): New.
(check_effective_target_powerpc_future_ok): New.

Co-Authored-By: Michael Meissner <meissner@linux.ibm.com>
From-SVN: r271810

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/cpu-future.c
gcc/testsuite/gcc.target/powerpc/localentry-1.c
gcc/testsuite/gcc.target/powerpc/localentry-detect-1.c
gcc/testsuite/gcc.target/powerpc/notoc-direct-1.c
gcc/testsuite/gcc.target/powerpc/pcrel-sibcall-1.c
gcc/testsuite/lib/target-supports.exp

index b2f4478126d7d1a4521c1953692e96919297eda0..31743766289e1099af45ae22e1e73a2f9e2eb9ee 100644 (file)
@@ -1,3 +1,14 @@
+2019-05-31  Bill Schmidt  <wschmidt@linux.ibm.com>
+           Michael Meissner  <meissner@linux.ibm.com>
+
+       * gcc.target/powerpc/cpu-future.c: Require powerpc_future_ok.
+       * gcc.target/powerpc/localentry-1.c: Likewise.
+       * gcc.target/powerpc/localentry-direct-1.c: Likewise.
+       * gcc.target/powerpc/notoc-direct-1.c: Likewise.
+       * gcc.target/powerpc/pcrel-sibcall-1.c: Likewise.
+       * lib/target-supports.exp (check_powerpc_future_hw_available): New.
+       (check_effective_target_powerpc_future_ok): New.
+
 2019-05-31  Thomas De Schampheleire  <thomas.de_schampheleire@nokia.com>
 
        PR debug/86964
index d0725867ffa5b12d35d8c4c386404dc225f8dfd8..ae406d08b238e3d7179b104ffbba5b6573badd54 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-do compile } */
+/* { dg-require-effective-target powerpc_future_ok } */
 /* { dg-options "-mdejagnu-cpu=future -O2" } */
 
 /* Ensure -mcpu=future compiles cleanly.  */
index ce687a7f6ec68a5f06d2d0e26daec902d8ab93e9..dc4867d0a3c3902a823697754faad68c97d063d2 100644 (file)
@@ -1,6 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-mdejagnu-cpu=future -O2" } */
 /* { dg-require-effective-target powerpc_elfv2 } */
+/* { dg-require-effective-target powerpc_future_ok } */
 
 /* Ensure we generate ".localentry fn,1" for both leaf and non-leaf
    functions.  */
index db20aedeb71aee9d3700b9f666dd7eb2f3070a69..70b18ff0aca9f1eb632fe51c9cdda0e21d107bd9 100644 (file)
@@ -1,5 +1,6 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target powerpc_elfv2 } */
+/* { dg-require-effective-target powerpc_future_ok } */
 /* { dg-options "-O2 -mdejagnu-cpu=future" } */
 
 
index 31497261ddf4be10c2b6b4c2cc59fdae4380ab10..0917f307e65ac0b4b9fee1caddfa04f47d02848d 100644 (file)
@@ -1,6 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-mdejagnu-cpu=future -O2" } */
 /* { dg-require-effective-target powerpc_elfv2 } */
+/* { dg-require-effective-target powerpc_future_ok } */
 
 /* Test that calls generated from PC-relative code are
    annotated with @notoc.  */
index 7c767e2ba322f073a853c4c726c93c6b35350cb9..bd7a0a9bcda25bcecb9d201ca5061052cc76b074 100644 (file)
@@ -1,6 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-mdejagnu-cpu=future -O2" } */
 /* { dg-require-effective-target powerpc_elfv2 } */
+/* { dg-require-effective-target powerpc_future_ok } */
 
 /* Test that potential sibcalls are not generated when the caller preserves
    the TOC and the callee doesn't, or vice versa.  */
index 13c3a6a7157a941de152d6784efc004a3ebdbf03..6aa814b35bc2e0b7e187e9d42e7b2666f93d74a7 100644 (file)
@@ -2140,6 +2140,25 @@ proc check_p9modulo_hw_available { } {
     }]
 }
 
+
+# Return 1 if the target supports executing FUTURE instructions, 0 otherwise.
+# Cache the result.  It is assumed that if a simulator does not support the
+# FUTURE instructions, that it will generate an error and this test will fail.
+
+proc check_powerpc_future_hw_available { } {
+    return [check_cached_effective_target powerpc_future_hw_available {
+       check_runtime_nocache powerpc_future_hw_available {
+           int main()
+           {
+               /* Set e first and use +r to check if pli actually works.  */
+               long e = -1;
+               asm ("pli %0,%1" : "+r" (e) : "n" (0x12345));
+               return (e == 0x12345);
+           }
+       } "-mfuture"
+    }]
+}
+
 # Return 1 if the target supports executing __float128 on PowerPC via software
 # emulation, 0 otherwise.  Cache the result.
 
@@ -5157,6 +5176,24 @@ proc check_effective_target_powerpc_p9modulo_ok { } {
     }
 }
 
+# Return 1 if this is a PowerPC target supporting -mfuture.
+# Limit this to 64-bit linux systems for now until other
+# targets support FUTURE.
+
+proc check_effective_target_powerpc_future_ok { } {
+    if { ([istarget powerpc64*-*-linux*]) } {
+       return [check_no_compiler_messages powerpc_future_ok object {
+           int main (void) {
+               long e;
+               asm ("pli %0,%1" : "=r" (e) : "n" (0x12345));
+               return e;
+           }
+       } "-mfuture"]
+    } else {
+       return 0
+    }
+}
+
 # Return 1 if this is a PowerPC target supporting -mfloat128 via either
 # software emulation on power7/power8 systems or hardware support on power9.