From: Eduardo Lima Mitev Date: Fri, 28 Jun 2019 07:39:38 +0000 (+0200) Subject: nir: Add a new ALU nir_op_imad24_ir3 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=32e5fbf47cbe6cca136076c5b25bfe7208c0eec8;p=mesa.git nir: Add a new ALU nir_op_imad24_ir3 ir3 compiler has a signed integer multiply-add instruction (MAD_S24) that is used for different offset calculations in the backend. Since we intend to move some of these calculations to NIR, we need a new ALU op that can directly represent it. Signed-off-by: Rob Clark Acked-by: Jason Ekstrand Reviewed-by: Kristian H. Kristensen Reviewed-by: Eduardo Lima Mitev --- diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py index 5d589ee20bf..b759910cd80 100644 --- a/src/compiler/nir/nir_opcodes.py +++ b/src/compiler/nir/nir_opcodes.py @@ -1054,3 +1054,10 @@ opcode("imadsh_mix16", 1, tint32, [1, 1, 1], [tint32, tint32, tint32], False, "", """ dst.x = ((((src0.x & 0xffff0000) >> 16) * (src1.x & 0x0000ffff)) << 16) + src2.x; """) + +# ir3-specific instruction that maps directly to ir3 mad.s24. +# +# 24b multiply into 32b result (with sign extension) plus 32b int +triop("imad24_ir3", tint32, _2src_commutative, + "(((int32_t)src0 << 8) >> 8) * (((int32_t)src1 << 8) >> 8) + src2") +