print pcrel immediates as signed values instead of unsigned so that we
authorChris Lattner <sabre@nondot.org>
Tue, 22 Dec 2009 00:44:05 +0000 (00:44 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 22 Dec 2009 00:44:05 +0000 (00:44 +0000)
get things like this out of the disassembler:

0x100000ecb: callq -96

instead of:

0x100000ecb: callq 4294967200

rdar://7491123

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91864 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp

index 8ec5b62192e901557fa1fe4a28d7226554d87244..c74b97af308d274bad1a640ec45076a9589d4480 100644 (file)
@@ -45,12 +45,14 @@ void X86ATTInstPrinter::printSSECC(const MCInst *MI, unsigned Op) {
 }
 
 /// print_pcrel_imm - This is used to print an immediate value that ends up
-/// being encoded as a pc-relative value.  These print slightly differently, for
-/// example, a $ is not emitted.
+/// being encoded as a pc-relative value (e.g. for jumps and calls).  These
+/// print slightly differently than normal immediates.  For example, a $ is not
+/// emitted.
 void X86ATTInstPrinter::print_pcrel_imm(const MCInst *MI, unsigned OpNo) {
   const MCOperand &Op = MI->getOperand(OpNo);
   if (Op.isImm())
-    O << Op.getImm();
+    // Print this as a signed 32-bit value.
+    O << (int)Op.getImm();
   else {
     assert(Op.isExpr() && "unknown pcrel immediate operand");
     Op.getExpr()->print(O, &MAI);