pan/bi: Add support for ishr

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7472>
This commit is contained in:
Boris Brezillon
2020-11-06 11:51:48 +01:00
parent 3257ad21f3
commit af70987b36
3 changed files with 15 additions and 1 deletions
+4
View File
@@ -426,6 +426,7 @@ BI_PACK_SHIFT(rshift_or)
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)
@@ -443,6 +444,9 @@ 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");
}
+9
View File
@@ -896,6 +896,7 @@ bi_class_for_nir_alu(nir_op 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)
@@ -1210,6 +1211,14 @@ emit_alu(bi_context *ctx, nir_alu_instr *instr)
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;
+2 -1
View File
@@ -193,7 +193,8 @@ enum bi_minmax_op {
enum bi_bitwise_op {
BI_BITWISE_AND,
BI_BITWISE_OR,
BI_BITWISE_XOR
BI_BITWISE_XOR,
BI_BITWISE_ARSHIFT,
};
enum bi_imath_op {