From: Kenneth Graunke Date: Tue, 10 Dec 2013 09:36:37 +0000 (-0800) Subject: i965: Decode three-source register types directly. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=13454fc3dea4cd4ed1676a1aaf91d49c9a811a7c;p=mesa.git 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 Reviewed-by: Jordan Justen Reviewed-by: Eric Anholt --- diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c b/src/mesa/drivers/dri/i965/brw_disasm.c index 4c435beaa3b..c6d5d03038d 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