Skip to content

Commit 89586c8

Browse files
committed
[Xtensa] Minor fix of the Xtensa::getUserRegister function.
1 parent de7cfe6 commit 89586c8

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

@@ -87,7 +89,8 @@ class XtensaAsmParser : public MCTargetAsmParser {
8789

8890
XtensaAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
8991
const MCInstrInfo &MII, const MCTargetOptions &Options)
90-
: MCTargetAsmParser(Options, STI, MII) {
92+
: MCTargetAsmParser(Options, STI, MII),
93+
MRI(*Parser.getContext().getRegisterInfo()) {
9194
setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
9295
}
9396

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

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,10 @@ static DecodeStatus DecodeURRegisterClass(MCInst &Inst, uint64_t RegNo,
123123
if (RegNo > 255)
124124
return MCDisassembler::Fail;
125125

126-
MCPhysReg Reg = Xtensa::getUserRegister(RegNo);
126+
const XtensaDisassembler *Dis =
127+
static_cast<const XtensaDisassembler *>(Decoder);
128+
const MCRegisterInfo *MRI = Dis->getContext().getRegisterInfo();
129+
MCPhysReg Reg = Xtensa::getUserRegister(RegNo, *MRI);
127130
if (!Xtensa::checkRegister(Reg, Decoder->getSubtargetInfo().getFeatureBits()))
128131
return MCDisassembler::Fail;
129132

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,10 @@ bool Xtensa::checkRegister(MCRegister RegNo, const FeatureBitset &FeatureBits) {
115115
}
116116

117117
// Get Xtensa User Register by encoding value.
118-
MCRegister Xtensa::getUserRegister(unsigned Code) {
119-
switch (Code) {
120-
case 232:
118+
MCRegister Xtensa::getUserRegister(unsigned Code, const MCRegisterInfo &MRI) {
119+
if (MRI.getEncodingValue(Xtensa::FCR) == Code) {
121120
return Xtensa::FCR;
122-
case 233:
121+
} else if (MRI.getEncodingValue(Xtensa::FSR) == Code) {
123122
return Xtensa::FSR;
124123
}
125124
return Xtensa::NoRegister;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ bool isValidAddrOffsetForOpcode(unsigned Opcode, int64_t Offset);
5959
bool checkRegister(MCRegister RegNo, const FeatureBitset &FeatureBits);
6060

6161
// Get Xtensa User Register by register encoding value.
62-
MCRegister getUserRegister(unsigned Code);
62+
MCRegister getUserRegister(unsigned Code, const MCRegisterInfo &MRI);
6363
} // namespace Xtensa
6464
} // end namespace llvm
6565

0 commit comments

Comments
 (0)