Commit 1edead0f authored by Roman Bolshakov's avatar Roman Bolshakov Committed by Paolo Bonzini
Browse files

i386: hvf: Don't miss 16-bit displacement



In 16-bit addressing mode, when Mod = 0 and R/M = 6, decoded displacement
doesn't reach decode_linear_addr and gets lost. Instructions that
involve the combination of ModRM always get a pointer with zero offset
from the beginning of DS segment.

The change fixes drawing in F-BIRD from day 1 of '18 advent calendar.

Signed-off-by: default avatarRoman Bolshakov <r.bolshakov@yadro.com>
Message-Id: <20190125154743.14498-1-r.bolshakov@yadro.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent dce5874f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1642,7 +1642,7 @@ void calc_modrm_operand16(CPUX86State *env, struct x86_decode *decode,
    X86Seg seg = R_DS;

    if (!decode->modrm.mod && 6 == decode->modrm.rm) {
        op->ptr = (uint16_t)decode->displacement;
        ptr = decode->displacement;
        goto calc_addr;
    }