mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-06 20:32:19 +00:00
When rewriting the original call instruction, make sure to rewrite it to
call the right address. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18213 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fb887e010d
commit
892afa9556
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user