From 0f0f9ee710f1ea0d42f5abb17721133a4d95c7b7 Mon Sep 17 00:00:00 2001 From: Italo Nicola Date: Thu, 23 Jul 2020 14:02:55 +0000 Subject: [PATCH] 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 Reviewed-by: Alyssa Rosenzweig Part-of: --- 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;