re PR target/51835 (ARM EABI violation when passing arguments to helper floating...
authorBin Cheng <bin.cheng@arm.com>
Mon, 30 Jan 2012 16:59:14 +0000 (16:59 +0000)
committerJoey Ye <jye2@gcc.gnu.org>
Mon, 30 Jan 2012 16:59:14 +0000 (16:59 +0000)
2012-01-30  Bin Cheng  <bin.cheng@arm.com>

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: r183733

gcc/ChangeLog
gcc/config/arm/arm.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pr51835.c [new file with mode: 0644]

index c15f4ea6489d7c771625919cc3a3a152423a38f4..526f17cc3299bfb6a682fb05657a3b77fc3ee1b6 100644 (file)
@@ -1,3 +1,9 @@
+2012-01-30  Bin Cheng  <bin.cheng@arm.com>
+
+       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  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/52028
index 4a94145d4aa8ee4c52f17c93a150dc6ee9338182..e2ab10229be9ccf609e855ed3474bbd2dd7e4dd4 100644 (file)
@@ -3679,6 +3679,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,
index 394f8ee738bf470c7cebcdecdda6c439128921dd..00cae86d6f762b1b409c9f015c8faf66427657bf 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-30  Bin Cheng  <bin.cheng@arm.com>
+
+       PR target/51835
+       * gcc.target/arm/pr51835.c: New testcase.
+
 2012-01-30  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/52028
diff --git a/gcc/testsuite/gcc.target/arm/pr51835.c b/gcc/testsuite/gcc.target/arm/pr51835.c
new file mode 100644 (file)
index 0000000..858b72f
--- /dev/null
@@ -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 } } */