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 <kenn...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev