aboutsummaryrefslogtreecommitdiff
path: root/disas/i386.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@twiddle.net>2017-07-19 20:00:16 -1000
committerRichard Henderson <richard.henderson@linaro.org>2017-09-06 07:18:51 -0700
commita17d3be6fb9bc1a0c310826b5ab0c24bb1635d97 (patch)
tree1ddced7be284e1813b3dfb45ab32a4ffc7becbe9 /disas/i386.c
parent980edf4b694ed7a4f0b66cbfdbdc61be1b5c8738 (diff)
downloadqemu-a17d3be6fb9bc1a0c310826b5ab0c24bb1635d97.zip
qemu-a17d3be6fb9bc1a0c310826b5ab0c24bb1635d97.tar.gz
qemu-a17d3be6fb9bc1a0c310826b5ab0c24bb1635d97.tar.bz2
disas/i386: Add disassembly of vex.0f38.f5
Which includes pext, pdep and bzhi. Signed-off-by: Richard Henderson <rth@twiddle.net>
Diffstat (limited to 'disas/i386.c')
-rw-r--r--disas/i386.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/disas/i386.c b/disas/i386.c
index 7a238b2..7eaa378 100644
--- a/disas/i386.c
+++ b/disas/i386.c
@@ -683,6 +683,7 @@ fetch_data(struct disassemble_info *info, bfd_byte *addr)
#define PREGRP105 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 105 } }
#define PREGRP106 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 106 } }
#define PREGRP107 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 107 } }
+#define PREGRP108 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 108 } }
#define X86_64_0 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 0 } }
#define X86_64_1 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 1 } }
@@ -1484,7 +1485,7 @@ static const unsigned char threebyte_0x38_uses_REPNZ_prefix[256] = {
/* c0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
/* d0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* df */
/* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ef */
- /* f0 */ 1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0, /* ff */
+ /* f0 */ 1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0, /* ff */
/* ------------------------------- */
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
};
@@ -1508,7 +1509,7 @@ static const unsigned char threebyte_0x38_uses_REPZ_prefix[256] = {
/* c0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */
/* d0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* df */
/* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ef */
- /* f0 */ 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, /* ff */
+ /* f0 */ 0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, /* ff */
/* ------------------------------- */
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
};
@@ -2808,6 +2809,14 @@ static const struct dis386 prefix_user_table[][4] = {
{ "bsfS", { Gv, Ev } },
{ "(bad)", { XX } },
},
+
+ /* PREGRP108 */
+ {
+ { "bzhi", { Gv, Ev, Bv } },
+ { "pext", { Gv, Bv, Ev } },
+ { "(bad)", { XX } },
+ { "pdep", { Gv, Bv, Ev } },
+ },
};
static const struct dis386 x86_64_table[][2] = {
@@ -3108,7 +3117,7 @@ static const struct dis386 three_byte_table[][256] = {
{ PREGRP105 },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREGRP108 },
{ "(bad)", { XX } },
{ PREGRP106 },
/* f8 */