From c62b1b92f7da2563511581a2a74048334585da27 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 26 Apr 2016 18:14:05 +0200 Subject: [PATCH] gk110/ir: add emission for (a OP b) OP c This is pretty similar to NVC0 except that offsets have changed. Signed-off-by: Samuel Pitoiset Reviewed-by: Ilia Mirkin Cc: "11.1 11.2" --- .../nouveau/codegen/nv50_ir_emit_gk110.cpp | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp index 519da6932e1..6fbd04df69b 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp @@ -752,6 +752,32 @@ CodeEmitterGK110::emitNOT(const Instruction *i) void CodeEmitterGK110::emitLogicOp(const Instruction *i, uint8_t subOp) { + if (i->def(0).getFile() == FILE_PREDICATE) { + code[0] = 0x00000002 | (subOp << 27); + code[1] = 0x84800000; + + emitPredicate(i); + + defId(i->def(0), 5); + srcId(i->src(0), 14); + if (i->src(0).mod == Modifier(NV50_IR_MOD_NOT)) code[0] |= 1 << 17; + srcId(i->src(1), 32); + if (i->src(1).mod == Modifier(NV50_IR_MOD_NOT)) code[1] |= 1 << 3; + + if (i->defExists(1)) { + defId(i->def(1), 2); + } else { + code[0] |= 7 << 2; + } + // (a OP b) OP c + if (i->predSrc != 2 && i->srcExists(2)) { + code[1] |= subOp << 16; + srcId(i->src(2), 42); + if (i->src(2).mod == Modifier(NV50_IR_MOD_NOT)) code[1] |= 1 << 13; + } else { + code[1] |= 7 << 10; + } + } else if (isLIMM(i->src(1), TYPE_S32)) { emitForm_L(i, 0x200, 0, i->src(1).mod); code[1] |= subOp << 24; -- 2.30.2