From fd191067737dadbaea7b1de735973b8914e7112c Mon Sep 17 00:00:00 2001 From: "Juan A. Suarez Romero" Date: Wed, 9 Oct 2024 09:50:53 +0200 Subject: [PATCH] broadcom/compiler: fix fp16 conversion operations The case for converting a 32-bit integer to 16-bit float is not correctly implemented. Fixes: 214121e9b00 ("broadcom/compiler: handle fp16 conversion ops") Reviewed-by: Iago Toral Quiroga Signed-off-by: Juan A. Suarez Romero Part-of: --- src/broadcom/compiler/nir_to_vir.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index bba6245d3ae..2a12438b55f 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1469,6 +1469,8 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr) uint32_t mask = bit_size == 16 ? 0xffff : 0xff; result = vir_AND(c, src[0], vir_uniform_ui(c, mask)); result = sign_extend(c, result, bit_size, 32); + } else { + result = src[0]; } result = vir_ITOF(c, result); vir_set_pack(c->defs[result.index], V3D_QPU_PACK_L); @@ -1481,6 +1483,8 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr) if (bit_size < 32) { uint32_t mask = bit_size == 16 ? 0xffff : 0xff; result = vir_AND(c, src[0], vir_uniform_ui(c, mask)); + } else { + result = src[0]; } result = vir_UTOF(c, result); vir_set_pack(c->defs[result.index], V3D_QPU_PACK_L);