[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86emul: avoid using _PRE_EFLAGS() in a few cases
commit f004fd7cbbba9f3d58b399d5becfe4e8c5230fb6 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Jun 29 12:33:37 2021 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Jun 29 12:33:37 2021 +0200 x86emul: avoid using _PRE_EFLAGS() in a few cases The macro expanding to quite a few insns, replace its use by simply clearing the status flags when the to be executed insn doesn't depend on their initial state, in cases where this is easily possible. (There are more cases where the uses are hidden inside macros, and where some of the users of the macros want guest flags put in place before running the insn, i.e. the macros can't be updated as easily.) Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/x86_emulate/x86_emulate.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c index 45828b726b..c9a9e031cf 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -6864,7 +6864,8 @@ x86_emulate( } opc[2] = 0xc3; - invoke_stub(_PRE_EFLAGS("[eflags]", "[mask]", "[tmp]"), + _regs.eflags &= ~EFLAGS_MASK; + invoke_stub("", _POST_EFLAGS("[eflags]", "[mask]", "[tmp]"), [eflags] "+g" (_regs.eflags), [tmp] "=&r" (dummy), "+m" (*mmvalp) @@ -8112,7 +8113,8 @@ x86_emulate( opc[2] = 0xc3; copy_VEX(opc, vex); - invoke_stub(_PRE_EFLAGS("[eflags]", "[mask]", "[tmp]"), + _regs.eflags &= ~EFLAGS_MASK; + invoke_stub("", _POST_EFLAGS("[eflags]", "[mask]", "[tmp]"), [eflags] "+g" (_regs.eflags), "=a" (dst.val), [tmp] "=&r" (dummy) @@ -11699,13 +11701,14 @@ int x86_emul_rmw( break; case rmw_xadd: + *eflags &= ~EFLAGS_MASK; switch ( state->op_bytes ) { unsigned long dummy; #define XADD(sz, cst, mod) \ case sz: \ - asm ( _PRE_EFLAGS("[efl]", "[msk]", "[tmp]") \ + asm ( "" \ COND_LOCK(xadd) " %"#mod"[reg], %[mem]; " \ _POST_EFLAGS("[efl]", "[msk]", "[tmp]") \ : [reg] "+" #cst (state->ea.val), \ -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |