From 659d72e3192564bc3a424e5ff7579194fc8930cf Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 24 Nov 2004 18:00:02 +0000 Subject: [PATCH] When rewriting the original call instruction, make sure to rewrite it to call the right address. llvm-svn: 18213 --- llvm/lib/Target/PowerPC/PPC32JITInfo.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Target/PowerPC/PPC32JITInfo.cpp b/llvm/lib/Target/PowerPC/PPC32JITInfo.cpp index 299dce771f9c..f7abc53a897d 100644 --- a/llvm/lib/Target/PowerPC/PPC32JITInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPC32JITInfo.cpp @@ -81,12 +81,13 @@ static void CompilationCallback() { // 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; } }