Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 26 additions & 22 deletions llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ class SparcOperand : public MCParsedAsmOperand {
};

struct RegOp {
unsigned RegNum;
MCRegister Reg;
RegisterKind Kind;
};

Expand All @@ -244,8 +244,8 @@ class SparcOperand : public MCParsedAsmOperand {
};

struct MemOp {
unsigned Base;
unsigned OffsetReg;
MCRegister Base;
MCRegister OffsetReg;
const MCExpr *Off;
};

Expand Down Expand Up @@ -326,20 +326,20 @@ class SparcOperand : public MCParsedAsmOperand {

MCRegister getReg() const override {
assert((Kind == k_Register) && "Invalid access!");
return Reg.RegNum;
return Reg.Reg;
}

const MCExpr *getImm() const {
assert((Kind == k_Immediate) && "Invalid access!");
return Imm.Val;
}

unsigned getMemBase() const {
MCRegister getMemBase() const {
assert((Kind == k_MemoryReg || Kind == k_MemoryImm) && "Invalid access!");
return Mem.Base;
}

unsigned getMemOffsetReg() const {
MCRegister getMemOffsetReg() const {
assert((Kind == k_MemoryReg) && "Invalid access!");
return Mem.OffsetReg;
}
Expand Down Expand Up @@ -376,12 +376,16 @@ class SparcOperand : public MCParsedAsmOperand {
void print(raw_ostream &OS, const MCAsmInfo &MAI) const override {
switch (Kind) {
case k_Token: OS << "Token: " << getToken() << "\n"; break;
case k_Register: OS << "Reg: #" << getReg() << "\n"; break;
case k_Register:
OS << "Reg: #" << getReg().id() << "\n";
break;
case k_Immediate: OS << "Imm: " << getImm() << "\n"; break;
case k_MemoryReg: OS << "Mem: " << getMemBase() << "+"
<< getMemOffsetReg() << "\n"; break;
case k_MemoryReg:
OS << "Mem: " << getMemBase().id() << "+" << getMemOffsetReg().id()
<< "\n";
break;
case k_MemoryImm: assert(getMemOff() != nullptr);
OS << "Mem: " << getMemBase() << "+";
OS << "Mem: " << getMemBase().id() << "+";
MAI.printExpr(OS, *getMemOff());
OS << "\n";
break;
Expand Down Expand Up @@ -432,7 +436,7 @@ class SparcOperand : public MCParsedAsmOperand {

Inst.addOperand(MCOperand::createReg(getMemBase()));

assert(getMemOffsetReg() != 0 && "Invalid offset");
assert(getMemOffsetReg().isValid() && "Invalid offset");
Inst.addOperand(MCOperand::createReg(getMemOffsetReg()));
}

Expand Down Expand Up @@ -480,10 +484,10 @@ class SparcOperand : public MCParsedAsmOperand {
return Op;
}

static std::unique_ptr<SparcOperand> CreateReg(unsigned RegNum, unsigned Kind,
static std::unique_ptr<SparcOperand> CreateReg(MCRegister Reg, unsigned Kind,
SMLoc S, SMLoc E) {
auto Op = std::make_unique<SparcOperand>(k_Register);
Op->Reg.RegNum = RegNum;
Op->Reg.Reg = Reg;
Op->Reg.Kind = (SparcOperand::RegisterKind)Kind;
Op->StartLoc = S;
Op->EndLoc = E;
Expand Down Expand Up @@ -540,7 +544,7 @@ class SparcOperand : public MCParsedAsmOperand {
regIdx = Reg - Sparc::I0 + 24;
if (regIdx % 2 || regIdx > 31)
return false;
Op.Reg.RegNum = IntPairRegs[regIdx / 2];
Op.Reg.Reg = IntPairRegs[regIdx / 2];
Op.Reg.Kind = rk_IntPairReg;
return true;
}
Expand All @@ -551,7 +555,7 @@ class SparcOperand : public MCParsedAsmOperand {
unsigned regIdx = Reg - Sparc::F0;
if (regIdx % 2 || regIdx > 31)
return false;
Op.Reg.RegNum = DoubleRegs[regIdx / 2];
Op.Reg.Reg = DoubleRegs[regIdx / 2];
Op.Reg.Kind = rk_DoubleReg;
return true;
}
Expand All @@ -574,7 +578,7 @@ class SparcOperand : public MCParsedAsmOperand {
Reg = QuadFPRegs[regIdx / 2];
break;
}
Op.Reg.RegNum = Reg;
Op.Reg.Reg = Reg;
Op.Reg.Kind = rk_QuadReg;
return true;
}
Expand All @@ -587,13 +591,13 @@ class SparcOperand : public MCParsedAsmOperand {
regIdx = Reg - Sparc::C0;
if (regIdx % 2 || regIdx > 31)
return false;
Op.Reg.RegNum = CoprocPairRegs[regIdx / 2];
Op.Reg.Reg = CoprocPairRegs[regIdx / 2];
Op.Reg.Kind = rk_CoprocPairReg;
return true;
}

static std::unique_ptr<SparcOperand>
MorphToMEMrr(unsigned Base, std::unique_ptr<SparcOperand> Op) {
MorphToMEMrr(MCRegister Base, std::unique_ptr<SparcOperand> Op) {
MCRegister offsetReg = Op->getReg();
Op->Kind = k_MemoryReg;
Op->Mem.Base = Base;
Expand All @@ -602,8 +606,8 @@ class SparcOperand : public MCParsedAsmOperand {
return Op;
}

static std::unique_ptr<SparcOperand>
CreateMEMr(unsigned Base, SMLoc S, SMLoc E) {
static std::unique_ptr<SparcOperand> CreateMEMr(MCRegister Base, SMLoc S,
SMLoc E) {
auto Op = std::make_unique<SparcOperand>(k_MemoryReg);
Op->Mem.Base = Base;
Op->Mem.OffsetReg = Sparc::G0; // always 0
Expand All @@ -614,11 +618,11 @@ class SparcOperand : public MCParsedAsmOperand {
}

static std::unique_ptr<SparcOperand>
MorphToMEMri(unsigned Base, std::unique_ptr<SparcOperand> Op) {
MorphToMEMri(MCRegister Base, std::unique_ptr<SparcOperand> Op) {
const MCExpr *Imm = Op->getImm();
Op->Kind = k_MemoryImm;
Op->Mem.Base = Base;
Op->Mem.OffsetReg = 0;
Op->Mem.OffsetReg = MCRegister();
Op->Mem.Off = Imm;
return Op;
}
Expand Down
Loading