i386.c (ix86_print_operand): Remove dead code that tried to avoid (%rip) for call...
authorUros Bizjak <ubizjak@gmail.com>
Tue, 10 Nov 2015 17:48:31 +0000 (18:48 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 10 Nov 2015 17:48:31 +0000 (18:48 +0100)
* config/i386/i386.c (ix86_print_operand): Remove dead code that
tried to avoid (%rip) for call operands.

* config/i386/i386.c (ix86_print_operand_address_as): Add no_rip
argument.  Do not use RIP relative addressing when no_rip is set.
(ix86_print_operand): Update call to ix86_print_operand_address_as.
(ix86_print_operand_address): Ditto.
* config/i386/i386.md (*movabs<mode>_1): Use %P modifier for
absolute movabs operand 0.  Add square braces for -masm=intel.
(*movabs<mode>_2): Ditto for operand 1.

From-SVN: r230117

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md

index 5eca05d37ab537b6b38d3fdcce447912ffbf3034..b5808c10115e6843da62e09d4df46ec8aabdc18b 100644 (file)
@@ -1,3 +1,15 @@
+2015-11-10  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (ix86_print_operand): Remove dead code that
+       tried to avoid (%rip) for call operands.
+
+2015-11-10  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (ix86_print_operand_address_as): Add no_rip
+       argument.  Do not use RIP relative addressing when no_rip is set.
+       (ix86_print_operand): Update call to ix86_print_operand_address_as.
+       (ix86_print_operand_address): Ditto.
+
 2015-11-10  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/arm/arm.c (arm_new_rtx_costs, FIX case): Handle
index b84a11d433feb01010e72f5d23d146358ecaf077..9205d497f5a1931f5b202b8409e09bd57032017b 100644 (file)
@@ -80,7 +80,7 @@ along with GCC; see the file COPYING3.  If not see
 static rtx legitimize_dllimport_symbol (rtx, bool);
 static rtx legitimize_pe_coff_extern_decl (rtx, bool);
 static rtx legitimize_pe_coff_symbol (rtx, bool);
-static void ix86_print_operand_address_as (FILE *file, rtx addr, addr_space_t);
+static void ix86_print_operand_address_as (FILE *, rtx, addr_space_t, bool);
 
 #ifndef CHECK_STACK_LIMIT
 #define CHECK_STACK_LIMIT (-1)
@@ -17131,13 +17131,6 @@ ix86_print_operand (FILE *file, rtx x, int code)
     {
       rtx addr = XEXP (x, 0);
 
-      /* Avoid (%rip) for call operands.  */
-      if (code == 'P' && CONSTANT_ADDRESS_P (x) && !CONST_INT_P (x))
-       {
-         output_addr_const (file, addr);
-         return;
-       }
-
       /* No `byte ptr' prefix for call instructions ... */
       if (ASSEMBLER_DIALECT == ASM_INTEL && code != 'X' && code != 'P')
        {
@@ -17187,7 +17180,8 @@ ix86_print_operand (FILE *file, rtx x, int code)
       if (this_is_asm_operands && ! address_operand (addr, VOIDmode))
        output_operand_lossage ("invalid constraints for operand");
       else
-       ix86_print_operand_address_as (file, addr, MEM_ADDR_SPACE (x));
+       ix86_print_operand_address_as
+         (file, addr, MEM_ADDR_SPACE (x), code == 'p' || code == 'P');
     }
 
   else if (CONST_DOUBLE_P (x) && GET_MODE (x) == SFmode)
@@ -17272,7 +17266,8 @@ ix86_print_operand_punct_valid_p (unsigned char code)
 /* Print a memory operand whose address is ADDR.  */
 
 static void
-ix86_print_operand_address_as (FILE *file, rtx addr, addr_space_t as)
+ix86_print_operand_address_as (FILE *file, rtx addr,
+                              addr_space_t as, bool no_rip)
 {
   struct ix86_address parts;
   rtx base, index, disp;
@@ -17346,7 +17341,7 @@ ix86_print_operand_address_as (FILE *file, rtx addr, addr_space_t as)
     }
 
   /* Use one byte shorter RIP relative addressing for 64bit mode.  */
-  if (TARGET_64BIT && !base && !index)
+  if (TARGET_64BIT && !base && !index && !no_rip)
     {
       rtx symbol = disp;
 
@@ -17360,10 +17355,10 @@ ix86_print_operand_address_as (FILE *file, rtx addr, addr_space_t as)
              && SYMBOL_REF_TLS_MODEL (symbol) == 0))
        base = pc_rtx;
     }
+
   if (!base && !index)
     {
       /* Displacement only requires special attention.  */
-
       if (CONST_INT_P (disp))
        {
          if (ASSEMBLER_DIALECT == ASM_INTEL && parts.seg == ADDR_SPACE_GENERIC)
@@ -17505,7 +17500,7 @@ ix86_print_operand_address_as (FILE *file, rtx addr, addr_space_t as)
 static void
 ix86_print_operand_address (FILE *file, machine_mode /*mode*/, rtx addr)
 {
-  ix86_print_operand_address_as (file, addr, ADDR_SPACE_GENERIC);
+  ix86_print_operand_address_as (file, addr, ADDR_SPACE_GENERIC, false);
 }
 
 /* Implementation of TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA.  */
index 52dd03717b410edd23d7aa0e4f1d14642ed61356..a236199699a08306cc21812838913d22d0f7db4c 100644 (file)
   switch (which_alternative)
     {
     case 0:
-      return "movabs{<imodesuffix>}\t{%1, %0|%0, %1}";
+      return "movabs{<imodesuffix>}\t{%1, %P0|[%P0], %1}";
     case 1:
       return "mov{<imodesuffix>}\t{%1, %0|%0, %1}";
     default:
   switch (which_alternative)
     {
     case 0:
-      return "movabs{<imodesuffix>}\t{%1, %0|%0, %1}";
+      return "movabs{<imodesuffix>}\t{%P1, %0|%0, [%P1]}";
     case 1:
       return "mov{<imodesuffix>}\t{%1, %0|%0, %1}";
     default: