+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
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)
{
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')
{
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)
/* 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;
}
/* 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;
&& 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)
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. */
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: