diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 513f6bcf2557086f487d7988b9657ffb692c2ab6..d2e0d59cc866d64e4fb75a01a35a1f28aef8eaec 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2009-01-12  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* lib/target-supports.exp (check_effective_target_powerpc64): New.
+	* gcc.target/powerpc/darwin-longlong.c: Explicitly require 64-bit
+	instruction support.  Do not check for it at runtime.
+
 2009-01-12  Jason Merrill  <jason@redhat.com>
 
 	PR c++/35109
diff --git a/gcc/testsuite/gcc.target/powerpc/darwin-longlong.c b/gcc/testsuite/gcc.target/powerpc/darwin-longlong.c
index 866fb6c0b94cbdde5c411d461f1b9386ac1bea93..0692b3d80699895b25ac364b87b5a01777defcfb 100644
--- a/gcc/testsuite/gcc.target/powerpc/darwin-longlong.c
+++ b/gcc/testsuite/gcc.target/powerpc/darwin-longlong.c
@@ -1,17 +1,9 @@
 /* { dg-do run { target powerpc*-*-* } } */
-/* { dg-xfail-if "" { "powerpc-*-eabispe*" "powerpc-ibm-aix*" } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc64 } */
 /* { dg-options "-mcpu=G5" } */
 
-#include <signal.h>
 #include <stdlib.h>
 
-void
-sig_ill_handler (int sig)
-{
-    exit(0);
-}
-
-
 int  msw(long long in)
 {
   union {
@@ -24,16 +16,6 @@ int  msw(long long in)
 
 int main()
 {
-
-  /* Exit on systems without 64bit instructions.  */
-  signal (SIGILL, sig_ill_handler);
-#ifdef __MACH__
-  asm volatile ("extsw r0,r0");
-#else
-  asm volatile ("extsw 0,0");
-#endif
-  signal (SIGILL, SIG_DFL);
-
   if (msw(1) != 0)
     abort();
   exit(0);