diff options
Diffstat (limited to 'toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106878.patch')
-rw-r--r-- | toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106878.patch | 69 |
1 files changed, 69 insertions, 0 deletions
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 | |||