diff options
author | Jim Grosbach <grosbach@apple.com> | 2010-10-12 22:21:57 +0000 |
---|---|---|
committer | Jim Grosbach <grosbach@apple.com> | 2010-10-12 22:21:57 +0000 |
commit | 5013f7469ec44adba127de65517e699180ee532f (patch) | |
tree | ddf704f7ba1a25a5b3c1b7bdad0f34dced014f9a /utils/TableGen/CodeGenInstruction.cpp | |
parent | 174777bb2b0a1896afb5dc5ff96a91d162d00149 (diff) | |
download | llvm-5013f7469ec44adba127de65517e699180ee532f.tar.gz llvm-5013f7469ec44adba127de65517e699180ee532f.tar.bz2 llvm-5013f7469ec44adba127de65517e699180ee532f.tar.xz |
Allow targets to optionally specify custom binary encoder functions for
operand values. This is useful for operands which require additional trickery
to encode into the instruction. For example, the ARM shifted immediate and
shifted register operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116353 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/CodeGenInstruction.cpp')
-rw-r--r-- | utils/TableGen/CodeGenInstruction.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/utils/TableGen/CodeGenInstruction.cpp b/utils/TableGen/CodeGenInstruction.cpp index 722ae53ed5..6e71502cbc 100644 --- a/utils/TableGen/CodeGenInstruction.cpp +++ b/utils/TableGen/CodeGenInstruction.cpp @@ -166,10 +166,14 @@ CodeGenInstruction::CodeGenInstruction(Record *R, const std::string &AsmStr) Record *Rec = Arg->getDef(); std::string PrintMethod = "printOperand"; + std::string EncoderMethod; unsigned NumOps = 1; DagInit *MIOpInfo = 0; if (Rec->isSubClassOf("Operand")) { PrintMethod = Rec->getValueAsString("PrintMethod"); + // If there is an explicit encoder method, use it. + if (Rec->getValue("EncoderMethod")) + EncoderMethod = Rec->getValueAsString("EncoderMethod"); MIOpInfo = Rec->getValueAsDag("MIOperandInfo"); // Verify that MIOpInfo has an 'ops' root value. @@ -204,7 +208,7 @@ CodeGenInstruction::CodeGenInstruction(Record *R, const std::string &AsmStr) throw "In instruction '" + R->getName() + "', operand #" + utostr(i) + " has the same name as a previous operand!"; - OperandList.push_back(OperandInfo(Rec, ArgName, PrintMethod, + OperandList.push_back(OperandInfo(Rec, ArgName, PrintMethod, EncoderMethod, MIOperandNo, NumOps, MIOpInfo)); MIOperandNo += NumOps; } |