From fdf58b58524bfef7da9736cd6b159c756d657494 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 29 Jan 2004 16:15:12 +0000 Subject: [PATCH] Check for altivec assembly support before trying to use it. :) --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40796 --- configure.in | 33 +++++++++++++++++++++++++++------ src/cpuinfo/SDL_cpuinfo.c | 2 +- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/configure.in b/configure.in index 8430c7731..457c62fd7 100644 --- a/configure.in +++ b/configure.in @@ -1723,15 +1723,35 @@ CheckUSBHID() fi } +dnl Check for altivec instruction support using gas syntax +CheckAltivec() +{ + AC_MSG_CHECKING(for GCC Altivec instruction support) + have_gcc_altivec=no + AC_TRY_COMPILE([ + ],[ + asm volatile ("mtspr 256, %0\n\t" + "vand %%v0, %%v0, %%v0" + : + : "r" (-1)); + ],[ + have_gcc_altivec=yes + ]) + if test x$have_gcc_altivec = xyes; then + CFLAGS="$CFLAGS -DGCC_ALTIVEC" + fi + AC_MSG_RESULT($have_gcc_altivec) +} + case "$target" in *-*-linux*|*-*-gnu*|*-*-k*bsd*-gnu) case "$target" in - *-*-linux*) ARCH=linux ;; - *-*-kfreebsd*-gnu) ARCH=kfreebsd-gnu ;; - *-*-knetbsd*-gnu) ARCH=knetbsd-gnu ;; - *-*-kopenbsd*-gnu) ARCH=kopenbsd-gnu ;; - *-*-gnu*) ARCH=gnu ;; # must be last - esac + *-*-linux*) ARCH=linux ;; + *-*-kfreebsd*-gnu) ARCH=kfreebsd-gnu ;; + *-*-knetbsd*-gnu) ARCH=knetbsd-gnu ;; + *-*-kopenbsd*-gnu) ARCH=kopenbsd-gnu ;; + *-*-gnu*) ARCH=gnu ;; # must be last + esac CheckDummyVideo CheckDiskAudio CheckDLOPEN @@ -1755,6 +1775,7 @@ case "$target" in CheckOpenGL CheckInputEvents CheckPTHREAD + CheckAltivec # Set up files for the main() stub if test "x$video_qtopia" = "xyes"; then SDL_CFLAGS="$SDL_CFLAGS -Dmain=SDL_main" diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index 6e925bb59..0310f7fe8 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -236,7 +236,7 @@ static __inline__ int CPU_haveAltiVec() int error = sysctl(selectors, 2, &hasVectorUnit, &length, NULL, 0); if( 0 == error ) altivec = (hasVectorUnit != 0); -#elseif defined(USE_SETJMP) && defined(__GNUC__) && defined(__powerpc__) +#elif defined(USE_SETJMP) && defined(GCC_ALTIVEC) void (*handler)(int sig); handler = signal(SIGILL, illegal_instruction); if ( setjmp(jmpbuf) == 0 ) {