patches/gcc/3.3.6/120-gcc-3.3.4-arm-pr22528.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Feb 17 22:12:59 2008 +0000 (2008-02-17)
changeset 433 9886aa0a9694
permissions -rw-r--r--
Robert P. J. DAY says:

According to Mike Frysinger, this patch was removed from Gentoo in the
2.3.x series and didn't seem to cause any adverse effects. So toss it
from the patch directories for glibc 2.5 and up.
     1 From http://gcc.gnu.org/ml/gcc-patches/2003-11/msg00832.html, by
     2 Richard Earnshaw.  Fixes http://gcc.gnu.org/PR22528
     3 
     4 --- gcc-3.3.4/gcc/config/arm/arm.md.orig	2004-03-30 22:43:44.000000000 +0200
     5 +++ gcc-3.3.4/gcc/config/arm/arm.md	2005-08-15 12:21:55.000000000 +0200
     6 @@ -4275,7 +4275,7 @@
     7     (set (match_dup 2)
     8  	(ashiftrt:SI (match_operand 0 "" "") (const_int 8)))
     9     ;; store the high byte
    10 -   (set (match_dup 4) (subreg:QI (match_dup 2) 0))]	;explicit subreg safe
    11 +   (set (match_dup 4) (match_dup 5))]
    12    "TARGET_ARM"
    13    "
    14    {
    15 @@ -4291,7 +4291,8 @@
    16      operands[1] = adjust_address (operands[1], QImode, 0);
    17      operands[3] = gen_lowpart (QImode, operands[0]);
    18      operands[0] = gen_lowpart (SImode, operands[0]);
    19 -    operands[2] = gen_reg_rtx (SImode); 
    20 +    operands[2] = gen_reg_rtx (SImode);
    21 +    operands[5] = gen_lowpart (QImode, operands[2]);
    22    }"
    23  )
    24  
    25 @@ -4299,7 +4300,7 @@
    26    [(set (match_dup 4) (match_dup 3))
    27     (set (match_dup 2)
    28  	(ashiftrt:SI (match_operand 0 "" "") (const_int 8)))
    29 -   (set (match_operand 1 "" "")	(subreg:QI (match_dup 2) 3))]
    30 +   (set (match_operand 1 "" "")	(match_dup 5))]
    31    "TARGET_ARM"
    32    "
    33    {
    34 @@ -4316,13 +4317,14 @@
    35      operands[3] = gen_lowpart (QImode, operands[0]);
    36      operands[0] = gen_lowpart (SImode, operands[0]);
    37      operands[2] = gen_reg_rtx (SImode);
    38 +    operands[5] = gen_lowpart (QImode, operands[2]);
    39    }"
    40  )
    41  
    42  ;; Subroutine to store a half word integer constant into memory.
    43  (define_expand "storeinthi"
    44    [(set (match_operand 0 "" "")
    45 -	(subreg:QI (match_operand 1 "" "") 0))
    46 +	(match_operand 1 "" ""))
    47     (set (match_dup 3) (match_dup 2))]
    48    "TARGET_ARM"
    49    "
    50 @@ -4363,6 +4365,7 @@
    51      operands[3] = adjust_address (op0, QImode, 1);
    52      operands[0] = adjust_address (operands[0], QImode, 0);
    53      operands[2] = gen_lowpart (QImode, operands[2]);
    54 +    operands[1] = gen_lowpart (QImode, operands[1]);
    55    }"
    56  )
    57  
    58 @@ -4682,11 +4685,12 @@
    59     (set (match_dup 3)
    60  	(ashiftrt:SI (match_dup 2) (const_int 16)))
    61     (set (match_operand:HI 0 "s_register_operand" "")
    62 -	(subreg:HI (match_dup 3) 0))]
    63 +	(match_dup 4))]
    64    "TARGET_ARM"
    65    "
    66    operands[2] = gen_reg_rtx (SImode);
    67    operands[3] = gen_reg_rtx (SImode);
    68 +  operands[4] = gen_lowpart (HImode, operands[3]);
    69    "
    70  )
    71