Mercurial > emacs
diff gc/powerpc_macosx_mach_dep.s @ 51488:5de98dce4bd1
*** empty log message ***
author | Dave Love <fx@gnu.org> |
---|---|
date | Thu, 05 Jun 2003 17:49:22 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gc/powerpc_macosx_mach_dep.s Thu Jun 05 17:49:22 2003 +0000 @@ -0,0 +1,95 @@ + +.text + + .set linkageArea,24 + .set params,4 + .set alignment,4 + + .set spaceToSave,linkageArea+params+alignment + .set spaceToSave8,spaceToSave+8 + +; Mark from machine registers that are saved by C compiler + .globl _GC_push_regs +_GC_push_regs: + ; PROLOG + mflr r0 ; get return address + stw r0,8(r1) ; save return address + stwu r1,-spaceToSave(r1) ; skip over caller save area + ; + mr r3,r2 ; mark from r2. Well Im not really sure + ; that this is necessary or even the right + ; thing to do - at least it doesnt harm... + ; According to Apples docs it points to + ; the direct data area, whatever that is... + bl L_GC_push_one$stub + mr r3,r13 ; mark from r13-r31 + 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 + ; EPILOG + lwz r0,spaceToSave8(r1) ; get return address back + mtlr r0 ; reset link register + addic r1,r1,spaceToSave ; restore stack pointer + blr + +.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 +.non_lazy_symbol_pointer +L_GC_push_one$non_lazy_ptr: + .indirect_symbol _GC_push_one + .long 0 + + + +