diff options
author | Owen Anderson <resistor@mac.com> | 2011-07-28 21:54:31 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2011-07-28 21:54:31 +0000 |
commit | d1e38dfb8d53df048b15e5f2ae70d4e1c9ce61bf (patch) | |
tree | 64d57d5395f32953f9677b7a625dc4af2624f9b4 /utils/TableGen/FixedLenDecoderEmitter.h | |
parent | ff03048c1350fcc4fda1ef6d6c57252f3a950854 (diff) |
Enhance the fixed-length decoder emitter to support parsing scattered fields.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136405 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/FixedLenDecoderEmitter.h')
-rw-r--r-- | utils/TableGen/FixedLenDecoderEmitter.h | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/utils/TableGen/FixedLenDecoderEmitter.h b/utils/TableGen/FixedLenDecoderEmitter.h index fc3710e690..300a2f49f8 100644 --- a/utils/TableGen/FixedLenDecoderEmitter.h +++ b/utils/TableGen/FixedLenDecoderEmitter.h @@ -22,13 +22,29 @@ namespace llvm { +struct EncodingField { + unsigned Base, Width, Offset; + EncodingField(unsigned B, unsigned W, unsigned O) + : Base(B), Width(W), Offset(O) { } +}; + struct OperandInfo { - unsigned FieldBase; - unsigned FieldLength; + std::vector<EncodingField> Fields; std::string Decoder; - OperandInfo(unsigned FB, unsigned FL, std::string D) - : FieldBase(FB), FieldLength(FL), Decoder(D) { } + OperandInfo(std::string D) + : Decoder(D) { } + + void addField(unsigned Base, unsigned Width, unsigned Offset) { + Fields.push_back(EncodingField(Base, Width, Offset)); + } + + unsigned numFields() { return Fields.size(); } + + typedef std::vector<EncodingField>::iterator iterator; + + iterator begin() { return Fields.begin(); } + iterator end() { return Fields.end(); } }; class FixedLenDecoderEmitter : public TableGenBackend { |