Encode pc-relative conditional branch offset as pc+(num of bytes / 4). The
authorEvan Cheng <evan.cheng@apple.com>
Fri, 25 Aug 2006 21:54:44 +0000 (21:54 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 25 Aug 2006 21:54:44 +0000 (21:54 +0000)
asm printer will print it as offset*4. e.g. bne cr0, $+8.

The PPC code emitter was expecting the offset to be number of instructions, not
number of bytes. This fixes a whole bunch of JIT failures.

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

lib/Target/PowerPC/PPCAsmPrinter.cpp
lib/Target/PowerPC/PPCBranchSelector.cpp

index 5850682005278e5dad4db5caaef6cb67056d56b7..3939d6c357a40bab78068b5f6b1e211c0f5fd330 100644 (file)
@@ -131,7 +131,7 @@ namespace {
       // Branches can take an immediate operand.  This is used by the branch
       // selection pass to print $+8, an eight byte displacement from the PC.
       if (MI->getOperand(OpNo).isImmediate()) {
-        O << "$+" << MI->getOperand(OpNo).getImmedValue();
+        O << "$+" << MI->getOperand(OpNo).getImmedValue()*4;
       } else {
         printOp(MI->getOperand(OpNo));
       }
index b3d100cf5e59cd11364aeb5b7d51d8b06916a4d1..78932a9a766e510d0f3e80fc2626bb8a35b1abcd 100644 (file)
@@ -133,7 +133,7 @@ bool PPCBSel::runOnMachineFunction(MachineFunction &Fn) {
         if (Displacement >= -32768 && Displacement <= 32767) {
           BuildMI(*MBB, MBBJ, Opcode, 2).addReg(CRReg).addMBB(trueMBB);
         } else {
-          BuildMI(*MBB, MBBJ, Inverted, 2).addReg(CRReg).addImm(8);
+          BuildMI(*MBB, MBBJ, Inverted, 2).addReg(CRReg).addImm(2);
           BuildMI(*MBB, MBBJ, PPC::B, 1).addMBB(trueMBB);
         }