Skip to content

Commit ae825a3

Browse files
committed
Use ZPR_K register class in Decoder method
1 parent 455b52c commit ae825a3

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

llvm/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -394,14 +394,11 @@ static DecodeStatus DecodeZPR2Mul2RegisterClass(MCInst &Inst, unsigned RegNo,
394394
// 111
395395
static DecodeStatus DecodeZK(MCInst &Inst, unsigned RegNo, uint64_t Address,
396396
const MCDisassembler *Decoder) {
397-
// RegNo < 4 => Reg is in Z20-Z23 (offset 20)
398-
// RegNo >= 4 => Reg is in Z28-Z31 (offset 24)
399-
unsigned Reg = (RegNo < 4) ? (RegNo + 20) : (RegNo + 24);
400-
if (!(Reg >= 20 && Reg <= 23) && !(Reg >= 28 && Reg <= 31))
397+
if (RegNo > 7)
401398
return Fail;
402399

403400
unsigned Register =
404-
AArch64MCRegisterClasses[AArch64::ZPRRegClassID].getRegister(Reg);
401+
AArch64MCRegisterClasses[AArch64::ZPR_KRegClassID].getRegister(RegNo);
405402
Inst.addOperand(MCOperand::createReg(Register));
406403
return Success;
407404
}

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -584,10 +584,14 @@ uint32_t AArch64MCCodeEmitter::EncodeZK(const MCInst &MI, unsigned OpIdx,
584584
const MCSubtargetInfo &STI) const {
585585
auto RegOpnd = MI.getOperand(OpIdx).getReg();
586586
unsigned RegVal = Ctx.getRegisterInfo()->getEncodingValue(RegOpnd);
587-
// Z28 => RegVal = 28 (28 - 24 = 4) Z28 = 4
587+
588+
// ZZ8-Z31 => Reg is in 3..7 (offset 24)
588589
if (RegOpnd > AArch64::Z27)
589590
return (RegVal - 24);
590-
// Z20 => RegVal = 20 (20 -20 = 0) Z20 = 0
591+
592+
assert((RegOpnd > AArch64::Z19 && RegOpnd < AArch64::Z24) &&
593+
"Expected ZK in Z20..Z23 or Z28..Z31");
594+
// Z20-Z23 => Reg is in 0..3 (offset 20)
591595
return (RegVal - 20);
592596
}
593597

0 commit comments

Comments
 (0)