forked from OSchip/llvm-project
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. llvm-svn: 75733
This commit is contained in:
parent
d68df2a481
commit
7d1f9542c2
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue