[Mesa-dev] [PATCH 08/22] intel/compiler: implement 16-bit fsign

Iago Toral Quiroga itoral at igalia.com
Thu May 17 08:46:28 UTC 2018


---
 src/intel/compiler/brw_fs_nir.cpp | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp
index fb5ad7a614a..91283ab4911 100644
--- a/src/intel/compiler/brw_fs_nir.cpp
+++ b/src/intel/compiler/brw_fs_nir.cpp
@@ -868,14 +868,29 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr)
           * Predicated OR ORs 1.0 (0x3f800000) with the sign bit if val is not
           * zero.
           */
-         bld.CMP(bld.null_reg_f(), op[0], brw_imm_f(0.0f), BRW_CONDITIONAL_NZ);
+         fs_reg zero, one_mask, sign_mask;
+         brw_reg_type reg_type;
+         if (type_sz(op[0].type) == 4) {
+            zero = brw_imm_f(0.0f);
+            one_mask = brw_imm_ud(0x3f800000);
+            sign_mask = brw_imm_ud(0x80000000);
+            reg_type = BRW_REGISTER_TYPE_UD;
+         } else {
+            assert(type_sz(op[0].type) == 2);
+            zero = retype(brw_imm_uw(0), BRW_REGISTER_TYPE_HF);
+            one_mask = brw_imm_uw(0x3c00);
+            sign_mask = brw_imm_uw(0x8000);
+            reg_type = BRW_REGISTER_TYPE_UW;
+         }
+
+         bld.CMP(bld.null_reg_f(), op[0], zero, BRW_CONDITIONAL_NZ);
 
-         fs_reg result_int = retype(result, BRW_REGISTER_TYPE_UD);
-         op[0].type = BRW_REGISTER_TYPE_UD;
-         result.type = BRW_REGISTER_TYPE_UD;
-         bld.AND(result_int, op[0], brw_imm_ud(0x80000000u));
+         fs_reg result_int = retype(result, reg_type);
+         op[0].type = reg_type;
+         result.type = reg_type;
+         bld.AND(result_int, op[0], sign_mask);
 
-         inst = bld.OR(result_int, result_int, brw_imm_ud(0x3f800000u));
+         inst = bld.OR(result_int, result_int, one_mask);
          inst->predicate = BRW_PREDICATE_NORMAL;
          if (instr->dest.saturate) {
             inst = bld.MOV(result, result);
-- 
2.14.1



More information about the mesa-dev mailing list