diff options
| author | Koen Kooi <koen@dominion.thruhere.net> | 2010-11-02 22:03:58 +0100 |
|---|---|---|
| committer | Koen Kooi <koen@dominion.thruhere.net> | 2010-11-02 22:12:02 +0100 |
| commit | be10a6b1321f250b1034c7d9d0a8ef18b296eef1 (patch) | |
| tree | 9249025cbfbfbee4cc430d62b27f75301dd4dfde /recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99347.patch | |
| parent | 93b28937ac67ba46d65f55637e42552e224aa7e2 (diff) | |
| download | meta-openembedded-be10a6b1321f250b1034c7d9d0a8ef18b296eef1.tar.gz | |
angstrom-layers: meta-openembedded: replace poky gcc 4.5 sources with OE ones
This needs further investigation, but for now we can get the tested sources into the poky gcc harness
Signed-off-by: Koen Kooi <k-kooi@ti.com>
Diffstat (limited to 'recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99347.patch')
| -rw-r--r-- | recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99347.patch | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99347.patch b/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99347.patch new file mode 100644 index 0000000000..57b8605e55 --- /dev/null +++ b/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99347.patch | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | Merge from Sourcery G++ 4.4: | ||
| 2 | |||
| 3 | 2010-02-15 Julian Brown <julian@codesourcery.com> | ||
| 4 | |||
| 5 | Issue #7486 | ||
| 6 | |||
| 7 | gcc/ | ||
| 8 | * config/arm/arm.c (arm_libcall_uses_aapcs_base) | ||
| 9 | (arm_init_cumulative_args): Use correct ABI for double-precision | ||
| 10 | helper functions in hard-float mode if only single-precision | ||
| 11 | arithmetic is supported in hardware. | ||
| 12 | |||
| 13 | 2010-07-26 Julian Brown <julian@codesourcery.com> | ||
| 14 | |||
| 15 | Backport from FSF mainline: | ||
| 16 | |||
| 17 | Julian Brown <julian@codesourcery.com> | ||
| 18 | |||
| 19 | === modified file 'gcc/config/arm/arm.c' | ||
| 20 | --- old/gcc/config/arm/arm.c 2010-08-13 10:30:35 +0000 | ||
| 21 | +++ new/gcc/config/arm/arm.c 2010-08-13 10:43:42 +0000 | ||
| 22 | @@ -3453,6 +3453,28 @@ | ||
| 23 | convert_optab_libfunc (sfix_optab, DImode, SFmode)); | ||
| 24 | add_libcall (libcall_htab, | ||
| 25 | convert_optab_libfunc (ufix_optab, DImode, SFmode)); | ||
| 26 | + | ||
| 27 | + /* Values from double-precision helper functions are returned in core | ||
| 28 | + registers if the selected core only supports single-precision | ||
| 29 | + arithmetic, even if we are using the hard-float ABI. */ | ||
| 30 | + if (TARGET_VFP) | ||
| 31 | + { | ||
| 32 | + add_libcall (libcall_htab, optab_libfunc (add_optab, DFmode)); | ||
| 33 | + add_libcall (libcall_htab, optab_libfunc (sdiv_optab, DFmode)); | ||
| 34 | + add_libcall (libcall_htab, optab_libfunc (smul_optab, DFmode)); | ||
| 35 | + add_libcall (libcall_htab, optab_libfunc (neg_optab, DFmode)); | ||
| 36 | + add_libcall (libcall_htab, optab_libfunc (sub_optab, DFmode)); | ||
| 37 | + add_libcall (libcall_htab, optab_libfunc (eq_optab, DFmode)); | ||
| 38 | + add_libcall (libcall_htab, optab_libfunc (lt_optab, DFmode)); | ||
| 39 | + add_libcall (libcall_htab, optab_libfunc (le_optab, DFmode)); | ||
| 40 | + add_libcall (libcall_htab, optab_libfunc (ge_optab, DFmode)); | ||
| 41 | + add_libcall (libcall_htab, optab_libfunc (gt_optab, DFmode)); | ||
| 42 | + add_libcall (libcall_htab, optab_libfunc (unord_optab, DFmode)); | ||
| 43 | + add_libcall (libcall_htab, | ||
| 44 | + convert_optab_libfunc (sext_optab, DFmode, SFmode)); | ||
| 45 | + add_libcall (libcall_htab, | ||
| 46 | + convert_optab_libfunc (trunc_optab, SFmode, DFmode)); | ||
| 47 | + } | ||
| 48 | } | ||
| 49 | |||
| 50 | return libcall && htab_find (libcall_htab, libcall) != NULL; | ||
| 51 | @@ -4406,6 +4428,31 @@ | ||
| 52 | if (arm_libcall_uses_aapcs_base (libname)) | ||
| 53 | pcum->pcs_variant = ARM_PCS_AAPCS; | ||
| 54 | |||
| 55 | + /* We must pass arguments to double-precision helper functions in core | ||
| 56 | + registers if we only have hardware support for single-precision | ||
| 57 | + arithmetic, even if we are using the hard-float ABI. */ | ||
| 58 | + if (TARGET_VFP | ||
| 59 | + && (rtx_equal_p (libname, optab_libfunc (add_optab, DFmode)) | ||
| 60 | + || rtx_equal_p (libname, optab_libfunc (sdiv_optab, DFmode)) | ||
| 61 | + || rtx_equal_p (libname, optab_libfunc (smul_optab, DFmode)) | ||
| 62 | + || rtx_equal_p (libname, optab_libfunc (neg_optab, DFmode)) | ||
| 63 | + || rtx_equal_p (libname, optab_libfunc (sub_optab, DFmode)) | ||
| 64 | + || rtx_equal_p (libname, optab_libfunc (eq_optab, DFmode)) | ||
| 65 | + || rtx_equal_p (libname, optab_libfunc (lt_optab, DFmode)) | ||
| 66 | + || rtx_equal_p (libname, optab_libfunc (le_optab, DFmode)) | ||
| 67 | + || rtx_equal_p (libname, optab_libfunc (ge_optab, DFmode)) | ||
| 68 | + || rtx_equal_p (libname, optab_libfunc (gt_optab, DFmode)) | ||
| 69 | + || rtx_equal_p (libname, optab_libfunc (unord_optab, DFmode)) | ||
| 70 | + || rtx_equal_p (libname, convert_optab_libfunc (sext_optab, | ||
| 71 | + DFmode, SFmode)) | ||
| 72 | + || rtx_equal_p (libname, convert_optab_libfunc (trunc_optab, | ||
| 73 | + SFmode, DFmode)) | ||
| 74 | + || rtx_equal_p (libname, convert_optab_libfunc (sfix_optab, | ||
| 75 | + SImode, DFmode)) | ||
| 76 | + || rtx_equal_p (libname, convert_optab_libfunc (ufix_optab, | ||
| 77 | + SImode, DFmode)))) | ||
| 78 | + pcum->pcs_variant = ARM_PCS_AAPCS; | ||
| 79 | + | ||
| 80 | pcum->aapcs_ncrn = pcum->aapcs_next_ncrn = 0; | ||
| 81 | pcum->aapcs_reg = NULL_RTX; | ||
| 82 | pcum->aapcs_partial = 0; | ||
| 83 | |||
