@@ -679,7 +679,7 @@ class MUBUF_Atomic_Pseudo<string opName,
679
679
let has_glc = 0;
680
680
let has_dlc = 0;
681
681
let has_tfe = 0;
682
- let has_sccb = 0 ;
682
+ let has_sccb = 1 ;
683
683
let maybeAtomic = 1;
684
684
let AsmMatchConverter = "cvtMubufAtomic";
685
685
}
@@ -2259,7 +2259,8 @@ defm TBUFFER_STORE_FORMAT_XYZW : MTBUF_Real_AllAddr_gfx6_gfx7_gfx10<0x007>;
2259
2259
// GFX8, GFX9 (VI).
2260
2260
//===----------------------------------------------------------------------===//
2261
2261
2262
- class MUBUF_Real_Base_vi <bits<7> op, MUBUF_Pseudo ps, int Enc> :
2262
+ class MUBUF_Real_Base_vi <bits<7> op, MUBUF_Pseudo ps, int Enc,
2263
+ bit has_sccb = ps.has_sccb> :
2263
2264
MUBUF_Real<ps>,
2264
2265
Enc64,
2265
2266
SIMCInstr<ps.PseudoInstr, Enc>,
@@ -2270,7 +2271,7 @@ class MUBUF_Real_Base_vi <bits<7> op, MUBUF_Pseudo ps, int Enc> :
2270
2271
let Inst{12} = ps.offen;
2271
2272
let Inst{13} = ps.idxen;
2272
2273
let Inst{14} = !if(ps.has_glc, cpol{CPolBit.GLC}, ps.glc_value);
2273
- let Inst{15} = !if(ps. has_sccb, cpol{CPolBit.SCC}, ps.sccb_value);
2274
+ let Inst{15} = !if(has_sccb, cpol{CPolBit.SCC}, ps.sccb_value);
2274
2275
let Inst{16} = ps.lds;
2275
2276
let Inst{17} = !if(ps.has_slc, cpol{CPolBit.SLC}, ?);
2276
2277
let Inst{24-18} = op;
@@ -2281,26 +2282,28 @@ class MUBUF_Real_Base_vi <bits<7> op, MUBUF_Pseudo ps, int Enc> :
2281
2282
let Inst{63-56} = !if(ps.has_soffset, soffset, ?);
2282
2283
}
2283
2284
2284
- class MUBUF_Real_vi <bits<7> op, MUBUF_Pseudo ps> :
2285
- MUBUF_Real_Base_vi<op, ps, SIEncodingFamily.VI> {
2285
+ class MUBUF_Real_vi <bits<7> op, MUBUF_Pseudo ps, bit has_sccb = ps.has_sccb > :
2286
+ MUBUF_Real_Base_vi<op, ps, SIEncodingFamily.VI, has_sccb > {
2286
2287
let AssemblerPredicate = isGFX8GFX9NotGFX90A;
2287
2288
let DecoderNamespace = "GFX8";
2288
2289
2289
2290
let Inst{55} = !if(ps.has_tfe, tfe, ?);
2290
2291
}
2291
2292
2292
- class MUBUF_Real_gfx90a <bits<7> op, MUBUF_Pseudo ps> :
2293
- MUBUF_Real_Base_vi<op, ps, SIEncodingFamily.GFX90A> {
2293
+ class MUBUF_Real_gfx90a <bits<7> op, MUBUF_Pseudo ps,
2294
+ bit has_sccb = ps.has_sccb> :
2295
+ MUBUF_Real_Base_vi<op, ps, SIEncodingFamily.GFX90A, has_sccb> {
2294
2296
let AssemblerPredicate = isGFX90APlus;
2295
2297
let DecoderNamespace = "GFX90A";
2296
- let AsmString = ps.Mnemonic # !subst("$tfe", "", ps.AsmOperands);
2298
+ let AsmString = ps.Mnemonic # !subst("$sccb", !if(has_sccb, "$sccb",""),
2299
+ !subst("$tfe", "", ps.AsmOperands));
2297
2300
2298
2301
let Inst{55} = acc;
2299
2302
}
2300
2303
2301
2304
multiclass MUBUF_Real_vi_gfx90a<bits<7> op, MUBUF_Pseudo ps> {
2302
2305
def _vi : MUBUF_Real_vi<op, ps>;
2303
- def _gfx90a : MUBUF_Real_gfx90a<op, ps>;
2306
+ def _gfx90a : MUBUF_Real_gfx90a<op, ps, !and(ps.has_sccb,!not(ps.FPAtomic)) >;
2304
2307
}
2305
2308
2306
2309
multiclass MUBUF_Real_AllAddr_vi<bits<7> op> {
@@ -2483,7 +2486,7 @@ defm BUFFER_ATOMIC_PK_ADD_F16 : MUBUF_Real_Atomic_vi <0x4e>;
2483
2486
2484
2487
} // End SubtargetPredicate = HasAtomicFaddInsts
2485
2488
2486
- let SubtargetPredicate = isGFX90APlus, AssemblerPredicate = isGFX90APlus in {
2489
+ let SubtargetPredicate = isGFX90APlus in {
2487
2490
defm BUFFER_ATOMIC_ADD_F64 : MUBUF_Real_Atomic_vi<0x4f>;
2488
2491
defm BUFFER_ATOMIC_MIN_F64 : MUBUF_Real_Atomic_vi<0x50>;
2489
2492
defm BUFFER_ATOMIC_MAX_F64 : MUBUF_Real_Atomic_vi<0x51>;
0 commit comments