aboutsummaryrefslogtreecommitdiff
path: root/libffi/src/arm/sysv.S
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2002-09-28 12:09:27 +0000
committerRichard Earnshaw <rearnsha@arm.com>2002-09-28 12:09:27 +0000
commit34b4571cab94d8a1235ba1b058d51ba93da72005 (patch)
tree9dfeceaf76350703dcfa91f04a9a3fa96e53beb9 /libffi/src/arm/sysv.S
parentf4dc9f1369b52be7e37bb1a3caa70e55c18bb885 (diff)
* src/arm/sysv.S: If we don't have machine/asm.h and the pre-processor
has defined __USER_LABEL_PREFIX__, then use it in CNAME. (ffi_call_SYSV): Handle soft-float. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@57609 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libffi/src/arm/sysv.S')
-rw-r--r--libffi/src/arm/sysv.S15
1 files changed, 15 insertions, 0 deletions
diff --git a/libffi/src/arm/sysv.S b/libffi/src/arm/sysv.S
index 84744d77562..a494a2ffebf 100644
--- a/libffi/src/arm/sysv.S
+++ b/libffi/src/arm/sysv.S
@@ -28,6 +28,13 @@
#ifdef HAVE_MACHINE_ASM_H
#include <machine/asm.h>
#else
+#ifdef __USER_LABEL_PREFIX__
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+/* Use the right prefix for global labels. */
+#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+#else
/* XXX these lose for some platforms, I'm sure. */
#define CNAME(x) x
#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
@@ -96,12 +103,20 @@ ENTRY(ffi_call_SYSV)
# return FLOAT
cmp a4, #FFI_TYPE_FLOAT
+#ifdef __SOFTFP__
+ streq a1, [a3]
+#else
stfeqs f0, [a3]
+#endif
beq epilogue
# return DOUBLE or LONGDOUBLE
cmp a4, #FFI_TYPE_DOUBLE
+#ifdef __SOFTFP__
+ stmeqia a3, {a1, a2}
+#else
stfeqd f0, [a3]
+#endif
epilogue:
ldmfd sp!, {a1-a4, fp, pc}