mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
[PowerPC] Ensure that the TOC reload directly follows bctrl on PPC64
On non-Darwin PPC64, the TOC reload needs to come directly after the bctrl instruction (for indirect calls) because the 'bctrl/ld 2, 40(1)' instruction sequence is interpreted by the unwinding code in libgcc. To make sure these occur as a pair, as with other pairings interpreted by the linker, fuse the two instructions into one instruction (for code generation only). In the future, we might wish to do this by emitting CFI directives instead, but this solution is simpler, and mirrors what GCC does. Additional discussion on this point is contained in the PR. Fixes PR22015. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224788 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -167,6 +167,17 @@ let isCall = 1, PPC970_Unit = 7, Defs = [LR8] in {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let isCall = 1, PPC970_Unit = 7, isCodeGenOnly = 1,
|
||||
Defs = [LR8, X2], Uses = [CTR8, RM], RST = 2 in {
|
||||
def BCTRL8_LDinto_toc :
|
||||
XLForm_2_ext_and_DSForm_1<19, 528, 20, 0, 1, 58, 0, (outs),
|
||||
(ins memrix:$src),
|
||||
"bctrl\n\tld 2, $src", IIC_BrB,
|
||||
[(PPCbctrl_load_toc ixaddr:$src)]>,
|
||||
Requires<[In64BitMode]>;
|
||||
}
|
||||
|
||||
} // Interpretation64Bit
|
||||
|
||||
// FIXME: Duplicating this for the asm parser should be unnecessary, but the
|
||||
|
||||
Reference in New Issue
Block a user