diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2009-07-29 00:02:19 +0000 | 
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2009-07-29 00:02:19 +0000 | 
| commit | 0033199c5015754e333dfd18a1b77d6f79c8cbe0 (patch) | |
| tree | 6566ef7372337e467ee0e0a0553403bd86253803 /llvm/utils/TableGen | |
| parent | 8ae4e24c674f693b2d39087ce5abc38a01c5472c (diff) | |
| download | bcm5719-llvm-0033199c5015754e333dfd18a1b77d6f79c8cbe0.tar.gz bcm5719-llvm-0033199c5015754e333dfd18a1b77d6f79c8cbe0.zip | |
Match X86 register names to number.
llvm-svn: 77404
Diffstat (limited to 'llvm/utils/TableGen')
| -rw-r--r-- | llvm/utils/TableGen/AsmMatcherEmitter.cpp | 12 | ||||
| -rw-r--r-- | llvm/utils/TableGen/CodeGenTarget.cpp | 13 | ||||
| -rw-r--r-- | llvm/utils/TableGen/CodeGenTarget.h | 4 | 
3 files changed, 21 insertions, 8 deletions
| diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp index 1d4ad0947ae..d00ff202ad0 100644 --- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp +++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp @@ -20,17 +20,17 @@ using namespace llvm;  void AsmMatcherEmitter::run(raw_ostream &OS) {    CodeGenTarget Target;    const std::vector<CodeGenRegister> &Registers = Target.getRegisters(); +  Record *AsmParser = Target.getAsmParser(); +  std::string ClassName = AsmParser->getValueAsString("AsmParserClassName");    std::string Namespace = Registers[0].TheDef->getValueAsString("Namespace");    EmitSourceFileHeader("Assembly Matcher Source Fragment", OS); -  OS << "namespace llvm {\n\n";    // Emit the function to match a register name to number. -  if (!Namespace.empty()) -    OS << "namespace " << Namespace << " {\n"; -  OS << "bool MatchRegisterName(const std::string &Name, unsigned &RegNo) {\n"; +  OS << "bool " << Target.getName() << ClassName +     << "::MatchRegisterName(const StringRef &Name, unsigned &RegNo) {\n";    // FIXME: TableGen should have a fast string matcher generator.    for (unsigned i = 0, e = Registers.size(); i != e; ++i) { @@ -44,8 +44,4 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {    }    OS << "  return true;\n";    OS << "}\n"; - -  if (!Namespace.empty()) -    OS << "}\n"; -  OS << "} // End llvm namespace \n";  } diff --git a/llvm/utils/TableGen/CodeGenTarget.cpp b/llvm/utils/TableGen/CodeGenTarget.cpp index ed703be944a..0849d4f832f 100644 --- a/llvm/utils/TableGen/CodeGenTarget.cpp +++ b/llvm/utils/TableGen/CodeGenTarget.cpp @@ -23,6 +23,10 @@  using namespace llvm;  static cl::opt<unsigned> +AsmParserNum("asmparsernum", cl::init(0), +             cl::desc("Make -gen-asm-parser emit assembly parser #N")); + +static cl::opt<unsigned>  AsmWriterNum("asmwriternum", cl::init(0),               cl::desc("Make -gen-asm-writer emit assembly writer #N")); @@ -133,6 +137,15 @@ Record *CodeGenTarget::getInstructionSet() const {    return TargetRec->getValueAsDef("InstructionSet");  } +/// getAsmParser - Return the AssemblyParser definition for this target. +/// +Record *CodeGenTarget::getAsmParser() const { +  std::vector<Record*> LI = TargetRec->getValueAsListOfDefs("AssemblyParsers"); +  if (AsmParserNum >= LI.size()) +    throw "Target does not have an AsmParser #" + utostr(AsmParserNum) + "!"; +  return LI[AsmParserNum]; +} +  /// getAsmWriter - Return the AssemblyWriter definition for this target.  ///  Record *CodeGenTarget::getAsmWriter() const { diff --git a/llvm/utils/TableGen/CodeGenTarget.h b/llvm/utils/TableGen/CodeGenTarget.h index 0ec99558146..e763795ce0b 100644 --- a/llvm/utils/TableGen/CodeGenTarget.h +++ b/llvm/utils/TableGen/CodeGenTarget.h @@ -87,6 +87,10 @@ public:    ///    Record *getInstructionSet() const; +  /// getAsmParser - Return the AssemblyParser definition for this target. +  /// +  Record *getAsmParser() const; +    /// getAsmWriter - Return the AssemblyWriter definition for this target.    ///    Record *getAsmWriter() const; | 

