mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 00:00:12 +01:00
nv50/ir: add CCTL (cache control) op
This commit is contained in:
parent
9db7e09cb4
commit
18fdfbdc32
5 changed files with 33 additions and 4 deletions
|
|
@ -153,6 +153,7 @@ enum operation
|
|||
OP_VSHR,
|
||||
OP_VSHL,
|
||||
OP_VSEL,
|
||||
OP_CCTL, // cache control
|
||||
OP_LAST
|
||||
};
|
||||
|
||||
|
|
@ -199,6 +200,8 @@ enum operation
|
|||
#define NV50_IR_SUBOP_ATOM_XOR 7
|
||||
#define NV50_IR_SUBOP_ATOM_CAS 8
|
||||
#define NV50_IR_SUBOP_ATOM_EXCH 9
|
||||
#define NV50_IR_SUBOP_CCTL_IV 5
|
||||
#define NV50_IR_SUBOP_CCTL_IVALL 6
|
||||
#define NV50_IR_SUBOP_SUST_IGN 0
|
||||
#define NV50_IR_SUBOP_SUST_TRAP 1
|
||||
#define NV50_IR_SUBOP_SUST_SDCL 3
|
||||
|
|
|
|||
|
|
@ -1791,7 +1791,7 @@ MemoryOpt::runOpt(BasicBlock *bb)
|
|||
purgeRecords(NULL, FILE_MEMORY_SHARED);
|
||||
purgeRecords(NULL, FILE_SHADER_OUTPUT);
|
||||
} else
|
||||
if (ldst->op == OP_ATOM) {
|
||||
if (ldst->op == OP_ATOM || ldst->op == OP_CCTL) {
|
||||
if (ldst->src(0).getFile() == FILE_MEMORY_GLOBAL) {
|
||||
purgeRecords(NULL, FILE_MEMORY_LOCAL);
|
||||
purgeRecords(NULL, FILE_MEMORY_GLOBAL);
|
||||
|
|
|
|||
|
|
@ -183,6 +183,7 @@ const char *operationStr[OP_LAST + 1] =
|
|||
"vshr",
|
||||
"vshl",
|
||||
"vsel",
|
||||
"cctl",
|
||||
"(invalid)"
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ const uint8_t Target::operationSrcNr[OP_LAST + 1] =
|
|||
2, 3, 2, 3, // POPCNT, INSBF, EXTBF, PERMT
|
||||
2, 2, // ATOM, BAR
|
||||
2, 2, 2, 2, 3, 2, // VADD, VAVG, VMIN, VMAX, VSAD, VSET,
|
||||
2, 2, 2, // VSHR, VSHL, VSEL
|
||||
2, 2, 2, 1, // VSHR, VSHL, VSEL, CCTL
|
||||
0
|
||||
};
|
||||
|
||||
|
|
@ -123,8 +123,8 @@ const OpClass Target::operationClass[OP_LAST + 1] =
|
|||
OPCLASS_VECTOR, OPCLASS_VECTOR, OPCLASS_VECTOR, OPCLASS_VECTOR,
|
||||
// VSAD, VSET, VSHR, VSHL
|
||||
OPCLASS_VECTOR, OPCLASS_VECTOR, OPCLASS_VECTOR, OPCLASS_VECTOR,
|
||||
// VSEL
|
||||
OPCLASS_VECTOR,
|
||||
// VSEL, CCTL
|
||||
OPCLASS_VECTOR, OPCLASS_CONTROL,
|
||||
OPCLASS_PSEUDO // LAST
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ private:
|
|||
void emitMOV(const Instruction *);
|
||||
void emitATOM(const Instruction *);
|
||||
void emitMEMBAR(const Instruction *);
|
||||
void emitCCTL(const Instruction *);
|
||||
|
||||
void emitINTERP(const Instruction *);
|
||||
void emitPFETCH(const Instruction *);
|
||||
|
|
@ -1885,6 +1886,27 @@ CodeEmitterNVC0::emitMEMBAR(const Instruction *i)
|
|||
emitPredicate(i);
|
||||
}
|
||||
|
||||
void
|
||||
CodeEmitterNVC0::emitCCTL(const Instruction *i)
|
||||
{
|
||||
code[0] = 0x00000005 | (i->subOp << 5);
|
||||
|
||||
if (i->src(0).getFile() == FILE_MEMORY_GLOBAL) {
|
||||
code[1] = 0x98000000;
|
||||
srcAddr32(i->src(0), 28, 2);
|
||||
} else {
|
||||
code[1] = 0xd0000000;
|
||||
setAddress24(i->src(0));
|
||||
}
|
||||
if (uses64bitAddress(i))
|
||||
code[1] |= 1 << 26;
|
||||
srcId(i->src(0).getIndirect(0), 20);
|
||||
|
||||
emitPredicate(i);
|
||||
|
||||
defId(i, 0, 14);
|
||||
}
|
||||
|
||||
void
|
||||
CodeEmitterNVC0::emitSUCLAMPMode(uint16_t subOp)
|
||||
{
|
||||
|
|
@ -2348,6 +2370,9 @@ CodeEmitterNVC0::emitInstruction(Instruction *insn)
|
|||
case OP_MEMBAR:
|
||||
emitMEMBAR(insn);
|
||||
break;
|
||||
case OP_CCTL:
|
||||
emitCCTL(insn);
|
||||
break;
|
||||
case OP_VSHL:
|
||||
emitVSHL(insn);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue