[X86]: Correctly sign-extend 16-bit immediate in CALL instruction.

Patch by Matthew Barney. Thanks!

Differential Revision: http://reviews.llvm.org/D9514

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240795 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Katzman
2015-06-26 16:58:59 +00:00
parent 064274d169
commit cd39f3c6cb
4 changed files with 18 additions and 1 deletions

View File

@@ -551,9 +551,15 @@ static void translateImmediate(MCInst &mcInst, uint64_t immediate,
case TYPE_REL8:
isBranch = true;
pcrel = insn.startLocation + insn.immediateOffset + insn.immediateSize;
if(immediate & 0x80)
if (immediate & 0x80)
immediate |= ~(0xffull);
break;
case TYPE_REL16:
isBranch = true;
pcrel = insn.startLocation + insn.immediateOffset + insn.immediateSize;
if (immediate & 0x8000)
immediate |= ~(0xffffull);
break;
case TYPE_REL32:
case TYPE_REL64:
isBranch = true;