@@ -73,8 +73,50 @@ static DecodeStatus DecodeARRegisterClass(MCInst &Inst, uint64_t RegNo,
73
73
return MCDisassembler::Success;
74
74
}
75
75
76
+ static const MCPhysReg MRDecoderTable[] = {Xtensa::M0, Xtensa::M1, Xtensa::M2,
77
+ Xtensa::M3};
78
+
79
+ static DecodeStatus DecodeMRRegisterClass (MCInst &Inst, uint64_t RegNo,
80
+ uint64_t Address,
81
+ const void *Decoder) {
82
+ if (RegNo >= std::size (MRDecoderTable))
83
+ return MCDisassembler::Fail;
84
+
85
+ MCPhysReg Reg = MRDecoderTable[RegNo];
86
+ Inst.addOperand (MCOperand::createReg (Reg));
87
+ return MCDisassembler::Success;
88
+ }
89
+
90
+ static const MCPhysReg MR01DecoderTable[] = {Xtensa::M0, Xtensa::M1};
91
+
92
+ static DecodeStatus DecodeMR01RegisterClass (MCInst &Inst, uint64_t RegNo,
93
+ uint64_t Address,
94
+ const void *Decoder) {
95
+ if (RegNo > 2 )
96
+ return MCDisassembler::Fail;
97
+
98
+ MCPhysReg Reg = MR01DecoderTable[RegNo];
99
+ Inst.addOperand (MCOperand::createReg (Reg));
100
+ return MCDisassembler::Success;
101
+ }
102
+
103
+ static const MCPhysReg MR23DecoderTable[] = {Xtensa::M2, Xtensa::M3};
104
+
105
+ static DecodeStatus DecodeMR23RegisterClass (MCInst &Inst, uint64_t RegNo,
106
+ uint64_t Address,
107
+ const void *Decoder) {
108
+ if (RegNo != 2 && RegNo != 3 )
109
+ return MCDisassembler::Fail;
110
+
111
+ MCPhysReg Reg = MR23DecoderTable[RegNo - 2 ];
112
+ Inst.addOperand (MCOperand::createReg (Reg));
113
+ return MCDisassembler::Success;
114
+ }
115
+
76
116
const MCPhysReg SRDecoderTable[] = {
77
- Xtensa::SAR, 3 , Xtensa::WINDOWBASE, 72 , Xtensa::WINDOWSTART, 73 };
117
+ Xtensa::SAR, 3 , Xtensa::ACCLO, 16 , Xtensa::ACCHI, 17 ,
118
+ Xtensa::M0, 32 , Xtensa::M1, 33 , Xtensa::M2, 34 ,
119
+ Xtensa::M3, 35 , Xtensa::WINDOWBASE, 72 , Xtensa::WINDOWSTART, 73 };
78
120
79
121
static DecodeStatus DecodeSRRegisterClass (MCInst &Inst, uint64_t RegNo,
80
122
uint64_t Address,
0 commit comments