[X86]: Correctly sign-extend 16-bit immediate in CALL instruction.
[oota-llvm.git] / lib / Target / X86 / Disassembler / X86Disassembler.cpp
index 6e99c37c2bc7df95d47fb83e5ecbf33175b6d0f5..cfc3ee2fb08fe67d95b0e1e167424589892af441 100644 (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;