gas/
authorJan Beulich <jbeulich@novell.com>
Wed, 26 Sep 2007 13:40:59 +0000 (13:40 +0000)
committerJan Beulich <jbeulich@novell.com>
Wed, 26 Sep 2007 13:40:59 +0000 (13:40 +0000)
2007-09-26  Jan Beulich  <jbeulich@novell.com>

* config/tc-i386.c (build_modrm_byte): Also check for RegEip
when considering IP-relative addressing.

gas/testsuite/
2007-09-26  Jan Beulich  <jbeulich@novell.com>

* 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  <jbeulich@novell.com>

* 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
gas/config/tc-i386.c
gas/testsuite/ChangeLog
gas/testsuite/gas/i386/reloc64.d
gas/testsuite/gas/i386/reloc64.l
gas/testsuite/gas/i386/reloc64.s
gas/testsuite/gas/i386/x86-64-addr32.s
opcodes/ChangeLog
opcodes/i386-opc.h
opcodes/i386-reg.tbl
opcodes/i386-tbl.h

index 9cf0f71d323e5addc8156d368efbb7f23e76626e..4c02e1dba40478ae515f62e151e3dc334cdb6e07 100644 (file)
@@ -1,3 +1,8 @@
+2007-09-26  Jan Beulich  <jbeulich@novell.com>
+
+       * config/tc-i386.c (build_modrm_byte): Also check for RegEip
+       when considering IP-relative addressing.
+
 2007-09-26  Jan Beulich  <jbeulich@novell.com>
 
        * config/tc-i386.h (md_register_arithmetic): Define.
index 9180adcbe340841c6be3bef339e53b1e88f7d230..fd79330487de15bc58c0977aa6201e788488055a 100644 (file)
@@ -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
index b5992282fa7a2153fedb00f52e323e692d2e0293..fa691771b81b7668065ed7c1bdd86be0d92a4310 100644 (file)
@@ -1,3 +1,11 @@
+2007-09-26  Jan Beulich  <jbeulich@novell.com>
+
+       * 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  <nathan@codesourcery.com>
 
        * gas/m68k/br-isaa.d: Dump relocs too.
index 333deaa3a614c1d82f6e0debba919fc4170876f0..5c14019d4eb2a9a67d0c94507e1d576d1fa30cbe 100644 (file)
@@ -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
index 87a5c772c3284fd1d2ea768547c5fc760879a590..ded5cabd36626a56e777d5ca707e279273227a18 100644 (file)
@@ -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: .*
index 7fd741af83958cc5c2a37d30f2668dce6979fc6e..f12271d35884d51b339cc6b269289d773a5afa90 100644 (file)
@@ -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
index c32525ffa1fef397080311f6ba52f8e27247dea9..889c5fd6680165e78be02f02af92a12af4b6ab4d 100644 (file)
@@ -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
index add8f6ac5b0da61b99c4cad40a61bada6087d8d5..cada41096fda98c962dd7d131f0d40c07c8ca279 100644 (file)
@@ -1,3 +1,10 @@
+2007-09-26  Jan Beulich  <jbeulich@novell.com>
+
+       * i386-opc.h (RegEip): Define.
+       (RegEiz): Adjust.
+       * i386-reg.tbl: Add eip. Mark rip and eip with RegRex64.
+       * i386-tbl.h: Re-generate.
+
 2007-09-25  H.J. Lu  <hongjiu.lu@intel.com>
 
        * i386-gen.c (process_i386_opcodes): Process opcode_length.
index b052e81c29c7b9c2092912a3b66a723dff9bb394..2f6e5b381b31d1ce8ec050d01e04b07593b02c50 100644 (file)
@@ -447,8 +447,9 @@ typedef struct
 #define RegRex64    0x2  /* Extended 8 bit register.  */
   unsigned int reg_num;
 #define RegRip ((unsigned int ) ~0)
+#define RegEip (RegRip - 1)
 /* EIZ and RIZ are fake index registers.  */
-#define RegEiz (RegRip - 1)
+#define RegEiz (RegEip - 1)
 #define RegRiz (RegEiz - 1)
 }
 reg_entry;
index 373aba7c6ae181980251f2eb380aaf2f5dab2b64..4a86cff4d7b1dc125bb2803233686c68963a8e25 100644 (file)
@@ -187,9 +187,10 @@ xmm12, RegXMM, RegRex, 4
 xmm13, RegXMM, RegRex, 5
 xmm14, RegXMM, RegRex, 6
 xmm15, RegXMM, RegRex, 7
-// No type will make this register rejected for all purposes except
-// for addressing.  This saves creating one extra type for RIP.
-rip, BaseIndex, 0, RegRip
+// No type will make these registers rejected for all purposes except
+// for addressing.  This saves creating one extra type for RIP/EIP.
+rip, BaseIndex, RegRex64, RegRip
+eip, BaseIndex, RegRex64, RegEip
 // No type will make these registers rejected for all purposes except
 // for addressing.
 eiz, BaseIndex, 0, RegEiz
index 9927bf906340e9d40f0ba30396e71d0159b07b9f..5926fb89187028746caf02d45a411a519b94efa9 100644 (file)
@@ -13278,7 +13278,11 @@ const reg_entry i386_regtab[] =
   { "rip",
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
-    0, RegRip },
+    RegRex64, RegRip },
+  { "eip",
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+    RegRex64, RegEip },
   { "eiz",
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },