svn commit: r344118 - head/sys/i386/include
Alexey Dokuchaev
danfe at freebsd.org
Fri Feb 15 07:16:05 UTC 2019
On Thu, Feb 14, 2019 at 01:53:11PM +0000, Konstantin Belousov wrote:
> New Revision: 344118
> URL: https://svnweb.freebsd.org/changeset/base/344118
>
> Log:
> Provide userspace versions of do_cpuid() and cpuid_count() on i386.
>
> Some older compilers, when generating PIC code, cannot handle inline
> asm that clobbers %ebx (because %ebx is used as the GOT offset
> register). Userspace versions avoid clobbering %ebx by saving it to
> stack before executing the CPUID instruction.
>
> ...
> +static __inline void
> +do_cpuid(u_int ax, u_int *p)
> +{
> + __asm __volatile(
> + "pushl\t%%ebx\n\t"
> + "cpuid\n\t"
> + "movl\t%%ebx,%1\n\t"
> + "popl\t%%ebx"
Is there a reason to prefer pushl+movl+popl instead of movl+xchgl?
"movl %%ebx, %1\n\t"
"cpuid\n\t"
"xchgl %%ebx, %1"
./danfe
More information about the svn-src-all
mailing list