mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-30 04:35:00 +00:00
R600/SI: Add generic pseudo MTBUF instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218766 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f69ae4815a
commit
cbb63311cd
@ -555,8 +555,8 @@ class MUBUF <bits<7> op, dag outs, dag ins, string asm, list<dag> pattern> :
|
||||
let UseNamedOperandTable = 1;
|
||||
}
|
||||
|
||||
class MTBUF <bits<3> op, dag outs, dag ins, string asm, list<dag> pattern> :
|
||||
InstSI<outs, ins, asm, pattern>, MTBUFe <op> {
|
||||
class MTBUF <dag outs, dag ins, string asm, list<dag> pattern> :
|
||||
InstSI<outs, ins, asm, pattern> {
|
||||
|
||||
let VM_CNT = 1;
|
||||
let EXP_CNT = 1;
|
||||
|
@ -968,25 +968,65 @@ class DS_1A1D_NORET <bits<8> op, string asm, RegisterClass rc, string noRetOp =
|
||||
let mayLoad = 1;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// MTBUF classes
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
class MTBUF_Pseudo <string opName, dag outs, dag ins, list<dag> pattern> :
|
||||
MTBUF <outs, ins, "", pattern>,
|
||||
SIMCInstr<opName, SISubtarget.NONE> {
|
||||
let isPseudo = 1;
|
||||
}
|
||||
|
||||
class MTBUF_Real_si <bits<3> op, string opName, dag outs, dag ins,
|
||||
string asm> :
|
||||
MTBUF <outs, ins, asm, []>,
|
||||
MTBUFe <op>,
|
||||
SIMCInstr<opName, SISubtarget.SI>;
|
||||
|
||||
multiclass MTBUF_m <bits<3> op, string opName, dag outs, dag ins, string asm,
|
||||
list<dag> pattern> {
|
||||
|
||||
def "" : MTBUF_Pseudo <opName, outs, ins, pattern>;
|
||||
|
||||
def _si : MTBUF_Real_si <op, opName, outs, ins, asm>;
|
||||
|
||||
}
|
||||
|
||||
let mayStore = 1, mayLoad = 0 in {
|
||||
|
||||
multiclass MTBUF_Store_Helper <bits<3> op, string opName,
|
||||
RegisterClass regClass> : MTBUF_m <
|
||||
op, opName, (outs),
|
||||
(ins regClass:$vdata, u16imm:$offset, i1imm:$offen, i1imm:$idxen, i1imm:$glc,
|
||||
i1imm:$addr64, i8imm:$dfmt, i8imm:$nfmt, VReg_32:$vaddr,
|
||||
SReg_128:$srsrc, i1imm:$slc, i1imm:$tfe, SSrc_32:$soffset),
|
||||
opName#" $vdata, $offset, $offen, $idxen, $glc, $addr64, $dfmt,"
|
||||
#" $nfmt, $vaddr, $srsrc, $slc, $tfe, $soffset", []
|
||||
>;
|
||||
|
||||
} // mayStore = 1, mayLoad = 0
|
||||
|
||||
let mayLoad = 1, mayStore = 0 in {
|
||||
|
||||
multiclass MTBUF_Load_Helper <bits<3> op, string opName,
|
||||
RegisterClass regClass> : MTBUF_m <
|
||||
op, opName, (outs regClass:$dst),
|
||||
(ins u16imm:$offset, i1imm:$offen, i1imm:$idxen, i1imm:$glc, i1imm:$addr64,
|
||||
i8imm:$dfmt, i8imm:$nfmt, VReg_32:$vaddr, SReg_128:$srsrc,
|
||||
i1imm:$slc, i1imm:$tfe, SSrc_32:$soffset),
|
||||
opName#" $dst, $offset, $offen, $idxen, $glc, $addr64, $dfmt,"
|
||||
#" $nfmt, $vaddr, $srsrc, $slc, $tfe, $soffset", []
|
||||
>;
|
||||
|
||||
} // mayLoad = 1, mayStore = 0
|
||||
|
||||
class MUBUFAddr64Table <bit is_addr64, string suffix = ""> {
|
||||
|
||||
bit IsAddr64 = is_addr64;
|
||||
string OpName = NAME # suffix;
|
||||
}
|
||||
|
||||
class MTBUF_Store_Helper <bits<3> op, string asm, RegisterClass regClass> : MTBUF <
|
||||
op,
|
||||
(outs),
|
||||
(ins regClass:$vdata, u16imm:$offset, i1imm:$offen, i1imm:$idxen, i1imm:$glc,
|
||||
i1imm:$addr64, i8imm:$dfmt, i8imm:$nfmt, VReg_32:$vaddr,
|
||||
SReg_128:$srsrc, i1imm:$slc, i1imm:$tfe, SSrc_32:$soffset),
|
||||
asm#" $vdata, $offset, $offen, $idxen, $glc, $addr64, $dfmt,"
|
||||
#" $nfmt, $vaddr, $srsrc, $slc, $tfe, $soffset",
|
||||
[]> {
|
||||
let mayStore = 1;
|
||||
let mayLoad = 0;
|
||||
}
|
||||
|
||||
class MUBUFAtomicAddr64 <bits<7> op, dag outs, dag ins, string asm, list<dag> pattern>
|
||||
: MUBUF <op, outs, ins, asm, pattern> {
|
||||
|
||||
@ -1202,19 +1242,6 @@ class FLAT_Store_Helper <bits<7> op, string name, RegisterClass vdataClass> :
|
||||
let tfe = 0;
|
||||
}
|
||||
|
||||
class MTBUF_Load_Helper <bits<3> op, string asm, RegisterClass regClass> : MTBUF <
|
||||
op,
|
||||
(outs regClass:$dst),
|
||||
(ins u16imm:$offset, i1imm:$offen, i1imm:$idxen, i1imm:$glc, i1imm:$addr64,
|
||||
i8imm:$dfmt, i8imm:$nfmt, VReg_32:$vaddr, SReg_128:$srsrc,
|
||||
i1imm:$slc, i1imm:$tfe, SSrc_32:$soffset),
|
||||
asm#" $dst, $offset, $offen, $idxen, $glc, $addr64, $dfmt,"
|
||||
#" $nfmt, $vaddr, $srsrc, $slc, $tfe, $soffset",
|
||||
[]> {
|
||||
let mayLoad = 1;
|
||||
let mayStore = 0;
|
||||
}
|
||||
|
||||
class MIMG_Mask <string op, int channels> {
|
||||
string Op = op;
|
||||
int Channels = channels;
|
||||
|
@ -935,11 +935,11 @@ defm BUFFER_ATOMIC_ADD : MUBUF_Atomic <
|
||||
//def TBUFFER_LOAD_FORMAT_X : MTBUF_ <0x00000000, "TBUFFER_LOAD_FORMAT_X", []>;
|
||||
//def TBUFFER_LOAD_FORMAT_XY : MTBUF_ <0x00000001, "TBUFFER_LOAD_FORMAT_XY", []>;
|
||||
//def TBUFFER_LOAD_FORMAT_XYZ : MTBUF_ <0x00000002, "TBUFFER_LOAD_FORMAT_XYZ", []>;
|
||||
def TBUFFER_LOAD_FORMAT_XYZW : MTBUF_Load_Helper <0x00000003, "TBUFFER_LOAD_FORMAT_XYZW", VReg_128>;
|
||||
def TBUFFER_STORE_FORMAT_X : MTBUF_Store_Helper <0x00000004, "TBUFFER_STORE_FORMAT_X", VReg_32>;
|
||||
def TBUFFER_STORE_FORMAT_XY : MTBUF_Store_Helper <0x00000005, "TBUFFER_STORE_FORMAT_XY", VReg_64>;
|
||||
def TBUFFER_STORE_FORMAT_XYZ : MTBUF_Store_Helper <0x00000006, "TBUFFER_STORE_FORMAT_XYZ", VReg_128>;
|
||||
def TBUFFER_STORE_FORMAT_XYZW : MTBUF_Store_Helper <0x00000007, "TBUFFER_STORE_FORMAT_XYZW", VReg_128>;
|
||||
defm TBUFFER_LOAD_FORMAT_XYZW : MTBUF_Load_Helper <0x00000003, "TBUFFER_LOAD_FORMAT_XYZW", VReg_128>;
|
||||
defm TBUFFER_STORE_FORMAT_X : MTBUF_Store_Helper <0x00000004, "TBUFFER_STORE_FORMAT_X", VReg_32>;
|
||||
defm TBUFFER_STORE_FORMAT_XY : MTBUF_Store_Helper <0x00000005, "TBUFFER_STORE_FORMAT_XY", VReg_64>;
|
||||
defm TBUFFER_STORE_FORMAT_XYZ : MTBUF_Store_Helper <0x00000006, "TBUFFER_STORE_FORMAT_XYZ", VReg_128>;
|
||||
defm TBUFFER_STORE_FORMAT_XYZW : MTBUF_Store_Helper <0x00000007, "TBUFFER_STORE_FORMAT_XYZW", VReg_128>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// MIMG Instructions
|
||||
|
Loading…
x
Reference in New Issue
Block a user