diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c15f4ea6489d7c771625919cc3a3a152423a38f4..526f17cc3299bfb6a682fb05657a3b77fc3ee1b6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 4a94145d4aa8ee4c52f17c93a150dc6ee9338182..e2ab10229be9ccf609e855ed3474bbd2dd7e4dd4 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -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,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 394f8ee738bf470c7cebcdecdda6c439128921dd..00cae86d6f762b1b409c9f015c8faf66427657bf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000000000000000000000000000000000000..858b72f8ad81cf271baf45bce79242a5b22d7dae
--- /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 } } */