From 9e8dfb1759bb84e29b0c4debc5a181ec48e371f1 Mon Sep 17 00:00:00 2001 From: Bin Cheng Date: Mon, 30 Jan 2012 17:22:04 +0000 Subject: [PATCH] re PR target/51835 (ARM EABI violation when passing arguments to helper floating functions like __aeabi_d2iz) 2012-01-30 Bin Cheng PR target/51835 * config/arm/arm.c (arm_libcall_uses_aapcs_base): Use correct ABI for __aeabi_d2iz/__aeabi_d2uiz with hard-float. testcases: PR target/51835 * gcc.target/arm/pr51835.c: New testcase. From-SVN: r183734 --- gcc/ChangeLog | 9 +++++++++ gcc/config/arm/arm.c | 4 ++++ gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.target/arm/pr51835.c | 14 ++++++++++++++ 4 files changed, 35 insertions(+) create mode 100644 gcc/testsuite/gcc.target/arm/pr51835.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f0dafc3b3dd7..08602c58d8c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2012-01-30 Bin Cheng + + Backport from mainline. + 2012-01-30 Bin Cheng + + PR target/51835 + * config/arm/arm.c (arm_libcall_uses_aapcs_base): Use correct ABI + for __aeabi_d2iz/__aeabi_d2uiz with hard-float. + 2012-01-30 Ramana Radhakrishnan Backport from mainline. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 9058c31de44d..54b7603f3fc0 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -3569,6 +3569,10 @@ arm_libcall_uses_aapcs_base (const_rtx libcall) convert_optab_libfunc (sext_optab, SFmode, HFmode)); add_libcall (libcall_htab, convert_optab_libfunc (trunc_optab, HFmode, SFmode)); + add_libcall (libcall_htab, + convert_optab_libfunc (sfix_optab, SImode, DFmode)); + add_libcall (libcall_htab, + convert_optab_libfunc (ufix_optab, SImode, DFmode)); add_libcall (libcall_htab, convert_optab_libfunc (sfix_optab, DImode, DFmode)); add_libcall (libcall_htab, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 82c0a6bd110e..ae16f720eb7b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2012-01-30 Bin Cheng + + Backport from mainline. + 2012-01-30 Bin Cheng + + PR target/51835 + * gcc.target/arm/pr51835.c: New testcase. + 2012-01-28 Tobias Burnus PR fortran/52022 diff --git a/gcc/testsuite/gcc.target/arm/pr51835.c b/gcc/testsuite/gcc.target/arm/pr51835.c new file mode 100644 index 000000000000..858b72f8ad81 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr51835.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mfloat-abi=hard -mfpu=fpv4-sp-d16" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ + +int func1 (double d) +{ + return (int)d; +} +unsigned int func2 (double d) +{ + return (unsigned int)d; +} + +/* { dg-final { scan-assembler-times "fmrrd\[\\t \]+r0,\[\\t \]*r1,\[\\t \]*d0" 2 } } */ -- 2.47.2