BI_PACK_SHIFT(lshift_or)
BI_PACK_SHIFT(rshift_xor)
BI_PACK_SHIFT(lshift_xor)
+BI_PACK_SHIFT(arshift)
static unsigned
bi_pack_fma_bitwise(bi_clause *clause, bi_instruction *ins, bi_registers *regs)
return ins->bitwise.rshift ?
bi_pack_fma_rshift_xor(clause, ins, regs) :
bi_pack_fma_lshift_xor(clause, ins, regs);
+ case BI_BITWISE_ARSHIFT:
+ assert(ins->bitwise.rshift);
+ return bi_pack_fma_arshift(clause, ins, regs);
default:
unreachable("Invalid bitwise op");
}
case nir_op_ixor:
case nir_op_inot:
case nir_op_ishl:
+ case nir_op_ishr:
return BI_BITWISE;
BI_CASE_CMP(nir_op_flt)
alu.src_types[2] = nir_type_uint8;
alu.src[1] = BIR_INDEX_ZERO;
break;
+ case nir_op_ishr:
+ alu.op.bitwise = BI_BITWISE_ARSHIFT;
+ alu.bitwise.rshift = true;
+ /* move src1 to src2 and replace with zero. underlying op is (src0 >> src2) */
+ alu.src[2] = alu.src[1];
+ alu.src_types[2] = nir_type_uint8;
+ alu.src[1] = BIR_INDEX_ZERO;
+ break;
case nir_op_imul:
alu.op.imul = BI_IMUL_IMUL;
break;