diff options
author | andreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-09-18 18:23:47 +0000 |
---|---|---|
committer | andreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-09-18 18:23:47 +0000 |
commit | 7a142533370593c51f2235d867010e4addfea24e (patch) | |
tree | 99afd39ab065417371a20ca4fe2ef9d169b8e006 /libffi/src/powerpc/darwin_closure.S | |
parent | 0767cba934e92d31349601c9e58281878096a310 (diff) | |
download | gcc-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.S | 20 |
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 |