@@ -2365,7 +2365,7 @@ multiclass MUBUF_Real_gfx7<bits<8> op> {
2365
2365
// Base ENC_VBUFFER for GFX12.
2366
2366
//===----------------------------------------------------------------------===//
2367
2367
2368
- class VBUFFER_Real <BUF_Pseudo ps, string real_name = ps.Mnemonic > :
2368
+ class VBUFFER_Real <bits<8> op, BUF_Pseudo ps, string real_name> :
2369
2369
InstSI <ps.OutOperandList, ps.InOperandList, real_name # ps.AsmOperands, []>, Enc96 {
2370
2370
2371
2371
let isPseudo = 0;
@@ -2389,6 +2389,8 @@ class VBUFFER_Real <BUF_Pseudo ps, string real_name = ps.Mnemonic> :
2389
2389
let IsAtomicNoRet = ps.IsAtomicNoRet;
2390
2390
let VALU = ps.VALU;
2391
2391
let LGKM_CNT = ps.LGKM_CNT;
2392
+ let MUBUF = ps.MUBUF;
2393
+ let MTBUF = ps.MTBUF;
2392
2394
2393
2395
bits<24> offset;
2394
2396
bits<8> vaddr;
@@ -2405,6 +2407,7 @@ class VBUFFER_Real <BUF_Pseudo ps, string real_name = ps.Mnemonic> :
2405
2407
let Inst{47-41} = !if(ps.has_srsrc, srsrc, ?);
2406
2408
let Inst{49-48} = 0b00;
2407
2409
let Inst{6-0} = !if(ps.has_soffset, soffset, ?);
2410
+ let Inst{21-14} = op;
2408
2411
let Inst{22} = ps.tfe;
2409
2412
let Inst{62} = ps.offen;
2410
2413
let Inst{63} = ps.idxen;
@@ -2416,33 +2419,27 @@ class VBUFFER_Real <BUF_Pseudo ps, string real_name = ps.Mnemonic> :
2416
2419
let Inst{31-26} = 0b110001;
2417
2420
}
2418
2421
2422
+ class VBUFFER_Real_gfx12<bits<8> op, BUF_Pseudo ps, string real_name> :
2423
+ VBUFFER_Real<op, ps, real_name>,
2424
+ SIMCInstr<ps.PseudoInstr, SIEncodingFamily.GFX12> {
2425
+ let AssemblerPredicate = isGFX12Only;
2426
+ let DecoderNamespace = "GFX12";
2427
+ }
2428
+
2419
2429
multiclass VBUFFER_MUBUF_Real_gfx12<bits<8> op, string real_name> {
2420
2430
defvar ps = !cast<MUBUF_Pseudo>(NAME);
2421
- def _gfx12 : VBUFFER_Real<ps, real_name>,
2422
- SIMCInstr<ps.PseudoInstr, SIEncodingFamily.GFX12> {
2423
- let MUBUF = 1;
2424
-
2431
+ def _gfx12 : VBUFFER_Real_gfx12<op, ps, real_name> {
2425
2432
// Set the last bit of format to 1 to avoid round-trip issues, as some tools
2426
2433
// print BUF_FMT_INVALID for format 0.
2427
2434
let Inst{55} = 0b1;
2428
- let Inst{21-14} = op;
2429
- let AssemblerPredicate = isGFX12Only;
2430
- let DecoderNamespace = "GFX12";
2431
2435
}
2432
2436
}
2433
2437
2434
2438
multiclass VBUFFER_MTBUF_Real_gfx12<bits<4> op, string real_name> {
2435
2439
defvar ps = !cast<MTBUF_Pseudo>(NAME);
2436
- def _gfx12 : VBUFFER_Real<ps, real_name>, SIMCInstr<ps.PseudoInstr, SIEncodingFamily.GFX12> {
2437
- let MTBUF = 1;
2438
-
2439
- bits<7> format;
2440
-
2441
- let Inst{17-14} = op;
2442
- let Inst{21-18} = 0b1000;
2440
+ def _gfx12 : VBUFFER_Real_gfx12<{0b1000, op}, ps, real_name> {
2441
+ bits<7> format;
2443
2442
let Inst{61-55} = format;
2444
- let AssemblerPredicate = isGFX12Only;
2445
- let DecoderNamespace = "GFX12";
2446
2443
}
2447
2444
}
2448
2445
0 commit comments