As mentioned in the PR, SP_REG can not be encoded as index.

2017-09-28  Uros Bizjak  <ubiz...@gmail.com>

    * config/i386/i386.c (ix86_print_operand_address_as): Do not check
    index when encoding %esp as %rsp to avoid 0x67 prefix.

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Committed to mainline SVN.

Uros.
Index: config/i386/i386.c
===================================================================
--- config/i386/i386.c  (revision 253254)
+++ config/i386/i386.c  (working copy)
@@ -19953,12 +19953,11 @@ ix86_print_operand_address_as (FILE *file, rtx add
          code = 'k';
        }
 
-      /* Since the upper 32 bits of RSP are always zero for x32, we can
-        encode %esp as %rsp to avoid 0x67 prefix if there is no index or
-        base register.  */
+      /* Since the upper 32 bits of RSP are always zero for x32,
+        we can encode %esp as %rsp to avoid 0x67 prefix if
+        there is no index register.  */
       if (TARGET_X32 && Pmode == SImode
-         && ((!index && base && REG_P (base) && REGNO (base) == SP_REG)
-             || (!base && index && REGNO (index) == SP_REG)))
+         && !index && base && REG_P (base) && REGNO (base) == SP_REG)
        code = 'q';
 
       if (ASSEMBLER_DIALECT == ASM_ATT)

Reply via email to