#include #include static sigjmp_buf jmpbuf; static volatile sig_atomic_t canjump = 0; void sigill_handler(int sig) { if (!canjump) { signal(sig, SIG_DFL); raise(sig); } canjump = 0; siglongjmp(jmpbuf, 1); } int arch_accel() { signal(SIGILL, sigill_handler); if (sigsetjmp(jmpbuf, 1)) { signal(SIGILL, SIG_DFL); return 0; } canjump = 1; asm volatile ( "mtspr 256, %0 \n\t" "vand %%v0, %%v0, %%v0 \n\t" : : "r" (-1) ); signal(SIGILL, SIG_DFL); return 1; } int main(int argc, char** argv) { return arch_accel(); }