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@whitecape.org> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user