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 _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"