From 9a04903eea44cbc4642f10d2a8f8db416a694737 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 26 Sep 2007 13:40:59 +0000 Subject: gas/ 2007-09-26 Jan Beulich * config/tc-i386.c (build_modrm_byte): Also check for RegEip when considering IP-relative addressing. gas/testsuite/ 2007-09-26 Jan Beulich * gas/i386/reloc64.s: Adjust for %eip-relative addressing no longer generating errors. * gas/i386/reloc64.d, gas/i386/reloc64.l: Update. * gas/i386/x86-64-addr32.s: Remove explicit addr32 prefix for %eip-realtive addressing case. opcodes/ 2007-09-26 Jan Beulich * i386-opc.h (RegEip): Define. (RegEiz): Adjust. * i386-reg.tbl: Add eip. Mark rip and eip with RegRex64. * i386-tbl.h: Re-generate. --- gas/ChangeLog | 5 +++++ gas/config/tc-i386.c | 6 ++++-- gas/testsuite/ChangeLog | 8 ++++++++ gas/testsuite/gas/i386/reloc64.d | 2 ++ gas/testsuite/gas/i386/reloc64.l | 2 -- gas/testsuite/gas/i386/reloc64.s | 6 +++--- gas/testsuite/gas/i386/x86-64-addr32.s | 2 +- 7 files changed, 23 insertions(+), 8 deletions(-) (limited to 'gas') diff --git a/gas/ChangeLog b/gas/ChangeLog index 9cf0f71..4c02e1d 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,10 @@ 2007-09-26 Jan Beulich + * config/tc-i386.c (build_modrm_byte): Also check for RegEip + when considering IP-relative addressing. + +2007-09-26 Jan Beulich + * config/tc-i386.h (md_register_arithmetic): Define. * config/tc-ia64.h (md_register_arithmetic): Likewise. * doc/internals.texi: Document md_register_arithmetic. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 9180adc..fd79330 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -4547,7 +4547,8 @@ build_modrm_byte (void) } } /* RIP addressing for 64bit mode. */ - else if (i.base_reg->reg_num == RegRip) + else if (i.base_reg->reg_num == RegRip || + i.base_reg->reg_num == RegEip) { i.rm.regmem = NO_BASE_REGISTER; i.types[op].bitfield.disp8 = 0; @@ -5982,7 +5983,8 @@ i386_index_check (const char *operand_string) || (i.prefix[ADDR_PREFIX] && !i.base_reg->reg_type.bitfield.reg32)) && (i.index_reg - || i.base_reg->reg_num != RegRip)) + || i.base_reg->reg_num != + (i.prefix[ADDR_PREFIX] == 0 ? RegRip : RegEip))) || (i.index_reg && (!i.index_reg->reg_type.bitfield.baseindex || (i.prefix[ADDR_PREFIX] == 0 diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index b599228..fa69177 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2007-09-26 Jan Beulich + + * gas/i386/reloc64.s: Adjust for %eip-relative addressing no + longer generating errors. + * gas/i386/reloc64.d, gas/i386/reloc64.l: Update. + * gas/i386/x86-64-addr32.s: Remove explicit addr32 prefix + for %eip-realtive addressing case. + 2007-09-25 Nathan Sidwell * gas/m68k/br-isaa.d: Dump relocs too. diff --git a/gas/testsuite/gas/i386/reloc64.d b/gas/testsuite/gas/i386/reloc64.d index 333deaa..5c14019 100644 --- a/gas/testsuite/gas/i386/reloc64.d +++ b/gas/testsuite/gas/i386/reloc64.d @@ -18,6 +18,7 @@ Disassembly of section \.text: .*[ ]+R_X86_64_PC8[ ]+xtrn\+0x0*1 .*[ ]+R_X86_64_PC32[ ]+xtrn\+0xf+c .*[ ]+R_X86_64_PC32[ ]+xtrn\+0xf+c +.*[ ]+R_X86_64_PC32[ ]+xtrn\+0xf+c .*[ ]+R_X86_64_PC8[ ]+xtrn\+0xf+f .*[ ]+R_X86_64_GOT64[ ]+xtrn .*[ ]+R_X86_64_GOT32[ ]+xtrn @@ -28,6 +29,7 @@ Disassembly of section \.text: .*[ ]+R_X86_64_GOTPCREL[ ]+xtrn\+0xf+c .*[ ]+R_X86_64_GOTPC32[ ]+_GLOBAL_OFFSET_TABLE_\+0x0*2 .*[ ]+R_X86_64_GOTPC32[ ]+_GLOBAL_OFFSET_TABLE_\+0xf+c +.*[ ]+R_X86_64_GOTPC32[ ]+_GLOBAL_OFFSET_TABLE_\+0xf+c .*[ ]+R_X86_64_GOTPC32[ ]+_GLOBAL_OFFSET_TABLE_\+0x0*2 .*[ ]+R_X86_64_PLT32[ ]+xtrn .*[ ]+R_X86_64_PLT32[ ]+xtrn diff --git a/gas/testsuite/gas/i386/reloc64.l b/gas/testsuite/gas/i386/reloc64.l index 87a5c77..ded5cab 100644 --- a/gas/testsuite/gas/i386/reloc64.l +++ b/gas/testsuite/gas/i386/reloc64.l @@ -1,5 +1,4 @@ .*: Assembler messages: -.*:29: Error: .* .*:35: Error: .* .*:36: Error: .* .*:37: Error: .* @@ -17,7 +16,6 @@ .*:54: Error: .* .*:55: Error: .* .*:57: Error: .* -.*:66: Error: .* .*:73: Error: .* .*:75: Error: .* .*:76: Error: .* diff --git a/gas/testsuite/gas/i386/reloc64.s b/gas/testsuite/gas/i386/reloc64.s index 7fd741a..f12271d 100644 --- a/gas/testsuite/gas/i386/reloc64.s +++ b/gas/testsuite/gas/i386/reloc64.s @@ -26,7 +26,7 @@ ill mov $(xtrn - .), %eax mov $(xtrn - .), %ax mov $(xtrn - .), %al mov xtrn(%rip), %eax -bad mov xtrn(%eip), %eax + mov xtrn(%eip), %eax call xtrn jrcxz xtrn @@ -62,8 +62,8 @@ ill movabs $_GLOBAL_OFFSET_TABLE_, %rax ill add $_GLOBAL_OFFSET_TABLE_, %eax ill add $_GLOBAL_OFFSET_TABLE_, %ax ill add $_GLOBAL_OFFSET_TABLE_, %al - lea _GLOBAL_OFFSET_TABLE_(%rip), %rax #??? -bad lea _GLOBAL_OFFSET_TABLE_(%eip), %rax + lea _GLOBAL_OFFSET_TABLE_(%rip), %rax + lea _GLOBAL_OFFSET_TABLE_(%eip), %rax ill movabs $(_GLOBAL_OFFSET_TABLE_ - .), %rax add $(_GLOBAL_OFFSET_TABLE_ - .), %rax ill add $(_GLOBAL_OFFSET_TABLE_ - .), %eax diff --git a/gas/testsuite/gas/i386/x86-64-addr32.s b/gas/testsuite/gas/i386/x86-64-addr32.s index c32525f..889c5fd 100644 --- a/gas/testsuite/gas/i386/x86-64-addr32.s +++ b/gas/testsuite/gas/i386/x86-64-addr32.s @@ -1,7 +1,7 @@ .text lea symbol(%eax), %rax lea symbol(%r8d), %rax - addr32 lea symbol(%rip), %rax + lea symbol(%eip), %rax addr32 lea symbol, %rax addr32 mov 0x600898,%al addr32 mov 0x600898,%ax -- cgit v1.1