@@ -119,6 +119,7 @@ class AMDGPUOperand : public MCParsedAsmOperand {
119
119
ImmTyInstOffset,
120
120
ImmTyOffset0,
121
121
ImmTyOffset1,
122
+ ImmTySMEMOffsetMod,
122
123
ImmTyCPol,
123
124
ImmTySWZ,
124
125
ImmTyTFE,
@@ -372,7 +373,7 @@ class AMDGPUOperand : public MCParsedAsmOperand {
372
373
bool isOffset () const { return isImmTy (ImmTyOffset) && isUInt<16 >(getImm ()); }
373
374
bool isOffset0 () const { return isImmTy (ImmTyOffset0) && isUInt<8 >(getImm ()); }
374
375
bool isOffset1 () const { return isImmTy (ImmTyOffset1) && isUInt<8 >(getImm ()); }
375
-
376
+ bool isSMEMOffsetMod () const { return isImmTy (ImmTySMEMOffsetMod); }
376
377
bool isFlatOffset () const { return isImmTy (ImmTyOffset) || isImmTy (ImmTyInstOffset); }
377
378
bool isGDS () const { return isImmTy (ImmTyGDS); }
378
379
bool isLDS () const { return isImmTy (ImmTyLDS); }
@@ -1034,6 +1035,7 @@ class AMDGPUOperand : public MCParsedAsmOperand {
1034
1035
case ImmTyInstOffset: OS << " InstOffset" ; break ;
1035
1036
case ImmTyOffset0: OS << " Offset0" ; break ;
1036
1037
case ImmTyOffset1: OS << " Offset1" ; break ;
1038
+ case ImmTySMEMOffsetMod: OS << " SMEMOffsetMod" ; break ;
1037
1039
case ImmTyCPol: OS << " CPol" ; break ;
1038
1040
case ImmTySWZ: OS << " SWZ" ; break ;
1039
1041
case ImmTyTFE: OS << " TFE" ; break ;
@@ -1755,6 +1757,7 @@ class AMDGPUAsmParser : public MCTargetAsmParser {
1755
1757
1756
1758
AMDGPUOperand::Ptr defaultSMRDOffset8 () const ;
1757
1759
AMDGPUOperand::Ptr defaultSMEMOffset () const ;
1760
+ AMDGPUOperand::Ptr defaultSMEMOffsetMod () const ;
1758
1761
AMDGPUOperand::Ptr defaultSMRDLiteralOffset () const ;
1759
1762
AMDGPUOperand::Ptr defaultFlatOffset () const ;
1760
1763
@@ -4154,7 +4157,7 @@ SMLoc AMDGPUAsmParser::getSMEMOffsetLoc(const OperandVector &Operands) const {
4154
4157
// Start with second operand because SMEM Offset cannot be dst or src0.
4155
4158
for (unsigned i = 2 , e = Operands.size (); i != e; ++i) {
4156
4159
AMDGPUOperand &Op = ((AMDGPUOperand &)*Operands[i]);
4157
- if (Op.isSMEMOffset ())
4160
+ if (Op.isSMEMOffset () || Op. isSMEMOffsetMod () )
4158
4161
return Op.getStartLoc ();
4159
4162
}
4160
4163
return getLoc ();
@@ -7938,7 +7941,8 @@ void AMDGPUAsmParser::cvtSMEMAtomic(MCInst &Inst, const OperandVector &Operands)
7938
7941
7939
7942
if ((int )Inst.getNumOperands () <=
7940
7943
AMDGPU::getNamedOperandIdx (Inst.getOpcode (), AMDGPU::OpName::offset))
7941
- addOptionalImmOperand (Inst, Operands, OptionalIdx, AMDGPUOperand::ImmTyOffset);
7944
+ addOptionalImmOperand (Inst, Operands, OptionalIdx,
7945
+ AMDGPUOperand::ImmTySMEMOffsetMod);
7942
7946
addOptionalImmOperand (Inst, Operands, OptionalIdx, AMDGPUOperand::ImmTyCPol, 0 );
7943
7947
}
7944
7948
@@ -7962,8 +7966,8 @@ bool AMDGPUOperand::isSMRDOffset8() const {
7962
7966
}
7963
7967
7964
7968
bool AMDGPUOperand::isSMEMOffset () const {
7965
- return isImmTy (ImmTyNone) ||
7966
- isImmTy (ImmTyOffset); // Offset range is checked later by validator.
7969
+ // Offset range is checked later by validator.
7970
+ return isImmLiteral ();
7967
7971
}
7968
7972
7969
7973
bool AMDGPUOperand::isSMRDLiteralOffset () const {
@@ -7977,7 +7981,12 @@ AMDGPUOperand::Ptr AMDGPUAsmParser::defaultSMRDOffset8() const {
7977
7981
}
7978
7982
7979
7983
AMDGPUOperand::Ptr AMDGPUAsmParser::defaultSMEMOffset () const {
7980
- return AMDGPUOperand::CreateImm (this , 0 , SMLoc (), AMDGPUOperand::ImmTyOffset);
7984
+ return AMDGPUOperand::CreateImm (this , 0 , SMLoc ());
7985
+ }
7986
+
7987
+ AMDGPUOperand::Ptr AMDGPUAsmParser::defaultSMEMOffsetMod () const {
7988
+ return AMDGPUOperand::CreateImm (this , 0 , SMLoc (),
7989
+ AMDGPUOperand::ImmTySMEMOffsetMod);
7981
7990
}
7982
7991
7983
7992
AMDGPUOperand::Ptr AMDGPUAsmParser::defaultSMRDLiteralOffset () const {
@@ -9147,8 +9156,6 @@ AMDGPUAsmParser::parseCustomOperand(OperandVector &Operands, unsigned MCK) {
9147
9156
case MCK_ImmNegLo:
9148
9157
return parseOperandArrayWithPrefix (" neg_lo" , Operands,
9149
9158
AMDGPUOperand::ImmTyNegLo);
9150
- case MCK_ImmSMEMOffset:
9151
- return parseIntWithPrefix (" offset" , Operands, AMDGPUOperand::ImmTyOffset);
9152
9159
case MCK_ImmOModSI:
9153
9160
return parseOModOperand (Operands);
9154
9161
case MCK_ImmOpSel:
@@ -9216,8 +9223,6 @@ unsigned AMDGPUAsmParser::validateTargetOperandClass(MCParsedAsmOperand &Op,
9216
9223
return Operand.isInterpAttr () ? Match_Success : Match_InvalidOperand;
9217
9224
case MCK_AttrChan:
9218
9225
return Operand.isAttrChan () ? Match_Success : Match_InvalidOperand;
9219
- case MCK_ImmSMEMOffset:
9220
- return Operand.isSMEMOffset () ? Match_Success : Match_InvalidOperand;
9221
9226
case MCK_SReg_64:
9222
9227
case MCK_SReg_64_XEXEC:
9223
9228
// Null is defined as a 32-bit register but
0 commit comments