aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2007-12-13 01:03:53 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2007-12-13 01:03:53 +0000
commitfe9e53421889ec5d5c360107a8b9c80b95cbebcf (patch)
treee8beed52f961a52088ac36e53afe0300064912a5
parentdce3aa507829714fb9e05764ac1124a14a7966b8 (diff)
downloadgcc-fe9e53421889ec5d5c360107a8b9c80b95cbebcf.zip
gcc-fe9e53421889ec5d5c360107a8b9c80b95cbebcf.tar.gz
gcc-fe9e53421889ec5d5c360107a8b9c80b95cbebcf.tar.bz2
re PR target/30192 ([arm] Wrong sp value on exit after calling __floatdidf or __floatundidf)
2007-12-13 Richard Earnshaw <rearnsha@arm.com> PR target/30192 * config/arm/ieee754-df.S (floatundidf): Fix for wrong sp value on exit when using hard FPA. * config/arm/ieee754-df.S (floatdidf): Likewise. From-SVN: r130800
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/arm/ieee754-df.S6
2 files changed, 11 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7ce7d8c..32dbb6e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2007-12-13 Richard Earnshaw <rearnsha@arm.com>
+
+ PR target/30192
+ * config/arm/ieee754-df.S (floatundidf): Fix for wrong sp value on
+ exit when using hard FPA.
+ * config/arm/ieee754-df.S (floatdidf): Likewise.
+
2007-12-12 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/30589
diff --git a/gcc/config/arm/ieee754-df.S b/gcc/config/arm/ieee754-df.S
index 76cbb6e..b866e67 100644
--- a/gcc/config/arm/ieee754-df.S
+++ b/gcc/config/arm/ieee754-df.S
@@ -512,7 +512,8 @@ ARM_FUNC_ALIAS aeabi_ul2d floatundidf
@ we can return the result in f0 as well as in r0/r1 for backwards
@ compatibility.
adr ip, LSYM(f0_ret)
- do_push {r4, r5, ip, lr}
+ @ Push pc as well so that RETLDM works correctly.
+ do_push {r4, r5, ip, lr, pc}
#else
do_push {r4, r5, lr}
#endif
@@ -537,7 +538,8 @@ ARM_FUNC_ALIAS aeabi_l2d floatdidf
@ we can return the result in f0 as well as in r0/r1 for backwards
@ compatibility.
adr ip, LSYM(f0_ret)
- do_push {r4, r5, ip, lr}
+ @ Push pc as well so that RETLDM works correctly.
+ do_push {r4, r5, ip, lr, pc}
#else
do_push {r4, r5, lr}
#endif