v3d: Eliminate the TLB and TLBU files.
authorEric Anholt <eric@anholt.net>
Wed, 27 Feb 2019 05:34:22 +0000 (21:34 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 5 Mar 2019 20:57:39 +0000 (12:57 -0800)
We can just use the magic register file like we do for other magic waddrs.

src/broadcom/compiler/nir_to_vir.c
src/broadcom/compiler/v3d_compiler.h
src/broadcom/compiler/vir_dump.c
src/broadcom/compiler/vir_to_qpu.c

index afc9f1c7ed27e237b7f7b625c87561cf92588725..e2407f787c79651047dcfa6a527572cb8a4e897f 100644 (file)
@@ -1137,9 +1137,10 @@ emit_frag_end(struct v3d_compile *c)
                                         vir_FTOC(c, color[3])));
         }
 
+        struct qreg tlb_reg = vir_magic_reg(V3D_QPU_WADDR_TLB);
+        struct qreg tlbu_reg = vir_magic_reg(V3D_QPU_WADDR_TLBU);
         if (c->output_position_index != -1) {
-                struct qinst *inst = vir_MOV_dest(c,
-                                                  vir_reg(QFILE_TLBU, 0),
+                struct qinst *inst = vir_MOV_dest(c, tlbu_reg,
                                                   c->outputs[c->output_position_index]);
                 uint8_t tlb_specifier = TLB_TYPE_DEPTH;
 
@@ -1167,8 +1168,7 @@ emit_frag_end(struct v3d_compile *c)
                  */
                 c->s->info.fs.uses_discard = true;
 
-                struct qinst *inst = vir_MOV_dest(c,
-                                                  vir_reg(QFILE_TLBU, 0),
+                struct qinst *inst = vir_MOV_dest(c, tlbu_reg,
                                                   vir_nop_reg());
                 uint8_t tlb_specifier = TLB_TYPE_DEPTH;
 
@@ -1221,14 +1221,13 @@ emit_frag_end(struct v3d_compile *c)
                         conf |= ((num_components - 1) <<
                                  TLB_VEC_SIZE_MINUS_1_SHIFT);
 
-                        inst = vir_MOV_dest(c, vir_reg(QFILE_TLBU, 0), color[0]);
+                        inst = vir_MOV_dest(c, tlbu_reg, color[0]);
                         inst->uniform = vir_get_uniform_index(c,
                                                               QUNIFORM_CONSTANT,
                                                               conf);
 
                         for (int i = 1; i < num_components; i++) {
-                                inst = vir_MOV_dest(c, vir_reg(QFILE_TLB, 0),
-                                                    color[i]);
+                                inst = vir_MOV_dest(c, tlb_reg, color[i]);
                         }
                         break;
 
@@ -1260,28 +1259,28 @@ emit_frag_end(struct v3d_compile *c)
                                 a = vir_uniform_f(c, 1.0);
 
                         if (c->fs_key->f32_color_rb & (1 << rt)) {
-                                inst = vir_MOV_dest(c, vir_reg(QFILE_TLBU, 0), r);
+                                inst = vir_MOV_dest(c, tlbu_reg, r);
                                 inst->uniform = vir_get_uniform_index(c,
                                                                       QUNIFORM_CONSTANT,
                                                                       conf);
 
                                 if (num_components >= 2)
-                                        vir_MOV_dest(c, vir_reg(QFILE_TLB, 0), g);
+                                        vir_MOV_dest(c, tlb_reg, g);
                                 if (num_components >= 3)
-                                        vir_MOV_dest(c, vir_reg(QFILE_TLB, 0), b);
+                                        vir_MOV_dest(c, tlb_reg, b);
                                 if (num_components >= 4)
-                                        vir_MOV_dest(c, vir_reg(QFILE_TLB, 0), a);
+                                        vir_MOV_dest(c, tlb_reg, a);
                         } else {
-                                inst = vir_VFPACK_dest(c, vir_reg(QFILE_TLB, 0), r, g);
+                                inst = vir_VFPACK_dest(c, tlb_reg, r, g);
                                 if (conf != ~0) {
-                                        inst->dst.file = QFILE_TLBU;
+                                        inst->dst = tlbu_reg;
                                         inst->uniform = vir_get_uniform_index(c,
                                                                               QUNIFORM_CONSTANT,
                                                                               conf);
                                 }
 
                                 if (num_components >= 3)
-                                        inst = vir_VFPACK_dest(c, vir_reg(QFILE_TLB, 0), b, a);
+                                        inst = vir_VFPACK_dest(c, tlb_reg, b, a);
                         }
                         break;
                 }
index 5bc514ce0a0d7b9ba582c0fc523b0678cc8c6273..1f908648f3e4d93bd699f031170afa160fd7c7ae 100644 (file)
@@ -69,8 +69,6 @@ enum qfile {
          * or physical registers later.
          */
         QFILE_TEMP,
-        QFILE_TLB,
-        QFILE_TLBU,
 
         /**
          * VPM reads use this with an index value to say what part of the VPM
@@ -104,6 +102,11 @@ static inline struct qreg vir_reg(enum qfile file, uint32_t index)
         return (struct qreg){file, index};
 }
 
+static inline struct qreg vir_magic_reg(uint32_t index)
+{
+        return (struct qreg){QFILE_MAGIC, index};
+}
+
 static inline struct qreg vir_nop_reg(void)
 {
         return (struct qreg){QFILE_NULL, 0};
index ce037ff3993db963da2d0947d9d460d8dc4a2ba0..7f58c59a31b48821dc479c44faa523ead3a159f5 100644 (file)
@@ -133,12 +133,6 @@ static void
 vir_print_reg(struct v3d_compile *c, const struct qinst *inst,
               struct qreg reg)
 {
-        static const char *files[] = {
-                [QFILE_TEMP] = "t",
-                [QFILE_TLB] = "tlb",
-                [QFILE_TLBU] = "tlbu",
-        };
-
         switch (reg.file) {
 
         case QFILE_NULL:
@@ -177,13 +171,8 @@ vir_print_reg(struct v3d_compile *c, const struct qinst *inst,
                         reg.index / 4, reg.index % 4);
                 break;
 
-        case QFILE_TLB:
-        case QFILE_TLBU:
-                fprintf(stderr, "%s", files[reg.file]);
-                break;
-
-        default:
-                fprintf(stderr, "%s%d", files[reg.file], reg.index);
+        case QFILE_TEMP:
+                fprintf(stderr, "t%d", reg.index);
                 break;
         }
 }
index bbc2950432693fc448db953064a7d7e833e6f0d3..111a6c929a291d5078e850fb92c1fcdd62eaed87 100644 (file)
@@ -240,10 +240,6 @@ v3d_generate_code_block(struct v3d_compile *c,
 
                                 src[i] = qpu_acc(3);
                                 break;
-
-                        case QFILE_TLB:
-                        case QFILE_TLBU:
-                                unreachable("bad vir src file");
                         }
                 }
 
@@ -269,14 +265,6 @@ v3d_generate_code_block(struct v3d_compile *c,
                         dst = qpu_magic(V3D_QPU_WADDR_VPM);
                         break;
 
-                case QFILE_TLB:
-                        dst = qpu_magic(V3D_QPU_WADDR_TLB);
-                        break;
-
-                case QFILE_TLBU:
-                        dst = qpu_magic(V3D_QPU_WADDR_TLBU);
-                        break;
-
                 case QFILE_SMALL_IMM:
                 case QFILE_LOAD_IMM:
                         assert(!"not reached");