OSDN Git Service

* g++.dg/eh/simd-2.C: Check for AltiVec HW support at runtime.
authorjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 1 Feb 2005 21:33:28 +0000 (21:33 +0000)
committerjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 1 Feb 2005 21:33:28 +0000 (21:33 +0000)
* g++.dg/eh/check-vect.h: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@94565 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/eh/check-vect.h [new file with mode: 0644]
gcc/testsuite/g++.dg/eh/simd-2.C

index af57ef3..537f38a 100644 (file)
@@ -1,5 +1,8 @@
 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.
+
        * gcc.dg/vect/vect-77.c: Replace xfail selector with expression.
        * gcc.dg/vect/vect-78.c: Ditto.
        * gcc.dg/vect/vect.exp (check_effective_target_lp64_or_vect_no_align):
diff --git a/gcc/testsuite/g++.dg/eh/check-vect.h b/gcc/testsuite/g++.dg/eh/check-vect.h
new file mode 100644 (file)
index 0000000..4321be0
--- /dev/null
@@ -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 5b37f3e..9d9dce5 100644 (file)
@@ -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;
 }