This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] testsuite (committed): check AltiVec support at runtime
- From: Janis Johnson <janis187 at us dot ibm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 1 Feb 2005 13:41:07 -0800
- Subject: [PATCH] testsuite (committed): check AltiVec support at runtime
This test made some invalid assumptions about when AltiVec hardware
support is available. It now uses runtime checks copied from the vect
tests.
Checked in on mainline.
2005-02-01 Janis Johnson <janis187@us.ibm.com>
* g++.dg/eh/simd-2.C: Check for AltiVec HW support at runtime.
* g++.dg/eh/check-vect.h: New.
Index: gcc/testsuite/g++.dg/eh/simd-2.C
===================================================================
RCS file: /opt/gcc-cvs/gcc/gcc/testsuite/g++.dg/eh/simd-2.C,v
retrieving revision 1.9
diff -u -p -r1.9 simd-2.C
--- gcc/testsuite/g++.dg/eh/simd-2.C 16 Mar 2004 20:37:28 -0000 1.9
+++ gcc/testsuite/g++.dg/eh/simd-2.C 21 Jan 2005 00:46:32 -0000
@@ -2,8 +2,10 @@
// Contributed by Aldy Hernandez (aldy@quesejoda.com).
// { dg-options "-O" }
// { dg-options "-O -w" { target i?86-*-* } }
-// { dg-options "-O -w -maltivec" { target powerpc64-*-linux* } }
-// { dg-do run { xfail "powerpc64-*-linux*"} }
+// { dg-options "-O -w -maltivec" { target powerpc*-*-linux* } }
+// { dg-do run }
+
+#include "check-vect.h"
typedef int __attribute__((vector_size (16))) vecint;
@@ -43,10 +45,8 @@ void f1 (void)
int main ()
{
-#if defined(__powerpc64__) && defined(__linux__)
- // Don't run on ppc64-linux, since not always AltiVec regs available
- return -1;
-#endif
+ /* Exit with zero if the hardware does not support AltiVec instructions. */
+ check_vect ();
f1 ();
return 0;
}
--- /dev/null 2004-06-24 11:06:20.000000000 -0700
+++ gcc/testsuite/g++.dg/eh/check-vect.h 2004-11-15 13:08:47.000000000 -0800
@@ -0,0 +1,26 @@
+/* Check if system supports SIMD. Copied from gcc.dg/vect/tree-vect.h. */
+#include <signal.h>
+
+extern "C" void abort (void);
+extern "C" void exit (int);
+
+void
+sig_ill_handler (int sig)
+{
+ exit(0);
+}
+
+void check_vect (void)
+{
+ signal(SIGILL, sig_ill_handler);
+#if defined(__ppc__) || defined(__ppc64__) || defined(__powerpc__) || defined(powerpc)
+ /* Altivec instruction, 'vor %v0,%v0,%v0'. */
+ asm volatile (".long 0x10000484");
+#elif defined(__i386__) || defined(__x86_64__)
+ /* SSE2 instruction: movsd %xmm0,%xmm0 */
+ asm volatile (".byte 0xf2,0x0f,0x10,0xc0");
+#elif defined(__sparc__)
+ asm volatile (".word\t0x81b007c0");
+#endif
+ signal (SIGILL, SIG_DFL);
+}