1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/patches/gcc/3.3.6/gcc-3.3.4-arm-pr22528.patch Sun May 27 21:30:34 2007 +0000
1.3 @@ -0,0 +1,71 @@
1.4 +From http://gcc.gnu.org/ml/gcc-patches/2003-11/msg00832.html, by
1.5 +Richard Earnshaw. Fixes http://gcc.gnu.org/PR22528
1.6 +
1.7 +--- gcc-3.3.4/gcc/config/arm/arm.md.orig 2004-03-30 22:43:44.000000000 +0200
1.8 ++++ gcc-3.3.4/gcc/config/arm/arm.md 2005-08-15 12:21:55.000000000 +0200
1.9 +@@ -4275,7 +4275,7 @@
1.10 + (set (match_dup 2)
1.11 + (ashiftrt:SI (match_operand 0 "" "") (const_int 8)))
1.12 + ;; store the high byte
1.13 +- (set (match_dup 4) (subreg:QI (match_dup 2) 0))] ;explicit subreg safe
1.14 ++ (set (match_dup 4) (match_dup 5))]
1.15 + "TARGET_ARM"
1.16 + "
1.17 + {
1.18 +@@ -4291,7 +4291,8 @@
1.19 + operands[1] = adjust_address (operands[1], QImode, 0);
1.20 + operands[3] = gen_lowpart (QImode, operands[0]);
1.21 + operands[0] = gen_lowpart (SImode, operands[0]);
1.22 +- operands[2] = gen_reg_rtx (SImode);
1.23 ++ operands[2] = gen_reg_rtx (SImode);
1.24 ++ operands[5] = gen_lowpart (QImode, operands[2]);
1.25 + }"
1.26 + )
1.27 +
1.28 +@@ -4299,7 +4300,7 @@
1.29 + [(set (match_dup 4) (match_dup 3))
1.30 + (set (match_dup 2)
1.31 + (ashiftrt:SI (match_operand 0 "" "") (const_int 8)))
1.32 +- (set (match_operand 1 "" "") (subreg:QI (match_dup 2) 3))]
1.33 ++ (set (match_operand 1 "" "") (match_dup 5))]
1.34 + "TARGET_ARM"
1.35 + "
1.36 + {
1.37 +@@ -4316,13 +4317,14 @@
1.38 + operands[3] = gen_lowpart (QImode, operands[0]);
1.39 + operands[0] = gen_lowpart (SImode, operands[0]);
1.40 + operands[2] = gen_reg_rtx (SImode);
1.41 ++ operands[5] = gen_lowpart (QImode, operands[2]);
1.42 + }"
1.43 + )
1.44 +
1.45 + ;; Subroutine to store a half word integer constant into memory.
1.46 + (define_expand "storeinthi"
1.47 + [(set (match_operand 0 "" "")
1.48 +- (subreg:QI (match_operand 1 "" "") 0))
1.49 ++ (match_operand 1 "" ""))
1.50 + (set (match_dup 3) (match_dup 2))]
1.51 + "TARGET_ARM"
1.52 + "
1.53 +@@ -4363,6 +4365,7 @@
1.54 + operands[3] = adjust_address (op0, QImode, 1);
1.55 + operands[0] = adjust_address (operands[0], QImode, 0);
1.56 + operands[2] = gen_lowpart (QImode, operands[2]);
1.57 ++ operands[1] = gen_lowpart (QImode, operands[1]);
1.58 + }"
1.59 + )
1.60 +
1.61 +@@ -4682,11 +4685,12 @@
1.62 + (set (match_dup 3)
1.63 + (ashiftrt:SI (match_dup 2) (const_int 16)))
1.64 + (set (match_operand:HI 0 "s_register_operand" "")
1.65 +- (subreg:HI (match_dup 3) 0))]
1.66 ++ (match_dup 4))]
1.67 + "TARGET_ARM"
1.68 + "
1.69 + operands[2] = gen_reg_rtx (SImode);
1.70 + operands[3] = gen_reg_rtx (SImode);
1.71 ++ operands[4] = gen_lowpart (HImode, operands[3]);
1.72 + "
1.73 + )
1.74 +