X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=urcu%2Farch_x86.h;fp=urcu%2Farch_x86.h;h=64cc026f9cd46343cb977dc7b076bf9a7d70a317;hp=c4674de0d35adfbe3eaa19560ba3a4750583fecb;hb=dac93f5961f305a3bd08cd82f649a7a4dcf6e3eb;hpb=e4d1eb09301904b56cdf22e1d6042df4492d57cb diff --git a/urcu/arch_x86.h b/urcu/arch_x86.h index c4674de..64cc026 100644 --- a/urcu/arch_x86.h +++ b/urcu/arch_x86.h @@ -49,9 +49,13 @@ extern "C" { /* * Serialize core instruction execution. Also acts as a compiler barrier. - * Cannot use cpuid on PIC because it clobbers the ebx register; - * error: PIC register 'ebx' clobbered in 'asm' + * On PIC ebx cannot be clobbered */ +#ifdef __PIC__ +#define sync_core() \ + asm volatile("push %%ebx; cpuid; pop %%ebx" \ + : : : "memory", "eax", "ecx", "edx"); +#endif #ifndef __PIC__ #define sync_core() \ asm volatile("cpuid" : : : "memory", "eax", "ebx", "ecx", "edx");