On Thu, Dec 27, 2012 at 10:10 AM, Florian Weimer <f...@deneb.enyo.de> wrote: > * Uros Bizjak: > >> +#elif defined(__x86_64__) >> +#define __cpuid(level, a, b, c, d) \ >> + __asm__ ("xchg{q}\t{%%}rbx, %q1\n\t" \ >> + "cpuid\n\t" \ >> + "xchg{q}\t{%%}rbx, %q1\n\t" \ >> + : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ >> + : "0" (level)) >> + >> +#define __cpuid_count(level, count, a, b, c, d) \ >> + __asm__ ("xchg{q}\t{%%}rbx, %q1\n\t" \ >> + "cpuid\n\t" \ >> + "xchg{q}\t{%%}rbx, %q1\n\t" \ >> + : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ >> + : "0" (level), "2" (count)) >> +#endif > > Shouldn't the constraint for b be "=&r"?
Technically yes, but all input operands are matched to outputs, so in practice it doesn't really matter. Uros.