mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +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;
|
let UseNamedOperandTable = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
class MTBUF <bits<3> op, dag outs, dag ins, string asm, list<dag> pattern> :
|
class MTBUF <dag outs, dag ins, string asm, list<dag> pattern> :
|
||||||
InstSI<outs, ins, asm, pattern>, MTBUFe <op> {
|
InstSI<outs, ins, asm, pattern> {
|
||||||
|
|
||||||
let VM_CNT = 1;
|
let VM_CNT = 1;
|
||||||
let EXP_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;
|
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 = ""> {
|
class MUBUFAddr64Table <bit is_addr64, string suffix = ""> {
|
||||||
|
|
||||||
bit IsAddr64 = is_addr64;
|
bit IsAddr64 = is_addr64;
|
||||||
string OpName = NAME # suffix;
|
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>
|
class MUBUFAtomicAddr64 <bits<7> op, dag outs, dag ins, string asm, list<dag> pattern>
|
||||||
: MUBUF <op, outs, ins, asm, 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;
|
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> {
|
class MIMG_Mask <string op, int channels> {
|
||||||
string Op = op;
|
string Op = op;
|
||||||
int Channels = channels;
|
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_X : MTBUF_ <0x00000000, "TBUFFER_LOAD_FORMAT_X", []>;
|
||||||
//def TBUFFER_LOAD_FORMAT_XY : MTBUF_ <0x00000001, "TBUFFER_LOAD_FORMAT_XY", []>;
|
//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_XYZ : MTBUF_ <0x00000002, "TBUFFER_LOAD_FORMAT_XYZ", []>;
|
||||||
def TBUFFER_LOAD_FORMAT_XYZW : MTBUF_Load_Helper <0x00000003, "TBUFFER_LOAD_FORMAT_XYZW", VReg_128>;
|
defm 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>;
|
defm 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>;
|
defm 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>;
|
defm 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_STORE_FORMAT_XYZW : MTBUF_Store_Helper <0x00000007, "TBUFFER_STORE_FORMAT_XYZW", VReg_128>;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// MIMG Instructions
|
// MIMG Instructions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user