From ead4f8053bcd3ba8be342cafb55cbdd691cc64f0 Mon Sep 17 00:00:00 2001 From: Chris Moeller Date: Fri, 16 Jan 2015 20:56:08 -0800 Subject: [PATCH] Fix partially reverted code for cpuid function with -fPIC, which isn't actually used in 64 bit builds anyway --- Frameworks/Dumb/dumb/src/it/itrender.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Frameworks/Dumb/dumb/src/it/itrender.c b/Frameworks/Dumb/dumb/src/it/itrender.c index 1d9a3353f..d5fe0b34f 100644 --- a/Frameworks/Dumb/dumb/src/it/itrender.c +++ b/Frameworks/Dumb/dumb/src/it/itrender.c @@ -753,12 +753,28 @@ static void it_filter_sse(DUMB_CLICK_REMOVER *cr, IT_FILTER_STATE *state, sample static inline void __cpuid(int *data, int selector) { +#if defined(__PIC__) && defined(__i386__) + asm("xchgl %%ebx, %%esi; cpuid; xchgl %%ebx, %%esi" + : "=a" (data[0]), + "=S" (data[1]), + "=c" (data[2]), + "=d" (data[3]) + : "0" (selector)); +#elif defined(__PIC__) && defined(__amd64__) + asm("xchg{q} {%%}rbx, %q1; cpuid; xchg{q} {%%}rbx, %q1" + : "=a" (data[0]), + "=&r" (data[1]), + "=c" (data[2]), + "=d" (data[3]) + : "0" (selector)); +#else asm("cpuid" : "=a" (data[0]), "=b" (data[1]), "=c" (data[2]), "=d" (data[3]) : "a"(selector)); +#endif } #else #define __cpuid(a,b) memset((a), 0, sizeof(int) * 4)