summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/FixedLenDecoderEmitter.h
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-07-28 21:54:31 +0000
committerOwen Anderson <resistor@mac.com>2011-07-28 21:54:31 +0000
commite3591657a04fafc8c3676440464278402dcb6f38 (patch)
tree8cef63b8a0aeb293af3054aefb8873907e497054 /llvm/utils/TableGen/FixedLenDecoderEmitter.h
parentc9a551ebed9fe4e5320a8c3d216d98907a8f20cc (diff)
downloadbcm5719-llvm-e3591657a04fafc8c3676440464278402dcb6f38.tar.gz
bcm5719-llvm-e3591657a04fafc8c3676440464278402dcb6f38.zip
Enhance the fixed-length decoder emitter to support parsing scattered fields.
llvm-svn: 136405
Diffstat (limited to 'llvm/utils/TableGen/FixedLenDecoderEmitter.h')
-rw-r--r--llvm/utils/TableGen/FixedLenDecoderEmitter.h24
1 files changed, 20 insertions, 4 deletions
diff --git a/llvm/utils/TableGen/FixedLenDecoderEmitter.h b/llvm/utils/TableGen/FixedLenDecoderEmitter.h
index fc3710e6904..300a2f49f80 100644
--- a/llvm/utils/TableGen/FixedLenDecoderEmitter.h
+++ b/llvm/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 {
OpenPOWER on IntegriCloud