Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu>
On Mon, Mar 7, 2016 at 12:57 PM, Samuel Pitoiset <samuel.pitoi...@gmail.com> wrote: > This allows to perform atomic operations on shared memory. > > Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> > --- > .../drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 45 > +++++++++++++++++++++- > 1 file changed, 44 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > index 0e621e0..e079a57 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp > @@ -177,6 +177,7 @@ private: > void emitAL2P(); > void emitIPA(); > void emitATOM(); > + void emitATOMS(); > void emitCCTL(); > > void emitPIXLD(); > @@ -2374,6 +2375,45 @@ CodeEmitterGM107::emitATOM() > } > > void > +CodeEmitterGM107::emitATOMS() > +{ > + unsigned dType, subOp; > + > + if (insn->subOp == NV50_IR_SUBOP_ATOM_CAS) { > + switch (insn->dType) { > + case TYPE_U32: dType = 0; break; > + case TYPE_U64: dType = 1; break; > + default: assert(!"unexpected dType"); dType = 0; break; > + } > + subOp = 4; > + > + emitInsn (0xee000000); > + emitField(0x34, 1, dType); > + } else { > + switch (insn->dType) { > + case TYPE_U32: dType = 0; break; > + case TYPE_S32: dType = 1; break; > + case TYPE_U64: dType = 2; break; > + case TYPE_S64: dType = 3; break; > + default: assert(!"unexpected dType"); dType = 0; break; > + } > + > + if (insn->subOp == NV50_IR_SUBOP_ATOM_EXCH) > + subOp = 8; > + else > + subOp = insn->subOp; > + > + emitInsn (0xec000000); > + emitField(0x1c, 3, dType); > + } > + > + emitField(0x34, 4, subOp); > + emitGPR (0x14, insn->src(1)); > + emitADDR (0x08, 0x12, 22, 0, insn->src(0)); > + emitGPR (0x00, insn->def(0)); > +} > + > +void > CodeEmitterGM107::emitCCTL() > { > unsigned width; > @@ -2967,7 +3007,10 @@ CodeEmitterGM107::emitInstruction(Instruction *i) > } > break; > case OP_ATOM: > - emitATOM(); > + if (insn->src(0).getFile() == FILE_MEMORY_SHARED) > + emitATOMS(); > + else > + emitATOM(); > break; > case OP_CCTL: > emitCCTL(); > -- > 2.7.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev