From b56e50b8afbb386bcf30f9a4f07981a123dba1c1 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Fri, 14 Mar 2014 08:16:00 -0400 Subject: [PATCH] nv50/ir/gk110: use shl/shr instead of lshf/rshf so that c[] is supported Signed-off-by: Ilia Mirkin --- .../nouveau/codegen/nv50_ir_emit_gk110.cpp | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) 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 d248a1a8c1b..07d7e1929fe 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp @@ -695,27 +695,16 @@ CodeEmitterGK110::emitINSBF(const Instruction *i) void CodeEmitterGK110::emitShift(const Instruction *i) { - const bool sar = i->op == OP_SHR && isSignedType(i->sType); - - if (sar) { - emitForm_21(i, 0x214, 0x014); - code[1] |= 1 << 19; - } else if (i->op == OP_SHR) { - // this is actually RSHF - emitForm_21(i, 0x27c, 0x87c); - code[1] |= GK110_GPR_ZERO << 10; + emitForm_21(i, 0x214, 0xc14); + if (isSignedType(i->dType)) + code[1] |= 1 << 19; } else { - // this is actually LSHF - emitForm_21(i, 0x1fc, 0xb7c); - code[1] |= GK110_GPR_ZERO << 10; + emitForm_21(i, 0x224, 0xc24); } - if (i->subOp == NV50_IR_SUBOP_SHIFT_WRAP) { - if (!sar) - code[1] |= 1 << 21; - // XXX: find wrap modifier for SHR S32 - } + if (i->subOp == NV50_IR_SUBOP_SHIFT_WRAP) + code[1] |= 1 << 10; } void -- 2.30.2