From 966995d9117d8d805b1aa992571d076500e3c347 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Tue, 7 Mar 2023 20:40:11 -0800 Subject: [PATCH] intel/fs: Add builder helpers for F32TO16/F16TO32 that work on Gfx7.x These take care of emitting the F32TO16/F16TO32 instructions on Gfx7.x but otherwise just emit a type converting MOV on Gfx8+. Reviewed-by: Lionel Landwerlin Reviewed-by: Sagar Ghuge Part-of: --- src/intel/compiler/brw_fs_builder.h | 32 +++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/intel/compiler/brw_fs_builder.h b/src/intel/compiler/brw_fs_builder.h index d2d8d5e7ef0..8fb01cfd670 100644 --- a/src/intel/compiler/brw_fs_builder.h +++ b/src/intel/compiler/brw_fs_builder.h @@ -627,8 +627,6 @@ namespace brw { ALU2(DP3) ALU2(DP4) ALU2(DPH) - ALU1(F16TO32) - ALU1(F32TO16) ALU1(FBH) ALU1(FBL) ALU1(FRC) @@ -661,6 +659,36 @@ namespace brw { #undef ALU2_ACC #undef ALU2 #undef ALU1 + + instruction * + F32TO16(const dst_reg &dst, const src_reg &src) const + { + assert(dst.type == BRW_REGISTER_TYPE_HF); + assert(src.type == BRW_REGISTER_TYPE_F); + + if (shader->devinfo->ver >= 8) { + return MOV(dst, src); + } else { + assert(shader->devinfo->ver == 7); + return emit(BRW_OPCODE_F32TO16, + retype(dst, BRW_REGISTER_TYPE_W), src); + } + } + + instruction * + F16TO32(const dst_reg &dst, const src_reg &src) const + { + assert(dst.type == BRW_REGISTER_TYPE_F); + assert(src.type == BRW_REGISTER_TYPE_HF); + + if (shader->devinfo->ver >= 8) { + return MOV(dst, src); + } else { + assert(shader->devinfo->ver == 7); + return emit(BRW_OPCODE_F32TO16, + dst, retype(src, BRW_REGISTER_TYPE_W)); + } + } /** @} */ /**