mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-25 17:20:48 +00:00
Make the AsmWriter a first-class tblgen object. Allow targets to specify
name of the generated asmwriter class, and the name of the format string. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15747 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -97,14 +97,27 @@ Record *CodeGenTarget::getInstructionSet() const {
|
||||
return TargetRec->getValueAsDef("InstructionSet");
|
||||
}
|
||||
|
||||
/// getAsmWriter - Return the AssemblyWriter definition for this target.
|
||||
///
|
||||
Record *CodeGenTarget::getAsmWriter() const {
|
||||
return TargetRec->getValueAsDef("AssemblyWriter");
|
||||
}
|
||||
|
||||
|
||||
void CodeGenTarget::ReadInstructions() const {
|
||||
std::vector<Record*> Insts = Records.getAllDerivedDefinitions("Instruction");
|
||||
|
||||
if (Insts.size() == 0)
|
||||
throw std::string("No 'Instruction' subclasses defined!");
|
||||
|
||||
for (unsigned i = 0, e = Insts.size(); i != e; ++i)
|
||||
Instructions.insert(std::make_pair(Insts[i]->getName(), Insts[i]));
|
||||
std::string InstFormatName =
|
||||
getAsmWriter()->getValueAsString("InstFormatName");
|
||||
|
||||
for (unsigned i = 0, e = Insts.size(); i != e; ++i) {
|
||||
std::string AsmStr = Insts[i]->getValueAsString(InstFormatName);
|
||||
Instructions.insert(std::make_pair(Insts[i]->getName(),
|
||||
CodeGenInstruction(Insts[i], AsmStr)));
|
||||
}
|
||||
}
|
||||
|
||||
/// getPHIInstruction - Return the designated PHI instruction.
|
||||
@@ -117,10 +130,10 @@ const CodeGenInstruction &CodeGenTarget::getPHIInstruction() const {
|
||||
return I->second;
|
||||
}
|
||||
|
||||
CodeGenInstruction::CodeGenInstruction(Record *R) : TheDef(R) {
|
||||
CodeGenInstruction::CodeGenInstruction(Record *R, const std::string &AsmStr)
|
||||
: TheDef(R), AsmString(AsmStr) {
|
||||
Name = R->getValueAsString("Name");
|
||||
Namespace = R->getValueAsString("Namespace");
|
||||
AsmString = R->getValueAsString("AsmString");
|
||||
|
||||
isReturn = R->getValueAsBit("isReturn");
|
||||
isBranch = R->getValueAsBit("isBranch");
|
||||
|
Reference in New Issue
Block a user