1 --- fio-1.41.6/crc/crc32c-intel.c 2010-07-09 13:48:14.000000000 +0200
2 +++ fio-1.41.4/crc/crc32c-intel.c 2010-06-24 10:39:02.000000000 +0200
7 -static void do_cpuid(unsigned int *eax, unsigned int *ebx, unsigned int *ecx,
9 +static void sig_ill(int sig)
13 - asm("movl %4, %%eax;"
19 - : "=r" (*eax), "=r" (*ebx), "=r" (*ecx), "=r" (*edx)
21 - : "eax", "ebx", "ecx", "edx");
24 -int crc32c_intel_works(void)
25 +static void crc32c_test(void)
27 - unsigned int eax, ebx, ecx, edx;
28 + unsigned char buf[4] = { 1, 2, 3, 4 };
29 + struct sigaction act;
32 + * Check if hw accelerated crc32c is available
34 + memset(&act, 0, sizeof(act));
35 + act.sa_handler = sig_ill;
36 + act.sa_flags = SA_RESETHAND;
37 + sigaction(SIGILL, &act, NULL);
40 + (void) crc32c_intel(buf, sizeof(buf));
43 - do_cpuid(&eax, &ebx, &ecx, &edx);
44 - return (ecx & (1 << 20)) != 0;
45 +int crc32c_intel_works(void)
54 + return !WIFSIGNALED(status);
58 #endif /* ARCH_HAVE_SSE */