mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
Define SPARC code models.
Currently, only abs32 and pic32 are implemented. Add a test case for abs32 with 64-bit code. 64-bit PIC code is currently broken. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179463 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -50,14 +50,42 @@ static MCSubtargetInfo *createSparcMCSubtargetInfo(StringRef TT, StringRef CPU,
|
||||
return X;
|
||||
}
|
||||
|
||||
// Code models. Some only make sense for 64-bit code.
|
||||
//
|
||||
// SunCC Reloc CodeModel Constraints
|
||||
// abs32 Static Small text+data+bss linked below 2^32 bytes
|
||||
// abs44 Static Medium text+data+bss linked below 2^44 bytes
|
||||
// abs64 Static Large text smaller than 2^31 bytes
|
||||
// pic13 PIC_ Small GOT < 2^13 bytes
|
||||
// pic32 PIC_ Medium GOT < 2^32 bytes
|
||||
//
|
||||
// All code models require that the text segment is smaller than 2GB.
|
||||
|
||||
static MCCodeGenInfo *createSparcMCCodeGenInfo(StringRef TT, Reloc::Model RM,
|
||||
CodeModel::Model CM,
|
||||
CodeGenOpt::Level OL) {
|
||||
MCCodeGenInfo *X = new MCCodeGenInfo();
|
||||
|
||||
// The default 32-bit code model is abs32/pic32.
|
||||
if (CM == CodeModel::Default)
|
||||
CM = RM == Reloc::PIC_ ? CodeModel::Medium : CodeModel::Small;
|
||||
|
||||
X->InitMCCodeGenInfo(RM, CM, OL);
|
||||
return X;
|
||||
}
|
||||
|
||||
static MCCodeGenInfo *createSparcV9MCCodeGenInfo(StringRef TT, Reloc::Model RM,
|
||||
CodeModel::Model CM,
|
||||
CodeGenOpt::Level OL) {
|
||||
MCCodeGenInfo *X = new MCCodeGenInfo();
|
||||
|
||||
// The default 64-bit code model is abs44/pic32.
|
||||
if (CM == CodeModel::Default)
|
||||
CM = CodeModel::Medium;
|
||||
|
||||
X->InitMCCodeGenInfo(RM, CM, OL);
|
||||
return X;
|
||||
}
|
||||
extern "C" void LLVMInitializeSparcTargetMC() {
|
||||
// Register the MC asm info.
|
||||
RegisterMCAsmInfo<SparcELFMCAsmInfo> X(TheSparcTarget);
|
||||
@@ -67,7 +95,7 @@ extern "C" void LLVMInitializeSparcTargetMC() {
|
||||
TargetRegistry::RegisterMCCodeGenInfo(TheSparcTarget,
|
||||
createSparcMCCodeGenInfo);
|
||||
TargetRegistry::RegisterMCCodeGenInfo(TheSparcV9Target,
|
||||
createSparcMCCodeGenInfo);
|
||||
createSparcV9MCCodeGenInfo);
|
||||
|
||||
// Register the MC instruction info.
|
||||
TargetRegistry::RegisterMCInstrInfo(TheSparcTarget, createSparcMCInstrInfo);
|
||||
|
||||
Reference in New Issue
Block a user