From d6b5ce4515b52f81fd7bdb2e4c8d544c726ced61 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Sun, 15 Jun 2008 21:23:17 -0700 Subject: [PATCH] --- yaml --- r: 103735 b: refs/heads/master c: dc71d0f1620790ec8e54101ca37e7b31e31208a8 h: refs/heads/master i: 103733: b18edfcac42605d0361367d72f8b6a8aa7c3584b 103731: 2f027c72ab6bce46c70b6ef0de4bf19d9e51d5d8 103727: 5647cad8781eb1c5d033bf4d05dbaab16e466270 v: v3 --- [refs] | 2 +- trunk/arch/x86/kvm/x86_emulate.c | 20 ++++---------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index 392ead6d3438..38d8d738ab24 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8684c0af0b2bab770c257e2a04e1546eed35fa56 +refs/heads/master: dc71d0f1620790ec8e54101ca37e7b31e31208a8 diff --git a/trunk/arch/x86/kvm/x86_emulate.c b/trunk/arch/x86/kvm/x86_emulate.c index 3721cfddc973..ca7ab2469a4a 100644 --- a/trunk/arch/x86/kvm/x86_emulate.c +++ b/trunk/arch/x86/kvm/x86_emulate.c @@ -748,24 +748,12 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt, base_reg |= sib & 7; scale = sib >> 6; - switch (base_reg) { - case 5: - case 13: - if (c->modrm_mod != 0) - c->modrm_ea += c->regs[base_reg]; - else - c->modrm_ea += - insn_fetch(s32, 4, c->eip); - break; - default: + if ((base_reg & 7) == 5 && c->modrm_mod == 0) + c->modrm_ea += insn_fetch(s32, 4, c->eip); + else c->modrm_ea += c->regs[base_reg]; - } - switch (index_reg) { - case 4: - break; - default: + if (index_reg != 4) c->modrm_ea += c->regs[index_reg] << scale; - } break; case 5: case 13: