@@ -80,43 +80,34 @@ bool HadeanMatcher::matches(const MCOperand &ref, const MCOperand &provided) con
80
80
return false ;
81
81
}
82
82
83
- HadeanMatcher::HadeanMatcher (const Triple &_triple) : triple(_triple) {
83
+ HadeanMatcher::HadeanMatcher (const Triple &_triple) : triple(_triple), progress( 0 ) {
84
84
std::string error;
85
85
86
- const Target *target = TargetRegistry::lookupTarget (triple.getTriple (), error);
87
- assert (target != nullptr );
86
+ const Target *target = TargetRegistry::lookupTarget (triple.getTriple (), error); assert (target != nullptr );
88
87
89
- MCRegisterInfo *MRI = target->createMCRegInfo (triple.getTriple ());
90
- assert (MRI != nullptr );
88
+ MCRegisterInfo *MRI = target->createMCRegInfo (triple.getTriple ()); assert (MRI != nullptr );
91
89
92
- MCAsmInfo *MAI = target->createMCAsmInfo (*MRI, triple.getTriple ());
93
- assert (MAI != nullptr );
90
+ MCAsmInfo *MAI = target->createMCAsmInfo (*MRI, triple.getTriple ()); assert (MAI != nullptr );
94
91
95
- MCContext *context = new MCContext (MAI, MRI, nullptr );
96
- assert (context != nullptr );
92
+ MCContext *context = new MCContext (MAI, MRI, nullptr ); assert (context != nullptr );
97
93
98
94
holder.reset (new Holder (context));
99
95
HadeanExpander expander;
100
96
expander.emitValidatedJump (*holder);
101
97
assert (holder->numInstructions () != 0 );
102
98
}
103
99
104
- void HadeanMatcher::feedInstruction (const MCInst &instr) {
105
- current.push_back (instr);
106
-
107
- if (current.size () > holder->numInstructions ())
108
- current.pop_front ();
109
- }
110
-
111
- bool HadeanMatcher::isValidatedJump () const {
112
- if (current.size () == holder->numInstructions ()) {
113
- for (size_t i = 0 ; i < current.size (); ++i) {
114
- if (!matches (holder->getInstruction (i), current[i]))
115
- return false ;
100
+ enum HadeanMatcherState HadeanMatcher::feedInstruction (const MCInst &instr) {
101
+ if (matches (holder->getInstruction (progress), instr)) {
102
+ progress++;
103
+ if (progress == holder->numInstructions ()) {
104
+ progress = 0 ;
105
+ return HadeanMatcherStateValid;
116
106
}
117
- return true ;
107
+ return HadeanMatcherStateUnknown ;
118
108
} else {
119
- return false ;
109
+ progress = 0 ;
110
+ return HadeanMatcherStateInvalid;
120
111
}
121
112
}
122
113
0 commit comments