[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32JITInfo.cpp

Chris Lattner lattner at cs.uiuc.edu
Wed Nov 24 10:00:16 PST 2004



Changes in directory llvm/lib/Target/PowerPC:

PPC32JITInfo.cpp updated: 1.7 -> 1.8
---
Log message:

When rewriting the original call instruction, make sure to rewrite it to
call the right address.


---
Diffs of the changes:  (+5 -4)

Index: llvm/lib/Target/PowerPC/PPC32JITInfo.cpp
diff -u llvm/lib/Target/PowerPC/PPC32JITInfo.cpp:1.7 llvm/lib/Target/PowerPC/PPC32JITInfo.cpp:1.8
--- llvm/lib/Target/PowerPC/PPC32JITInfo.cpp:1.7	Wed Nov 24 11:42:55 2004
+++ llvm/lib/Target/PowerPC/PPC32JITInfo.cpp	Wed Nov 24 12:00:02 2004
@@ -81,12 +81,13 @@
   // does not need to go through the stub anymore.
   unsigned CameFromOrigInst = CameFromOrig[-1];
   if ((CameFromOrigInst >> 26) == 18) {     // Direct call.
-    intptr_t Offset = ((intptr_t)Target-(intptr_t)CameFromOrig) >> 2;
+    intptr_t Offset = ((intptr_t)Target-(intptr_t)CameFromOrig+4) >> 2;
     if (Offset >= -(1 << 23) && Offset < (1 << 23)) {   // In range?
-      // FIXME: hasn't been tested at all.
-      // Clear the original target out:
+      // Clear the original target out.
       CameFromOrigInst &= (63 << 26) | 3;
-      CameFromOrigInst |= Offset << 2;
+      // Fill in the new target.
+      CameFromOrigInst |= (Offset & ((1 << 24)-1)) << 2;
+      // Replace the call.
       CameFromOrig[-1] = CameFromOrigInst;
     }
   }






More information about the llvm-commits mailing list