diff options
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.patch | 203 |
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++; +- } +-} + |