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>
This commit is contained in:
Nicolai Hähnle 2017-08-01 23:09:48 +02:00
parent 438177aa19
commit 26996ec3b8
2 changed files with 16 additions and 6 deletions

View File

@ -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];
}

View 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 *