tgsi: store opcode mnemonics in a separate table
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 1 Aug 2017 21:09:48 +0000 (23:09 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 23 Aug 2017 11:54:57 +0000 (13:54 +0200)
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>
src/gallium/auxiliary/tgsi/tgsi_info.c
src/gallium/auxiliary/tgsi/tgsi_info.h

index 5112826aafbfd980f4cb900a704f836620ffc988..08bce6380c98feec6a5e12187aad8e420242b0e2 100644 (file)
 #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];
 }
 
 
index e65f7ac3b7464bc6283941af145e59da011588d9..74bff1869247bc8a600f95141bc78e79dde629c7 100644 (file)
@@ -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 *