Proper use of x86/x86_64 CPUID instruction with extended assembler

Avi Kivity
Wed Aug 19 09:57:00 GMT 2015

On 08/19/2015 12:56 PM, Jeffrey Walton wrote:
>>>>> (I also looked at
>>>>>, which is a
>>>>> GCC patch for cpuid.h. But its not clear to me if the above is correct
>>>>> because the operands are 32-bit in size. Naively, if I use "a" and "b"
>>>>> with a 32-bit operand, then I would expect code for EAX and EBX; and
>>>>> not RAX and RBX).
>>>> It is correct.
>>> Thanks Avi. Regarding the GCC patch... if the output register and the
>>> ABI tells GCC that EBX needs to be preserved, then why does the patch
>>> take special steps to preserve it?
>> Well I just tried it, and gcc is indeed not clever enough to do this on its
>> own.  So it is needed.
> And one more related question... The Intel folks state to minimize the
> use of the the XCHG instruction because it has lock overhead
> ( Should the GCC
> patch example be using a simple push/pop instead of an XCHG?

reg/reg xchg has no lock overhead.

More information about the Gcc-help mailing list