diff options
Diffstat (limited to 'libcpu')
-rw-r--r-- | libcpu/ChangeLog | 3 | ||||
-rw-r--r-- | libcpu/defs/i386 | 2 | ||||
-rw-r--r-- | libcpu/i386_disasm.c | 10 |
3 files changed, 14 insertions, 1 deletions
diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog index 4b225af8..ff642de1 100644 --- a/libcpu/ChangeLog +++ b/libcpu/ChangeLog @@ -1,5 +1,8 @@ 2008-01-21 Roland McGrath <roland@redhat.com> + * defs/i386: Fix typo in comment. + * i386_disasm.c (i386_disasm): Handle cltq, cqto. + * i386_parse.y: Add sanity check for NMNES macro value. * Makefile.am (i386_parse.o): Fix target in dependency rule. (i386_parse.h): New target with empty commands. diff --git a/libcpu/defs/i386 b/libcpu/defs/i386 index 1b4bbb4a..4abbc261 100644 --- a/libcpu/defs/i386 +++ b/libcpu/defs/i386 @@ -116,7 +116,7 @@ ifdef(`i386', 11111111,{mod}011{64r_m}:lcall{W} *{mod}{64r_m} # SPECIAL 10011000:[{rex.w}?cltq:{dpfx}?cbtw:cwtl] 10011000:INVALID -# SPECIAL 10011001:[{rew.w}?cqto:{dpfx}?cltd:cwtd] +# SPECIAL 10011001:[{rex.w}?cqto:{dpfx}?cltd:cwtd] 10011001:INVALID 11111000:clc 11111100:cld diff --git a/libcpu/i386_disasm.c b/libcpu/i386_disasm.c index d8bcf9b3..9024571c 100644 --- a/libcpu/i386_disasm.c +++ b/libcpu/i386_disasm.c @@ -589,12 +589,22 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, #endif case 0x98: + if (prefixes == (has_rex_w | has_rex)) + { + str = "cltq"; + break; + } if (prefixes & ~has_data16) goto print_prefix; str = prefixes & has_data16 ? "cbtw" : "cwtl"; break; case 0x99: + if (prefixes == (has_rex_w | has_rex)) + { + str = "cqto"; + break; + } if (prefixes & ~has_data16) goto print_prefix; str = prefixes & has_data16 ? "cwtd" : "cltd"; |