i965: Fix register types in dump_instructions().
This regressed when I converted BRW_REGISTER_TYPE_* to be an abstract type that doesn't match the hardware description. dump_instruction() was using reg_encoding[] from brw_disasm.c, which no longer matches (and was incorrect for Gen8+ anyway). This patch introduces a new function to convert the abstract enum values into the letter suffix we expect. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reported-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
@@ -36,6 +36,35 @@
|
|||||||
|
|
||||||
#include "glsl/ralloc.h"
|
#include "glsl/ralloc.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a BRW_REGISTER_TYPE_* enum to a short string (F, UD, and so on).
|
||||||
|
*
|
||||||
|
* This is different than reg_encoding from brw_disasm.c in that it operates
|
||||||
|
* on the abstract enum values, rather than the generation-specific encoding.
|
||||||
|
*/
|
||||||
|
const char *
|
||||||
|
brw_reg_type_letters(unsigned type)
|
||||||
|
{
|
||||||
|
const char *names[] = {
|
||||||
|
[BRW_REGISTER_TYPE_UD] = "UD",
|
||||||
|
[BRW_REGISTER_TYPE_D] = "D",
|
||||||
|
[BRW_REGISTER_TYPE_UW] = "UW",
|
||||||
|
[BRW_REGISTER_TYPE_W] = "W",
|
||||||
|
[BRW_REGISTER_TYPE_F] = "F",
|
||||||
|
[BRW_REGISTER_TYPE_UB] = "UB",
|
||||||
|
[BRW_REGISTER_TYPE_B] = "B",
|
||||||
|
[BRW_REGISTER_TYPE_UV] = "UV",
|
||||||
|
[BRW_REGISTER_TYPE_V] = "V",
|
||||||
|
[BRW_REGISTER_TYPE_VF] = "VF",
|
||||||
|
[BRW_REGISTER_TYPE_DF] = "DF",
|
||||||
|
[BRW_REGISTER_TYPE_HF] = "HF",
|
||||||
|
[BRW_REGISTER_TYPE_UQ] = "UQ",
|
||||||
|
[BRW_REGISTER_TYPE_Q] = "Q",
|
||||||
|
};
|
||||||
|
assert(type <= BRW_REGISTER_TYPE_UQ);
|
||||||
|
return names[type];
|
||||||
|
}
|
||||||
|
|
||||||
/* Returns the corresponding conditional mod for swapping src0 and
|
/* Returns the corresponding conditional mod for swapping src0 and
|
||||||
* src1 in e.g. CMP.
|
* src1 in e.g. CMP.
|
||||||
*/
|
*/
|
||||||
|
@@ -3127,7 +3127,7 @@ fs_visitor::dump_instruction(backend_instruction *be_inst)
|
|||||||
printf("|");
|
printf("|");
|
||||||
|
|
||||||
if (inst->src[i].file != IMM) {
|
if (inst->src[i].file != IMM) {
|
||||||
printf(":%s", reg_encoding[inst->src[i].type]);
|
printf(":%s", brw_reg_type_letters(inst->src[i].type));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i < 2 && inst->src[i + 1].file != BAD_FILE)
|
if (i < 2 && inst->src[i + 1].file != BAD_FILE)
|
||||||
|
@@ -116,6 +116,7 @@ enum brw_reg_type {
|
|||||||
|
|
||||||
unsigned brw_reg_type_to_hw_type(const struct brw_context *brw,
|
unsigned brw_reg_type_to_hw_type(const struct brw_context *brw,
|
||||||
enum brw_reg_type type, unsigned file);
|
enum brw_reg_type type, unsigned file);
|
||||||
|
const char *brw_reg_type_letters(unsigned brw_reg_type);
|
||||||
|
|
||||||
#define REG_SIZE (8*4)
|
#define REG_SIZE (8*4)
|
||||||
|
|
||||||
|
@@ -1168,7 +1168,7 @@ vec4_visitor::dump_instruction(backend_instruction *be_inst)
|
|||||||
if (inst->dst.writemask & 8)
|
if (inst->dst.writemask & 8)
|
||||||
printf("w");
|
printf("w");
|
||||||
}
|
}
|
||||||
printf(":%s, ", reg_encoding[inst->dst.type]);
|
printf(":%s, ", brw_reg_type_letters(inst->dst.type));
|
||||||
|
|
||||||
for (int i = 0; i < 3 && inst->src[i].file != BAD_FILE; i++) {
|
for (int i = 0; i < 3 && inst->src[i].file != BAD_FILE; i++) {
|
||||||
if (inst->src[i].negate)
|
if (inst->src[i].negate)
|
||||||
|
Reference in New Issue
Block a user