aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2021-03-10 08:15:10 +0100
committerJan Beulich <jbeulich@suse.com>2021-03-10 08:15:10 +0100
commit00ec18756532dfb9039128364987fb1ea405beda (patch)
treec3f0746c46e3ecea556e156693249947f3afa70e
parent319419837c371a14e64e6affb0cb7abf37764d78 (diff)
downloadgdb-00ec18756532dfb9039128364987fb1ea405beda.zip
gdb-00ec18756532dfb9039128364987fb1ea405beda.tar.gz
gdb-00ec18756532dfb9039128364987fb1ea405beda.tar.bz2
x86: re-arrange order of decode for various legacy opcodes
The order of decodes influences the overall number of table entries. Reduce table size quite a bit by first decoding few-alternatives attributes common to all valid leaves.
-rw-r--r--opcodes/ChangeLog15
-rw-r--r--opcodes/i386-dis.c98
2 files changed, 43 insertions, 70 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 7f526d7..8c60a69 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,20 @@
2021-03-10 Jan Beulich <jbeulich@suse.com>
+ * opcodes/i386-dis.c (REG_0F71, REG_0F72, REG_0F73): Rename to
+ REG_0F71_MOD_0, REG_0F72_MOD_0, and REG_0F73_MOD_0 respectively.
+ (MOD_0F71_REG_2, MOD_0F71_REG_4, MOD_0F71_REG_6, MOD_0F72_REG_2,
+ MOD_0F72_REG_4, MOD_0F72_REG_6, MOD_0F73_REG_2, MOD_0F73_REG_3,
+ MOD_0F73_REG_6, MOD_0F73_REG_7): Delete.
+ (MOD_0F71, MOD_0F72, MOD_0F73): New.
+ (dis386_twobyte): Link to mod_table[] for opcodes 71, 72, and
+ 73.
+ (reg_table): No longer link to mod_table[] for opcodes 0F71,
+ 0F72, and 0F73.
+ (mod_table): Link to reg_table[] for opcodes 0F71, 0F72, and
+ 0F73.
+
+2021-03-10 Jan Beulich <jbeulich@suse.com>
+
* opcodes/i386-dis.c (MOD_0F18_REG_4, MOD_0F18_REG_5,
MOD_0F18_REG_6, MOD_0F18_REG_7): Delete.
(reg_table): Don't link to mod_table[] where not needed. Add
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 3d3800e..4f0a4a7 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -693,9 +693,9 @@ enum
REG_0F1E_P_1_MOD_3,
REG_0F38D8_PREFIX_1,
REG_0F3A0F_PREFIX_1_MOD_3,
- REG_0F71,
- REG_0F72,
- REG_0F73,
+ REG_0F71_MOD_0,
+ REG_0F72_MOD_0,
+ REG_0F73_MOD_0,
REG_0FA6,
REG_0FA7,
REG_0FAE,
@@ -753,16 +753,9 @@ enum
MOD_0F2B_PREFIX_2,
MOD_0F2B_PREFIX_3,
MOD_0F50,
- MOD_0F71_REG_2,
- MOD_0F71_REG_4,
- MOD_0F71_REG_6,
- MOD_0F72_REG_2,
- MOD_0F72_REG_4,
- MOD_0F72_REG_6,
- MOD_0F73_REG_2,
- MOD_0F73_REG_3,
- MOD_0F73_REG_6,
- MOD_0F73_REG_7,
+ MOD_0F71,
+ MOD_0F72,
+ MOD_0F73,
MOD_0FAE_REG_0,
MOD_0FAE_REG_1,
MOD_0FAE_REG_2,
@@ -2244,9 +2237,9 @@ static const struct dis386 dis386_twobyte[] = {
{ PREFIX_TABLE (PREFIX_0F6F) },
/* 70 */
{ PREFIX_TABLE (PREFIX_0F70) },
- { REG_TABLE (REG_0F71) },
- { REG_TABLE (REG_0F72) },
- { REG_TABLE (REG_0F73) },
+ { MOD_TABLE (MOD_0F71) },
+ { MOD_TABLE (MOD_0F72) },
+ { MOD_TABLE (MOD_0F73) },
{ "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
{ "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
{ "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
@@ -2941,36 +2934,36 @@ static const struct dis386 reg_table[][8] = {
{
{ RM_TABLE (RM_0F3A0F_P_1_MOD_3_REG_0) },
},
- /* REG_0F71 */
+ /* REG_0F71_MOD_0 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { MOD_TABLE (MOD_0F71_REG_2) },
+ { "psrlw", { MS, Ib }, PREFIX_OPCODE },
{ Bad_Opcode },
- { MOD_TABLE (MOD_0F71_REG_4) },
+ { "psraw", { MS, Ib }, PREFIX_OPCODE },
{ Bad_Opcode },
- { MOD_TABLE (MOD_0F71_REG_6) },
+ { "psllw", { MS, Ib }, PREFIX_OPCODE },
},
- /* REG_0F72 */
+ /* REG_0F72_MOD_0 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { MOD_TABLE (MOD_0F72_REG_2) },
+ { "psrld", { MS, Ib }, PREFIX_OPCODE },
{ Bad_Opcode },
- { MOD_TABLE (MOD_0F72_REG_4) },
+ { "psrad", { MS, Ib }, PREFIX_OPCODE },
{ Bad_Opcode },
- { MOD_TABLE (MOD_0F72_REG_6) },
+ { "pslld", { MS, Ib }, PREFIX_OPCODE },
},
- /* REG_0F73 */
+ /* REG_0F73_MOD_0 */
{
{ Bad_Opcode },
{ Bad_Opcode },
- { MOD_TABLE (MOD_0F73_REG_2) },
- { MOD_TABLE (MOD_0F73_REG_3) },
+ { "psrlq", { MS, Ib }, PREFIX_OPCODE },
+ { "psrldq", { XS, Ib }, PREFIX_DATA },
{ Bad_Opcode },
{ Bad_Opcode },
- { MOD_TABLE (MOD_0F73_REG_6) },
- { MOD_TABLE (MOD_0F73_REG_7) },
+ { "psllq", { MS, Ib }, PREFIX_OPCODE },
+ { "pslldq", { XS, Ib }, PREFIX_DATA },
},
/* REG_0FA6 */
{
@@ -8261,54 +8254,19 @@ static const struct dis386 mod_table[][2] = {
{ "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
},
{
- /* MOD_0F71_REG_2 */
+ /* MOD_0F71 */
{ Bad_Opcode },
- { "psrlw", { MS, Ib }, PREFIX_OPCODE },
+ { REG_TABLE (REG_0F71_MOD_0) },
},
{
- /* MOD_0F71_REG_4 */
+ /* MOD_0F72 */
{ Bad_Opcode },
- { "psraw", { MS, Ib }, PREFIX_OPCODE },
- },
- {
- /* MOD_0F71_REG_6 */
- { Bad_Opcode },
- { "psllw", { MS, Ib }, PREFIX_OPCODE },
+ { REG_TABLE (REG_0F72_MOD_0) },
},
{
- /* MOD_0F72_REG_2 */
+ /* MOD_0F73 */
{ Bad_Opcode },
- { "psrld", { MS, Ib }, PREFIX_OPCODE },
- },
- {
- /* MOD_0F72_REG_4 */
- { Bad_Opcode },
- { "psrad", { MS, Ib }, PREFIX_OPCODE },
- },
- {
- /* MOD_0F72_REG_6 */
- { Bad_Opcode },
- { "pslld", { MS, Ib }, PREFIX_OPCODE },
- },
- {
- /* MOD_0F73_REG_2 */
- { Bad_Opcode },
- { "psrlq", { MS, Ib }, PREFIX_OPCODE },
- },
- {
- /* MOD_0F73_REG_3 */
- { Bad_Opcode },
- { "psrldq", { XS, Ib }, PREFIX_DATA },
- },
- {
- /* MOD_0F73_REG_6 */
- { Bad_Opcode },
- { "psllq", { MS, Ib }, PREFIX_OPCODE },
- },
- {
- /* MOD_0F73_REG_7 */
- { Bad_Opcode },
- { "pslldq", { XS, Ib }, PREFIX_DATA },
+ { REG_TABLE (REG_0F73_MOD_0) },
},
{
/* MOD_0FAE_REG_0 */