diff options
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 34 |
2 files changed, 32 insertions, 9 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index f14c9f8..a8cca7f 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,12 @@ 2005-05-09 Jan Beulich <jbeulich@novell.com> + * config/tc-i386.c (tc_x86_regname_to_dw2regnum): Correct 64-bit mode + names to match ABI. Add more registers for 32-bit and 64-bit modes. + Make name array static and const. Adjust lookup to account for NULL + entries (standing for unused register numbers). + +2005-05-09 Jan Beulich <jbeulich@novell.com> + * config/tc-i386.c (parse_insn): Consider all matching instructions when checking for string instruction after string-only prefix. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 7b26546..be4d814 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -6789,21 +6789,36 @@ tc_x86_regname_to_dw2regnum (const char *regname) { unsigned int regnum; unsigned int regnames_count; - char *regnames_32[] = + static const char *const regnames_32[] = { "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", - "eip" + "eip", "eflags", NULL, + "st0", "st1", "st2", "st3", + "st4", "st5", "st6", "st7", + NULL, NULL, + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "mm0", "mm1", "mm2", "mm3", + "mm4", "mm5", "mm6", "mm7" }; - char *regnames_64[] = + static const char *const regnames_64[] = { - "rax", "rbx", "rcx", "rdx", - "rdi", "rsi", "rbp", "rsp", - "r8", "r9", "r10", "r11", + "rax", "rdx", "rcx", "rbx", + "rsi", "rdi", "rbp", "rsp", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", - "rip" + "rip", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "st0", "st1", "st2", "st3", + "st4", "st5", "st6", "st7", + "mm0", "mm1", "mm2", "mm3", + "mm4", "mm5", "mm6", "mm7" }; - char **regnames; + const char *const *regnames; if (flag_code == CODE_64BIT) { @@ -6817,7 +6832,8 @@ tc_x86_regname_to_dw2regnum (const char *regname) } for (regnum = 0; regnum < regnames_count; regnum++) - if (strcmp (regname, regnames[regnum]) == 0) + if (regnames[regnum] != NULL + && strcmp (regname, regnames[regnum]) == 0) return regnum; return -1; |