#if defined(__ppc64__) #define MODE_CHOICE(x, y) y #else #define MODE_CHOICE(x, y) x #endif #define lgu MODE_CHOICE(lwzu, ldu) #define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */ #define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */ ; 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 cannot be inline asm. .text .align LOG2_GPR_BYTES .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 .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 .align LOG2_GPR_BYTES 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 lgu r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11) mtctr r12 bctr .data .lazy_symbol_pointer L_GC_push_one$lazy_ptr: .indirect_symbol _GC_push_one .g_long dyld_stub_binding_helper