diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2007-08-30 05:01:32 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2007-08-30 05:01:32 +0000 |
commit | 876d4bfa30530cfcddc152a1ae47f8045d80fd47 (patch) | |
tree | aefc8cd562c48cf85e6b18a1929380fd997d793f /opcodes | |
parent | b5536b7f3025eb954bf55fab0ce9a480d0938f59 (diff) | |
download | gdb-876d4bfa30530cfcddc152a1ae47f8045d80fd47.zip gdb-876d4bfa30530cfcddc152a1ae47f8045d80fd47.tar.gz gdb-876d4bfa30530cfcddc152a1ae47f8045d80fd47.tar.bz2 |
2007-08-29 H.J. Lu <hongjiu.lu@intel.com>
* i386-dis.c (SIMD_Fixup): Removed.
(OPC_EXT_34...OPC_EXT_37): New.
(dis386_twobyte): Use OPC_EXT_34 and OPC_EXT_35.
(prefix_user_table): Use OPC_EXT_36 and OPC_EXT_37.
(opc_ext_table): Add OPC_EXT_34...OPC_EXT_37.
Diffstat (limited to 'opcodes')
-rw-r--r-- | opcodes/ChangeLog | 8 | ||||
-rw-r--r-- | opcodes/i386-dis.c | 49 |
2 files changed, 36 insertions, 21 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 90c0550..09c2558 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,5 +1,13 @@ 2007-08-29 H.J. Lu <hongjiu.lu@intel.com> + * i386-dis.c (SIMD_Fixup): Removed. + (OPC_EXT_34...OPC_EXT_37): New. + (dis386_twobyte): Use OPC_EXT_34 and OPC_EXT_35. + (prefix_user_table): Use OPC_EXT_36 and OPC_EXT_37. + (opc_ext_table): Add OPC_EXT_34...OPC_EXT_37. + +2007-08-29 H.J. Lu <hongjiu.lu@intel.com> + * i386-dis.c (OPC_EXT_25...OPC_EXT_33): New. (dis386): Use OPC_EXT_0...OPC_EXT_2. (dis386_twobyte): Use OPC_EXT_3...OPC_EXT_5. diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 1c4d001..dda176c 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -94,7 +94,6 @@ static void NOP_Fixup1 (int, int); static void NOP_Fixup2 (int, int); static void OP_3DNowSuffix (int, int); static void OP_SIMD_Suffix (int, int); -static void SIMD_Fixup (int, int); static void SVME_Fixup (int, int); static void INVLPG_Fixup (int, int); static void BadOp (void); @@ -593,6 +592,10 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define OPC_EXT_31 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 31 } } #define OPC_EXT_32 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 32 } } #define OPC_EXT_33 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 33 } } +#define OPC_EXT_34 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 34 } } +#define OPC_EXT_35 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 35 } } +#define OPC_EXT_36 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 36 } } +#define OPC_EXT_37 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 37 } } #define OPC_EXT_RM_0 NULL, { { NULL, USE_OPC_EXT_RM_TABLE }, { NULL, 0 } } #define OPC_EXT_RM_1 NULL, { { NULL, USE_OPC_EXT_RM_TABLE }, { NULL, 1 } } @@ -966,11 +969,11 @@ static const struct dis386 dis386_twobyte[] = { { PREGRP8 }, { PREGRP9 }, { PREGRP30 }, - { "movlpX", { EXq, XM, { SIMD_Fixup, 'h' } } }, + { OPC_EXT_34 }, { "unpcklpX", { XM, EXq } }, { "unpckhpX", { XM, EXq } }, { PREGRP31 }, - { "movhpX", { EXq, XM, { SIMD_Fixup, 'l' } } }, + { OPC_EXT_35 }, /* 18 */ { GRP16 }, { "(bad)", { XX } }, @@ -1890,14 +1893,14 @@ static const struct dis386 prefix_user_table[][4] = { }, /* PREGRP30 */ { - { "movlpX", { XM, EXq, { SIMD_Fixup, 'h' } } }, /* really only 2 operands */ + { OPC_EXT_36 }, { "movsldup", { XM, EXx } }, { "movlpd", { XM, EXq } }, { "movddup", { XM, EXq } }, }, /* PREGRP31 */ { - { "movhpX", { XM, EXq, { SIMD_Fixup, 'l' } } }, + { OPC_EXT_37 }, { "movshdup", { XM, EXx } }, { "movhpd", { XM, EXq } }, { "(bad)", { XM, EXq } }, @@ -3229,6 +3232,26 @@ static const struct dis386 opc_ext_table[][2] = { { "bound{S|}", { Gv, Ma } }, { "(bad)", { XX } }, }, + { + /* OPC_EXT_34 */ + { "movlpX", { EXq, XM } }, + { "(bad)", { XX } }, + }, + { + /* OPC_EXT_35 */ + { "movhpX", { EXq, XM } }, + { "(bad)", { XX } }, + }, + { + /* OPC_EXT_36 */ + { "movlpX", { XM, EXq } }, + { "movhlpX", { XM, EXq } }, + }, + { + /* OPC_EXT_37 */ + { "movhpX", { XM, EXq } }, + { "movlhpX", { XM, EXq } }, + }, }; static const struct dis386 opc_ext_rm_table[][8] = { @@ -6208,22 +6231,6 @@ OP_SIMD_Suffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) } static void -SIMD_Fixup (int extrachar, int sizeflag ATTRIBUTE_UNUSED) -{ - /* Change movlps/movhps to movhlps/movlhps for 2 register operand - forms of these instructions. */ - if (modrm.mod == 3) - { - char *p = obuf + strlen (obuf); - *(p + 1) = '\0'; - *p = *(p - 1); - *(p - 1) = *(p - 2); - *(p - 2) = *(p - 3); - *(p - 3) = extrachar; - } -} - -static void OP_Mwait (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { |