This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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);
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]