Mesa (master): pan/mdg: remove ins->alu

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jul 30 23:13:18 UTC 2020


Module: Mesa
Branch: master
Commit: 0f0f9ee710f1ea0d42f5abb17721133a4d95c7b7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0f0f9ee710f1ea0d42f5abb17721133a4d95c7b7

Author: Italo Nicola <italonicola at collabora.com>
Date:   Thu Jul 23 14:02:55 2020 +0000

pan/mdg: remove ins->alu

This commit removes the `ins->alu` field from midgard_instruction,
simplifying the code by just recreating midgard_vector_alu later when we
have to emit it.

Signed-off-by: Italo Nicola <italonicola at collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5933>

---

 src/panfrost/midgard/compiler.h      |  4 ----
 src/panfrost/midgard/midgard_emit.c  | 23 ++++++++++++-----------
 src/panfrost/midgard/midgard_print.c | 12 +++++-------
 src/panfrost/midgard/mir.c           |  4 ----
 4 files changed, 17 insertions(+), 26 deletions(-)

diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h
index 134d1ed6d2c..9b12fb113c1 100644
--- a/src/panfrost/midgard/compiler.h
+++ b/src/panfrost/midgard/compiler.h
@@ -129,9 +129,6 @@ typedef struct midgard_instruction {
         /* If the op supports it */
         enum midgard_roundmode roundmode;
 
-        /* Special fields for an ALU instruction */
-        midgard_reg_info registers;
-
         /* For textures: should helpers execute this instruction (instead of
          * just helping with derivatives)? Should helpers terminate after? */
         bool helper_terminate;
@@ -186,7 +183,6 @@ typedef struct midgard_instruction {
 
         union {
                 midgard_load_store_word load_store;
-                midgard_vector_alu alu;
                 midgard_texture_word texture;
                 midgard_branch_extended branch_extended;
                 uint16_t br_compact;
diff --git a/src/panfrost/midgard/midgard_emit.c b/src/panfrost/midgard/midgard_emit.c
index d69cc05a798..826b2741f7a 100644
--- a/src/panfrost/midgard/midgard_emit.c
+++ b/src/panfrost/midgard/midgard_emit.c
@@ -164,7 +164,7 @@ mir_pack_swizzle_64(unsigned *swizzle, unsigned max_component)
 }
 
 static void
-mir_pack_mask_alu(midgard_instruction *ins)
+mir_pack_mask_alu(midgard_instruction *ins, midgard_vector_alu *alu)
 {
         unsigned effective = ins->mask;
 
@@ -177,19 +177,19 @@ mir_pack_mask_alu(midgard_instruction *ins)
 
         if (upper_shift >= 0) {
                 effective >>= upper_shift;
-                ins->alu.dest_override = upper_shift ?
+                alu->dest_override = upper_shift ?
                         midgard_dest_override_upper :
                         midgard_dest_override_lower;
         } else {
-                ins->alu.dest_override = midgard_dest_override_none;
+                alu->dest_override = midgard_dest_override_none;
         }
 
         if (inst_size == 32)
-                ins->alu.mask = expand_writemask(effective, 2);
+                alu->mask = expand_writemask(effective, 2);
         else if (inst_size == 64)
-                ins->alu.mask = expand_writemask(effective, 1);
+                alu->mask = expand_writemask(effective, 1);
         else
-                ins->alu.mask = effective;
+                alu->mask = effective;
 }
 
 static unsigned
@@ -559,10 +559,11 @@ texture_word_from_instr(midgard_instruction *ins)
 static midgard_vector_alu
 vector_alu_from_instr(midgard_instruction *ins)
 {
-        midgard_vector_alu alu = ins->alu;
-        alu.op = ins->op;
-        alu.outmod = ins->outmod;
-        alu.reg_mode = reg_mode_for_bitsize(max_bitsize_for_alu(ins));
+        midgard_vector_alu alu = {
+                .op = ins->op,
+                .outmod = ins->outmod,
+                .reg_mode = reg_mode_for_bitsize(max_bitsize_for_alu(ins))
+        };
 
         if (ins->has_inline_constant) {
                 /* Encode inline 16-bit constant. See disassembler for
@@ -631,8 +632,8 @@ emit_alu_bundle(compiler_context *ctx,
                 }
 
                 if (ins->unit & UNITS_ANY_VECTOR) {
-                        mir_pack_mask_alu(ins);
                         source_alu = vector_alu_from_instr(ins);
+                        mir_pack_mask_alu(ins, &source_alu);
                         mir_pack_vector_srcs(ins, &source_alu);
                         size = sizeof(midgard_vector_alu);
                         source = &source_alu;
diff --git a/src/panfrost/midgard/midgard_print.c b/src/panfrost/midgard/midgard_print.c
index c8370030242..3f72864f811 100644
--- a/src/panfrost/midgard/midgard_print.c
+++ b/src/panfrost/midgard/midgard_print.c
@@ -235,14 +235,12 @@ mir_print_constant_component(FILE *fp, const midgard_constants *consts, unsigned
 static void
 mir_print_embedded_constant(midgard_instruction *ins, unsigned src_idx)
 {
-        midgard_vector_alu_src src;
-
         assert(src_idx <= 1);
-        if (src_idx == 0)
-                src = vector_alu_from_unsigned(ins->alu.src1);
-        else
-                src = vector_alu_from_unsigned(ins->alu.src2);
 
+        unsigned base_size = max_bitsize_for_alu(ins);
+        unsigned sz = nir_alu_type_get_type_size(ins->src_types[src_idx]);
+        bool half = (sz == (base_size >> 1));
+        unsigned mod = mir_pack_mod(ins, src_idx, false);
         unsigned *swizzle = ins->swizzle[src_idx];
         midgard_reg_mode reg_mode = reg_mode_for_bitsize(max_bitsize_for_alu(ins));
         unsigned comp_mask = effective_writemask(ins->op, ins->mask);
@@ -266,7 +264,7 @@ mir_print_embedded_constant(midgard_instruction *ins, unsigned src_idx)
 
                 mir_print_constant_component(stdout, &ins->constants,
                                              swizzle[comp], reg_mode,
-                                             src.half, src.mod, ins->op);
+                                             half, mod, ins->op);
         }
 
         if (num_comp > 1)
diff --git a/src/panfrost/midgard/mir.c b/src/panfrost/midgard/mir.c
index 40669edb0f8..069b8758393 100644
--- a/src/panfrost/midgard/mir.c
+++ b/src/panfrost/midgard/mir.c
@@ -424,10 +424,6 @@ mir_flip(midgard_instruction *ins)
 
         assert(ins->type == TAG_ALU_4);
 
-        temp = ins->alu.src1;
-        ins->alu.src1 = ins->alu.src2;
-        ins->alu.src2 = temp;
-
         temp = ins->src_types[0];
         ins->src_types[0] = ins->src_types[1];
         ins->src_types[1] = temp;



More information about the mesa-commit mailing list