diff options
author | Chris Lattner <sabre@nondot.org> | 2009-07-15 02:56:53 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-07-15 02:56:53 +0000 |
commit | 392db3e11d93990e5c8382776b91d73ef40db005 (patch) | |
tree | c7829bed835546593cb62389f57bc45a73effe64 | |
parent | 1a87c05ec011eaccb950e5f0160e2162e5747553 (diff) | |
download | external_llvm-392db3e11d93990e5c8382776b91d73ef40db005.zip external_llvm-392db3e11d93990e5c8382776b91d73ef40db005.tar.gz external_llvm-392db3e11d93990e5c8382776b91d73ef40db005.tar.bz2 |
get the PPC stub temporary label from the mangler instead of
using horrible string hacking. This gives us a different label,
but it's just an assembler temporary, so the name doesn't matter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75733 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp | 34 | ||||
-rw-r--r-- | test/CodeGen/PowerPC/available-externally.ll | 8 |
2 files changed, 9 insertions, 33 deletions
diff --git a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp index 09c58a2..7489e49 100644 --- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp @@ -989,41 +989,17 @@ bool PPCDarwinAsmPrinter::doFinalization(Module &M) { I != E; ++I) { EmitAlignment(4); const FnStubInfo &Info = I->second; - const char *p = I->getKeyData(); - - bool hasQuote = p[0]=='\"'; O << Info.Stub << ":\n"; O << "\t.indirect_symbol " << I->getKeyData() << '\n'; O << "\tmflr r0\n"; - O << "\tbcl 20,31,"; - if (hasQuote) - O << "\"L0$" << &p[1]; - else - O << "L0$" << p; - O << '\n'; - if (hasQuote) - O << "\"L0$" << &p[1]; - else - O << "L0$" << p; - O << ":\n"; + O << "\tbcl 20,31," << Info.AnonSymbol << '\n'; + O << Info.AnonSymbol << ":\n"; O << "\tmflr r11\n"; - O << "\taddis r11,r11,ha16(" << Info.LazyPtr << "-"; - if (hasQuote) - O << "\"L0$" << &p[1]; - else - O << "L0$" << p; + O << "\taddis r11,r11,ha16(" << Info.LazyPtr << "-" << Info.AnonSymbol; O << ")\n"; O << "\tmtlr r0\n"; - if (isPPC64) - O << "\tldu r12,lo16("; - else - O << "\tlwzu r12,lo16("; - O << Info.LazyPtr << "-"; - if (hasQuote) - O << "\"L0$" << &p[1]; - else - O << "L0$" << p; - O << ")(r11)\n"; + O << (isPPC64 ? "\tldu" : "\tlwzu") << " r12,lo16("; + O << Info.LazyPtr << "-" << Info.AnonSymbol << ")(r11)\n"; O << "\tmtctr r12\n"; O << "\tbctr\n"; SwitchToDataSection(".lazy_symbol_pointer"); diff --git a/test/CodeGen/PowerPC/available-externally.ll b/test/CodeGen/PowerPC/available-externally.ll index 111a15f..e78d6a0 100644 --- a/test/CodeGen/PowerPC/available-externally.ll +++ b/test/CodeGen/PowerPC/available-externally.ll @@ -34,13 +34,13 @@ entry: ; PIC: L_exact_log2$stub: ; PIC: .indirect_symbol _exact_log2 ; PIC: mflr r0 -; PIC: bcl 20,31,L0$_exact_log2 +; PIC: bcl 20,31,L_exact_log2$stub$tmp -; PIC: L0$_exact_log2: +; PIC: L_exact_log2$stub$tmp: ; PIC: mflr r11 -; PIC: addis r11,r11,ha16(L_exact_log2$lazy_ptr-L0$_exact_log2) +; PIC: addis r11,r11,ha16(L_exact_log2$lazy_ptr-L_exact_log2$stub$tmp) ; PIC: mtlr r0 -; PIC: lwzu r12,lo16(L_exact_log2$lazy_ptr-L0$_exact_log2)(r11) +; PIC: lwzu r12,lo16(L_exact_log2$lazy_ptr-L_exact_log2$stub$tmp)(r11) ; PIC: mtctr r12 ; PIC: bctr |