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:
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user