[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 3/4] VMX: use proper instruction mnemonics if assembler supports them
On 26/08/2013 15:03, Jan Beulich wrote: > -static inline unsigned long __vmread_safe(unsigned long field, int *error) > +static inline bool_t __vmread_safe(unsigned long field, unsigned long *value) > { > - unsigned long ecx; > + bool_t okay; > > - asm volatile ( VMREAD_OPCODE > - MODRM_EAX_ECX > - /* CF==1 or ZF==1 --> rc = -1 */ > - "setna %b0 ; neg %0" > - : "=q" (*error), "=c" (ecx) > - : "0" (0), "a" (field) > + asm volatile ( > +#ifdef HAVE_GAS_VMX > + "vmread %2, %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 From what I can work out while googling, the q constraint is equivalent to the r constraint for 64bit code. For consistency sake, I would suggest "=rm" (okay) here > : "memory"); > > - return ecx; > + return okay; > } > > static inline void __invept(int type, u64 eptp, u64 gpa) > @@ -365,14 +398,22 @@ static inline void __invept(int type, u6 > !cpu_has_vmx_ept_invept_single_context ) > type = INVEPT_ALL_CONTEXT; > > - asm volatile ( INVEPT_OPCODE > - MODRM_EAX_08 > + asm volatile ( > +#ifdef HAVE_GAS_EPT > + "invept %0, %q1\n" Another stray q > +#else > + INVEPT_OPCODE MODRM_EAX_08 > +#endif > /* CF==1 or ZF==1 --> crash (ud2) */ > UNLIKELY_START(be, invept) > "\tud2\n" > UNLIKELY_END_SECTION > : > +#ifdef HAVE_GAS_EPT > + : "m" (operand), "r" (type) > +#else > : "a" (&operand), "c" (type) > +#endif > : "memory" ); > } > > @@ -385,7 +426,12 @@ static inline void __invvpid(int type, u > } __attribute__ ((packed)) operand = {vpid, 0, gva}; > > /* Fix up #UD exceptions which occur when TLBs are flushed before VMXON. > */ > - asm volatile ( "1: " INVVPID_OPCODE MODRM_EAX_08 > + asm volatile ( "1: " > +#ifdef HAVE_GAS_EPT > + "invvpid %0, %q1\n" And another ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |