Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: b68b1a1ea1
Fetching contributors…

Cannot retrieve contributors at this time

executable file 92 lines (86 sloc) 2.525 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92

.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

Something went wrong with that request. Please try again.