Updates from 0.2.1 into 0.2.1-inu-1.5
This commit is contained in:
95
gc/powerpc_macosx_mach_dep.s
Normal file
95
gc/powerpc_macosx_mach_dep.s
Normal file
@@ -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
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user