summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2017-08-01 23:09:48 +0200
committerNicolai Hähnle <nicolai.haehnle@amd.com>2017-08-23 13:54:57 +0200
commit26996ec3b8d84b981b7e55d4d0982cb9df444728 (patch)
tree11000572189e75dbef41ad17022f9e8392298be0
parent438177aa190d4ee99e2230f1fcc5df1df59e21f4 (diff)
tgsi: store opcode mnemonics in a separate table
They are only used for debug info. Together with making tgsi_opcode_info::opcode a bitfield, this reduces the size of tgsi_opcode_info on 64-bit systems from 24 bytes to 4 bytes, and makes the whole data structure a bit more linker friendly. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_info.c19
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_info.h3
2 files changed, 16 insertions, 6 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c b/src/gallium/auxiliary/tgsi/tgsi_info.c
index 5112826aaf..08bce6380c 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_info.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_info.c
@@ -36,11 +36,11 @@
#define OTHR TGSI_OUTPUT_OTHER
#define OPCODE(_num_dst, _num_src, _output_mode, name, ...) \
- { .mnemonic = #name, .opcode = TGSI_OPCODE_ ## name, \
+ { .opcode = TGSI_OPCODE_ ## name, \
.output_mode = _output_mode, .num_dst = _num_dst, .num_src = _num_src, \
##__VA_ARGS__ },
-#define OPCODE_GAP(opc) { .mnemonic = "", .opcode = opc },
+#define OPCODE_GAP(opc) { .opcode = opc },
static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =
{
@@ -69,12 +69,23 @@ tgsi_get_opcode_info( uint opcode )
return NULL;
}
+#define OPCODE(_num_dst, _num_src, _output_mode, name, ...) #name,
+#define OPCODE_GAP(opc) "UNK" #opc,
+
+static const char * const opcode_names[TGSI_OPCODE_LAST] =
+{
+#include "tgsi_info_opcodes.h"
+};
+
+#undef OPCODE
+#undef OPCODE_GAP
const char *
tgsi_get_opcode_name( uint opcode )
{
- const struct tgsi_opcode_info *info = tgsi_get_opcode_info(opcode);
- return info->mnemonic;
+ if (opcode >= ARRAY_SIZE(opcode_names))
+ return "UNK_OOB";
+ return opcode_names[opcode];
}
diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.h b/src/gallium/auxiliary/tgsi/tgsi_info.h
index e65f7ac3b7..74bff18692 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_info.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_info.h
@@ -79,8 +79,7 @@ struct tgsi_opcode_info
unsigned pre_dedent:1;
unsigned post_indent:1;
enum tgsi_output_mode output_mode:3;
- const char *mnemonic;
- uint opcode;
+ unsigned opcode:8;
};
const struct tgsi_opcode_info *