@@ -635,18 +635,18 @@ static struct InsnMatchEntry InsnMatchTable[] = {
635
635
{ " ssf" , SystemZ::InsnSSF, 4 ,
636
636
{ MCK_U48Imm, MCK_BDAddr64Disp12, MCK_BDAddr64Disp12, MCK_AnyReg } },
637
637
{ " vri" , SystemZ::InsnVRI, 6 ,
638
- { MCK_U48Imm, MCK_AnyReg, MCK_AnyReg , MCK_U12Imm, MCK_U4Imm, MCK_U4Imm } },
638
+ { MCK_U48Imm, MCK_VR128, MCK_VR128 , MCK_U12Imm, MCK_U4Imm, MCK_U4Imm } },
639
639
{ " vrr" , SystemZ::InsnVRR, 7 ,
640
- { MCK_U48Imm, MCK_AnyReg, MCK_AnyReg, MCK_AnyReg , MCK_U4Imm, MCK_U4Imm,
640
+ { MCK_U48Imm, MCK_VR128, MCK_VR128, MCK_VR128 , MCK_U4Imm, MCK_U4Imm,
641
641
MCK_U4Imm } },
642
642
{ " vrs" , SystemZ::InsnVRS, 5 ,
643
- { MCK_U48Imm, MCK_AnyReg, MCK_AnyReg , MCK_BDAddr64Disp12, MCK_U4Imm } },
643
+ { MCK_U48Imm, MCK_AnyReg, MCK_VR128 , MCK_BDAddr64Disp12, MCK_U4Imm } },
644
644
{ " vrv" , SystemZ::InsnVRV, 4 ,
645
- { MCK_U48Imm, MCK_AnyReg , MCK_BDVAddr64Disp12, MCK_U4Imm } },
645
+ { MCK_U48Imm, MCK_VR128 , MCK_BDVAddr64Disp12, MCK_U4Imm } },
646
646
{ " vrx" , SystemZ::InsnVRX, 4 ,
647
- { MCK_U48Imm, MCK_AnyReg , MCK_BDXAddr64Disp12, MCK_U4Imm } },
647
+ { MCK_U48Imm, MCK_VR128 , MCK_BDXAddr64Disp12, MCK_U4Imm } },
648
648
{ " vsi" , SystemZ::InsnVSI, 4 ,
649
- { MCK_U48Imm, MCK_AnyReg , MCK_BDAddr64Disp12, MCK_U8Imm } }
649
+ { MCK_U48Imm, MCK_VR128 , MCK_BDAddr64Disp12, MCK_U8Imm } }
650
650
};
651
651
652
652
static void printMCExpr (const MCExpr *E, raw_ostream &OS) {
@@ -851,10 +851,11 @@ SystemZAsmParser::parseRegister(OperandVector &Operands, RegisterKind Kind) {
851
851
// Parse any type of register (including integers) and add it to Operands.
852
852
OperandMatchResultTy
853
853
SystemZAsmParser::parseAnyRegister (OperandVector &Operands) {
854
+ SMLoc StartLoc = Parser.getTok ().getLoc ();
855
+
854
856
// Handle integer values.
855
857
if (Parser.getTok ().is (AsmToken::Integer)) {
856
858
const MCExpr *Register;
857
- SMLoc StartLoc = Parser.getTok ().getLoc ();
858
859
if (Parser.parseExpression (Register))
859
860
return MatchOperand_ParseFail;
860
861
@@ -876,6 +877,11 @@ SystemZAsmParser::parseAnyRegister(OperandVector &Operands) {
876
877
if (parseRegister (Reg))
877
878
return MatchOperand_ParseFail;
878
879
880
+ if (Reg.Num > 15 ) {
881
+ Error (StartLoc, " invalid register" );
882
+ return MatchOperand_ParseFail;
883
+ }
884
+
879
885
// Map to the correct register kind.
880
886
RegisterKind Kind;
881
887
unsigned RegNo;
@@ -1208,6 +1214,8 @@ bool SystemZAsmParser::ParseDirectiveInsn(SMLoc L) {
1208
1214
OperandMatchResultTy ResTy;
1209
1215
if (Kind == MCK_AnyReg)
1210
1216
ResTy = parseAnyReg (Operands);
1217
+ else if (Kind == MCK_VR128)
1218
+ ResTy = parseVR128 (Operands);
1211
1219
else if (Kind == MCK_BDXAddr64Disp12 || Kind == MCK_BDXAddr64Disp20)
1212
1220
ResTy = parseBDXAddr64 (Operands);
1213
1221
else if (Kind == MCK_BDAddr64Disp12 || Kind == MCK_BDAddr64Disp20)
0 commit comments