mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Resubmit the changes to llvm core to update the functions to support different pointer sizes on a per address space basis.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165941 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -385,7 +385,8 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
|
||||
// - __tlv_bootstrap - used to make sure support exists
|
||||
// - spare pointer, used when mapped by the runtime
|
||||
// - pointer to mangled symbol above with initializer
|
||||
unsigned PtrSize = TD->getPointerSizeInBits()/8;
|
||||
unsigned AS = GV->getType()->getAddressSpace();
|
||||
unsigned PtrSize = TD->getPointerSizeInBits(AS)/8;
|
||||
OutStreamer.EmitSymbolValue(GetExternalSymbolSymbol("_tlv_bootstrap"),
|
||||
PtrSize, 0);
|
||||
OutStreamer.EmitIntValue(0, PtrSize, 0);
|
||||
@@ -1299,7 +1300,7 @@ void AsmPrinter::EmitXXStructorList(const Constant *List, bool isCtor) {
|
||||
|
||||
// Emit the function pointers in the target-specific order
|
||||
const DataLayout *TD = TM.getDataLayout();
|
||||
unsigned Align = Log2_32(TD->getPointerPrefAlignment());
|
||||
unsigned Align = Log2_32(TD->getPointerPrefAlignment(0));
|
||||
std::stable_sort(Structors.begin(), Structors.end(), priority_order);
|
||||
for (unsigned i = 0, e = Structors.size(); i != e; ++i) {
|
||||
const MCSection *OutputSection =
|
||||
@@ -1480,8 +1481,9 @@ static const MCExpr *lowerConstant(const Constant *CV, AsmPrinter &AP) {
|
||||
if (Offset == 0)
|
||||
return Base;
|
||||
|
||||
unsigned AS = cast<PointerType>(CE->getType())->getAddressSpace();
|
||||
// Truncate/sext the offset to the pointer size.
|
||||
unsigned Width = TD.getPointerSizeInBits();
|
||||
unsigned Width = TD.getPointerSizeInBits(AS);
|
||||
if (Width < 64)
|
||||
Offset = SignExtend64(Offset, Width);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user