aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Meissner <meissner@gcc.gnu.org>1992-03-30 23:22:55 +0000
committerMichael Meissner <meissner@gcc.gnu.org>1992-03-30 23:22:55 +0000
commit4e09f580c0d716163936a63de594ca5d80cdfffb (patch)
treef9f9e70502e29d1bbe24f696707d9f66deb94a38 /gcc
parent58e54c449bcd843cde0e989ef386283e708a88c9 (diff)
downloadgcc-4e09f580c0d716163936a63de594ca5d80cdfffb.zip
gcc-4e09f580c0d716163936a63de594ca5d80cdfffb.tar.gz
gcc-4e09f580c0d716163936a63de594ca5d80cdfffb.tar.bz2
*** empty log message ***
From-SVN: r640
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/mips/mips.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index a4f1172..068abf1 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -1997,6 +1997,9 @@ output_block_move (insn, operands, num_regs)
{
if (CONSTANT_P (src_reg))
{
+ if (TARGET_STATS)
+ mips_count_memory_refs (operands[1], 1);
+
xoperands[1] = operands[1];
xoperands[0] = src_reg = operands[ 3 + num_regs-- ];
output_asm_insn ("la\t%0,%1", xoperands);
@@ -2004,7 +2007,10 @@ output_block_move (insn, operands, num_regs)
if (CONSTANT_P (dest_reg))
{
- xoperands[1] = operands[1];
+ if (TARGET_STATS)
+ mips_count_memory_refs (operands[0], 1);
+
+ xoperands[1] = operands[0];
xoperands[0] = dest_reg = operands[ 3 + num_regs-- ];
output_asm_insn ("la\t%0,%1", xoperands);
}
@@ -2023,6 +2029,8 @@ output_block_move (insn, operands, num_regs)
{
load_store[num].offset = offset;
+ dslots_load_total++;
+ dslots_load_filled++;
if (bytes >= UNITS_PER_WORD && align >= UNITS_PER_WORD)
{
load_store[num].load = "lw\t%0,%1";
@@ -2064,14 +2072,26 @@ output_block_move (insn, operands, num_regs)
bytes--;
}
+ if (TARGET_STATS)
+ {
+ if (CONSTANT_P (src_reg))
+ mips_count_memory_refs (src_reg, 1);
+
+ if (CONSTANT_P (dest_reg))
+ mips_count_memory_refs (dest_reg, 1);
+ }
+
/* Emit load/stores now if we have run out of registers or are
at the end of the move. */
- if (++num == 4 || bytes == 0)
+ if (++num == num_regs || bytes == 0)
{
/* If only load/store, we need a NOP after the load. */
if (num == 1)
- load_store[0].load = load_store[0].load_nop;
+ {
+ load_store[0].load = load_store[0].load_nop;
+ dslots_load_filled--;
+ }
for (i = 0; i < num; i++)
{