[Mesa-dev] [PATCH 4/7] i965: Decode three-source register types directly.
Kenneth Graunke
kenneth at whitecape.org
Tue Dec 10 02:33:15 PST 2013
Three-source instructions use a different encoding for register types
(and have a much more limited set to choose from).
Previously, we translated those into BRW_REGISTER_TYPE_* values, then
reused the existing reg_encoding mapping.
Doing it directly is more straightforward and actually less code.
Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/mesa/drivers/dri/i965/brw_disasm.c | 39 ++++++++++++----------------------
1 file changed, 14 insertions(+), 25 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c b/src/mesa/drivers/dri/i965/brw_disasm.c
index 729a614..4334874 100644
--- a/src/mesa/drivers/dri/i965/brw_disasm.c
+++ b/src/mesa/drivers/dri/i965/brw_disasm.c
@@ -255,6 +255,12 @@ const char * const reg_encoding[8] = {
[7] = "F"
};
+const char * const three_source_reg_encoding[] = {
+ [BRW_3SRC_TYPE_F] = "F",
+ [BRW_3SRC_TYPE_D] = "D",
+ [BRW_3SRC_TYPE_UD] = "UD",
+};
+
const int reg_type_size[8] = {
[0] = 4,
[1] = 4,
@@ -471,19 +477,6 @@ static int print_opcode (FILE *file, int id)
return 0;
}
-static int three_source_type_to_reg_type(int three_source_type)
-{
- switch (three_source_type) {
- case BRW_3SRC_TYPE_F:
- return BRW_REGISTER_TYPE_F;
- case BRW_3SRC_TYPE_D:
- return BRW_REGISTER_TYPE_D;
- case BRW_3SRC_TYPE_UD:
- return BRW_REGISTER_TYPE_UD;
- }
- return -1;
-}
-
static int reg (FILE *file, unsigned _reg_file, unsigned _reg_nr)
{
int err = 0;
@@ -610,9 +603,8 @@ static int dest_3src (FILE *file, struct brw_instruction *inst)
format (file, ".%d", inst->bits1.da3src.dest_subreg_nr);
string (file, "<1>");
err |= control (file, "writemask", writemask, inst->bits1.da3src.dest_writemask, NULL);
- err |= control (file, "dest reg encoding", reg_encoding,
- three_source_type_to_reg_type(inst->bits1.da3src.dst_type),
- NULL);
+ err |= control (file, "dest reg encoding", three_source_reg_encoding,
+ inst->bits1.da3src.dst_type, NULL);
return 0;
}
@@ -750,9 +742,8 @@ static int src0_3src (FILE *file, struct brw_instruction *inst)
if (inst->bits2.da3src.src0_subreg_nr)
format (file, ".%d", inst->bits2.da3src.src0_subreg_nr);
string (file, "<4,1,1>");
- err |= control (file, "src da16 reg type", reg_encoding,
- three_source_type_to_reg_type(inst->bits1.da3src.src_type),
- NULL);
+ err |= control (file, "src da16 reg type", three_source_reg_encoding,
+ inst->bits1.da3src.src_type, NULL);
/*
* Three kinds of swizzle display:
* identity - nothing printed
@@ -803,9 +794,8 @@ static int src1_3src (FILE *file, struct brw_instruction *inst)
if (src1_subreg_nr)
format (file, ".%d", src1_subreg_nr);
string (file, "<4,1,1>");
- err |= control (file, "src da16 reg type", reg_encoding,
- three_source_type_to_reg_type(inst->bits1.da3src.src_type),
- NULL);
+ err |= control (file, "src da16 reg type", three_source_reg_encoding,
+ inst->bits1.da3src.src_type, NULL);
/*
* Three kinds of swizzle display:
* identity - nothing printed
@@ -855,9 +845,8 @@ static int src2_3src (FILE *file, struct brw_instruction *inst)
if (inst->bits3.da3src.src2_subreg_nr)
format (file, ".%d", inst->bits3.da3src.src2_subreg_nr);
string (file, "<4,1,1>");
- err |= control (file, "src da16 reg type", reg_encoding,
- three_source_type_to_reg_type(inst->bits1.da3src.src_type),
- NULL);
+ err |= control (file, "src da16 reg type", three_source_reg_encoding,
+ inst->bits1.da3src.src_type, NULL);
/*
* Three kinds of swizzle display:
* identity - nothing printed
--
1.8.4.4
More information about the mesa-dev
mailing list