diff options
author | Khem Raj <raj.khem@gmail.com> | 2012-04-07 20:09:45 +0000 |
---|---|---|
committer | Koen Kooi <koen@dominion.thruhere.net> | 2012-04-08 07:48:16 +0200 |
commit | 9fb576a0d53d4bd511eee64f44d4ed187acdd83c (patch) | |
tree | c7775951f46dc17658768f7c04a301da43486401 /toolchain-layer/recipes-devtools | |
parent | a6790d602eb91069b1f618697e66a38619bcd690 (diff) | |
download | meta-openembedded-9fb576a0d53d4bd511eee64f44d4ed187acdd83c.tar.gz |
gcc-4.6: Update to 2012.03 linaro release
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
Diffstat (limited to 'toolchain-layer/recipes-devtools')
7 files changed, 1119 insertions, 1 deletions
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106876.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106876.patch new file mode 100644 index 000000000..048e85b4d --- /dev/null +++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106876.patch | |||
@@ -0,0 +1,109 @@ | |||
1 | 2012-03-06 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> | ||
2 | |||
3 | LP:942307 | ||
4 | gcc/ | ||
5 | PR target/50305 | ||
6 | * config/arm/arm.c (arm_legitimize_reload_address): Recognize | ||
7 | output of a previous pass through legitimize_reload_address. | ||
8 | Do not attempt to optimize addresses if the base register is | ||
9 | equivalent to a constant. | ||
10 | gcc/testsuite/ | ||
11 | PR target/50305 | ||
12 | * gcc.target/arm/pr50305.c: New test. | ||
13 | |||
14 | === modified file 'gcc/config/arm/arm.c' | ||
15 | --- old/gcc/config/arm/arm.c 2012-03-02 13:53:14 +0000 | ||
16 | +++ new/gcc/config/arm/arm.c 2012-03-06 11:01:55 +0000 | ||
17 | @@ -6632,9 +6632,26 @@ | ||
18 | int opnum, int type, | ||
19 | int ind_levels ATTRIBUTE_UNUSED) | ||
20 | { | ||
21 | + /* We must recognize output that we have already generated ourselves. */ | ||
22 | + if (GET_CODE (*p) == PLUS | ||
23 | + && GET_CODE (XEXP (*p, 0)) == PLUS | ||
24 | + && GET_CODE (XEXP (XEXP (*p, 0), 0)) == REG | ||
25 | + && GET_CODE (XEXP (XEXP (*p, 0), 1)) == CONST_INT | ||
26 | + && GET_CODE (XEXP (*p, 1)) == CONST_INT) | ||
27 | + { | ||
28 | + push_reload (XEXP (*p, 0), NULL_RTX, &XEXP (*p, 0), NULL, | ||
29 | + MODE_BASE_REG_CLASS (mode), GET_MODE (*p), | ||
30 | + VOIDmode, 0, 0, opnum, (enum reload_type) type); | ||
31 | + return true; | ||
32 | + } | ||
33 | + | ||
34 | if (GET_CODE (*p) == PLUS | ||
35 | && GET_CODE (XEXP (*p, 0)) == REG | ||
36 | && ARM_REGNO_OK_FOR_BASE_P (REGNO (XEXP (*p, 0))) | ||
37 | + /* If the base register is equivalent to a constant, let the generic | ||
38 | + code handle it. Otherwise we will run into problems if a future | ||
39 | + reload pass decides to rematerialize the constant. */ | ||
40 | + && !reg_equiv_constant [ORIGINAL_REGNO (XEXP (*p, 0))] | ||
41 | && GET_CODE (XEXP (*p, 1)) == CONST_INT) | ||
42 | { | ||
43 | HOST_WIDE_INT val = INTVAL (XEXP (*p, 1)); | ||
44 | |||
45 | === added file 'gcc/testsuite/gcc.target/arm/pr50305.c' | ||
46 | --- old/gcc/testsuite/gcc.target/arm/pr50305.c 1970-01-01 00:00:00 +0000 | ||
47 | +++ new/gcc/testsuite/gcc.target/arm/pr50305.c 2012-03-01 13:07:48 +0000 | ||
48 | @@ -0,0 +1,60 @@ | ||
49 | +/* { dg-do compile } */ | ||
50 | +/* { dg-skip-if "incompatible options" { arm*-*-* } { "-march=*" } { "-march=armv7-a" } } */ | ||
51 | +/* { dg-options "-O2 -fno-omit-frame-pointer -marm -march=armv7-a -mfpu=vfp3" } */ | ||
52 | + | ||
53 | +struct event { | ||
54 | + unsigned long long id; | ||
55 | + unsigned int flag; | ||
56 | +}; | ||
57 | + | ||
58 | +void dummy(void) | ||
59 | +{ | ||
60 | + /* This is here to ensure that the offset of perf_event_id below | ||
61 | + relative to the LANCHOR symbol exceeds the allowed displacement. */ | ||
62 | + static int __warned[300]; | ||
63 | + __warned[0] = 1; | ||
64 | +} | ||
65 | + | ||
66 | +extern void *kmem_cache_alloc_trace (void *cachep); | ||
67 | +extern void *cs_cachep; | ||
68 | +extern int nr_cpu_ids; | ||
69 | + | ||
70 | +struct event * | ||
71 | +event_alloc (int cpu) | ||
72 | +{ | ||
73 | + static unsigned long long __attribute__((aligned(8))) perf_event_id; | ||
74 | + struct event *event; | ||
75 | + unsigned long long result; | ||
76 | + unsigned long tmp; | ||
77 | + | ||
78 | + if (cpu >= nr_cpu_ids) | ||
79 | + return 0; | ||
80 | + | ||
81 | + event = kmem_cache_alloc_trace (cs_cachep); | ||
82 | + | ||
83 | + __asm__ __volatile__ ("dmb" : : : "memory"); | ||
84 | + | ||
85 | + __asm__ __volatile__("@ atomic64_add_return\n" | ||
86 | +"1: ldrexd %0, %H0, [%3]\n" | ||
87 | +" adds %0, %0, %4\n" | ||
88 | +" adc %H0, %H0, %H4\n" | ||
89 | +" strexd %1, %0, %H0, [%3]\n" | ||
90 | +" teq %1, #0\n" | ||
91 | +" bne 1b" | ||
92 | + : "=&r" (result), "=&r" (tmp), "+Qo" (perf_event_id) | ||
93 | + : "r" (&perf_event_id), "r" (1LL) | ||
94 | + : "cc"); | ||
95 | + | ||
96 | + __asm__ __volatile__ ("dmb" : : : "memory"); | ||
97 | + | ||
98 | + event->id = result; | ||
99 | + | ||
100 | + if (cpu) | ||
101 | + event->flag = 1; | ||
102 | + | ||
103 | + for (cpu = 0; cpu < nr_cpu_ids; cpu++) | ||
104 | + kmem_cache_alloc_trace (cs_cachep); | ||
105 | + | ||
106 | + return event; | ||
107 | +} | ||
108 | + | ||
109 | |||
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106877.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106877.patch new file mode 100644 index 000000000..b83b957c6 --- /dev/null +++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106877.patch | |||
@@ -0,0 +1,239 @@ | |||
1 | 2012-03-06 Ulrich Weigand <ulrich.weigand@linaro.org> | ||
2 | |||
3 | Backport from mainline: | ||
4 | |||
5 | gcc/ | ||
6 | * config/arm/arm.c (arm_sat_operator_match): New function. | ||
7 | * config/arm/arm-protos.h (arm_sat_operator_match): Add prototype. | ||
8 | * config/arm/arm.md ("insn" attribute): Add "sat" value. | ||
9 | ("SAT", "SATrev"): New code iterators. | ||
10 | ("SATlo", "SAThi"): New code iterator attributes. | ||
11 | ("*satsi_<SAT:code>"): New pattern. | ||
12 | ("*satsi_<SAT:code>_shift"): Likewise. | ||
13 | * config/arm/predicates.md (sat_shift_operator): New. | ||
14 | |||
15 | gcc/testsuite/ | ||
16 | * gcc.target/arm/sat-1.c: New test. | ||
17 | |||
18 | === modified file 'gcc/config/arm/arm-protos.h' | ||
19 | --- old/gcc/config/arm/arm-protos.h 2012-02-22 13:31:54 +0000 | ||
20 | +++ new/gcc/config/arm/arm-protos.h 2012-02-29 14:29:56 +0000 | ||
21 | @@ -104,6 +104,7 @@ | ||
22 | extern int symbol_mentioned_p (rtx); | ||
23 | extern int label_mentioned_p (rtx); | ||
24 | extern RTX_CODE minmax_code (rtx); | ||
25 | +extern bool arm_sat_operator_match (rtx, rtx, int *, bool *); | ||
26 | extern int adjacent_mem_locations (rtx, rtx); | ||
27 | extern bool gen_ldm_seq (rtx *, int, bool); | ||
28 | extern bool gen_stm_seq (rtx *, int); | ||
29 | |||
30 | === modified file 'gcc/config/arm/arm.c' | ||
31 | --- old/gcc/config/arm/arm.c 2012-03-06 11:01:55 +0000 | ||
32 | +++ new/gcc/config/arm/arm.c 2012-03-06 13:24:25 +0000 | ||
33 | @@ -9978,6 +9978,42 @@ | ||
34 | } | ||
35 | } | ||
36 | |||
37 | +/* Match pair of min/max operators that can be implemented via usat/ssat. */ | ||
38 | + | ||
39 | +bool | ||
40 | +arm_sat_operator_match (rtx lo_bound, rtx hi_bound, | ||
41 | + int *mask, bool *signed_sat) | ||
42 | +{ | ||
43 | + /* The high bound must be a power of two minus one. */ | ||
44 | + int log = exact_log2 (INTVAL (hi_bound) + 1); | ||
45 | + if (log == -1) | ||
46 | + return false; | ||
47 | + | ||
48 | + /* The low bound is either zero (for usat) or one less than the | ||
49 | + negation of the high bound (for ssat). */ | ||
50 | + if (INTVAL (lo_bound) == 0) | ||
51 | + { | ||
52 | + if (mask) | ||
53 | + *mask = log; | ||
54 | + if (signed_sat) | ||
55 | + *signed_sat = false; | ||
56 | + | ||
57 | + return true; | ||
58 | + } | ||
59 | + | ||
60 | + if (INTVAL (lo_bound) == -INTVAL (hi_bound) - 1) | ||
61 | + { | ||
62 | + if (mask) | ||
63 | + *mask = log + 1; | ||
64 | + if (signed_sat) | ||
65 | + *signed_sat = true; | ||
66 | + | ||
67 | + return true; | ||
68 | + } | ||
69 | + | ||
70 | + return false; | ||
71 | +} | ||
72 | + | ||
73 | /* Return 1 if memory locations are adjacent. */ | ||
74 | int | ||
75 | adjacent_mem_locations (rtx a, rtx b) | ||
76 | |||
77 | === modified file 'gcc/config/arm/arm.md' | ||
78 | --- old/gcc/config/arm/arm.md 2012-03-02 13:53:14 +0000 | ||
79 | +++ new/gcc/config/arm/arm.md 2012-03-06 13:24:25 +0000 | ||
80 | @@ -286,7 +286,7 @@ | ||
81 | ;; scheduling information. | ||
82 | |||
83 | (define_attr "insn" | ||
84 | - "mov,mvn,smulxy,smlaxy,smlalxy,smulwy,smlawx,mul,muls,mla,mlas,umull,umulls,umlal,umlals,smull,smulls,smlal,smlals,smlawy,smuad,smuadx,smlad,smladx,smusd,smusdx,smlsd,smlsdx,smmul,smmulr,smmla,umaal,smlald,smlsld,clz,mrs,msr,xtab,sdiv,udiv,other" | ||
85 | + "mov,mvn,smulxy,smlaxy,smlalxy,smulwy,smlawx,mul,muls,mla,mlas,umull,umulls,umlal,umlals,smull,smulls,smlal,smlals,smlawy,smuad,smuadx,smlad,smladx,smusd,smusdx,smlsd,smlsdx,smmul,smmulr,smmla,umaal,smlald,smlsld,clz,mrs,msr,xtab,sdiv,udiv,sat,other" | ||
86 | (const_string "other")) | ||
87 | |||
88 | ; TYPE attribute is used to detect floating point instructions which, if | ||
89 | @@ -3424,6 +3424,60 @@ | ||
90 | (const_int 12)))] | ||
91 | ) | ||
92 | |||
93 | +(define_code_iterator SAT [smin smax]) | ||
94 | +(define_code_iterator SATrev [smin smax]) | ||
95 | +(define_code_attr SATlo [(smin "1") (smax "2")]) | ||
96 | +(define_code_attr SAThi [(smin "2") (smax "1")]) | ||
97 | + | ||
98 | +(define_insn "*satsi_<SAT:code>" | ||
99 | + [(set (match_operand:SI 0 "s_register_operand" "=r") | ||
100 | + (SAT:SI (SATrev:SI (match_operand:SI 3 "s_register_operand" "r") | ||
101 | + (match_operand:SI 1 "const_int_operand" "i")) | ||
102 | + (match_operand:SI 2 "const_int_operand" "i")))] | ||
103 | + "TARGET_32BIT && arm_arch6 && <SAT:CODE> != <SATrev:CODE> | ||
104 | + && arm_sat_operator_match (operands[<SAT:SATlo>], operands[<SAT:SAThi>], NULL, NULL)" | ||
105 | +{ | ||
106 | + int mask; | ||
107 | + bool signed_sat; | ||
108 | + if (!arm_sat_operator_match (operands[<SAT:SATlo>], operands[<SAT:SAThi>], | ||
109 | + &mask, &signed_sat)) | ||
110 | + gcc_unreachable (); | ||
111 | + | ||
112 | + operands[1] = GEN_INT (mask); | ||
113 | + if (signed_sat) | ||
114 | + return "ssat%?\t%0, %1, %3"; | ||
115 | + else | ||
116 | + return "usat%?\t%0, %1, %3"; | ||
117 | +} | ||
118 | + [(set_attr "predicable" "yes") | ||
119 | + (set_attr "insn" "sat")]) | ||
120 | + | ||
121 | +(define_insn "*satsi_<SAT:code>_shift" | ||
122 | + [(set (match_operand:SI 0 "s_register_operand" "=r") | ||
123 | + (SAT:SI (SATrev:SI (match_operator:SI 3 "sat_shift_operator" | ||
124 | + [(match_operand:SI 4 "s_register_operand" "r") | ||
125 | + (match_operand:SI 5 "const_int_operand" "i")]) | ||
126 | + (match_operand:SI 1 "const_int_operand" "i")) | ||
127 | + (match_operand:SI 2 "const_int_operand" "i")))] | ||
128 | + "TARGET_32BIT && arm_arch6 && <SAT:CODE> != <SATrev:CODE> | ||
129 | + && arm_sat_operator_match (operands[<SAT:SATlo>], operands[<SAT:SAThi>], NULL, NULL)" | ||
130 | +{ | ||
131 | + int mask; | ||
132 | + bool signed_sat; | ||
133 | + if (!arm_sat_operator_match (operands[<SAT:SATlo>], operands[<SAT:SAThi>], | ||
134 | + &mask, &signed_sat)) | ||
135 | + gcc_unreachable (); | ||
136 | + | ||
137 | + operands[1] = GEN_INT (mask); | ||
138 | + if (signed_sat) | ||
139 | + return "ssat%?\t%0, %1, %4%S3"; | ||
140 | + else | ||
141 | + return "usat%?\t%0, %1, %4%S3"; | ||
142 | +} | ||
143 | + [(set_attr "predicable" "yes") | ||
144 | + (set_attr "insn" "sat") | ||
145 | + (set_attr "shift" "3") | ||
146 | + (set_attr "type" "alu_shift")]) | ||
147 | |||
148 | ;; Shift and rotation insns | ||
149 | |||
150 | |||
151 | === modified file 'gcc/config/arm/predicates.md' | ||
152 | --- old/gcc/config/arm/predicates.md 2012-02-22 13:31:54 +0000 | ||
153 | +++ new/gcc/config/arm/predicates.md 2012-02-29 14:29:56 +0000 | ||
154 | @@ -241,6 +241,15 @@ | ||
155 | || ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32"))) | ||
156 | (match_test "mode == GET_MODE (op)"))) | ||
157 | |||
158 | +;; True for shift operators which can be used with saturation instructions. | ||
159 | +(define_special_predicate "sat_shift_operator" | ||
160 | + (and (ior (and (match_code "mult") | ||
161 | + (match_test "power_of_two_operand (XEXP (op, 1), mode)")) | ||
162 | + (and (match_code "ashift,ashiftrt") | ||
163 | + (match_test "GET_CODE (XEXP (op, 1)) == CONST_INT | ||
164 | + && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1)) < 32)"))) | ||
165 | + (match_test "mode == GET_MODE (op)"))) | ||
166 | + | ||
167 | ;; True for MULT, to identify which variant of shift_operator is in use. | ||
168 | (define_special_predicate "mult_operator" | ||
169 | (match_code "mult")) | ||
170 | |||
171 | === added file 'gcc/testsuite/gcc.target/arm/sat-1.c' | ||
172 | --- old/gcc/testsuite/gcc.target/arm/sat-1.c 1970-01-01 00:00:00 +0000 | ||
173 | +++ new/gcc/testsuite/gcc.target/arm/sat-1.c 2012-02-29 14:29:56 +0000 | ||
174 | @@ -0,0 +1,64 @@ | ||
175 | +/* { dg-do compile } */ | ||
176 | +/* { dg-require-effective-target arm_arm_ok } */ | ||
177 | +/* { dg-require-effective-target arm_arch_v6_ok } */ | ||
178 | +/* { dg-options "-O2 -marm" } */ | ||
179 | +/* { dg-add-options arm_arch_v6 } */ | ||
180 | + | ||
181 | + | ||
182 | +static inline int sat1 (int a, int amin, int amax) | ||
183 | +{ | ||
184 | + if (a < amin) return amin; | ||
185 | + else if (a > amax) return amax; | ||
186 | + else return a; | ||
187 | +} | ||
188 | + | ||
189 | +static inline int sat2 (int a, int amin, int amax) | ||
190 | +{ | ||
191 | + if (a > amax) return amax; | ||
192 | + else if (a < amin) return amin; | ||
193 | + else return a; | ||
194 | +} | ||
195 | + | ||
196 | +int u1 (int x) | ||
197 | +{ | ||
198 | + return sat1 (x, 0, 63); | ||
199 | +} | ||
200 | + | ||
201 | +int us1 (int x) | ||
202 | +{ | ||
203 | + return sat1 (x >> 5, 0, 63); | ||
204 | +} | ||
205 | + | ||
206 | +int s1 (int x) | ||
207 | +{ | ||
208 | + return sat1 (x, -64, 63); | ||
209 | +} | ||
210 | + | ||
211 | +int ss1 (int x) | ||
212 | +{ | ||
213 | + return sat1 (x >> 5, -64, 63); | ||
214 | +} | ||
215 | + | ||
216 | +int u2 (int x) | ||
217 | +{ | ||
218 | + return sat2 (x, 0, 63); | ||
219 | +} | ||
220 | + | ||
221 | +int us2 (int x) | ||
222 | +{ | ||
223 | + return sat2 (x >> 5, 0, 63); | ||
224 | +} | ||
225 | + | ||
226 | +int s2 (int x) | ||
227 | +{ | ||
228 | + return sat2 (x, -64, 63); | ||
229 | +} | ||
230 | + | ||
231 | +int ss2 (int x) | ||
232 | +{ | ||
233 | + return sat2 (x >> 5, -64, 63); | ||
234 | +} | ||
235 | + | ||
236 | +/* { dg-final { scan-assembler-times "usat" 4 } } */ | ||
237 | +/* { dg-final { scan-assembler-times "ssat" 4 } } */ | ||
238 | + | ||
239 | |||
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106878.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106878.patch new file mode 100644 index 000000000..fc1633d36 --- /dev/null +++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106878.patch | |||
@@ -0,0 +1,69 @@ | |||
1 | 2012-03-08 Michael Hope <michael.hope@linaro.org> | ||
2 | |||
3 | Backport proposed patch: | ||
4 | |||
5 | gcc/ | ||
6 | 2012-01-31 Richard Henderson <rth@redhat.com> | ||
7 | |||
8 | * longlong.h [arm] (umul_ppmm): Use umull. Enable for thumb2. | ||
9 | [arm] (count_trailing_zeros): Use __builtin_ctz. | ||
10 | |||
11 | === modified file 'gcc/longlong.h' | ||
12 | --- old/gcc/longlong.h 2011-10-04 07:28:50 +0000 | ||
13 | +++ new/gcc/longlong.h 2012-02-22 01:51:14 +0000 | ||
14 | @@ -203,7 +203,7 @@ | ||
15 | UDItype __umulsidi3 (USItype, USItype); | ||
16 | #endif | ||
17 | |||
18 | -#if defined (__arm__) && !defined (__thumb__) && W_TYPE_SIZE == 32 | ||
19 | +#if defined (__arm__) && (defined (__thumb2__) || !defined (__thumb__)) && W_TYPE_SIZE == 32 | ||
20 | #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ | ||
21 | __asm__ ("adds %1, %4, %5\n\tadc %0, %2, %3" \ | ||
22 | : "=r" ((USItype) (sh)), \ | ||
23 | @@ -220,9 +220,12 @@ | ||
24 | "rI" ((USItype) (bh)), \ | ||
25 | "r" ((USItype) (al)), \ | ||
26 | "rI" ((USItype) (bl)) __CLOBBER_CC) | ||
27 | -#define umul_ppmm(xh, xl, a, b) \ | ||
28 | -{register USItype __t0, __t1, __t2; \ | ||
29 | - __asm__ ("%@ Inlined umul_ppmm\n" \ | ||
30 | +# if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_2A__) \ | ||
31 | + || defined(__ARM_ARCH_3__) | ||
32 | +# define umul_ppmm(xh, xl, a, b) \ | ||
33 | + do { \ | ||
34 | + register USItype __t0, __t1, __t2; \ | ||
35 | + __asm__ ("%@ Inlined umul_ppmm\n" \ | ||
36 | " mov %2, %5, lsr #16\n" \ | ||
37 | " mov %0, %6, lsr #16\n" \ | ||
38 | " bic %3, %5, %2, lsl #16\n" \ | ||
39 | @@ -239,14 +242,26 @@ | ||
40 | "=r" ((USItype) (xl)), \ | ||
41 | "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ | ||
42 | : "r" ((USItype) (a)), \ | ||
43 | - "r" ((USItype) (b)) __CLOBBER_CC );} | ||
44 | -#define UMUL_TIME 20 | ||
45 | -#define UDIV_TIME 100 | ||
46 | + "r" ((USItype) (b)) __CLOBBER_CC ); \ | ||
47 | + } while (0) | ||
48 | +# define UMUL_TIME 20 | ||
49 | +# else | ||
50 | +# define umul_ppmm(xh, xl, a, b) \ | ||
51 | + do { \ | ||
52 | + /* Generate umull, under compiler control. */ \ | ||
53 | + register UDItype __t0 = (UDItype)(USItype)(a) * (USItype)(b); \ | ||
54 | + (xl) = (USItype)__t0; \ | ||
55 | + (xh) = (USItype)(__t0 >> 32); \ | ||
56 | + } while (0) | ||
57 | +# define UMUL_TIME 3 | ||
58 | +# endif | ||
59 | +# define UDIV_TIME 100 | ||
60 | #endif /* __arm__ */ | ||
61 | |||
62 | #if defined(__arm__) | ||
63 | /* Let gcc decide how best to implement count_leading_zeros. */ | ||
64 | #define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X)) | ||
65 | +#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X)) | ||
66 | #define COUNT_LEADING_ZEROS_0 32 | ||
67 | #endif | ||
68 | |||
69 | |||
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106879.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106879.patch new file mode 100644 index 000000000..a97a27b60 --- /dev/null +++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106879.patch | |||
@@ -0,0 +1,643 @@ | |||
1 | 2012-03-08 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> | ||
2 | |||
3 | Backport from mainline. | ||
4 | 2012-02-28 Richard Earnshaw <rearnsha@arm.com> | ||
5 | |||
6 | * arm.c (aapcs_vfp_is_call_or_return_candidate): Only use the machine | ||
7 | mode if there is no type information available. | ||
8 | |||
9 | 2012-02-28 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> | ||
10 | |||
11 | * gcc.target/arm/aapcs/vfp1.c (dg_do run): Run on all eabi variants. | ||
12 | * gcc.target/arm/aapcs/vfp2.c: Likewise. | ||
13 | * gcc.target/arm/aapcs/vfp3.c: Likewise. | ||
14 | * gcc.target/arm/aapcs/vfp4.c: Likewise. | ||
15 | * gcc.target/arm/aapcs/vfp5.c: Likewise. | ||
16 | * gcc.target/arm/aapcs/vfp6.c: Likewise. | ||
17 | * gcc.target/arm/aapcs/vfp7.c: Likewise. | ||
18 | * gcc.target/arm/aapcs/vfp8.c: Likewise. | ||
19 | * gcc.target/arm/aapcs/vfp9.c: Likewise. | ||
20 | * gcc.target/arm/aapcs/vfp10.c: Likewise. | ||
21 | * gcc.target/arm/aapcs/vfp11.c: Likewise. | ||
22 | * gcc.target/arm/aapcs/vfp12.c: Likewise. | ||
23 | * gcc.target/arm/aapcs/vfp13.c: Likewise. | ||
24 | * gcc.target/arm/aapcs/vfp14.c: Likewise. | ||
25 | * gcc.target/arm/aapcs/vfp15.c: Likewise. | ||
26 | * gcc.target/arm/aapcs/vfp16.c: Likewise. | ||
27 | * gcc.target/arm/aapcs/vfp17.c: Likewise. | ||
28 | * gcc.target/arm/neon-constants.h: New file. | ||
29 | * gcc.target/arm/aapcs/neon-constants.h: New file. | ||
30 | * gcc.target/arm/aapcs/neon-vect1.c: New test. | ||
31 | * gcc.target/arm/aapcs/neon-vect2.c: New test. | ||
32 | * gcc.target/arm/aapcs/neon-vect3.c: New test. | ||
33 | * gcc.target/arm/aapcs/neon-vect4.c: New test. | ||
34 | * gcc.target/arm/aapcs/neon-vect5.c: New test. | ||
35 | * gcc.target/arm/aapcs/neon-vect6.c: New test. | ||
36 | * gcc.target/arm/aapcs/neon-vect7.c: New test. | ||
37 | * gcc.target/arm/aapcs/neon-vect8.c: New test. | ||
38 | |||
39 | === modified file 'gcc/config/arm/arm.c' | ||
40 | --- old/gcc/config/arm/arm.c 2012-03-06 13:24:25 +0000 | ||
41 | +++ new/gcc/config/arm/arm.c 2012-03-08 15:46:42 +0000 | ||
42 | @@ -4331,6 +4331,11 @@ | ||
43 | (TARGET_VFP_DOUBLE || !is_double)); | ||
44 | } | ||
45 | |||
46 | +/* Return true if an argument whose type is TYPE, or mode is MODE, is | ||
47 | + suitable for passing or returning in VFP registers for the PCS | ||
48 | + variant selected. If it is, then *BASE_MODE is updated to contain | ||
49 | + a machine mode describing each element of the argument's type and | ||
50 | + *COUNT to hold the number of such elements. */ | ||
51 | static bool | ||
52 | aapcs_vfp_is_call_or_return_candidate (enum arm_pcs pcs_variant, | ||
53 | enum machine_mode mode, const_tree type, | ||
54 | @@ -4338,9 +4343,20 @@ | ||
55 | { | ||
56 | enum machine_mode new_mode = VOIDmode; | ||
57 | |||
58 | - if (GET_MODE_CLASS (mode) == MODE_FLOAT | ||
59 | - || GET_MODE_CLASS (mode) == MODE_VECTOR_INT | ||
60 | - || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT) | ||
61 | + /* If we have the type information, prefer that to working things | ||
62 | + out from the mode. */ | ||
63 | + if (type) | ||
64 | + { | ||
65 | + int ag_count = aapcs_vfp_sub_candidate (type, &new_mode); | ||
66 | + | ||
67 | + if (ag_count > 0 && ag_count <= 4) | ||
68 | + *count = ag_count; | ||
69 | + else | ||
70 | + return false; | ||
71 | + } | ||
72 | + else if (GET_MODE_CLASS (mode) == MODE_FLOAT | ||
73 | + || GET_MODE_CLASS (mode) == MODE_VECTOR_INT | ||
74 | + || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT) | ||
75 | { | ||
76 | *count = 1; | ||
77 | new_mode = mode; | ||
78 | @@ -4350,15 +4366,6 @@ | ||
79 | *count = 2; | ||
80 | new_mode = (mode == DCmode ? DFmode : SFmode); | ||
81 | } | ||
82 | - else if (type && (mode == BLKmode || TREE_CODE (type) == VECTOR_TYPE)) | ||
83 | - { | ||
84 | - int ag_count = aapcs_vfp_sub_candidate (type, &new_mode); | ||
85 | - | ||
86 | - if (ag_count > 0 && ag_count <= 4) | ||
87 | - *count = ag_count; | ||
88 | - else | ||
89 | - return false; | ||
90 | - } | ||
91 | else | ||
92 | return false; | ||
93 | |||
94 | |||
95 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/abitest.h' | ||
96 | --- old/gcc/testsuite/gcc.target/arm/aapcs/abitest.h 2009-08-06 17:15:19 +0000 | ||
97 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/abitest.h 2012-03-01 09:33:24 +0000 | ||
98 | @@ -1,3 +1,4 @@ | ||
99 | + | ||
100 | #define IN_FRAMEWORK | ||
101 | |||
102 | #ifdef VFP | ||
103 | @@ -10,6 +11,13 @@ | ||
104 | #define D6 48 | ||
105 | #define D7 56 | ||
106 | |||
107 | +#ifdef NEON | ||
108 | +#define Q0 D0 | ||
109 | +#define Q1 D2 | ||
110 | +#define Q2 D4 | ||
111 | +#define Q3 D6 | ||
112 | +#endif | ||
113 | + | ||
114 | #define S0 64 | ||
115 | #define S1 68 | ||
116 | #define S2 72 | ||
117 | @@ -27,24 +35,19 @@ | ||
118 | #define S14 120 | ||
119 | #define S15 124 | ||
120 | |||
121 | -#define R0 128 | ||
122 | -#define R1 132 | ||
123 | -#define R2 136 | ||
124 | -#define R3 140 | ||
125 | - | ||
126 | -#define STACK 144 | ||
127 | - | ||
128 | +#define CORE_REG_START 128 | ||
129 | #else | ||
130 | - | ||
131 | -#define R0 0 | ||
132 | -#define R1 4 | ||
133 | -#define R2 8 | ||
134 | -#define R3 12 | ||
135 | - | ||
136 | -#define STACK 16 | ||
137 | - | ||
138 | +#define CORE_REG_START 0 | ||
139 | #endif | ||
140 | |||
141 | +#define R0 CORE_REG_START | ||
142 | +#define R1 (R0 + 4) | ||
143 | +#define R2 (R1 + 4) | ||
144 | +#define R3 (R2 + 4) | ||
145 | +#define STACK (R3 + 4) | ||
146 | + | ||
147 | + | ||
148 | + | ||
149 | extern void abort (void); | ||
150 | |||
151 | __attribute__((naked)) void dumpregs () __asm("myfunc"); | ||
152 | |||
153 | === added file 'gcc/testsuite/gcc.target/arm/aapcs/neon-constants.h' | ||
154 | --- old/gcc/testsuite/gcc.target/arm/aapcs/neon-constants.h 1970-01-01 00:00:00 +0000 | ||
155 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/neon-constants.h 2012-03-01 09:33:24 +0000 | ||
156 | @@ -0,0 +1,33 @@ | ||
157 | + | ||
158 | + | ||
159 | +#include "arm_neon.h" | ||
160 | + | ||
161 | +const int32x4_t i32x4_constvec1 = { 1101, 1102, 1103, 1104}; | ||
162 | +const int32x4_t i32x4_constvec2 = { 2101, 2102, 2103, 2104}; | ||
163 | + | ||
164 | +#define ELEM(INDEX) .val[INDEX] | ||
165 | + | ||
166 | +const int32x4x2_t i32x4x2_constvec1 = {ELEM(0) = {0xaddebccb,11,12,13}, | ||
167 | + ELEM(1) = {14, 15, 16, 17} }; | ||
168 | + | ||
169 | +const int32x4x2_t i32x4x2_constvec2 = { ELEM(0) = {0xaadebcca,11,12,13}, | ||
170 | + ELEM(1) = {140, 15, 16, 17}}; | ||
171 | + | ||
172 | +const int32x4x3_t i32x4x3_constvec1 = { ELEM(0) = {0xabbccdde,8, 9, 10}, | ||
173 | + ELEM(1) = {0xabcccdde, 26, 27, 28}, | ||
174 | + ELEM(2) = {0xaccccddf, 29, 30, 31}}; | ||
175 | + | ||
176 | +const int32x4x3_t i32x4x3_constvec2 = { ELEM(0) = {0xbccccdd0,8, 9, 10}, | ||
177 | + ELEM(1) = {0xbdfe1000, 26, 27, 28}, | ||
178 | + ELEM(2) = {0xaccccddf, 29, 30, 31}}; | ||
179 | +const float32x4x2_t f32x4x2_constvec1 = | ||
180 | + { ELEM(0) = { 7.101f, 0.201f, 0.301f, 0.401f} , | ||
181 | + ELEM(1) = { 8.101f, 0.501f, 0.601f, 0.701f} }; | ||
182 | + | ||
183 | +const float32x4x2_t f32x4x2_constvec2 = | ||
184 | + { ELEM(0) = { 11.99f , 11.21f, 1.27f, 8.74f}, | ||
185 | + ELEM(1) = { 13.45f , 1.23f ,1.24f, 1.26f}}; | ||
186 | + | ||
187 | +const int32x2_t i32x2_constvec1 = { 1283, 1345 }; | ||
188 | +const int32x2x2_t i32x2x2_constvec1 = { ELEM(0) = { 0xabcdefab, 32 }, | ||
189 | + ELEM(1) = { 0xabcdefbc, 33 }}; | ||
190 | |||
191 | === added file 'gcc/testsuite/gcc.target/arm/aapcs/neon-vect1.c' | ||
192 | --- old/gcc/testsuite/gcc.target/arm/aapcs/neon-vect1.c 1970-01-01 00:00:00 +0000 | ||
193 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/neon-vect1.c 2012-03-01 09:33:24 +0000 | ||
194 | @@ -0,0 +1,27 @@ | ||
195 | +/* Test AAPCS layout (VFP variant for Neon types) */ | ||
196 | + | ||
197 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
198 | +/* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
199 | +/* { dg-require-effective-target arm_neon_ok } */ | ||
200 | +/* { dg-require-effective-target arm32 } */ | ||
201 | +/* { dg-add-options arm_neon } */ | ||
202 | + | ||
203 | + | ||
204 | +#ifndef IN_FRAMEWORK | ||
205 | +#define VFP | ||
206 | +#define NEON | ||
207 | +#define TESTFILE "neon-vect1.c" | ||
208 | +#include "neon-constants.h" | ||
209 | + | ||
210 | + | ||
211 | +#include "abitest.h" | ||
212 | +#else | ||
213 | + | ||
214 | +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ | ||
215 | +ARG(float, 3.0f, S4) /* D2, Q1 */ | ||
216 | +ARG(int32x4x2_t, i32x4x2_constvec1, Q2) /* Q2, Q3 - D4-D6 , s5-s12 */ | ||
217 | +ARG(double, 12.0, D3) /* Backfill this particular argument. */ | ||
218 | +ARG(int32x4x2_t, i32x4x2_constvec2, STACK) | ||
219 | +ARG(float, 5.0f, STACK+sizeof(int32x4x2_t)) /* No backfill allowed. */ | ||
220 | +LAST_ARG(int, 3, R0) | ||
221 | +#endif | ||
222 | |||
223 | === added file 'gcc/testsuite/gcc.target/arm/aapcs/neon-vect2.c' | ||
224 | --- old/gcc/testsuite/gcc.target/arm/aapcs/neon-vect2.c 1970-01-01 00:00:00 +0000 | ||
225 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/neon-vect2.c 2012-03-01 09:33:24 +0000 | ||
226 | @@ -0,0 +1,23 @@ | ||
227 | +/* Test AAPCS layout (VFP variant for Neon types) */ | ||
228 | + | ||
229 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
230 | +/* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
231 | +/* { dg-require-effective-target arm_neon_ok } */ | ||
232 | +/* { dg-require-effective-target arm32 } */ | ||
233 | +/* { dg-add-options arm_neon } */ | ||
234 | + | ||
235 | + | ||
236 | +#ifndef IN_FRAMEWORK | ||
237 | +#define VFP | ||
238 | +#define NEON | ||
239 | +#define TESTFILE "neon-vect2.c" | ||
240 | +#include "neon-constants.h" | ||
241 | + | ||
242 | + | ||
243 | +#include "abitest.h" | ||
244 | +#else | ||
245 | + | ||
246 | +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1. */ | ||
247 | +ARG(float, 3.0f, S4) /* D2, Q1 occupied. */ | ||
248 | +LAST_ARG(int, 3, R0) | ||
249 | +#endif | ||
250 | |||
251 | === added file 'gcc/testsuite/gcc.target/arm/aapcs/neon-vect3.c' | ||
252 | --- old/gcc/testsuite/gcc.target/arm/aapcs/neon-vect3.c 1970-01-01 00:00:00 +0000 | ||
253 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/neon-vect3.c 2012-03-01 09:33:24 +0000 | ||
254 | @@ -0,0 +1,26 @@ | ||
255 | +/* Test AAPCS layout (VFP variant for Neon types) */ | ||
256 | + | ||
257 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
258 | +/* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
259 | +/* { dg-require-effective-target arm_neon_ok } */ | ||
260 | +/* { dg-require-effective-target arm32 } */ | ||
261 | +/* { dg-add-options arm_neon } */ | ||
262 | + | ||
263 | + | ||
264 | +#ifndef IN_FRAMEWORK | ||
265 | +#define VFP | ||
266 | +#define NEON | ||
267 | +#define TESTFILE "neon-vect3.c" | ||
268 | +#include "neon-constants.h" | ||
269 | + | ||
270 | + | ||
271 | +#include "abitest.h" | ||
272 | +#else | ||
273 | + | ||
274 | +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ | ||
275 | +ARG(float, 3.0f, S4) /* D2, Q1 */ | ||
276 | +ARG(int32x4x2_t, i32x4x2_constvec1, Q2) /* Q2, Q3 - D4-D6 , s5-s12 */ | ||
277 | +ARG(int32x4x2_t, i32x4x2_constvec2, STACK) | ||
278 | +ARG(double, 11.0, STACK+sizeof(int32x4x2_t)) /* No backfill in D3. */ | ||
279 | +LAST_ARG(int, 3, R0) | ||
280 | +#endif | ||
281 | |||
282 | === added file 'gcc/testsuite/gcc.target/arm/aapcs/neon-vect4.c' | ||
283 | --- old/gcc/testsuite/gcc.target/arm/aapcs/neon-vect4.c 1970-01-01 00:00:00 +0000 | ||
284 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/neon-vect4.c 2012-03-01 09:33:24 +0000 | ||
285 | @@ -0,0 +1,27 @@ | ||
286 | +/* Test AAPCS layout (VFP variant for Neon types) */ | ||
287 | + | ||
288 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
289 | +/* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
290 | +/* { dg-require-effective-target arm_neon_ok } */ | ||
291 | +/* { dg-require-effective-target arm32 } */ | ||
292 | +/* { dg-add-options arm_neon } */ | ||
293 | + | ||
294 | + | ||
295 | +#ifndef IN_FRAMEWORK | ||
296 | +#define VFP | ||
297 | +#define NEON | ||
298 | +#define TESTFILE "neon-vect4.c" | ||
299 | +#include "neon-constants.h" | ||
300 | + | ||
301 | + | ||
302 | +#include "abitest.h" | ||
303 | +#else | ||
304 | + | ||
305 | +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ | ||
306 | +ARG(float, 3.0f, S4) /* D2, Q1 */ | ||
307 | +ARG(int32x4x2_t, i32x4x2_constvec1, Q2) /* Q2, Q3 - D4-D6 , s5-s12 */ | ||
308 | +ARG(double, 12.0, D3) /* Backfill this particular argument. */ | ||
309 | +ARG(float, 5.0f, S5) /* Backfill in S5. */ | ||
310 | +ARG(int32x4x2_t, i32x4x2_constvec2, STACK) | ||
311 | +LAST_ARG(int, 3, R0) | ||
312 | +#endif | ||
313 | |||
314 | === added file 'gcc/testsuite/gcc.target/arm/aapcs/neon-vect5.c' | ||
315 | --- old/gcc/testsuite/gcc.target/arm/aapcs/neon-vect5.c 1970-01-01 00:00:00 +0000 | ||
316 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/neon-vect5.c 2012-03-01 09:33:24 +0000 | ||
317 | @@ -0,0 +1,28 @@ | ||
318 | +/* Test AAPCS layout (VFP variant for Neon types) */ | ||
319 | + | ||
320 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
321 | +/* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
322 | +/* { dg-require-effective-target arm_neon_ok } */ | ||
323 | +/* { dg-require-effective-target arm32 } */ | ||
324 | +/* { dg-add-options arm_neon } */ | ||
325 | + | ||
326 | + | ||
327 | +#ifndef IN_FRAMEWORK | ||
328 | +#define VFP | ||
329 | +#define NEON | ||
330 | +#define TESTFILE "neon-vect5.c" | ||
331 | +#include "neon-constants.h" | ||
332 | + | ||
333 | + | ||
334 | +#include "abitest.h" | ||
335 | +#else | ||
336 | + | ||
337 | +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ | ||
338 | +ARG(float, 3.0f, S4) /* D2, Q1 */ | ||
339 | +ARG(float32x4x2_t, f32x4x2_constvec1, Q2) /* Q2, Q3 - D4-D6 , s5-s12 */ | ||
340 | +ARG(double, 12.0, D3) /* Backfill this particular argument. */ | ||
341 | +ARG(int32x4x2_t, i32x4x2_constvec2, STACK) | ||
342 | +ARG(float, 5.0f, STACK+sizeof(int32x4x2_t)) /* No backfill allowed. */ | ||
343 | +LAST_ARG(int, 3, R0) | ||
344 | + | ||
345 | +#endif | ||
346 | |||
347 | === added file 'gcc/testsuite/gcc.target/arm/aapcs/neon-vect6.c' | ||
348 | --- old/gcc/testsuite/gcc.target/arm/aapcs/neon-vect6.c 1970-01-01 00:00:00 +0000 | ||
349 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/neon-vect6.c 2012-03-01 09:33:24 +0000 | ||
350 | @@ -0,0 +1,24 @@ | ||
351 | +/* Test AAPCS layout (VFP variant for Neon types) */ | ||
352 | + | ||
353 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
354 | +/* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
355 | +/* { dg-require-effective-target arm_neon_ok } */ | ||
356 | +/* { dg-require-effective-target arm32 } */ | ||
357 | +/* { dg-add-options arm_neon } */ | ||
358 | + | ||
359 | + | ||
360 | +#ifndef IN_FRAMEWORK | ||
361 | +#define VFP | ||
362 | +#define NEON | ||
363 | +#define TESTFILE "neon-vect6.c" | ||
364 | +#include "neon-constants.h" | ||
365 | + | ||
366 | + | ||
367 | +#include "abitest.h" | ||
368 | +#else | ||
369 | + | ||
370 | +ARG(int32x4_t, i32x4_constvec2, Q0) /* D0, D1 */ | ||
371 | +ARG(int32x4x3_t, i32x4x3_constvec1, Q1) /* Q1, Q2, Q3 */ | ||
372 | +ARG(int32x4x3_t, i32x4x3_constvec2, STACK) | ||
373 | +LAST_ARG(int, 3, R0) | ||
374 | +#endif | ||
375 | |||
376 | === added file 'gcc/testsuite/gcc.target/arm/aapcs/neon-vect7.c' | ||
377 | --- old/gcc/testsuite/gcc.target/arm/aapcs/neon-vect7.c 1970-01-01 00:00:00 +0000 | ||
378 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/neon-vect7.c 2012-03-01 09:33:24 +0000 | ||
379 | @@ -0,0 +1,27 @@ | ||
380 | +/* Test AAPCS layout (VFP variant for Neon types) */ | ||
381 | + | ||
382 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
383 | +/* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
384 | +/* { dg-require-effective-target arm_neon_ok } */ | ||
385 | +/* { dg-require-effective-target arm32 } */ | ||
386 | +/* { dg-add-options arm_neon } */ | ||
387 | + | ||
388 | + | ||
389 | +#ifndef IN_FRAMEWORK | ||
390 | +#define VFP | ||
391 | +#define NEON | ||
392 | +#define TESTFILE "neon-vect7.c" | ||
393 | +#include "neon-constants.h" | ||
394 | + | ||
395 | + | ||
396 | +#include "abitest.h" | ||
397 | +#else | ||
398 | + | ||
399 | +ARG(float, 24.3f, S0) /* S0 , D0, Q0 */ | ||
400 | +ARG(int32x4x3_t, i32x4x3_constvec1, Q1) /* Q1, Q2, Q3 */ | ||
401 | +ARG(double, 25.6, D1) | ||
402 | +ARG(float, 12.67f, S1) | ||
403 | +ARG(int32x4x3_t, i32x4x3_constvec2, STACK) | ||
404 | +ARG(double, 2.47, STACK+sizeof(int32x4x3_t)) | ||
405 | +LAST_ARG(int, 3, R0) | ||
406 | +#endif | ||
407 | |||
408 | === added file 'gcc/testsuite/gcc.target/arm/aapcs/neon-vect8.c' | ||
409 | --- old/gcc/testsuite/gcc.target/arm/aapcs/neon-vect8.c 1970-01-01 00:00:00 +0000 | ||
410 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/neon-vect8.c 2012-03-01 09:33:24 +0000 | ||
411 | @@ -0,0 +1,27 @@ | ||
412 | +/* Test AAPCS layout (VFP variant for Neon types) */ | ||
413 | + | ||
414 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
415 | +/* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
416 | +/* { dg-require-effective-target arm_neon_ok } */ | ||
417 | +/* { dg-require-effective-target arm32 } */ | ||
418 | +/* { dg-add-options arm_neon } */ | ||
419 | + | ||
420 | + | ||
421 | +#ifndef IN_FRAMEWORK | ||
422 | +#define VFP | ||
423 | +#define NEON | ||
424 | +#define TESTFILE "neon-vect8.c" | ||
425 | +#include "neon-constants.h" | ||
426 | + | ||
427 | + | ||
428 | +#include "abitest.h" | ||
429 | +#else | ||
430 | + | ||
431 | +ARG(float, 24.3f, S0) /* S0 , D0, Q0 */ | ||
432 | +ARG(int32x2_t, i32x2_constvec1, D1) /* D1 */ | ||
433 | +ARG(double, 25.6, D2) | ||
434 | +ARG(float, 12.67f, S1) | ||
435 | +ARG(int32x4x3_t, i32x4x3_constvec2, STACK) | ||
436 | +ARG(double, 2.47, STACK+sizeof(int32x4x3_t)) | ||
437 | +LAST_ARG(int, 3, R0) | ||
438 | +#endif | ||
439 | |||
440 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp1.c' | ||
441 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c 2009-08-06 13:27:45 +0000 | ||
442 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp1.c 2012-03-01 09:33:24 +0000 | ||
443 | @@ -1,6 +1,6 @@ | ||
444 | /* Test AAPCS layout (VFP variant) */ | ||
445 | |||
446 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
447 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
448 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
449 | /* { dg-require-effective-target arm32 } */ | ||
450 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
451 | |||
452 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp10.c' | ||
453 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c 2009-08-06 13:27:45 +0000 | ||
454 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp10.c 2012-03-01 09:33:24 +0000 | ||
455 | @@ -1,6 +1,6 @@ | ||
456 | /* Test AAPCS layout (VFP variant) */ | ||
457 | |||
458 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
459 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
460 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
461 | /* { dg-require-effective-target arm32 } */ | ||
462 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
463 | |||
464 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp11.c' | ||
465 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c 2009-08-06 13:27:45 +0000 | ||
466 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp11.c 2012-03-01 09:33:24 +0000 | ||
467 | @@ -1,6 +1,6 @@ | ||
468 | /* Test AAPCS layout (VFP variant) */ | ||
469 | |||
470 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
471 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
472 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
473 | /* { dg-require-effective-target arm32 } */ | ||
474 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
475 | |||
476 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp12.c' | ||
477 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c 2009-08-06 13:27:45 +0000 | ||
478 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp12.c 2012-03-01 09:33:24 +0000 | ||
479 | @@ -1,6 +1,6 @@ | ||
480 | /* Test AAPCS layout (VFP variant) */ | ||
481 | |||
482 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
483 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
484 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
485 | /* { dg-require-effective-target arm32 } */ | ||
486 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
487 | |||
488 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp13.c' | ||
489 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c 2009-08-06 13:27:45 +0000 | ||
490 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp13.c 2012-03-01 09:33:24 +0000 | ||
491 | @@ -1,6 +1,6 @@ | ||
492 | /* Test AAPCS layout (VFP variant) */ | ||
493 | |||
494 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
495 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
496 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
497 | /* { dg-require-effective-target arm32 } */ | ||
498 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
499 | |||
500 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp14.c' | ||
501 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c 2009-08-06 13:27:45 +0000 | ||
502 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp14.c 2012-03-01 09:33:24 +0000 | ||
503 | @@ -1,6 +1,6 @@ | ||
504 | /* Test AAPCS layout (VFP variant) */ | ||
505 | |||
506 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
507 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
508 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
509 | /* { dg-require-effective-target arm32 } */ | ||
510 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
511 | |||
512 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp15.c' | ||
513 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c 2009-08-06 17:15:19 +0000 | ||
514 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp15.c 2012-03-01 09:33:24 +0000 | ||
515 | @@ -1,6 +1,6 @@ | ||
516 | /* Test AAPCS layout (VFP variant) */ | ||
517 | |||
518 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
519 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
520 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
521 | /* { dg-require-effective-target arm32 } */ | ||
522 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
523 | |||
524 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp16.c' | ||
525 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c 2009-08-06 17:15:19 +0000 | ||
526 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp16.c 2012-03-01 09:33:24 +0000 | ||
527 | @@ -1,6 +1,6 @@ | ||
528 | /* Test AAPCS layout (VFP variant) */ | ||
529 | |||
530 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
531 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
532 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
533 | /* { dg-require-effective-target arm32 } */ | ||
534 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
535 | |||
536 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp17.c' | ||
537 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c 2009-08-06 17:15:19 +0000 | ||
538 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp17.c 2012-03-01 09:33:24 +0000 | ||
539 | @@ -1,6 +1,6 @@ | ||
540 | /* Test AAPCS layout (VFP variant) */ | ||
541 | |||
542 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
543 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
544 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
545 | /* { dg-require-effective-target arm32 } */ | ||
546 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
547 | |||
548 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp2.c' | ||
549 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c 2009-08-06 13:27:45 +0000 | ||
550 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp2.c 2012-03-01 09:33:24 +0000 | ||
551 | @@ -1,6 +1,6 @@ | ||
552 | /* Test AAPCS layout (VFP variant) */ | ||
553 | |||
554 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
555 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
556 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
557 | /* { dg-require-effective-target arm32 } */ | ||
558 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
559 | |||
560 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp3.c' | ||
561 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c 2009-08-06 13:27:45 +0000 | ||
562 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp3.c 2012-03-01 09:33:24 +0000 | ||
563 | @@ -1,6 +1,6 @@ | ||
564 | /* Test AAPCS layout (VFP variant) */ | ||
565 | |||
566 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
567 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
568 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
569 | /* { dg-require-effective-target arm32 } */ | ||
570 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
571 | |||
572 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp4.c' | ||
573 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c 2009-08-06 13:27:45 +0000 | ||
574 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp4.c 2012-03-01 09:33:24 +0000 | ||
575 | @@ -1,6 +1,6 @@ | ||
576 | /* Test AAPCS layout (VFP variant) */ | ||
577 | |||
578 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
579 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
580 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
581 | /* { dg-require-effective-target arm32 } */ | ||
582 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
583 | |||
584 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp5.c' | ||
585 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c 2009-08-06 13:27:45 +0000 | ||
586 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp5.c 2012-03-01 09:33:24 +0000 | ||
587 | @@ -1,6 +1,6 @@ | ||
588 | /* Test AAPCS layout (VFP variant) */ | ||
589 | |||
590 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
591 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
592 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
593 | /* { dg-require-effective-target arm32 } */ | ||
594 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
595 | |||
596 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp6.c' | ||
597 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c 2009-08-06 13:27:45 +0000 | ||
598 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp6.c 2012-03-01 09:33:24 +0000 | ||
599 | @@ -1,6 +1,6 @@ | ||
600 | /* Test AAPCS layout (VFP variant) */ | ||
601 | |||
602 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
603 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
604 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
605 | /* { dg-require-effective-target arm32 } */ | ||
606 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
607 | |||
608 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp7.c' | ||
609 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c 2009-08-06 13:27:45 +0000 | ||
610 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp7.c 2012-03-01 09:33:24 +0000 | ||
611 | @@ -1,6 +1,6 @@ | ||
612 | /* Test AAPCS layout (VFP variant) */ | ||
613 | |||
614 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
615 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
616 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
617 | /* { dg-require-effective-target arm32 } */ | ||
618 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
619 | |||
620 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp8.c' | ||
621 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c 2009-08-06 13:27:45 +0000 | ||
622 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp8.c 2012-03-01 09:33:24 +0000 | ||
623 | @@ -1,6 +1,6 @@ | ||
624 | /* Test AAPCS layout (VFP variant) */ | ||
625 | |||
626 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
627 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
628 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
629 | /* { dg-require-effective-target arm32 } */ | ||
630 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
631 | |||
632 | === modified file 'gcc/testsuite/gcc.target/arm/aapcs/vfp9.c' | ||
633 | --- old/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c 2009-08-06 13:27:45 +0000 | ||
634 | +++ new/gcc/testsuite/gcc.target/arm/aapcs/vfp9.c 2012-03-01 09:33:24 +0000 | ||
635 | @@ -1,6 +1,6 @@ | ||
636 | /* Test AAPCS layout (VFP variant) */ | ||
637 | |||
638 | -/* { dg-do run { target arm*-*-eabi* } } */ | ||
639 | +/* { dg-do run { target arm*-*-*eabi* } } */ | ||
640 | /* { dg-require-effective-target arm_hard_vfp_ok } */ | ||
641 | /* { dg-require-effective-target arm32 } */ | ||
642 | /* { dg-options "-O -mfpu=vfp -mfloat-abi=hard" } */ | ||
643 | |||
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106882.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106882.patch new file mode 100644 index 000000000..7ac7645b9 --- /dev/null +++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106882.patch | |||
@@ -0,0 +1,53 @@ | |||
1 | 2012-03-26 Ulrich Weigand <ulrich.weigand@linaro.org> | ||
2 | |||
3 | LP 960283 | ||
4 | LP 960274 | ||
5 | LP 960817 | ||
6 | |||
7 | Backport from mainline: | ||
8 | |||
9 | gcc/ | ||
10 | PR tree-optimization/52686 | ||
11 | * tree-vect-data-refs.c (vect_get_smallest_scalar_type): Handle | ||
12 | WIDEN_LSHIFT_EXPR. | ||
13 | |||
14 | gcc/testsuite/ | ||
15 | PR tree-optimization/52686 | ||
16 | * gcc.target/arm/pr52686.c: New test. | ||
17 | |||
18 | === added file 'gcc/testsuite/gcc.target/arm/pr52686.c' | ||
19 | --- old/gcc/testsuite/gcc.target/arm/pr52686.c 1970-01-01 00:00:00 +0000 | ||
20 | +++ new/gcc/testsuite/gcc.target/arm/pr52686.c 2012-03-23 16:26:22 +0000 | ||
21 | @@ -0,0 +1,19 @@ | ||
22 | +/* PR target/52375 */ | ||
23 | +/* { dg-do compile } */ | ||
24 | +/* { dg-require-effective-target arm_neon_ok } */ | ||
25 | +/* { dg-options "-march=armv7-a -mfloat-abi=softfp -mfpu=neon -O -ftree-vectorize" } */ | ||
26 | + | ||
27 | +unsigned int output[4]; | ||
28 | + | ||
29 | +void test (unsigned short *p) | ||
30 | +{ | ||
31 | + unsigned int x = *p; | ||
32 | + if (x) | ||
33 | + { | ||
34 | + output[0] = x << 1; | ||
35 | + output[1] = x << 1; | ||
36 | + output[2] = x << 1; | ||
37 | + output[3] = x << 1; | ||
38 | + } | ||
39 | +} | ||
40 | + | ||
41 | |||
42 | === modified file 'gcc/tree-vect-data-refs.c' | ||
43 | --- old/gcc/tree-vect-data-refs.c 2012-01-05 15:35:39 +0000 | ||
44 | +++ new/gcc/tree-vect-data-refs.c 2012-03-23 16:26:22 +0000 | ||
45 | @@ -111,6 +111,7 @@ | ||
46 | if (is_gimple_assign (stmt) | ||
47 | && (gimple_assign_cast_p (stmt) | ||
48 | || gimple_assign_rhs_code (stmt) == WIDEN_MULT_EXPR | ||
49 | + || gimple_assign_rhs_code (stmt) == WIDEN_LSHIFT_EXPR | ||
50 | || gimple_assign_rhs_code (stmt) == FLOAT_EXPR)) | ||
51 | { | ||
52 | tree rhs_type = TREE_TYPE (gimple_assign_rhs1 (stmt)); | ||
53 | |||
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4_6-branch-linaro-backports.inc b/toolchain-layer/recipes-devtools/gcc/gcc-4_6-branch-linaro-backports.inc index 2434fb3a4..bfff69fdf 100644 --- a/toolchain-layer/recipes-devtools/gcc/gcc-4_6-branch-linaro-backports.inc +++ b/toolchain-layer/recipes-devtools/gcc/gcc-4_6-branch-linaro-backports.inc | |||
@@ -93,4 +93,9 @@ file://linaro/gcc-4.6-linaro-r106872.patch \ | |||
93 | file://linaro/gcc-4.6-linaro-r106873.patch \ | 93 | file://linaro/gcc-4.6-linaro-r106873.patch \ |
94 | file://linaro/gcc-4.6-linaro-r106874.patch \ | 94 | file://linaro/gcc-4.6-linaro-r106874.patch \ |
95 | file://linaro/fix_linaro_106872.patch \ | 95 | file://linaro/fix_linaro_106872.patch \ |
96 | file://linaro/gcc-4.6-linaro-r106876.patch \ | ||
97 | file://linaro/gcc-4.6-linaro-r106877.patch \ | ||
98 | file://linaro/gcc-4.6-linaro-r106878.patch \ | ||
99 | file://linaro/gcc-4.6-linaro-r106879.patch \ | ||
100 | file://linaro/gcc-4.6-linaro-r106882.patch \ | ||
96 | " | 101 | " |
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-common-4.6.inc b/toolchain-layer/recipes-devtools/gcc/gcc-common-4.6.inc index 695079772..cbb90e9f6 100644 --- a/toolchain-layer/recipes-devtools/gcc/gcc-common-4.6.inc +++ b/toolchain-layer/recipes-devtools/gcc/gcc-common-4.6.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # this will prepend this layer to FILESPATH | 1 | # this will prepend this layer to FILESPATH |
2 | FILESEXTRAPATHS := "${THISDIR}/gcc-4.6" | 2 | FILESEXTRAPATHS := "${THISDIR}/gcc-4.6" |
3 | PRINC = "5" | 3 | PRINC = "6" |
4 | ARM_INSTRUCTION_SET = "arm" | 4 | ARM_INSTRUCTION_SET = "arm" |