|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 3/4] VMX: use proper instruction mnemonics if assembler supports them
>>> On 26.08.13 at 15:05, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote:
> On 26/08/2013 11:18, Jan Beulich wrote:
>> static inline void __vmpclear(u64 addr)
>> {
>> - asm volatile ( VMCLEAR_OPCODE
>> - MODRM_EAX_06
>> + asm volatile (
>> +#ifdef HAVE_GAS_VMX
>> + "vmclear %0\n"
>> +#else
>> + VMCLEAR_OPCODE MODRM_EAX_06
>> +#endif
>> /* CF==1 or ZF==1 --> crash (ud2) */
>> UNLIKELY_START(be, vmclear)
>> "\tud2\n"
>> UNLIKELY_END_SECTION
>> +#ifdef HAVE_GAS_VMX
>> + : "+m" (addr)
>
> Why is this "+m" ? (and specifically different to some of its counterparts)
Apparently I misread "The operand of this instruction is always 64 bits
and is always in memory. If the operand is the current-VMCS
pointer, then that pointer is made invalid (set to
FFFFFFFF_FFFFFFFFH)" to mean that the operand gets overwritten
rather than the CPU-internal pointer.
>> + asm volatile (
>> +#ifdef HAVE_GAS_VMX
>> + "vmread %q2, %1\n\t"
>> +#else
>> + VMREAD_OPCODE MODRM_EAX_ECX
>> +#endif
>> + /* CF==1 or ZF==1 --> rc = 0 */
>> + "setnbe %0"
>> +#ifdef HAVE_GAS_VMX
>> + : "=qm" (okay), "=rm" (*value)
>> + : "r" (field)
>> +#else
>> + : "=qm" (okay), "=c" (*value)
>> + : "a" (field)
>> +#endif
>
> Why the %q2 qualifer with "r" (field). Would it not be cleaner as %2
> and "q" (field) ? (And similar lower down)
That q was just a leftover from the macro variant. It's not wrong,
but confusing. I'll remove it.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |