|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 04/17] x86emul: support {, V}{, U}COMIS{S, D}
On 01/03/17 14:26, Jan Beulich wrote:
>>> + opc = init_prefixes(stub);
>>> + opc[0] = b;
>>> + opc[1] = modrm;
>>> + if ( ea.type == OP_MEM )
>>> + {
>>> + rc = ops->read(ea.mem.seg, ea.mem.off, mmvalp, vex.pfx ? 8 : 4,
>>> + ctxt);
>>> + if ( rc != X86EMUL_OKAY )
>>> + goto done;
>>> +
>>> + /* Convert memory operand to (%rAX). */
>>> + rex_prefix &= ~REX_B;
>>> + vex.b = 1;
>>> + opc[1] &= 0x38;
>>> + }
>>> + fic.insn_bytes = PFX_BYTES + 2;
>>> + opc[2] = 0xc3;
>>> +
>>> + copy_REX_VEX(opc, rex_prefix, vex);
>>> + invoke_stub(_PRE_EFLAGS("[eflags]", "[mask]", "[tmp]"),
>>> + _POST_EFLAGS("[eflags]", "[mask]", "[tmp]"),
>>> + [eflags] "+g" (_regs._eflags),
>>> + [tmp] "=&r" (cr4 /* dummy */), "+m" (*mmvalp),
>> This is latently dangerous. It would be better to have an explicit
>> "unsigned long dummy;", which the compiler will perfectly easily elide
>> during register scheduling.
> The thing I want to avoid as much as possible are these ugly,
> improperly indented extra scopes following case labels. If
> putting a dummy variable into the whole switch() scope is okay
> with you, I could live with that. But then again I don't see the
> danger here - there's no imaginable use for cr4 in this piece of
> code.
Whole switch() scope is fine. I see you have similar dummy examples in
later patches as well.
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |