From a482877c701579fbe72c16e41a69ea1170f8baa9 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 8 Apr 2022 15:17:12 -0500 Subject: [PATCH] intel/fs: Implement 16-bit [ui]mul_high Reviewed-by: Matt Turner Reviewed-by: Kenneth Graunke Part-of: --- src/intel/compiler/brw_fs_nir.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index ae2565a6245..81fb50624a3 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -1359,7 +1359,13 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr, case nir_op_imul_high: case nir_op_umul_high: assert(nir_dest_bit_size(instr->dest.dest) < 64); - bld.emit(SHADER_OPCODE_MULH, result, op[0], op[1]); + if (nir_dest_bit_size(instr->dest.dest) == 32) { + bld.emit(SHADER_OPCODE_MULH, result, op[0], op[1]); + } else { + fs_reg tmp = bld.vgrf(brw_reg_type_from_bit_size(32, op[0].type)); + bld.MUL(tmp, op[0], op[1]); + bld.MOV(result, subscript(tmp, result.type, 1)); + } break; case nir_op_idiv: