gk110/ir: add emission for OP_PERMT
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 18 Apr 2016 16:48:52 +0000 (18:48 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 26 Apr 2016 17:47:49 +0000 (19:47 +0200)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp

index 6fbd04df69b9a56ac0ae7df144b0561ba99c1404..0968f94a1f1f773f2dcb64e76217c2196e550c0f 100644 (file)
@@ -102,6 +102,7 @@ private:
    void emitINSBF(const Instruction *);
    void emitEXTBF(const Instruction *);
    void emitBFIND(const Instruction *);
+   void emitPERMT(const Instruction *);
    void emitShift(const Instruction *);
 
    void emitSFnOp(const Instruction *, uint8_t subOp);
@@ -832,6 +833,14 @@ CodeEmitterGK110::emitBFIND(const Instruction *i)
       code[1] |= 0x1000;
 }
 
+void
+CodeEmitterGK110::emitPERMT(const Instruction *i)
+{
+   emitForm_21(i, 0x1e0, 0xb60);
+
+   code[1] |= i->subOp << 19;
+}
+
 void
 CodeEmitterGK110::emitShift(const Instruction *i)
 {
@@ -2143,6 +2152,9 @@ CodeEmitterGK110::emitInstruction(Instruction *insn)
    case OP_BFIND:
       emitBFIND(insn);
       break;
+   case OP_PERMT:
+      emitPERMT(insn);
+      break;
    case OP_JOIN:
       emitNOP(insn);
       insn->join = 1;