summaryrefslogtreecommitdiff
path: root/libffi/src/powerpc/darwin_closure.S
diff options
context:
space:
mode:
authorandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-18 18:23:47 +0000
committerandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-18 18:23:47 +0000
commit7a142533370593c51f2235d867010e4addfea24e (patch)
tree99afd39ab065417371a20ca4fe2ef9d169b8e006 /libffi/src/powerpc/darwin_closure.S
parent0767cba934e92d31349601c9e58281878096a310 (diff)
downloadgcc-7a142533370593c51f2235d867010e4addfea24e.tar.gz
2003-09-18 Andreas Tobler <a.tobler@schweiz.ch>
David Edelsohn <edelsohn@gnu.org> * src/types.c (double): Add AIX and Darwin to the right TYPEDEF. * src/powerpc/aix_closure.S: Remove the pointer to the outgoing parameter stack. * src/powerpc/darwin_closure.S: Likewise. * src/powerpc/ffi_darwin.c (ffi_prep_args): Handle structures according to the Darwin/AIX ABI. (ffi_prep_cif_machdep): Likewise. (ffi_closure_helper_DARWIN): Likewise. Remove the outgoing parameter stack logic. Simplify the evaluation of the different CASE types. (ffi_prep_clousure): Avoid the casts on lvalues. Change the branch statement in the trampoline code. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71530 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libffi/src/powerpc/darwin_closure.S')
-rw-r--r--libffi/src/powerpc/darwin_closure.S20
1 files changed, 8 insertions, 12 deletions
diff --git a/libffi/src/powerpc/darwin_closure.S b/libffi/src/powerpc/darwin_closure.S
index 9f721de8a61..5dfa44b4fdd 100644
--- a/libffi/src/powerpc/darwin_closure.S
+++ b/libffi/src/powerpc/darwin_closure.S
@@ -31,7 +31,7 @@
.text
.align 2
.globl _ffi_closure_ASM
-
+
.text
.align 2
_ffi_closure_ASM:
@@ -44,13 +44,13 @@ LCFI0:
104 Bytes (13*8 from FPR)
8 Bytes (result)
168 Bytes */
-
+
stwu r1,-176(r1) /* skip over caller save area
keep stack aligned to 16 */
LCFI1:
/* we want to build up an area for the parameters passed
in registers (both floating point and integer) */
-
+
/* we store gpr 3 to gpr 10 (aligned to 4)
in the parents outgoing area */
stw r3, 200(r1)
@@ -80,23 +80,19 @@ LCFI1:
/* set up registers for the routine that actually does the work */
/* get the context pointer from the trampoline */
mr r3,r11
-
+
/* now load up the pointer to the result storage */
addi r4,r1,160
-
+
/* now load up the pointer to the saved gpr registers */
addi r5,r1,200
/* now load up the pointer to the saved fpr registers */
addi r6,r1,56
- /* now load up the pointer to the outgoing parameter
- stack in the previous frame */
- addi r7,r1,232
-
/* make the call */
bl Lffi_closure_helper_DARWIN$stub
-
+
/* now r3 contains the return type */
/* so use it to look up in a table */
/* so we know how to deal with each type */
@@ -114,7 +110,7 @@ LFE1:
/* Each of the ret_typeX code fragments has to be exactly 16 bytes long */
/* (4 instructions). For cache effectiveness we align to a 16 byte boundary */
/* first. */
-
+
.align 4
nop
@@ -234,7 +230,7 @@ Lfinish:
lwz r0,8(r1) /* get return address */
mtlr r0 /* reset link register */
blr
-
+
/* END(ffi_closure_ASM) */
.data