+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
/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_future_ok } */
/* { dg-options "-mdejagnu-cpu=future -O2" } */
/* Ensure -mcpu=future compiles cleanly. */
/* { 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. */
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_elfv2 } */
+/* { dg-require-effective-target powerpc_future_ok } */
/* { dg-options "-O2 -mdejagnu-cpu=future" } */
/* { 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. */
/* { 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. */
}]
}
+
+# 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.
}
}
+# 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.