]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libffi/src/powerpc/darwin_closure.S
Imported gcc-4.4.3
[msp430-gcc.git] / libffi / src / powerpc / darwin_closure.S
diff --git a/libffi/src/powerpc/darwin_closure.S b/libffi/src/powerpc/darwin_closure.S
deleted file mode 100644 (file)
index fbc334a..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/* -----------------------------------------------------------------------
-   darwin_closure.S - Copyright (c) 2002 2003 Free Software Foundation, 
-   Inc. based on ppc_closure.S
-   PowerPC Assembly glue.
-
-   Permission is hereby granted, free of charge, to any person obtaining
-   a copy of this software and associated documentation files (the
-   ``Software''), to deal in the Software without restriction, including
-   without limitation the rights to use, copy, modify, merge, publish,
-   distribute, sublicense, and/or sell copies of the Software, and to
-   permit persons to whom the Software is furnished to do so, subject to
-   the following conditions:
-
-   The above copyright notice and this permission notice shall be included
-   in all copies or substantial portions of the Software.
-
-   THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
-   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-   IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
-   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-   OTHER DEALINGS IN THE SOFTWARE.
-   ----------------------------------------------------------------------- */
-
-#define LIBFFI_ASM
-#define JUMPTARGET(name) name
-#define L(x) x
-.text
-.globl _ffi_closure_helper_DARWIN
-
-.text
-       .align 2
-.globl _ffi_closure_ASM
-
-.text
-       .align 2
-_ffi_closure_ASM:
-LFB1:          
-       mflr r0                 /* extract return address  */
-       stw r0, 8(r1)           /* save the return address  */
-LCFI0: 
-       /* 24 Bytes (Linkage Area)
-          32 Bytes (outgoing parameter area, always reserved)
-          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)
-       stw   r4, 204(r1)
-       stw   r5, 208(r1) 
-       stw   r6, 212(r1)
-       stw   r7, 216(r1)
-       stw   r8, 220(r1) 
-       stw   r9, 224(r1)
-       stw   r10, 228(r1)
-
-       /* we save fpr 1 to fpr 13 (aligned to 8) */
-       stfd  f1, 56(r1)
-       stfd  f2, 64(r1)
-       stfd  f3, 72(r1)
-       stfd  f4, 80(r1)
-       stfd  f5, 88(r1)
-       stfd  f6, 96(r1)
-       stfd  f7, 104(r1)
-       stfd  f8, 112(r1)
-       stfd  f9, 120(r1) 
-       stfd  f10, 128(r1) 
-       stfd  f11, 136(r1) 
-       stfd  f12, 144(r1) 
-       stfd  f13, 152(r1) 
-
-       /* 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 L(_ffi_closure_helper_DARWIN)
-
-       /* now r3 contains the return type */
-       /* so use it to look up in a table */
-       /* so we know how to deal with each type */
-
-       /* look up the proper starting point in table  */
-       /* by using return type as offset */
-       addi r5,r1,160          /* get pointer to results area */
-       addis r4,0,ha16(.L60)   /* get address of jump table */
-       addi r4,r4,lo16(.L60)
-       slwi r3,r3,2            /* now multiply return type by 4 */
-       lwzx r3,r4,r3           /* get the contents of that table value */
-       add r3,r3,r4            /* add contents of table to table address */
-       mtctr r3
-       bctr                    /* jump to it  */
-LFE1:
-       .align  2
-
-.L60:
-       .long .L44-.L60    /* FFI_TYPE_VOID */
-       .long .L50-.L60    /* FFI_TYPE_INT */
-       .long .L47-.L60    /* FFI_TYPE_FLOAT */
-       .long .L46-.L60    /* FFI_TYPE_DOUBLE */
-       .long .L46-.L60    /* FFI_TYPE_LONGDOUBLE */
-       .long .L56-.L60    /* FFI_TYPE_UINT8 */
-       .long .L55-.L60    /* FFI_TYPE_SINT8 */
-       .long .L58-.L60    /* FFI_TYPE_UINT16 */
-       .long .L57-.L60    /* FFI_TYPE_SINT16 */
-       .long .L50-.L60    /* FFI_TYPE_UINT32 */
-       .long .L50-.L60    /* FFI_TYPE_SINT32 */
-       .long .L48-.L60    /* FFI_TYPE_UINT64 */
-       .long .L48-.L60    /* FFI_TYPE_SINT64 */
-       .long .L44-.L60    /* FFI_TYPE_STRUCT */
-       .long .L50-.L60    /* FFI_TYPE_POINTER */
-
-
-/* case double */
-.L46:   
-       lfd f1,0(r5)
-       b .L44
-
-/* case float */
-.L47:
-       lfs f1,0(r5)
-       b .L44
-       
-/* case long long */
-.L48:
-       lwz r3,0(r5)
-       lwz r4,4(r5)
-       b .L44
-       
-/* case default / int32 / pointer */
-.L50:
-       lwz r3,0(r5)
-       b .L44
-       
-/* case signed int8     */
-.L55:
-       addi r5,r5,3
-       lbz r3,0(r5)
-       extsb r3,r3
-       b .L44
-
-/* case unsigned int8   */
-.L56:
-       addi r5,r5,3
-       lbz r3,0(r5)
-       b .L44
-
-/* case signed int16 */
-.L57:
-       addi r5,r5,2
-       lhz r3,0(r5)
-       extsh r3,r3
-       b .L44
-
-/* case unsigned int16 */
-.L58:  
-       addi r5,r5,2
-       lhz r3,0(r5)
-
-/* case void / done     */
-.L44:
-       
-       addi r1,r1,176          /* restore stack pointer  */
-       lwz r0,8(r1)            /* get return address  */
-       mtlr r0                 /* reset link register  */
-       blr
-       
-/* END(ffi_closure_ASM)  */