aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2019-02-26 21:34:22 -0800
committerEric Anholt <[email protected]>2019-03-05 12:57:39 -0800
commite8ee1f8eaf5ea7d688621eac8cd8b2729626d89f (patch)
treed3fd5c7966bca96f2a67cdda825a81648e171e26 /src
parent110f14d4b4bdee779a35c26e3224a9d28eb81fa7 (diff)
v3d: Eliminate the TLB and TLBU files.
We can just use the magic register file like we do for other magic waddrs.
Diffstat (limited to 'src')
-rw-r--r--src/broadcom/compiler/nir_to_vir.c27
-rw-r--r--src/broadcom/compiler/v3d_compiler.h7
-rw-r--r--src/broadcom/compiler/vir_dump.c15
-rw-r--r--src/broadcom/compiler/vir_to_qpu.c12
4 files changed, 20 insertions, 41 deletions
diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c
index afc9f1c7ed2..e2407f787c7 100644
--- a/src/broadcom/compiler/nir_to_vir.c
+++ b/src/broadcom/compiler/nir_to_vir.c
@@ -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;
}
diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h
index 5bc514ce0a0..1f908648f3e 100644
--- a/src/broadcom/compiler/v3d_compiler.h
+++ b/src/broadcom/compiler/v3d_compiler.h
@@ -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};
diff --git a/src/broadcom/compiler/vir_dump.c b/src/broadcom/compiler/vir_dump.c
index ce037ff3993..7f58c59a31b 100644
--- a/src/broadcom/compiler/vir_dump.c
+++ b/src/broadcom/compiler/vir_dump.c
@@ -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;
}
}
diff --git a/src/broadcom/compiler/vir_to_qpu.c b/src/broadcom/compiler/vir_to_qpu.c
index bbc29504326..111a6c929a2 100644
--- a/src/broadcom/compiler/vir_to_qpu.c
+++ b/src/broadcom/compiler/vir_to_qpu.c
@@ -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");