Skip to content

Commit ee15438

Browse files
committed
[Xtensa] Minor fix of the Xtensa::getUserRegister function.
1 parent b35fb46 commit ee15438

File tree

4 files changed

+13
-8
lines changed

4 files changed

+13
-8
lines changed

llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ using namespace llvm;
3535
struct XtensaOperand;
3636

3737
class XtensaAsmParser : public MCTargetAsmParser {
38+
const MCRegisterInfo &MRI;
39+
3840
enum XtensaRegisterType { Xtensa_Generic, Xtensa_SR, Xtensa_UR };
3941
SMLoc getLoc() const { return getParser().getTok().getLoc(); }
4042

@@ -91,7 +93,8 @@ class XtensaAsmParser : public MCTargetAsmParser {
9193

9294
XtensaAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
9395
const MCInstrInfo &MII, const MCTargetOptions &Options)
94-
: MCTargetAsmParser(Options, STI, MII) {
96+
: MCTargetAsmParser(Options, STI, MII),
97+
MRI(*Parser.getContext().getRegisterInfo()) {
9598
setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
9699
}
97100

@@ -617,7 +620,7 @@ ParseStatus XtensaAsmParser::parseRegister(OperandVector &Operands,
617620
// and such situation may lead to confilct
618621
if (RegType == Xtensa_UR) {
619622
int64_t RegCode = getLexer().getTok().getIntVal();
620-
RegNo = Xtensa::getUserRegister(RegCode);
623+
RegNo = Xtensa::getUserRegister(RegCode, MRI);
621624
} else {
622625
RegName = getLexer().getTok().getString();
623626
RegNo = MatchRegisterAltName(RegName);

llvm/lib/Target/Xtensa/Disassembler/XtensaDisassembler.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ static DecodeStatus DecodeURRegisterClass(MCInst &Inst, uint64_t RegNo,
127127
? Xtensa::REGISTER_WRITE
128128
: Xtensa::REGISTER_READ;
129129

130-
MCPhysReg Reg = Xtensa::getUserRegister(RegNo);
130+
const XtensaDisassembler *Dis =
131+
static_cast<const XtensaDisassembler *>(Decoder);
132+
const MCRegisterInfo *MRI = Dis->getContext().getRegisterInfo();
133+
MCPhysReg Reg = Xtensa::getUserRegister(RegNo, *MRI);
131134
if (!Xtensa::checkRegister(Reg, Decoder->getSubtargetInfo().getFeatureBits(),
132135
RAType))
133136
return MCDisassembler::Fail;

llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,10 @@ bool Xtensa::checkRegister(MCRegister RegNo, const FeatureBitset &FeatureBits,
202202
}
203203

204204
// Get Xtensa User Register by encoding value.
205-
MCRegister Xtensa::getUserRegister(unsigned Code) {
206-
switch (Code) {
207-
case 232:
205+
MCRegister Xtensa::getUserRegister(unsigned Code, const MCRegisterInfo &MRI) {
206+
if (MRI.getEncodingValue(Xtensa::FCR) == Code) {
208207
return Xtensa::FCR;
209-
case 233:
208+
} else if (MRI.getEncodingValue(Xtensa::FSR) == Code) {
210209
return Xtensa::FSR;
211210
}
212211
return Xtensa::NoRegister;

llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ bool checkRegister(MCRegister RegNo, const FeatureBitset &FeatureBits,
6666
RegisterAccessType RA);
6767

6868
// Get Xtensa User Register by register encoding value.
69-
MCRegister getUserRegister(unsigned Code);
69+
MCRegister getUserRegister(unsigned Code, const MCRegisterInfo &MRI);
7070
} // namespace Xtensa
7171
} // end namespace llvm
7272

0 commit comments

Comments
 (0)