mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
gm107/ir: add emission for BAR
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
8a109c0375
commit
c82086f7e9
1 changed files with 52 additions and 0 deletions
|
|
@ -194,6 +194,7 @@ private:
|
|||
void emitKIL();
|
||||
void emitOUT();
|
||||
|
||||
void emitBAR();
|
||||
void emitMEMBAR();
|
||||
|
||||
void emitVOTE();
|
||||
|
|
@ -2648,6 +2649,54 @@ CodeEmitterGM107::emitOUT()
|
|||
emitGPR (0x00, insn->def(0));
|
||||
}
|
||||
|
||||
void
|
||||
CodeEmitterGM107::emitBAR()
|
||||
{
|
||||
uint8_t subop;
|
||||
|
||||
emitInsn (0xf0a80000);
|
||||
|
||||
switch (insn->subOp) {
|
||||
case NV50_IR_SUBOP_BAR_RED_POPC: subop = 0x02; break;
|
||||
case NV50_IR_SUBOP_BAR_RED_AND: subop = 0x0a; break;
|
||||
case NV50_IR_SUBOP_BAR_RED_OR: subop = 0x12; break;
|
||||
case NV50_IR_SUBOP_BAR_ARRIVE: subop = 0x81; break;
|
||||
default:
|
||||
subop = 0x80;
|
||||
assert(insn->subOp == NV50_IR_SUBOP_BAR_SYNC);
|
||||
break;
|
||||
}
|
||||
|
||||
emitField(0x20, 8, subop);
|
||||
|
||||
// barrier id
|
||||
if (insn->src(0).getFile() == FILE_GPR) {
|
||||
emitGPR(0x08, insn->src(0));
|
||||
} else {
|
||||
ImmediateValue *imm = insn->getSrc(0)->asImm();
|
||||
assert(imm);
|
||||
emitField(0x08, 8, imm->reg.data.u32);
|
||||
emitField(0x2b, 1, 1);
|
||||
}
|
||||
|
||||
// thread count
|
||||
if (insn->src(1).getFile() == FILE_GPR) {
|
||||
emitGPR(0x14, insn->src(1));
|
||||
} else {
|
||||
ImmediateValue *imm = insn->getSrc(0)->asImm();
|
||||
assert(imm);
|
||||
emitField(0x14, 12, imm->reg.data.u32);
|
||||
emitField(0x2c, 1, 1);
|
||||
}
|
||||
|
||||
if (insn->srcExists(2) && (insn->predSrc != 2)) {
|
||||
emitPRED (0x27, insn->src(2));
|
||||
emitField(0x2a, 1, insn->src(2).mod == Modifier(NV50_IR_MOD_NOT));
|
||||
} else {
|
||||
emitField(0x27, 3, 7);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CodeEmitterGM107::emitMEMBAR()
|
||||
{
|
||||
|
|
@ -2978,6 +3027,9 @@ CodeEmitterGM107::emitInstruction(Instruction *i)
|
|||
case OP_RESTART:
|
||||
emitOUT();
|
||||
break;
|
||||
case OP_BAR:
|
||||
emitBAR();
|
||||
break;
|
||||
case OP_MEMBAR:
|
||||
emitMEMBAR();
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue