aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106754.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106754.patch')
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106754.patch329
1 files changed, 0 insertions, 329 deletions
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106754.patch b/meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106754.patch
deleted file mode 100644
index b64991836b..0000000000
--- a/meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106754.patch
+++ /dev/null
@@ -1,329 +0,0 @@
-2011-06-07 Andrew Stubbs <ams@codesourcery.com>
-
- Backport from FSF:
-
- 2011-06-07 Andrew Stubbs <ams@codesourcery.com>
-
- gcc/
- * config/arm/arm.md (*maddhidi4tb, *maddhidi4tt): New define_insns.
- (*maddhisi4tb, *maddhisi4tt): New define_insns.
-
- gcc/testsuite/
- * gcc.target/arm/smlatb-1.c: New file.
- * gcc.target/arm/smlatt-1.c: New file.
- * gcc.target/arm/smlaltb-1.c: New file.
- * gcc.target/arm/smlaltt-1.c: New file.
-
-2011-06-07 Andrew Stubbs <ams@codesourcery.com>
-
- Backport from FSF:
-
- 2011-06-07 Bernd Schmidt <bernds@codesourcery.com>
- Andrew Stubbs <ams@codesourcery.com>
-
- gcc/
- * simplify-rtx.c (simplify_unary_operation_1): Canonicalize widening
- multiplies.
- * doc/md.texi (Canonicalization of Instructions): Document widening
- multiply canonicalization.
-
- gcc/testsuite/
- * gcc.target/arm/mla-2.c: New test.
-
-=== modified file 'gcc/config/arm/arm.md'
---- old/gcc/config/arm/arm.md 2011-05-13 13:42:39 +0000
-+++ new/gcc/config/arm/arm.md 2011-06-02 15:58:33 +0000
-@@ -1809,6 +1809,36 @@
- (set_attr "predicable" "yes")]
- )
-
-+;; Note: there is no maddhisi4ibt because this one is canonical form
-+(define_insn "*maddhisi4tb"
-+ [(set (match_operand:SI 0 "s_register_operand" "=r")
-+ (plus:SI (mult:SI (ashiftrt:SI
-+ (match_operand:SI 1 "s_register_operand" "r")
-+ (const_int 16))
-+ (sign_extend:SI
-+ (match_operand:HI 2 "s_register_operand" "r")))
-+ (match_operand:SI 3 "s_register_operand" "r")))]
-+ "TARGET_DSP_MULTIPLY"
-+ "smlatb%?\\t%0, %1, %2, %3"
-+ [(set_attr "insn" "smlaxy")
-+ (set_attr "predicable" "yes")]
-+)
-+
-+(define_insn "*maddhisi4tt"
-+ [(set (match_operand:SI 0 "s_register_operand" "=r")
-+ (plus:SI (mult:SI (ashiftrt:SI
-+ (match_operand:SI 1 "s_register_operand" "r")
-+ (const_int 16))
-+ (ashiftrt:SI
-+ (match_operand:SI 2 "s_register_operand" "r")
-+ (const_int 16)))
-+ (match_operand:SI 3 "s_register_operand" "r")))]
-+ "TARGET_DSP_MULTIPLY"
-+ "smlatt%?\\t%0, %1, %2, %3"
-+ [(set_attr "insn" "smlaxy")
-+ (set_attr "predicable" "yes")]
-+)
-+
- (define_insn "*maddhidi4"
- [(set (match_operand:DI 0 "s_register_operand" "=r")
- (plus:DI
-@@ -1822,6 +1852,39 @@
- [(set_attr "insn" "smlalxy")
- (set_attr "predicable" "yes")])
-
-+;; Note: there is no maddhidi4ibt because this one is canonical form
-+(define_insn "*maddhidi4tb"
-+ [(set (match_operand:DI 0 "s_register_operand" "=r")
-+ (plus:DI
-+ (mult:DI (sign_extend:DI
-+ (ashiftrt:SI
-+ (match_operand:SI 1 "s_register_operand" "r")
-+ (const_int 16)))
-+ (sign_extend:DI
-+ (match_operand:HI 2 "s_register_operand" "r")))
-+ (match_operand:DI 3 "s_register_operand" "0")))]
-+ "TARGET_DSP_MULTIPLY"
-+ "smlaltb%?\\t%Q0, %R0, %1, %2"
-+ [(set_attr "insn" "smlalxy")
-+ (set_attr "predicable" "yes")])
-+
-+(define_insn "*maddhidi4tt"
-+ [(set (match_operand:DI 0 "s_register_operand" "=r")
-+ (plus:DI
-+ (mult:DI (sign_extend:DI
-+ (ashiftrt:SI
-+ (match_operand:SI 1 "s_register_operand" "r")
-+ (const_int 16)))
-+ (sign_extend:DI
-+ (ashiftrt:SI
-+ (match_operand:SI 2 "s_register_operand" "r")
-+ (const_int 16))))
-+ (match_operand:DI 3 "s_register_operand" "0")))]
-+ "TARGET_DSP_MULTIPLY"
-+ "smlaltt%?\\t%Q0, %R0, %1, %2"
-+ [(set_attr "insn" "smlalxy")
-+ (set_attr "predicable" "yes")])
-+
- (define_expand "mulsf3"
- [(set (match_operand:SF 0 "s_register_operand" "")
- (mult:SF (match_operand:SF 1 "s_register_operand" "")
-
-=== modified file 'gcc/doc/md.texi'
---- old/gcc/doc/md.texi 2011-05-05 15:43:06 +0000
-+++ new/gcc/doc/md.texi 2011-06-07 11:18:20 +0000
-@@ -5929,6 +5929,23 @@
- will be written using @code{zero_extract} rather than the equivalent
- @code{and} or @code{sign_extract} operations.
-
-+@cindex @code{mult}, canonicalization of
-+@item
-+@code{(sign_extend:@var{m1} (mult:@var{m2} (sign_extend:@var{m2} @var{x})
-+(sign_extend:@var{m2} @var{y})))} is converted to @code{(mult:@var{m1}
-+(sign_extend:@var{m1} @var{x}) (sign_extend:@var{m1} @var{y}))}, and likewise
-+for @code{zero_extend}.
-+
-+@item
-+@code{(sign_extend:@var{m1} (mult:@var{m2} (ashiftrt:@var{m2}
-+@var{x} @var{s}) (sign_extend:@var{m2} @var{y})))} is converted
-+to @code{(mult:@var{m1} (sign_extend:@var{m1} (ashiftrt:@var{m2}
-+@var{x} @var{s})) (sign_extend:@var{m1} @var{y}))}, and likewise for
-+patterns using @code{zero_extend} and @code{lshiftrt}. If the second
-+operand of @code{mult} is also a shift, then that is extended also.
-+This transformation is only applied when it can be proven that the
-+original operation had sufficient precision to prevent overflow.
-+
- @end itemize
-
- Further canonicalization rules are defined in the function
-
-=== modified file 'gcc/simplify-rtx.c'
---- old/gcc/simplify-rtx.c 2011-05-27 14:31:18 +0000
-+++ new/gcc/simplify-rtx.c 2011-06-02 12:32:16 +0000
-@@ -1000,6 +1000,48 @@
- && GET_CODE (XEXP (XEXP (op, 0), 1)) == LABEL_REF)
- return XEXP (op, 0);
-
-+ /* Extending a widening multiplication should be canonicalized to
-+ a wider widening multiplication. */
-+ if (GET_CODE (op) == MULT)
-+ {
-+ rtx lhs = XEXP (op, 0);
-+ rtx rhs = XEXP (op, 1);
-+ enum rtx_code lcode = GET_CODE (lhs);
-+ enum rtx_code rcode = GET_CODE (rhs);
-+
-+ /* Widening multiplies usually extend both operands, but sometimes
-+ they use a shift to extract a portion of a register. */
-+ if ((lcode == SIGN_EXTEND
-+ || (lcode == ASHIFTRT && CONST_INT_P (XEXP (lhs, 1))))
-+ && (rcode == SIGN_EXTEND
-+ || (rcode == ASHIFTRT && CONST_INT_P (XEXP (rhs, 1)))))
-+ {
-+ enum machine_mode lmode = GET_MODE (lhs);
-+ enum machine_mode rmode = GET_MODE (rhs);
-+ int bits;
-+
-+ if (lcode == ASHIFTRT)
-+ /* Number of bits not shifted off the end. */
-+ bits = GET_MODE_PRECISION (lmode) - INTVAL (XEXP (lhs, 1));
-+ else /* lcode == SIGN_EXTEND */
-+ /* Size of inner mode. */
-+ bits = GET_MODE_PRECISION (GET_MODE (XEXP (lhs, 0)));
-+
-+ if (rcode == ASHIFTRT)
-+ bits += GET_MODE_PRECISION (rmode) - INTVAL (XEXP (rhs, 1));
-+ else /* rcode == SIGN_EXTEND */
-+ bits += GET_MODE_PRECISION (GET_MODE (XEXP (rhs, 0)));
-+
-+ /* We can only widen multiplies if the result is mathematiclly
-+ equivalent. I.e. if overflow was impossible. */
-+ if (bits <= GET_MODE_PRECISION (GET_MODE (op)))
-+ return simplify_gen_binary
-+ (MULT, mode,
-+ simplify_gen_unary (SIGN_EXTEND, mode, lhs, lmode),
-+ simplify_gen_unary (SIGN_EXTEND, mode, rhs, rmode));
-+ }
-+ }
-+
- /* Check for a sign extension of a subreg of a promoted
- variable, where the promotion is sign-extended, and the
- target mode is the same as the variable's promotion. */
-@@ -1071,6 +1113,48 @@
- && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (GET_MODE (XEXP (op, 0))))
- return rtl_hooks.gen_lowpart_no_emit (mode, op);
-
-+ /* Extending a widening multiplication should be canonicalized to
-+ a wider widening multiplication. */
-+ if (GET_CODE (op) == MULT)
-+ {
-+ rtx lhs = XEXP (op, 0);
-+ rtx rhs = XEXP (op, 1);
-+ enum rtx_code lcode = GET_CODE (lhs);
-+ enum rtx_code rcode = GET_CODE (rhs);
-+
-+ /* Widening multiplies usually extend both operands, but sometimes
-+ they use a shift to extract a portion of a register. */
-+ if ((lcode == ZERO_EXTEND
-+ || (lcode == LSHIFTRT && CONST_INT_P (XEXP (lhs, 1))))
-+ && (rcode == ZERO_EXTEND
-+ || (rcode == LSHIFTRT && CONST_INT_P (XEXP (rhs, 1)))))
-+ {
-+ enum machine_mode lmode = GET_MODE (lhs);
-+ enum machine_mode rmode = GET_MODE (rhs);
-+ int bits;
-+
-+ if (lcode == LSHIFTRT)
-+ /* Number of bits not shifted off the end. */
-+ bits = GET_MODE_PRECISION (lmode) - INTVAL (XEXP (lhs, 1));
-+ else /* lcode == ZERO_EXTEND */
-+ /* Size of inner mode. */
-+ bits = GET_MODE_PRECISION (GET_MODE (XEXP (lhs, 0)));
-+
-+ if (rcode == LSHIFTRT)
-+ bits += GET_MODE_PRECISION (rmode) - INTVAL (XEXP (rhs, 1));
-+ else /* rcode == ZERO_EXTEND */
-+ bits += GET_MODE_PRECISION (GET_MODE (XEXP (rhs, 0)));
-+
-+ /* We can only widen multiplies if the result is mathematiclly
-+ equivalent. I.e. if overflow was impossible. */
-+ if (bits <= GET_MODE_PRECISION (GET_MODE (op)))
-+ return simplify_gen_binary
-+ (MULT, mode,
-+ simplify_gen_unary (ZERO_EXTEND, mode, lhs, lmode),
-+ simplify_gen_unary (ZERO_EXTEND, mode, rhs, rmode));
-+ }
-+ }
-+
- /* (zero_extend:M (zero_extend:N <X>)) is (zero_extend:M <X>). */
- if (GET_CODE (op) == ZERO_EXTEND)
- return simplify_gen_unary (ZERO_EXTEND, mode, XEXP (op, 0),
-
-=== added file 'gcc/testsuite/gcc.target/arm/mla-2.c'
---- old/gcc/testsuite/gcc.target/arm/mla-2.c 1970-01-01 00:00:00 +0000
-+++ new/gcc/testsuite/gcc.target/arm/mla-2.c 2011-06-02 12:32:16 +0000
-@@ -0,0 +1,9 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -march=armv7-a" } */
-+
-+long long foolong (long long x, short *a, short *b)
-+{
-+ return x + *a * *b;
-+}
-+
-+/* { dg-final { scan-assembler "smlalbb" } } */
-
-=== added file 'gcc/testsuite/gcc.target/arm/smlaltb-1.c'
---- old/gcc/testsuite/gcc.target/arm/smlaltb-1.c 1970-01-01 00:00:00 +0000
-+++ new/gcc/testsuite/gcc.target/arm/smlaltb-1.c 2011-06-02 15:58:33 +0000
-@@ -0,0 +1,13 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -march=armv7-a" } */
-+
-+long long int
-+foo (long long x, int in)
-+{
-+ short a = in & 0xffff;
-+ short b = (in & 0xffff0000) >> 16;
-+
-+ return x + b * a;
-+}
-+
-+/* { dg-final { scan-assembler "smlaltb" } } */
-
-=== added file 'gcc/testsuite/gcc.target/arm/smlaltt-1.c'
---- old/gcc/testsuite/gcc.target/arm/smlaltt-1.c 1970-01-01 00:00:00 +0000
-+++ new/gcc/testsuite/gcc.target/arm/smlaltt-1.c 2011-06-02 15:58:33 +0000
-@@ -0,0 +1,13 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -march=armv7-a" } */
-+
-+long long int
-+foo (long long x, int in1, int in2)
-+{
-+ short a = (in1 & 0xffff0000) >> 16;
-+ short b = (in2 & 0xffff0000) >> 16;
-+
-+ return x + b * a;
-+}
-+
-+/* { dg-final { scan-assembler "smlaltt" } } */
-
-=== added file 'gcc/testsuite/gcc.target/arm/smlatb-1.c'
---- old/gcc/testsuite/gcc.target/arm/smlatb-1.c 1970-01-01 00:00:00 +0000
-+++ new/gcc/testsuite/gcc.target/arm/smlatb-1.c 2011-06-02 15:58:33 +0000
-@@ -0,0 +1,13 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -march=armv7-a" } */
-+
-+int
-+foo (int x, int in)
-+{
-+ short a = in & 0xffff;
-+ short b = (in & 0xffff0000) >> 16;
-+
-+ return x + b * a;
-+}
-+
-+/* { dg-final { scan-assembler "smlatb" } } */
-
-=== added file 'gcc/testsuite/gcc.target/arm/smlatt-1.c'
---- old/gcc/testsuite/gcc.target/arm/smlatt-1.c 1970-01-01 00:00:00 +0000
-+++ new/gcc/testsuite/gcc.target/arm/smlatt-1.c 2011-06-02 15:58:33 +0000
-@@ -0,0 +1,13 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -march=armv7-a" } */
-+
-+int
-+foo (int x, int in1, int in2)
-+{
-+ short a = (in1 & 0xffff0000) >> 16;
-+ short b = (in2 & 0xffff0000) >> 16;
-+
-+ return x + b * a;
-+}
-+
-+/* { dg-final { scan-assembler "smlatt" } } */
-