patches/gcc/3.3.6/120-arm-pr22528.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Sep 04 17:27:16 2009 +0200 (2009-09-04)
changeset 1512 439a6b292917
parent 402 197e1b49586e
permissions -rw-r--r--
TODO: update

Add TODO list for m4, autoconf, automake and libtool.
Building our own versions would remove burden from the users
who have older versions on their distributions, and are not
ready/able/allowed to upgrade.
yann@402
     1
From http://gcc.gnu.org/ml/gcc-patches/2003-11/msg00832.html, by
yann@402
     2
Richard Earnshaw.  Fixes http://gcc.gnu.org/PR22528
yann@402
     3
yann@402
     4
--- gcc-3.3.4/gcc/config/arm/arm.md.orig	2004-03-30 22:43:44.000000000 +0200
yann@402
     5
+++ gcc-3.3.4/gcc/config/arm/arm.md	2005-08-15 12:21:55.000000000 +0200
yann@402
     6
@@ -4275,7 +4275,7 @@
yann@402
     7
    (set (match_dup 2)
yann@402
     8
 	(ashiftrt:SI (match_operand 0 "" "") (const_int 8)))
yann@402
     9
    ;; store the high byte
yann@402
    10
-   (set (match_dup 4) (subreg:QI (match_dup 2) 0))]	;explicit subreg safe
yann@402
    11
+   (set (match_dup 4) (match_dup 5))]
yann@402
    12
   "TARGET_ARM"
yann@402
    13
   "
yann@402
    14
   {
yann@402
    15
@@ -4291,7 +4291,8 @@
yann@402
    16
     operands[1] = adjust_address (operands[1], QImode, 0);
yann@402
    17
     operands[3] = gen_lowpart (QImode, operands[0]);
yann@402
    18
     operands[0] = gen_lowpart (SImode, operands[0]);
yann@402
    19
-    operands[2] = gen_reg_rtx (SImode); 
yann@402
    20
+    operands[2] = gen_reg_rtx (SImode);
yann@402
    21
+    operands[5] = gen_lowpart (QImode, operands[2]);
yann@402
    22
   }"
yann@402
    23
 )
yann@402
    24
 
yann@402
    25
@@ -4299,7 +4300,7 @@
yann@402
    26
   [(set (match_dup 4) (match_dup 3))
yann@402
    27
    (set (match_dup 2)
yann@402
    28
 	(ashiftrt:SI (match_operand 0 "" "") (const_int 8)))
yann@402
    29
-   (set (match_operand 1 "" "")	(subreg:QI (match_dup 2) 3))]
yann@402
    30
+   (set (match_operand 1 "" "")	(match_dup 5))]
yann@402
    31
   "TARGET_ARM"
yann@402
    32
   "
yann@402
    33
   {
yann@402
    34
@@ -4316,13 +4317,14 @@
yann@402
    35
     operands[3] = gen_lowpart (QImode, operands[0]);
yann@402
    36
     operands[0] = gen_lowpart (SImode, operands[0]);
yann@402
    37
     operands[2] = gen_reg_rtx (SImode);
yann@402
    38
+    operands[5] = gen_lowpart (QImode, operands[2]);
yann@402
    39
   }"
yann@402
    40
 )
yann@402
    41
 
yann@402
    42
 ;; Subroutine to store a half word integer constant into memory.
yann@402
    43
 (define_expand "storeinthi"
yann@402
    44
   [(set (match_operand 0 "" "")
yann@402
    45
-	(subreg:QI (match_operand 1 "" "") 0))
yann@402
    46
+	(match_operand 1 "" ""))
yann@402
    47
    (set (match_dup 3) (match_dup 2))]
yann@402
    48
   "TARGET_ARM"
yann@402
    49
   "
yann@402
    50
@@ -4363,6 +4365,7 @@
yann@402
    51
     operands[3] = adjust_address (op0, QImode, 1);
yann@402
    52
     operands[0] = adjust_address (operands[0], QImode, 0);
yann@402
    53
     operands[2] = gen_lowpart (QImode, operands[2]);
yann@402
    54
+    operands[1] = gen_lowpart (QImode, operands[1]);
yann@402
    55
   }"
yann@402
    56
 )
yann@402
    57
 
yann@402
    58
@@ -4682,11 +4685,12 @@
yann@402
    59
    (set (match_dup 3)
yann@402
    60
 	(ashiftrt:SI (match_dup 2) (const_int 16)))
yann@402
    61
    (set (match_operand:HI 0 "s_register_operand" "")
yann@402
    62
-	(subreg:HI (match_dup 3) 0))]
yann@402
    63
+	(match_dup 4))]
yann@402
    64
   "TARGET_ARM"
yann@402
    65
   "
yann@402
    66
   operands[2] = gen_reg_rtx (SImode);
yann@402
    67
   operands[3] = gen_reg_rtx (SImode);
yann@402
    68
+  operands[4] = gen_lowpart (HImode, operands[3]);
yann@402
    69
   "
yann@402
    70
 )
yann@402
    71