blob: 02e84b7257725641c619a6bf59c691db33db9e62 [file] [log] [blame]
make the code work on x86/PIC. this code is only used in the demo,
and the overhead of always running this is system noise, so don't
bother bracketing with __i386__/__PIC__ defines.
http://bugs.gentoo.org/456238
--- a/clearcache.c
+++ b/clearcache.c
@@ -57,7 +57,7 @@ void clearcache(unsigned char *mem, unsigned size)
#if defined(__i386__) || defined(__x86_64__)
unsigned i, cl, eax, feat;
/* get clflush unit and feature */
- asm("cpuid" : "=a" (eax), "=b" (cl), "=d" (feat) : "0" (1) : "cx");
+ asm("xchg %%ebx, %%esi; cpuid; xchg %%esi, %%ebx;" : "=a" (eax), "=S" (cl), "=d" (feat) : "0" (1) : "cx");
if (!(feat & (1 << 19)))
fallback_clearcache();
cl = ((cl >> 8) & 0xff) * 8;