mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-16 23:38:40 +00:00
emit the register table as a massive string to avoid relocations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81741 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
44da5fbf97
commit
f6761be50d
@ -767,6 +767,7 @@ void AsmWriterEmitter::EmitGetRegisterName(raw_ostream &O) {
|
|||||||
std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
|
std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName");
|
||||||
const std::vector<CodeGenRegister> &Registers = Target.getRegisters();
|
const std::vector<CodeGenRegister> &Registers = Target.getRegisters();
|
||||||
|
|
||||||
|
StringToOffsetTable StringTable;
|
||||||
O <<
|
O <<
|
||||||
"\n\n/// getRegisterName - This method is automatically generated by tblgen\n"
|
"\n\n/// getRegisterName - This method is automatically generated by tblgen\n"
|
||||||
"/// from the register set description. This returns the assembler name\n"
|
"/// from the register set description. This returns the assembler name\n"
|
||||||
@ -776,19 +777,29 @@ void AsmWriterEmitter::EmitGetRegisterName(raw_ostream &O) {
|
|||||||
<< " assert(RegNo && RegNo < " << (Registers.size()+1)
|
<< " assert(RegNo && RegNo < " << (Registers.size()+1)
|
||||||
<< " && \"Invalid register number!\");\n"
|
<< " && \"Invalid register number!\");\n"
|
||||||
<< "\n"
|
<< "\n"
|
||||||
<< " static const char *const RegAsmNames[] = {\n";
|
<< " static const unsigned RegAsmOffset[] = {\n ";
|
||||||
for (unsigned i = 0, e = Registers.size(); i != e; ++i) {
|
for (unsigned i = 0, e = Registers.size(); i != e; ++i) {
|
||||||
const CodeGenRegister &Reg = Registers[i];
|
const CodeGenRegister &Reg = Registers[i];
|
||||||
|
|
||||||
std::string AsmName = Reg.TheDef->getValueAsString("AsmName");
|
std::string AsmName = Reg.TheDef->getValueAsString("AsmName");
|
||||||
if (AsmName.empty())
|
if (AsmName.empty())
|
||||||
AsmName = Reg.getName();
|
AsmName = Reg.getName();
|
||||||
O << " \"" << AsmName << "\",\n";
|
|
||||||
|
|
||||||
|
if ((i % 16) == 0)
|
||||||
|
O << "\n ";
|
||||||
|
|
||||||
|
O << StringTable.GetOrAddStringOffset(AsmName) << ", ";
|
||||||
}
|
}
|
||||||
O << " 0\n"
|
O << "0\n"
|
||||||
<< " };\n"
|
<< " };\n"
|
||||||
<< "\n"
|
<< "\n";
|
||||||
<< " return RegAsmNames[RegNo-1];\n"
|
|
||||||
|
O << " const char *AsmStrs =\n";
|
||||||
|
StringTable.EmitString(O);
|
||||||
|
O << ";\n";
|
||||||
|
|
||||||
|
O << " return AsmStrs+RegAsmOffset[RegNo-1];\n"
|
||||||
<< "}\n";
|
<< "}\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user