|
@@ -1220,12 +1220,14 @@ static void fetch_bit_operand(struct x86_emulate_ctxt *ctxt)
|
|
|
long sv = 0, mask;
|
|
|
|
|
|
if (ctxt->dst.type == OP_MEM && ctxt->src.type == OP_REG) {
|
|
|
- mask = ~(ctxt->dst.bytes * 8 - 1);
|
|
|
+ mask = ~((long)ctxt->dst.bytes * 8 - 1);
|
|
|
|
|
|
if (ctxt->src.bytes == 2)
|
|
|
sv = (s16)ctxt->src.val & (s16)mask;
|
|
|
else if (ctxt->src.bytes == 4)
|
|
|
sv = (s32)ctxt->src.val & (s32)mask;
|
|
|
+ else
|
|
|
+ sv = (s64)ctxt->src.val & (s64)mask;
|
|
|
|
|
|
ctxt->dst.addr.mem.ea += (sv >> 3);
|
|
|
}
|