Mesa (master): i965: Decode three-source register types directly.

Kenneth Graunke kwg at kemper.freedesktop.org
Fri Dec 20 20:36:07 UTC 2013


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

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Tue Dec 10 01:36:37 2013 -0800

i965: Decode three-source register types directly.

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>
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 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 4c435be..c6d5d03 100644
--- a/src/mesa/drivers/dri/i965/brw_disasm.c
+++ b/src/mesa/drivers/dri/i965/brw_disasm.c
@@ -254,6 +254,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,
@@ -470,19 +476,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;
@@ -609,9 +602,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;
 }
@@ -749,9 +741,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
@@ -802,9 +793,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
@@ -854,9 +844,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




More information about the mesa-commit mailing list