6991c6c926
From-SVN: r69872
85 lines
1.5 KiB
ArmAsm
85 lines
1.5 KiB
ArmAsm
|
|
; 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
|