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
This commit is contained in:
Chris Lattner 2009-07-15 02:56:53 +00:00
parent 1a87c05ec0
commit 392db3e11d
2 changed files with 9 additions and 33 deletions

View File

@ -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");

View File

@ -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