Commit b2cf25a8 authored by reimar's avatar reimar

Remove uses of SIGILL for CPU extension detection, that method is not acceptable

in a library.
Should not change anything for PPC, the autodetection is currently pointless due
to other code being compiled with -maltivec as well (and detection for OSX and
AmigaOS remains in place).
SPARC binaries built with VIS support can now only run on systems with VIS.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@10648 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent ca510cab
...@@ -28,23 +28,6 @@ ...@@ -28,23 +28,6 @@
#include <exec/exec.h> #include <exec/exec.h>
#include <interfaces/exec.h> #include <interfaces/exec.h>
#include <proto/exec.h> #include <proto/exec.h>
#else
#include <signal.h>
#include <setjmp.h>
static sigjmp_buf jmpbuf;
static volatile sig_atomic_t canjump = 0;
static void sigill_handler (int sig)
{
if (!canjump) {
signal (sig, SIG_DFL);
raise (sig);
}
canjump = 0;
siglongjmp (jmpbuf, 1);
}
#endif /* __APPLE__ */ #endif /* __APPLE__ */
/** /**
...@@ -72,24 +55,9 @@ int has_altivec(void) ...@@ -72,24 +55,9 @@ int has_altivec(void)
if (err == 0) return (has_vu != 0); if (err == 0) return (has_vu != 0);
return 0; return 0;
#else #else
/* Do it the brute-force way, borrowed from the libmpeg2 library. */ // since we were compiled for altivec, just assume we have it
{ // until someone comes up with a proper way (not involving signal hacks).
signal (SIGILL, sigill_handler); return 1;
if (sigsetjmp (jmpbuf, 1)) {
signal (SIGILL, SIG_DFL);
} else {
canjump = 1;
asm volatile ("mtspr 256, %0\n\t"
"vand %%v0, %%v0, %%v0"
:
: "r" (-1));
signal (SIGILL, SIG_DFL);
return 1;
}
}
return 0;
#endif /* __AMIGAOS4__ */ #endif /* __AMIGAOS4__ */
} }
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
#include "config.h" #include "config.h"
#include <inttypes.h> #include <inttypes.h>
#include <signal.h>
#include <setjmp.h>
#include "dsputil.h" #include "dsputil.h"
...@@ -3987,56 +3985,13 @@ static void MC_avg_no_round_xy_8_vis (uint8_t * dest, const uint8_t * _ref, ...@@ -3987,56 +3985,13 @@ static void MC_avg_no_round_xy_8_vis (uint8_t * dest, const uint8_t * _ref,
/* End of no rounding code */ /* End of no rounding code */
static sigjmp_buf jmpbuf;
static volatile sig_atomic_t canjump = 0;
static void sigill_handler (int sig)
{
if (!canjump) {
signal (sig, SIG_DFL);
raise (sig);
}
canjump = 0;
siglongjmp (jmpbuf, 1);
}
#define ACCEL_SPARC_VIS 1 #define ACCEL_SPARC_VIS 1
#define ACCEL_SPARC_VIS2 2 #define ACCEL_SPARC_VIS2 2
static int vis_level () static int vis_level ()
{ {
int accel = 0;
signal (SIGILL, sigill_handler);
if (sigsetjmp (jmpbuf, 1)) {
signal (SIGILL, SIG_DFL);
return accel;
}
canjump = 1;
/* pdist %f0, %f0, %f0 */
__asm__ __volatile__(".word\t0x81b007c0");
canjump = 0;
accel |= ACCEL_SPARC_VIS; accel |= ACCEL_SPARC_VIS;
if (sigsetjmp (jmpbuf, 1)) {
signal (SIGILL, SIG_DFL);
return accel;
}
canjump = 1;
/* edge8n %g0, %g0, %g0 */
__asm__ __volatile__(".word\t0x81b00020");
canjump = 0;
accel |= ACCEL_SPARC_VIS2; accel |= ACCEL_SPARC_VIS2;
signal (SIGILL, SIG_DFL);
return accel; return accel;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment