| |
| ; GC_push_regs function. Under some optimization levels GCC will clobber |
| ; some of the non-volatile registers before we get a chance to save them |
| ; therefore, this can't be inline asm. |
| |
| .text |
| .align 2 |
| .globl _GC_push_regs |
| _GC_push_regs: |
| |
| ; Prolog |
| mflr r0 |
| stw r0,8(r1) |
| stwu r1,-80(r1) |
| |
| ; Push r13-r31 |
| mr r3,r13 |
| bl L_GC_push_one$stub |
| mr r3,r14 |
| bl L_GC_push_one$stub |
| mr r3,r15 |
| bl L_GC_push_one$stub |
| mr r3,r16 |
| bl L_GC_push_one$stub |
| mr r3,r17 |
| bl L_GC_push_one$stub |
| mr r3,r18 |
| bl L_GC_push_one$stub |
| mr r3,r19 |
| bl L_GC_push_one$stub |
| mr r3,r20 |
| bl L_GC_push_one$stub |
| mr r3,r21 |
| bl L_GC_push_one$stub |
| mr r3,r22 |
| bl L_GC_push_one$stub |
| mr r3,r23 |
| bl L_GC_push_one$stub |
| mr r3,r24 |
| bl L_GC_push_one$stub |
| mr r3,r25 |
| bl L_GC_push_one$stub |
| mr r3,r26 |
| bl L_GC_push_one$stub |
| mr r3,r27 |
| bl L_GC_push_one$stub |
| mr r3,r28 |
| bl L_GC_push_one$stub |
| mr r3,r29 |
| bl L_GC_push_one$stub |
| mr r3,r30 |
| bl L_GC_push_one$stub |
| mr r3,r31 |
| bl L_GC_push_one$stub |
| |
| ; |
| lwz r0,88(r1) |
| addi r1,r1,80 |
| mtlr r0 |
| |
| ; Return |
| blr |
| |
| ; PIC stuff, generated by GCC |
| |
| .data |
| .picsymbol_stub |
| L_GC_push_one$stub: |
| .indirect_symbol _GC_push_one |
| mflr r0 |
| bcl 20,31,L0$_GC_push_one |
| L0$_GC_push_one: |
| mflr r11 |
| addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one) |
| mtlr r0 |
| lwz r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11) |
| mtctr r12 |
| addi r11,r11,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one) |
| bctr |
| .data |
| .lazy_symbol_pointer |
| L_GC_push_one$lazy_ptr: |
| .indirect_symbol _GC_push_one |
| .long dyld_stub_binding_helper |