aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libffi/ChangeLog6
-rw-r--r--libffi/src/arm/sysv.S16
2 files changed, 11 insertions, 11 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index 9d08899..89ea007 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,9 @@
+2000-05-11 Scott Bambrough <scottb@netwinder.org>
+
+ * libffi/src/arm/sysv.S (ffi_call_SYSV): Doubles are not saved to
+ memory correctly. Use conditional instructions, not branches where
+ possible.
+
2000-05-04 Tom Tromey <tromey@cygnus.com>
* configure: Rebuilt.
diff --git a/libffi/src/arm/sysv.S b/libffi/src/arm/sysv.S
index 14230c4..874b80a 100644
--- a/libffi/src/arm/sysv.S
+++ b/libffi/src/arm/sysv.S
@@ -97,19 +97,13 @@ ENTRY(ffi_call_SYSV)
beq epilogue
# return FLOAT
- cmp a4, #FFI_TYPE_FLOAT
- bne retdouble
- stfs f0, [a3]
- b epilogue
+ cmp a4, #FFI_TYPE_FLOAT
+ stfeqs f0, [a3]
+ beq epilogue
# return DOUBLE or LONGDOUBLE
-retdouble:
- cmp a4, #FFI_TYPE_DOUBLE
- bne epilogue
-
- stfs f0, [a3, #0]
- stfs f1, [a3, #4]
- b epilogue
+ cmp a4, #FFI_TYPE_DOUBLE
+ stfeqd f0, [a3]
epilogue:
ldmfd sp!, {a1-a4, fp, pc}