pan/bi: Handle round opcodes in frontend
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Sat, 28 Mar 2020 00:28:09 +0000 (20:28 -0400)
committerMarge Bot <eric+marge@anholt.net>
Tue, 31 Mar 2020 01:12:26 +0000 (01:12 +0000)
These correspond to various ops routed through BI_ROUND

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4382>

src/panfrost/bifrost/bifrost_compile.c

index 2d137605bf4cfab13fdab64aae673930c701b0ca..f78dfddbcce4d572c411d70bf401bf37031b7360 100644 (file)
@@ -413,6 +413,12 @@ bi_class_for_nir_alu(nir_op op)
         case nir_op_mov:
                 return BI_MOV;
 
+        case nir_op_fround_even:
+        case nir_op_fceil:
+        case nir_op_ffloor:
+        case nir_op_ftrunc:
+                return BI_ROUND;
+
         case nir_op_frcp:
         case nir_op_frsq:
         case nir_op_fsin:
@@ -607,6 +613,22 @@ emit_alu(bi_context *ctx, nir_alu_instr *instr)
         BI_CASE_CMP(nir_op_ine)
                 alu.op.compare = bi_cond_for_nir(instr->op, false);
                 break;
+        case nir_op_fround_even:
+                alu.op.round = BI_ROUND_MODE;
+                alu.roundmode = BIFROST_RTE;
+                break;
+        case nir_op_fceil:
+                alu.op.round = BI_ROUND_MODE;
+                alu.roundmode = BIFROST_RTP;
+                break;
+        case nir_op_ffloor:
+                alu.op.round = BI_ROUND_MODE;
+                alu.roundmode = BIFROST_RTN;
+                break;
+        case nir_op_ftrunc:
+                alu.op.round = BI_ROUND_MODE;
+                alu.roundmode = BIFROST_RTZ;
+                break;
         default:
                 break;
         }