MCAsmParser &Parser;
TargetMachine &TM;
-private:
MCAsmParser &getParser() const { return Parser; }
MCAsmLexer &getLexer() const { return Parser.getLexer(); }
Immediate,
Memory,
Register,
+ RegisterList,
Token
} Kind;
bool Writeback;
} Reg;
+ struct {
+ unsigned RegStart;
+ unsigned Number;
+ } RegList;
+
struct {
const MCExpr *Val;
} Imm;
case Register:
Reg = o.Reg;
break;
+ case RegisterList:
+ RegList = o.RegList;
+ break;
case Immediate:
Imm = o.Imm;
break;
return Reg.RegNum;
}
+ std::pair<unsigned, unsigned> getRegList() const {
+ assert(Kind == RegisterList && "Invalid access!");
+ return std::make_pair(RegList.RegStart, RegList.Number);
+ }
+
const MCExpr *getImm() const {
assert(Kind == Immediate && "Invalid access!");
return Imm.Val;
bool isCondCode() const { return Kind == CondCode; }
bool isImm() const { return Kind == Immediate; }
bool isReg() const { return Kind == Register; }
+ bool isRegList() const { return Kind == RegisterList; }
bool isToken() const { return Kind == Token; }
bool isMemory() const { return Kind == Memory; }
return Op;
}
+ static ARMOperand *CreateRegList(unsigned RegStart, unsigned Number,
+ SMLoc S, SMLoc E) {
+ ARMOperand *Op = new ARMOperand(RegisterList);
+ Op->RegList.RegStart = RegStart;
+ Op->RegList.Number = Number;
+ Op->StartLoc = S;
+ Op->EndLoc = E;
+ return Op;
+ }
+
static ARMOperand *CreateImm(const MCExpr *Val, SMLoc S, SMLoc E) {
ARMOperand *Op = new ARMOperand(Immediate);
Op->Imm.Val = Val;
case Register:
OS << "<register " << getReg() << ">";
break;
+ case RegisterList: {
+ OS << "<register_list ";
+ std::pair<unsigned, unsigned> List = getRegList();
+ unsigned RegEnd = List.first + List.second;
+
+ for (unsigned Idx = List.first; Idx < RegEnd; ) {
+ OS << Idx;
+ if (++Idx < RegEnd) OS << ", ";
+ }
+
+ OS << ">";
+ break;
+ }
case Token:
OS << "'" << getToken() << "'";
break;