diff options
author | Jan Hubicka <hubicka@paru.cas.cz> | 1999-04-02 12:44:02 +0200 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-04-02 03:44:02 -0700 |
commit | 69a8af43607b00f63fdc84cc1d267eea4c4dc39e (patch) | |
tree | 98a2b8c2178850fa0cc6ce74f4ea55937bcd88da | |
parent | 57b1ca433d13996af8de478aefa2f72a24758434 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 17 |
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; |