patches/gcc/3.4.6/601-gcc34-arm-ldm-peephole2.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Jun 27 11:19:12 2008 +0000 (2008-06-27)
changeset 627 17a57be570a5
permissions -rw-r--r--
Update the samples.

/trunk/samples/armeb-unknown-linux-uclibc/crosstool.config | 13 8 5 0 +++--
/trunk/samples/arm-unknown-linux-gnueabi/crosstool.config | 35 24 11 0 +++++++++----
/trunk/samples/mips-unknown-linux-uclibc/crosstool.config | 11 7 4 0 +++-
/trunk/samples/arm-unknown-linux-uclibcgnueabi/crosstool.config | 11 7 4 0 +++-
/trunk/samples/ia64-unknown-linux-gnu/crosstool.config | 19 11 8 0 ++++---
/trunk/samples/armeb-unknown-linux-gnu/crosstool.config | 11 7 4 0 +++-
/trunk/samples/x86_64-unknown-linux-uclibc/crosstool.config | 11 7 4 0 +++-
/trunk/samples/arm-unknown-linux-uclibc/crosstool.config | 11 7 4 0 +++-
/trunk/samples/i586-geode-linux-uclibc/crosstool.config | 11 7 4 0 +++-
/trunk/samples/powerpc-unknown-linux-uclibc/crosstool.config | 16 10 6 0 ++++--
/trunk/samples/armeb-unknown-linux-uclibcgnueabi/crosstool.config | 13 8 5 0 +++--
/trunk/samples/i686-nptl-linux-gnu/crosstool.config | 11 7 4 0 +++-
12 files changed, 110 insertions(+), 63 deletions(-)
     1 diff -durN gcc-3.4.6.orig/gcc/config/arm/arm.c gcc-3.4.6/gcc/config/arm/arm.c
     2 --- gcc-3.4.6.orig/gcc/config/arm/arm.c	2007-08-15 22:57:51.000000000 +0200
     3 +++ gcc-3.4.6/gcc/config/arm/arm.c	2007-08-15 22:57:51.000000000 +0200
     4 @@ -4572,6 +4572,10 @@
     5  int
     6  adjacent_mem_locations (rtx a, rtx b)
     7  {
     8 +  /* We don't guarantee to preserve the order of these memory refs.  */
     9 +  if (volatile_refs_p (a) || volatile_refs_p (b))
    10 +    return 0;
    11 +
    12    if ((GET_CODE (XEXP (a, 0)) == REG
    13         || (GET_CODE (XEXP (a, 0)) == PLUS
    14  	   && GET_CODE (XEXP (XEXP (a, 0), 1)) == CONST_INT))
    15 @@ -4611,6 +4615,17 @@
    16  	return 0;
    17  
    18        val_diff = val1 - val0;
    19 +
    20 +      if (arm_ld_sched)
    21 +	{
    22 +	  /* If the target has load delay slots, then there's no benefit
    23 +	     to using an ldm instruction unless the offset is zero and
    24 +	     we are optimizing for size.  */
    25 +	  return (optimize_size && (REGNO (reg0) == REGNO (reg1))
    26 +		  && (val0 == 0 || val1 == 0 || val0 == 4 || val1 == 4)
    27 +		  && (val_diff == 4 || val_diff == -4));
    28 +	}
    29 +
    30        return ((REGNO (reg0) == REGNO (reg1))
    31  	      && (val_diff == 4 || val_diff == -4));
    32      }