aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106811.patch
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106811.patch')
-rw-r--r--toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106811.patch203
1 files changed, 203 insertions, 0 deletions
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106811.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106811.patch
new file mode 100644
index 0000000000..41b5c6dbf9
--- /dev/null
+++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106811.patch
@@ -0,0 +1,203 @@
+2011-09-15 Richard Sandiford <richard.sandiford@linaro.org>
+
+ Revert:
+
+ gcc/
+ PR target/49030
+ * config/arm/arm-protos.h (maybe_get_arm_condition_code): Declare.
+ * config/arm/arm.c (maybe_get_arm_condition_code): New function,
+ reusing the old code from get_arm_condition_code. Return ARM_NV
+ for invalid comparison codes.
+ (get_arm_condition_code): Redefine in terms of
+ maybe_get_arm_condition_code.
+ * config/arm/predicates.md (arm_comparison_operator): Use
+ maybe_get_arm_condition_code.
+
+ gcc/testsuite/
+ PR target/49030
+ * gcc.dg/torture/pr49030.c: New test.
+
+=== modified file 'gcc/config/arm/arm-protos.h'
+--- old/gcc/config/arm/arm-protos.h 2011-09-12 14:14:00 +0000
++++ new/gcc/config/arm/arm-protos.h 2011-09-15 09:45:31 +0000
+@@ -180,7 +180,6 @@
+ #endif
+ extern int thumb_shiftable_const (unsigned HOST_WIDE_INT);
+ #ifdef RTX_CODE
+-extern enum arm_cond_code maybe_get_arm_condition_code (rtx);
+ extern void thumb1_final_prescan_insn (rtx);
+ extern void thumb2_final_prescan_insn (rtx);
+ extern const char *thumb_load_double_from_address (rtx *);
+
+=== modified file 'gcc/config/arm/arm.c'
+--- old/gcc/config/arm/arm.c 2011-09-12 14:14:00 +0000
++++ new/gcc/config/arm/arm.c 2011-09-15 09:45:31 +0000
+@@ -17494,10 +17494,10 @@
+ decremented/zeroed by arm_asm_output_opcode as the insns are output. */
+
+ /* Returns the index of the ARM condition code string in
+- `arm_condition_codes', or ARM_NV if the comparison is invalid.
+- COMPARISON should be an rtx like `(eq (...) (...))'. */
+-enum arm_cond_code
+-maybe_get_arm_condition_code (rtx comparison)
++ `arm_condition_codes'. COMPARISON should be an rtx like
++ `(eq (...) (...))'. */
++static enum arm_cond_code
++get_arm_condition_code (rtx comparison)
+ {
+ enum machine_mode mode = GET_MODE (XEXP (comparison, 0));
+ enum arm_cond_code code;
+@@ -17521,11 +17521,11 @@
+ case CC_DLTUmode: code = ARM_CC;
+
+ dominance:
++ gcc_assert (comp_code == EQ || comp_code == NE);
++
+ if (comp_code == EQ)
+ return ARM_INVERSE_CONDITION_CODE (code);
+- if (comp_code == NE)
+- return code;
+- return ARM_NV;
++ return code;
+
+ case CC_NOOVmode:
+ switch (comp_code)
+@@ -17534,7 +17534,7 @@
+ case EQ: return ARM_EQ;
+ case GE: return ARM_PL;
+ case LT: return ARM_MI;
+- default: return ARM_NV;
++ default: gcc_unreachable ();
+ }
+
+ case CC_Zmode:
+@@ -17542,7 +17542,7 @@
+ {
+ case NE: return ARM_NE;
+ case EQ: return ARM_EQ;
+- default: return ARM_NV;
++ default: gcc_unreachable ();
+ }
+
+ case CC_Nmode:
+@@ -17550,7 +17550,7 @@
+ {
+ case NE: return ARM_MI;
+ case EQ: return ARM_PL;
+- default: return ARM_NV;
++ default: gcc_unreachable ();
+ }
+
+ case CCFPEmode:
+@@ -17575,7 +17575,7 @@
+ /* UNEQ and LTGT do not have a representation. */
+ case UNEQ: /* Fall through. */
+ case LTGT: /* Fall through. */
+- default: return ARM_NV;
++ default: gcc_unreachable ();
+ }
+
+ case CC_SWPmode:
+@@ -17591,7 +17591,7 @@
+ case GTU: return ARM_CC;
+ case LEU: return ARM_CS;
+ case LTU: return ARM_HI;
+- default: return ARM_NV;
++ default: gcc_unreachable ();
+ }
+
+ case CC_Cmode:
+@@ -17599,7 +17599,7 @@
+ {
+ case LTU: return ARM_CS;
+ case GEU: return ARM_CC;
+- default: return ARM_NV;
++ default: gcc_unreachable ();
+ }
+
+ case CC_CZmode:
+@@ -17611,7 +17611,7 @@
+ case GTU: return ARM_HI;
+ case LEU: return ARM_LS;
+ case LTU: return ARM_CC;
+- default: return ARM_NV;
++ default: gcc_unreachable ();
+ }
+
+ case CC_NCVmode:
+@@ -17621,7 +17621,7 @@
+ case LT: return ARM_LT;
+ case GEU: return ARM_CS;
+ case LTU: return ARM_CC;
+- default: return ARM_NV;
++ default: gcc_unreachable ();
+ }
+
+ case CCmode:
+@@ -17637,22 +17637,13 @@
+ case GTU: return ARM_HI;
+ case LEU: return ARM_LS;
+ case LTU: return ARM_CC;
+- default: return ARM_NV;
++ default: gcc_unreachable ();
+ }
+
+ default: gcc_unreachable ();
+ }
+ }
+
+-/* Like maybe_get_arm_condition_code, but never return ARM_NV. */
+-static enum arm_cond_code
+-get_arm_condition_code (rtx comparison)
+-{
+- enum arm_cond_code code = maybe_get_arm_condition_code (comparison);
+- gcc_assert (code != ARM_NV);
+- return code;
+-}
+-
+ /* Tell arm_asm_output_opcode to output IT blocks for conditionally executed
+ instructions. */
+ void
+
+=== modified file 'gcc/config/arm/predicates.md'
+--- old/gcc/config/arm/predicates.md 2011-09-12 12:32:29 +0000
++++ new/gcc/config/arm/predicates.md 2011-09-15 09:45:31 +0000
+@@ -243,9 +243,10 @@
+ ;; True for integer comparisons and, if FP is active, for comparisons
+ ;; other than LTGT or UNEQ.
+ (define_special_predicate "arm_comparison_operator"
+- (and (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu,
+- unordered,ordered,unlt,unle,unge,ungt")
+- (match_test "maybe_get_arm_condition_code (op) != ARM_NV")))
++ (ior (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu")
++ (and (match_test "TARGET_32BIT && TARGET_HARD_FLOAT
++ && (TARGET_FPA || TARGET_VFP)")
++ (match_code "unordered,ordered,unlt,unle,unge,ungt"))))
+
+ (define_special_predicate "lt_ge_comparison_operator"
+ (match_code "lt,ge"))
+
+=== removed file 'gcc/testsuite/gcc.dg/torture/pr49030.c'
+--- old/gcc/testsuite/gcc.dg/torture/pr49030.c 2011-09-05 09:40:19 +0000
++++ new/gcc/testsuite/gcc.dg/torture/pr49030.c 1970-01-01 00:00:00 +0000
+@@ -1,19 +0,0 @@
+-void
+-sample_move_d32u24_sS (char *dst, float *src, unsigned long nsamples,
+- unsigned long dst_skip)
+-{
+- long long y;
+- while (nsamples--)
+- {
+- y = (long long) (*src * 8388608.0f) << 8;
+- if (y > 2147483647) {
+- *(int *) dst = 2147483647;
+- } else if (y < -2147483647 - 1) {
+- *(int *) dst = -2147483647 - 1;
+- } else {
+- *(int *) dst = (int) y;
+- }
+- dst += dst_skip;
+- src++;
+- }
+-}
+