aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@paru.cas.cz>1999-04-02 12:44:02 +0200
committerJeff Law <law@gcc.gnu.org>1999-04-02 03:44:02 -0700
commit69a8af43607b00f63fdc84cc1d267eea4c4dc39e (patch)
tree98a2b8c2178850fa0cc6ce74f4ea55937bcd88da
parent57b1ca433d13996af8de478aefa2f72a24758434 (diff)
downloadgcc-69a8af43607b00f63fdc84cc1d267eea4c4dc39e.zip
gcc-69a8af43607b00f63fdc84cc1d267eea4c4dc39e.tar.gz
gcc-69a8af43607b00f63fdc84cc1d267eea4c4dc39e.tar.bz2
i386.c (print_operand_address, case REG): Do not use ESI addressing mode for the K6.
* i386.c (print_operand_address, case REG): Do not use ESI addressing mode for the K6. * i386.c (print_operand_address, case MULT): Use more efficient encoding (mult (reg) (const_int 2)). From-SVN: r26116
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c17
2 files changed, 23 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cf03778..af1042d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+Fri Apr 2 11:36:12 1999 Jan Hubicka (hubicka@paru.cas.cz)
+
+ * i386.c (print_operand_address, case REG): Do not use ESI addressing
+ mode for the K6.
+
+ * i386.c (print_operand_address, case MULT): Use more efficient
+ encoding (mult (reg) (const_int 2)).
+
Thu Apr 1 17:01:50 1999 Richard Henderson <rth@cygnus.com>
Move over patch from Bernd Schmidt from GC branch:
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index e288a15..7a3c332 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -3772,6 +3772,11 @@ print_operand_address (file, addr)
switch (GET_CODE (addr))
{
case REG:
+ /* ESI addressing makes instruction vector decoded on the K6. We can
+ avoid this by ESI+0 addressing. */
+ if (REGNO_REG_CLASS (REGNO (addr)) == SIREG
+ && ix86_cpu == PROCESSOR_K6 && !optimize_size)
+ output_addr_const (file, const0_rtx);
ADDR_BEG (file);
fprintf (file, "%se", RP);
fputs (hi_reg_name[REGNO (addr)], file);
@@ -3887,8 +3892,16 @@ print_operand_address (file, addr)
ireg = XEXP (addr, 0);
}
- output_addr_const (file, const0_rtx);
- PRINT_B_I_S (NULL_RTX, ireg, scale, file);
+ /* (reg,reg,) is shorter than (,reg,2). */
+ if(scale == 2)
+ {
+ PRINT_B_I_S (ireg, ireg, 1, file);
+ }
+ else
+ {
+ output_addr_const (file, const0_rtx);
+ PRINT_B_I_S (NULL_RTX, ireg, scale, file);
+ }
}
break;