# comment # comment File: pstartup.a # comment Author: John van Groningen # comment Machine: power macintosh LINUX = 0 # comment PROFILE = 0 #define sp r1 #define d0 r24 #define d1 r25 #define d2 r26 #define d3 r27 #define d4 r28 #define d5 r29 #define d6 r30 #define d7 r31 #define a0 r23 #define a1 r22 #define a2 r21 #define a3 r20 #define a4 r19 #define a5 r18 #define a6 r17 #define o0 r3 #define o1 r4 #define o2 r5 #define o3 r6 #define o4 r7 #define o5 r8 #define g2 r9 #define g3 r10 #define g0 r11 #define g1 r12 #define int_reg r16 #define char_reg r15 #define real_reg r14 #define bool_reg r13 .macro setmbit rlwinm $2,$1,32-$6-3,3+$6,31 lbzx $4,$0,$2 rlwinm $5,$1,(32-$6) & 31,29,31 srw $3,g3,$5 or $4,$4,$3 stbx $4,$0,$2 .endmacro # comment &vector 0,&bit_n 1,&byte_offset 2,&bit 3,&byte 4,&scratch 5,&shift 6 # comment rlwinm &byte_offset,&bit_n,32-&shift-3,3+&shift,31 # comment lbzx &byte,&vector,&byte_offset # comment rlwinm &scratch,&bit_n,(32-&shift) & 31,29,31 # comment srw &bit,g3,&scratch # comment or &byte,&byte,&bit # comment stbx &byte,&vector,&byte_offset .macro tstmbit rlwinm $2,$1,32-$6-3,3+$6,31 lbzx $4,$0,$2 rlwinm $5,$1,32-$6,29,31 rlwnm. $3,$4,$5,24,24 .endmacro # comment &vector 0,&bit_n 1,&byte_offset 2,&bit 3,&byte 4,&bit_n_in_byte 5,&shift 6 # comment rlwinm &byte_offset,&bit_n,32-&shift-3,3+&shift,31 # comment lbzx &byte,&vector,&byte_offset # comment rlwinm &bit_n_in_byte,&bit_n,32-&shift,29,31 # comment rlwnm. &bit,&byte,&bit_n_in_byte,24,24 # comment .endmacro .macro clrmbit rlwinm $2,$1,32-$6-3,3+$6,31 lbzx $4,$0,$2 rlwinm $5,$1,32-$6,29,31 srw $3,g3,$5 andc $4,$4,$3 stbx $4,$0,$2 .endmacro # comment &vector 0,&bit_n 1,&byte_offset 2,&bit 3,&byte 4,&scratch 5,&shift 6 # comment rlwinm &byte_offset,&bit_n,32-&shift-3,3+&shift,31 # comment lbzx &byte,&vector,&byte_offset # comment rlwinm &scratch,&bit_n,32-&shift,29,31 # comment srw &bit,g3,&scratch # comment andc &byte,&byte,&bit # comment stbx &byte,&vector,&byte_offset # comment .endmacro #include "pmacros.a" MACOSX = 1 NODE_POINTER_OFFSET = 0 SHARE_CHAR_INT = 1 COPIED_VECTOR = 1 RECORDS = 1 MY_ITOS = 1 FINALIZERS = 1 USE_DCBZ = 0 COMPACT_GC_ONLY = 0 ADJUST_HEAP_SIZE = 1 MARK_GC = 1 MARK_AND_COPY_GC = 1 .if LINUX STDERR_TO_FILE = 0 WRITE_HEAP = 0 .else WRITE_HEAP = 0 STDERR_TO_FILE = 1 .endif # comment PROFILE = 0 UNBOXED_CLOSURES = 1 MODULE_NAMES_IN_TIME_PROFILER = 1 EXCEPTIONS = 0 MINIMUM_HEAP_SIZE = 8000 .if 1 DESCRIPTOR_ARITY_OFFSET = (-2) ZERO_ARITY_DESCRIPTOR_OFFSET = (-8) .else DESCRIPTOR_ARITY_OFFSET = (-8) ZERO_ARITY_DESCRIPTOR_OFFSET = (-12) .endif .globl r_to_i_buffer .comm r_to_i_buffer,8 .comm heap_mbp,4 .comm heap_p,4 .comm heap_p1,4 .comm heap_p2,4 .comm heap_size_33,4 .if COPIED_VECTOR .comm heap_size_129,4 .comm heap_copied_vector,4 .comm heap_copied_vector_size,4 .comm heap_end_after_copy_gc,4 .endif .comm extra_heap,4 .comm extra_heap_size,4 .comm stack_p,4 .if MACOSX .comm end_a_stack,4 .comm end_b_stack,4 .endif .comm _halt_sp,4 .globl _halt_sp # comment number of long words requested from the garbage collector .comm alloc_size,4 .comm basic_only,4 .comm last_time,4 .comm execute_time,4 .comm garbage_collect_time,4 .comm IO_time,4 .globl saved_heap_p .comm saved_heap_p,8 .globl saved_a_stack_p .comm saved_a_stack_p,4 .comm sprintf_buffer,32 .comm sprintf_time_buffer,20 .globl small_integers .comm small_integers,33*8 .globl static_characters .comm static_characters,256*8 .if EXCEPTIONS .comm exception_info,12 .endif .comm caf_list,4 .globl caf_listp .comm caf_listp,4 .data heap_p3: .long 0 heap_vector:.long 0 heap_end_after_gc: .long 0 .if MARK_GC bit_counter: .long 0 bit_vector_p: .long 0 zero_bits_before_mark: .long 1 free_after_mark: .long 1000 last_heap_free: .long 0 lazy_array_list: .long 0 .if ADJUST_HEAP_SIZE bit_vector_size: .long 0 ; in bits .endif .endif .align 2 zero_length_string: .long __STRING__+2 .long 0 true_string: .long __STRING__+2 .long 4 true_c_string: .ascii "True" .byte 0,0,0,0 false_string: .long __STRING__+2 .long 5 false_c_string: .ascii "False" .byte 0,0,0 file_c_string: .ascii "File" .byte 0,0,0,0 # comment -1: compact or mark, no extra heap # comment 0: copy, no extra heap # comment 1: compact, extra heap # comment 2: copy, extra heap garbage_collect_flag: .byte 0 .byte 0,0,0 out_of_memory_string_1: .ascii "Not enough memory to allocate heap and stack" .byte 13,0 printf_int_string: .ascii "%d" .byte 0 printf_real_string: .ascii "%g" .byte 0 printf_string_string: .ascii "%s" .byte 0 printf_char_string: .ascii "%c" .byte 0 garbage_collect_string_1: .ascii "A stack: " .byte 0 garbage_collect_string_2: .ascii " bytes. BC stack: " .byte 0 garbage_collect_string_3: .ascii " bytes." .byte 13,0 heap_use_after_gc_string_1: .ascii "Heap use after garbage collection: " .byte 0 heap_use_after_gc_string_2: .ascii " Bytes." .byte 13,0 stack_overflow_string: .ascii "Stack overflow." .byte 13,0 out_of_memory_string_4: .ascii "Heap full." .byte 13,0 time_string_1: .ascii "Execution: " .byte 0 time_string_2: .ascii " Garbage collection: " .byte 0 time_string_3: .ascii " IO: " .byte 0 time_string_4: .ascii " Total: " .byte 0 high_index_string: .ascii "Index too high in UPDATE string." .byte 13,0 low_index_string: .ascii "Index negative in UPDATE string." .byte 13,0 IO_error_string: .ascii "IO error: " .byte 0 new_line_string: .byte 13,0 sprintf_time_string: .ascii "%d.%02d" .byte 0 .if MARK_GC marked_gc_string_1: .ascii "Marked: " .byte 0 .endif .if PROFILE .align 2 .if MODULE_NAMES_IN_TIME_PROFILER m_system: .long 6 .ascii "System" .byte 0,0 .long m_system .endif garbage_collector_name: .long 0 .ascii "garbage_collector" .byte 0 .align 2 .endif .if WRITE_HEAP .comm heap2_begin_and_end,8 .endif .align 3 entier_constants_and_buffers: .double 0.0 .double 0.0 .long 0x43300000 .long 0x00000000 .long 0x43300000 .long 0x80000000 .if FINALIZERS .globl __Nil .globl e____system__kFinalizer .globl e____system__kFinalizerGCTemp .globl finalizer_list .comm finalizer_list,4 .globl free_finalizer_list .comm free_finalizer_list,4 .endif .align 1 .text .globl _abc_main .globl print_ .globl print_char .globl print_int .globl print_real .globl print_sc .globl print_symbol .globl print_symbol_sc .globl print__string__ .globl print__chars__sc .globl printD .globl eprint__ .globl eprint__string__ .globl eprintD .globl push_t_r_args .globl push_a_r_args .globl halt .globl catAC .globl sliceAC .globl updateAC .globl eqAC .globl cmpAC .globl string_to_string_node .globl create_array .globl create_arrayB .globl create_arrayC .globl create_arrayI .globl create_arrayR .globl create_R_array .globl _create_arrayB .globl _create_arrayC .globl _create_arrayI .globl _create_arrayR .globl _create_r_array .globl BtoAC .globl DtoAC .globl ItoAC .globl RtoAC .globl eqD .globl collect_0,collect_1,collect_2,collect_3 .globl collect_00,collect_01,collect_02,collect_03 .globl eval_01,eval_11,eval_02,eval_12,eval_22 .globl e__system__sAP .globl yet_args_needed,yet_args_needed_0,yet_args_needed_1 .globl yet_args_needed_2,yet_args_needed_3,yet_args_needed_4 .globl _c3,_c4,_c5,_c6,_c7,_c8,_c9,_c10,_c11,_c12 .globl _c13,_c14,_c15,_c16,_c17,_c18,_c19,_c20,_c21,_c22 .globl _c23,_c24,_c25,_c26,_c27,_c28,_c29,_c30,_c31,_c32 .globl __indirection,__eaind,eval_fill .globl eval_upd_0,eval_upd_1,eval_upd_2,eval_upd_3,eval_upd_4 .globl eval_upd_5,eval_upd_6,eval_upd_7,eval_upd_8,eval_upd_9 .globl eval_upd_10,eval_upd_11,eval_upd_12,eval_upd_13,eval_upd_14 .globl eval_upd_15,eval_upd_16,eval_upd_17,eval_upd_18,eval_upd_19 .globl eval_upd_20,eval_upd_21,eval_upd_22,eval_upd_23,eval_upd_24 .globl eval_upd_25,eval_upd_26,eval_upd_27,eval_upd_28,eval_upd_29 .globl eval_upd_30,eval_upd_31,eval_upd_32 .globl repl_args_b .globl push_arg_b .globl del_args .if 0 .globl o__S_P2 .globl ea__S_P2 .endif .globl _add_IO_time .globl _add_execute_time .globl _IO_error .globl print_error .globl stack_overflow .globl _stack_overflow .globl out_of_memory_4 .globl acos_real .globl asin_real .globl atan_real .globl cos_real .globl sin_real .globl tan_real .globl ln_real .globl log10_real .globl exp_real .globl sqrt_real .globl pow_real .globl entier_real .if EXCEPTIONS .globl e__Exceptions__scatch__exception .globl e__Exceptions__sraise__exception .endif .if LINUX .globl __start .else .globl _start .endif .globl __driver # comment from system.abc: .globl INT .globl CHAR .globl BOOL .globl REAL .globl FILE .globl __STRING__ .globl __ARRAY__ .globl __cycle__in__spine .globl __print__graph .globl __eval__to__nf .if STDERR_TO_FILE .globl _close_stderr_file .endif # comment from cgcon.c: .globl _w_print_char .globl _w_print_text .globl _w_print_int .globl _w_print_real .globl _w_print_string .if STDERR_TO_FILE .globl _er_print_char .globl _er_print_string .globl _er_print_int .globl _er_print_text .else .globl _ew_print_char .globl _ew_print_string .globl _ew_print_int .endif .if 0 .globl _wait_for_key_press .else .globl _execution_aborted .endif .globl _stack_size .globl _heap_size .globl _flags .if ADJUST_HEAP_SIZE .globl _heap_size_multiple .globl _initial_heap_size .endif # comment from standard c library: .globl _sprintf .if LINUX .globl malloc .globl free .else .globl _NewPtr .globl _DisposePtr .globl _TickCount .globl _Debugger .endif .globl _acos .globl _asin .globl _atan .globl _cos .globl _sin .globl _tan .globl _log .globl _log10 .globl _exp .globl _sqrt .globl _pow .if PROFILE .globl init_profiler .globl profile_s,profile_n,profile_r,profile_ti .globl write_profile_information,write_profile_stack .endif # __TEXT._abc_main: _abc_main: mflr r0 stwu r0,-4(sp) stmw r13,-76(sp) subi sp,sp,76 lea o0,_flags lwz d0,0(o0) lea o0,basic_only andi. d0,d0,1 stw d0,0(o0) lea o0,_heap_size lwz d0,0(o0) subi o0,d0,3 li o1,33 divwu o0,o0,o1 lea o1,heap_size_33 stw o0,0(o1) .if COPIED_VECTOR lea o0,_heap_size li o1,129 lwz d0,0(o0) subi o0,d0,7 divwu o0,o0,o1 lea o1,heap_size_129 stw o0,0(o1) addi o0,o0,3 lea o1,heap_copied_vector_size clrrwi o0,o0,2 stw o0,0(o1) lea o1,heap_end_after_copy_gc li g0,0 stw g0,0(o1) .endif lea o1,_heap_size lwz o0,0(o1) addi o0,o0,7 clrrwi o0,o0,3 stw o0,0(o1) addi o0,o0,3+4 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif .if LINUX bl malloc .else bl L_NewPtr$stub .endif nop .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif cmpwi 0,o0,0 beq no_memory_1 lea o1,heap_mbp stw o0,0(o1) addi o0,o0,3 clrrwi a6,o0,2 lea o0,heap_p lea o1,heap_p1 stw a6,0(o0) stw a6,0(o1) .if MACOSX lea o0,_stack_size lwz o0,0(o0) stwu sp,-64(sp) .if 1 bl _allocate_a_stack .else bl L_NewPtr$stub .endif addi sp,sp,64 cmpwi 0,o0,0 beq no_memory_1 mr a4,o0 lea o0,stack_p stw a4,0(o0) lea o0,_stack_size addi d0,sp,128 lwz d1,0(o0) lea o0,end_a_stack sub d0,d0,d1 add d1,a4,d1 stw d1,0(o0) lea o0,end_b_stack stw d0,0(o0) .else lea o0,_stack_size addi d0,sp,-128 lwz o0,0(o0) sub a4,d0,o0 lea o0,stack_p stw a4,0(o0) .endif lea a0,small_integers li d0,0 lea d1,INT+2 make_small_integers_lp: stw d1,0(a0) stw d0,4(a0) addi d0,d0,1 cmpwi 0,d0,33 addi a0,a0,8 bne make_small_integers_lp lea a0,static_characters li d0,0 lea d1,CHAR+2 make_static_characters_lp: stw d1,0(a0) stw d0,4(a0) addi d0,d0,1 cmpwi 0,d0,256 addi a0,a0,8 bne make_static_characters_lp lea o0,caf_listp lea a0,caf_list+4 stw a0,0(o0) li g0,0 stw g0,-4(a0) .if FINALIZERS lea o0,finalizer_list lea o1,free_finalizer_list lea a0,__Nil-8 stw a0,0(o0) stw a0,0(o1) .endif .if COPIED_VECTOR lea o0,heap_size_129 lwz d1,0(o0) slwi d7,d1,6-2 slwi d1,d1,6 lea o0,heap_copied_vector add d0,a6,d1 lea o1,heap_copied_vector_size stw d0,0(o0) lwz o1,0(o1) lea o0,heap_p2 add d0,d0,o1 stw d0,0(o0) .else lea o0,_heap_size lwz d1,0(o0) lea o0,heap_p2 srwi d1,d1,1 add d0,a6,d1 srwi d7,d1,2 stw d0,0(o0) .endif lea o0,garbage_collect_flag li g0,0 stb g0,0(o0) .if MARK_AND_COPY_GC lea o0,_flags lwz o0,0(o0) andi. r0,o0,64 beq no_mark1 .endif .if MARK_GC | COMPACT_GC_ONLY lea o0,heap_size_33 lea o1,heap_vector lwz d0,0(o0) stw a6,0(o1) slwi d7,d0,3 add a6,a6,d0 addi a6,a6,3 lea o0,heap_p3 clrrwi a6,a6,2 stw a6,0(o0) lea o0,garbage_collect_flag li d0,-1 stb d0,0(o0) .endif .if MARK_AND_COPY_GC no_mark1: .endif .if ADJUST_HEAP_SIZE lea d0,_initial_heap_size lea o0,_flags lwz d0,0(d0) .if MARK_AND_COPY_GC lwz o0,0(o0) li d1,MINIMUM_HEAP_SIZE/2 andi. r0,o0,64 bne no_mark9 add d1,d1,d1 no_mark9: .else .if MARK_GC | COMPACT_GC_ONLY li d1,MINIMUM_HEAP_SIZE .else li d1,MINIMUM_HEAP_SIZE/2 .endif .endif cmpw d0,d1 ble too_large_or_too_small srwi d0,d0,2 cmpw d0,d7 bge too_large_or_too_small mr d7,d0 too_large_or_too_small: .endif .if MARK_AND_COPY_GC lea o0,_flags lwz o0,0(o0) andi. r0,o0,64 beq no_mark2 .endif .if MARK_GC & ADJUST_HEAP_SIZE lea o0,bit_vector_size stw d7,0(o0) .endif .if MARK_AND_COPY_GC no_mark2: .endif lea o0,heap_end_after_gc slwi d0,d7,2 add d0,a6,d0 stw d0,0(o0) lea o0,_halt_sp stw sp,0(o0) .if EXCEPTIONS lea o0,exception_info li o1,0 stw o1,0(o0) .endif bl _init_timer lea a5,__cycle__in__spine lea int_reg,INT+2 lea char_reg,CHAR+2 lea real_reg,REAL+2 lea bool_reg,BOOL+2 .if USE_DCBZ subi d7,d7,15 li g2,32 .endif li r0,-1 .if PROFILE stwu r0,-4(sp) bl init_profiler .endif stwu r0,-4(sp) .if 0 stwu sp,-64(sp) bl .Debugger nop addi sp,sp,64 .endif subi a6,a6,4 .if LINUX bl __start .else bl _start .endif nop exit: bl _add_execute_time lea o0,_flags lwz d0,0(o0) andi. g0,d0,8 beq no_print_execution_time .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif lea o0,time_string_1 .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif nop lea a0,execute_time lwz d0,0(a0) bl _print_time lea o0,time_string_2 .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif lea a0,garbage_collect_time lwz d0,0(a0) bl _print_time lea o0,time_string_3 .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif lea a0,IO_time lwz d0,0(a0) bl _print_time lea o0,time_string_4 .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif lea a0,execute_time lwz d0,0(a0) lea a0,garbage_collect_time lwz d2,0(a0) add d0,d0,d2 lea a0,IO_time lwz d2,0(a0) add d0,d0,d2 bl _print_time li o0,13 .if STDERR_TO_FILE bl _er_print_char .else bl _ew_print_char .endif nop .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif no_print_execution_time: exit_3: exit_2: lea o0,heap_mbp .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif lwz o0,0(o0) .if LINUX bl free .else bl L_DisposePtr$stub .endif nop .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif exit_1: .if STDERR_TO_FILE lea o0,_flags lwz d0,0(o0) andi. g0,d0,128 beq no_close_stderr_file .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl _close_stderr_file nop .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif no_close_stderr_file: .endif .if PROFILE mflr r0 stwu r0,-4(sp) bl write_profile_information .endif lwz r0,76(sp) mtlr r0 lmw r13,0(sp) addi sp,sp,80 blr __driver: lea o1,_flags lwz o0,0(o1) andi. r0,o0,16 bne _eval__to__nf b __print__graph _eval__to__nf: b __eval__to__nf _print_time: mflr r0 stwu r0,-4(sp) .if LINUX li o1,100 .else li o1,60 .endif divwu o2,d0,o1 .if LINUX mulli o3,o2,100 sub o3,d0,o3 .else mulli o3,o2,60 sub o3,d0,o3 mulli o3,o3,5 li o1,3 divwu o3,o3,o1 .endif lea o1,sprintf_time_string lea o0,sprintf_time_buffer .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_sprintf$stub lea o0,sprintf_time_buffer .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif nop .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif lwz r0,0(sp) addi sp,sp,4 mtlr r0 blr no_memory_1: lea o0,out_of_memory_string_1 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif nop .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif b exit_1 # __TEXT.print_sc: print_sc: lea o0,basic_only lwz o1,0(o0) cmpwi 0,o1,0 bne end_print print_: mr o0,d0 print_string_o0_and_return: mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl _w_print_string .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr end_print: lwz r0,0(sp) addi sp,sp,4 blr # __TEXT.printD: printD: andi. r0,d0,2 bne printD_ mr a2,d0 b print_string_a2 # __TEXT.print_symbol: print_symbol: li d1,0 b print_symbol_2 # __TEXT.print_symbol_sc: print_symbol_sc: lea o0,basic_only lwz d1,0(o0) print_symbol_2: lwz d0,0(a0) cmpw 0,int_reg,d0 beq print_int_node cmpw 0,char_reg,d0 beq print_char_node cmpw 0,bool_reg,d0 beq print_bool cmpw 0,real_reg,d0 beq print_real_node cmpwi 0,d1,0 bne end_print_symbol printD_: lha d1,-2(d0) addi a2,d0,-2 cmplwi 0,d1,256 bge print_record slwi d1,d1,3 sub a2,a2,d1 .if 1 lhz d1,DESCRIPTOR_ARITY_OFFSET(a2) addi a2,a2,4 slwi d1,d1,3 add a2,a2,d1 b print_string_a2 .endif print_record: lwz a2,-4(a2) b print_string_a2 end_print_symbol: lwz r0,0(sp) addi sp,sp,4 blr print_int_node: lwz o0,4(a0) print_int2: mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl _w_print_int .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr # __TEXT.print_int: print_int: mr o0,d0 b print_int2 # __TEXT.print_char: print_char: lea o0,basic_only lwz d1,0(o0) cmpwi 0,d1,0 bne print_char_node_bo b print_char_node_sc print_char_node: cmpwi 0,d1,0 lwz d0,4(a0) bne print_char_node_sc print_char_node_bo: mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif li o0,0x27 bl _w_print_char mr o0,d0 bl _w_print_char li o0,0x27 bl _w_print_char .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr print_char_node_sc: mr o0,d0 mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl _w_print_char .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr print_bool: lbz o0,7(a0) cmpwi 0,o0,0 beq print_false print_true: lea o0,true_c_string b print_string_o0_and_return print_false: lea o0,false_c_string b print_string_o0_and_return # __TEXT.print_real: print_real: fmr f1,f14 b print_real_ print_real_node: lfd f1,4(a0) print_real_: mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl _w_print_real .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr print_string_a2: lwz o1,0(a2) addi o0,a2,4 mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl _w_print_text .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr # __TEXT.print__chars__sc: print__chars__sc: lea o0,basic_only lwz d1,0(o0) cmpwi 0,d1,0 bne no_print_chars print__string__: lwz o1,4(a0) addi o0,a0,8 mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl _w_print_text .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr no_print_chars: lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT.eprint__: eprint__: mr o0,d0 mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr .text # __TEXT.eprint__string__: eprint__string__: lwz o1,4(a0) addi o0,a0,8 mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif .if STDERR_TO_FILE bl _er_print_text .else bl _ew_print_text .endif .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr .text # __TEXT.eprintD: eprintD: andi. r0,d0,2 bne eprintD_ mr a2,d0 b eprint_string_a2 eprintD_: lha d1,-2(d0) addi a2,d0,-2 cmplwi 0,d1,256 bge eprint_record slwi d1,d1,3 sub a2,a2,d1 lhz d1,DESCRIPTOR_ARITY_OFFSET(a2) addi a2,a2,4 slwi d1,d1,3 add a2,a2,d1 b eprint_string_a2 eprint_record: lwz a2,-4(a2) eprint_string_a2: lwz o1,0(a2) addi o0,a2,4 mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif .if STDERR_TO_FILE bl _er_print_text .else bl _ew_print_text .endif .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,8 .else lwz r0,64(sp) addi sp,sp,72 .endif mtlr r0 lwz r0,-4(sp) blr .text # __TEXT.DtoAC: DtoAC: lha d1,-2(d0) addi a0,d0,-2 cmplwi 0,d1,256 bge DtoAC_record slwi d1,d1,3 bsub a0,d1 .if 1 lhz d1,DESCRIPTOR_ARITY_OFFSET(a0) baddi a0,4 slwi d1,d1,3 badd a0,d1 .endif DtoAC_a0: lwz d2,0(a0) mr a2,a0 addi d3,d2,3 bsubi d7,2 srwi d3,d3,2 sub. d7,d7,d3 blt DtoAC_gc DtoAC_r_gc: lea o1,__STRING__+2 subic. d3,d3,1 addi a0,a6,4 stw o1,4(a6) stwu d2,8(a6) blt DtoAC_copy DtoAC_copy_lp: lwzu o0,4(a2) subic. d3,d3,1 stwu o0,4(a6) bge DtoAC_copy_lp DtoAC_copy: lwz r0,0(sp) baddi sp,4 blr DtoAC_gc: mflr r0 mr d0,a0 bl collect_0 mr a2,d0 b DtoAC_r_gc DtoAC_record: lwz a0,-4(a0) b DtoAC_a0 .text # __TEXT.push_a_r_args: push_a_r_args: lwz a1,8(a0) subi a1,a1,2 lhz d3,0(a1) subi d3,d3,256 lhz d1,2(a1) addi a1,a1,4 sub d2,d3,d1 slwi d0,d0,2 mullw d4,d0,d3 addi a0,a0,12 add a0,a0,d4 lwz r0,0(sp) addi sp,sp,4 slwi o0,d1,2 add a0,a0,o0 mr a3,a0 b push_a_elements push_a_elements_lp: lwzu o0,-4(a3) addi a4,a4,4 stw o0,-4(a4) push_a_elements: subic. d1,d1,1 bge push_a_elements_lp slwi o0,d2,2 add a0,a0,o0 b push_b_elements push_b_elements_lp: lwzu o0,-4(a0) stwu o0,-4(sp) push_b_elements: subic. d2,d2,1 bge push_b_elements_lp mr d0,a1 blr # __TEXT.push_t_r_args: push_t_r_args: lwz a1,0(a0) addi a0,a0,4 subi a1,a1,2 lhz d3,0(a1) lhz d1,2(a1) subi d3,d3,256 addi d0,a1,4 sub d2,d3,d1 slwi d4,d3,2 cmplwi 0,d3,2 add a1,a0,d4 ble small_record lwz a1,4(a0) subi a1,a1,4 add a1,a1,d4 small_record: lwz r0,0(sp) addi sp,sp,4 b push_r_b_elements push_r_b_elements_lp: subic. d3,d3,1 bne not_first_arg_b lwz o0,0(a0) stwu o0,-4(sp) b push_r_b_elements not_first_arg_b: lwzu o0,-4(a1) stwu o0,-4(sp) push_r_b_elements: subic. d2,d2,1 bge push_r_b_elements_lp b push_r_a_elements push_r_a_elements_lp: subic. d3,d3,1 addi a4,a4,4 bne not_first_arg_a lwz o0,0(a0) stw o0,-4(a4) b push_r_a_elements not_first_arg_a: lwzu o0,-4(a1) stw o0,-4(a4) push_r_a_elements: subic. d1,d1,1 bge push_r_a_elements_lp blr .text # __TEXT.BtoAC: BtoAC: andi. d0,d0,255 beq BtoAC_false BtoAC_true: lea a0,true_string lwz r0,0(sp) addi sp,sp,4 blr BtoAC_false: lea a0,false_string lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT.RtoAC: RtoAC: .if LINUX fmr f1,f14 .else stfd f14,-8(sp) .endif lea o1,printf_real_string lea o0,sprintf_buffer .if LINUX creqv 6,6,6 .else lwz o2,-8(sp) lwz o3,-4(sp) .endif mflr r0 .if MACOSX stwu r0,-4(sp) mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stw r0,-4(sp) stwu sp,-64(sp) .endif bl L_sprintf$stub .if MACOSX lwz sp,0(sp) lwz r0,0(sp) addi sp,sp,4 .else lwz r0,60(sp) addi sp,sp,64 .endif mtlr r0 b return_sprintf_buffer_string .text # __TEXT.ItoAC: ItoAC: .if MY_ITOS lea a0,sprintf_buffer cmpwi 0,d0,0 bge no_minus li o0,45 stb o0,0(a0) addi a0,a0,1 li g0,0 sub d0,g0,d0 no_minus: addi a2,a0,12 beq zero_digit calculate_digits: cmplwi 0,d0,10 blt last_digit #if 1 lis o0,-13107 subi o0,o0,13107 mulhwu o0,o0,d0 rlwinm o1,o0,0,0,31-3 srwi o0,o0,3 sub a1,d0,o1 slwi o1,o0,1 sub a1,a1,o1 #else li o1,10 divwu o0,d0,o1 mullw a1,o0,o1 sub a1,d0,a1 #endif addi a1,a1,48 mr d0,o0 stb a1,0(a2) addi a2,a2,1 b calculate_digits last_digit: cmpwi 0,d0,0 beq no_zero zero_digit: addi d0,d0,48 stb d0,0(a2) addi a2,a2,1 no_zero: addi a1,a0,12 reverse_digits: lbzu d1,-1(a2) cmpw 0,a2,a1 stb d1,0(a0) addi a0,a0,1 bne reverse_digits li g0,0 lea d0,sprintf_buffer stb g0,0(a0) sub d0,a0,d0 b sprintf_buffer_to_string .else mr o2,d0 lea o1,printf_int_string lea o0,sprintf_buffer .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_sprintf$stub .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif .endif return_sprintf_buffer_string: lea o0,sprintf_buffer li d0,-1 subi o0,o0,1 count_chars_in_c_string: lbzu d1,1(o0) addi d0,d0,1 cmpwi d1,0 bne count_chars_in_c_string .if MY_ITOS sprintf_buffer_to_string: .endif addi d1,d0,3 srwi d1,d1,2 subi d7,d7,2 sub. d7,d7,d1 bge+ D_to_S_no_gc mflr r0 bl collect_0 D_to_S_no_gc: lea a0,sprintf_buffer lea o0,__STRING__+2 addi d2,a6,4 stw o0,4(a6) stwu d0,8(a6) b D_to_S_cp_str_2 D_to_S_cp_str_1: lwz o0,0(a0) addi a0,a0,4 stwu o0,4(a6) D_to_S_cp_str_2: subic. d1,d1,1 bge D_to_S_cp_str_1 mr a0,d2 lwz r0,0(sp) addi sp,sp,4 .if USE_DCBZ li g2,32 .endif blr .text # __TEXT.eqD: eqD: lwz d0,0(a0) lwz o0,0(a1) cmpw 0,d0,o0 bne eqD_false cmpw 0,d0,int_reg beq eqD_INT cmpw 0,d0,char_reg beq eqD_CHAR cmpw 0,d0,bool_reg beq eqD_BOOL cmpw 0,d0,real_reg beq eqD_REAL li d0,-1 lwz r0,0(sp) addi sp,sp,4 blr eqD_CHAR: eqD_INT: lwz d1,4(a0) lwz o0,4(a1) li d0,0 cmpw 0,d1,o0 mfcr d0 srwi d0,d0,31-2 andi. d0,d0,1 lwz r0,0(sp) addi sp,sp,4 blr eqD_BOOL: lbz d1,7(a0) lbz o0,7(a1) li d0,0 cmpw 0,d1,o0 mfcr d0 srwi d0,d0,31-2 andi. d0,d0,1 lwz r0,0(sp) addi sp,sp,4 blr eqD_REAL: lfd f0,4(a0) lfd f1,4(a1) fcmpo 0,f0,f1 mfcr d0 srwi d0,d0,31-2 andi. d0,d0,1 lwz r0,0(sp) addi sp,sp,4 blr eqD_false: li d0,0 lwz r0,0(sp) addi sp,sp,4 blr # comment # comment the timer # comment _init_timer: mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif .if LINUX addi o0,sp,8 bl times lwz o0,8(sp) .else bl L_TickCount$stub .endif .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif lwz r0,0(sp) addi sp,sp,4 mtlr r0 lea o1,last_time stw o0,0(o1) lea o1,execute_time li o0,0 stw o0,0(o1) lea o1,garbage_collect_time stw o0,0(o1) lea o1,IO_time stw o0,0(o1) blr _get_time_diff: mflr r0 stwu r0,-4(sp) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif .if LINUX addi o0,sp,8 bl times lwz o0,8(sp) .else bl L_TickCount$stub .endif .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif lea o2,last_time lwz r0,0(sp) addi sp,sp,4 mtlr r0 lwz o1,0(o2) stw o0,0(o2) sub o0,o0,o1 blr _add_execute_time: mflr r0 stwu r0,-4(sp) bl _get_time_diff lea o2,execute_time lwz r0,0(sp) addi sp,sp,4 mtlr r0 lwz o1,0(o2) add o1,o1,o0 stw o1,0(o2) blr .add_garbage_collect_time: mflr r0 stwu r0,-4(sp) bl _get_time_diff lea o2,garbage_collect_time lwz r0,0(sp) addi sp,sp,4 mtlr r0 lwz o1,0(o2) add o1,o1,o0 stw o1,0(o2) blr _add_IO_time: mflr r0 stwu r0,-4(sp) bl _get_time_diff lea o2,IO_time lwz r0,0(sp) addi sp,sp,4 mtlr r0 lwz o1,0(o2) add o1,o1,o0 stw o1,0(o2) blr # comment # comment the garbage collector # comment .text # __TEXT.collect_3: collect_3: stwu r0,-4(sp) .if PROFILE lea r3,garbage_collector_name mflr r0 bl profile_s .endif stw a0,0(a4) stw a1,4(a4) stw a2,8(a4) addi a4,a4,12 mflr r0 bl collect_ lwz a2,-4(a4) lwz a1,-8(a4) lwzu a0,-12(a4) lwz r0,0(sp) mtctr r0 lwz r0,4(sp) mtlr r0 addi sp,sp,8 .if PROFILE b profile_ti .else bctr .endif .text # __TEXT.collect_2: collect_2: stwu r0,-4(sp) .if PROFILE lea r3,garbage_collector_name mflr r0 bl profile_s .endif stw a0,0(a4) stw a1,4(a4) addi a4,a4,8 mflr r0 bl collect_ lwz a1,-4(a4) lwzu a0,-8(a4) lwz r0,0(sp) mtctr r0 lwz r0,4(sp) mtlr r0 addi sp,sp,8 .if PROFILE b profile_ti .else bctr .endif .text # __TEXT.collect_1: collect_1: stwu r0,-4(sp) .if PROFILE lea r3,garbage_collector_name mflr r0 bl profile_s .endif stw a0,0(a4) addi a4,a4,4 mflr r0 bl collect_ lwzu a0,-4(a4) lwz r0,0(sp) mtctr r0 lwz r0,4(sp) mtlr r0 addi sp,sp,8 .if PROFILE b profile_ti .else bctr .endif .text # __TEXT.collect_0: collect_0: stwu r0,-4(sp) .if PROFILE lea r3,garbage_collector_name mflr r0 bl profile_s .endif mflr r0 bl collect_ lwz r0,0(sp) mtctr r0 lwz r0,4(sp) mtlr r0 addi sp,sp,8 .if PROFILE b profile_ti .else bctr .endif .text # __TEXT.collect_03: collect_03: stwu r0,-4(sp) .if PROFILE lea r3,garbage_collector_name mflr r0 bl profile_s .endif stw a0,0(a4) stw a1,4(a4) stw a2,8(a4) addi a4,a4,12 mflr r0 bl collect_ lwz a2,-4(a4) lwz a1,-8(a4) lwzu a0,-12(a4) lwz r0,0(sp) mtctr r0 lwz r0,4(sp) addi sp,sp,8 .if PROFILE b profile_ti .else bctr .endif .text # __TEXT.collect_02: collect_02: stwu r0,-4(sp) .if PROFILE lea r3,garbage_collector_name mflr r0 bl profile_s .endif stw a0,0(a4) stw a1,4(a4) addi a4,a4,8 mflr r0 bl collect_ lwz a1,-4(a4) lwzu a0,-8(a4) lwz r0,0(sp) mtctr r0 lwz r0,4(sp) addi sp,sp,8 .if PROFILE b profile_ti .else bctr .endif .text # __TEXT.collect_01: collect_01: stwu r0,-4(sp) .if PROFILE lea r3,garbage_collector_name mflr r0 bl profile_s .endif stw a0,0(a4) addi a4,a4,4 mflr r0 bl collect_ lwzu a0,-4(a4) lwz r0,0(sp) mtctr r0 lwz r0,4(sp) addi sp,sp,8 .if PROFILE b profile_ti .else bctr .endif .text # __TEXT.collect_00: collect_00: stwu r0,-4(sp) .if PROFILE lea r3,garbage_collector_name mflr r0 bl profile_s .endif mflr r0 bl collect_ lwz r0,0(sp) mtctr r0 lwz r0,4(sp) addi sp,sp,8 .if PROFILE b profile_ti .else bctr .endif .text # __TEXT.collect_: collect_: stwu r0,-4(sp) addi a6,a6,4 .if USE_DCBZ addi d7,d7,15 .endif .if MARK_AND_COPY_GC lea o0,_flags lwz o0,0(o0) andi. r0,o0,64 beq no_mark3 .endif .if MARK_GC lea g1,bit_counter lwz o2,0(g1) li g0,0 tst o2 beq no_scan mtctr o2 lea o4,heap_end_after_gc lea a0,bit_vector_p lwz o4,0(o4) lwz a0,0(a0) sub o4,o4,a6 srwi o4,o4,2 sub o4,o4,d7 scan_bits: lwz o0,0(a0) addi a0,a0,4 cmpwi o0,0 beq zero_bits stw g0,-4(a0) bdnz scan_bits b end_scan zero_bits: mr a1,a0 bdnz skip_zero_bits_lp+4 b end_bits skip_zero_bits_lp: bne end_zero_bits lwz o3,0(a0) addi a0,a0,4 tst o3 bdnz skip_zero_bits_lp beq end_bits stw g0,-4(a0) sub o3,a0,a1 b end_bits2 end_zero_bits: lea g1,free_after_mark sub o3,a0,a1 slwi o3,o3,3 cmplw 0,o3,o4 lwz o1,0(g1) stw g0,-4(a0) add o1,o1,o3 stw o1,0(g1) blt scan_bits found_free_memory: mfctr o2 lea o1,bit_counter lea g1,bit_vector_p stw o2,0(o1) stw a0,0(g1) lea o1,heap_vector sub d7,o3,o4 lwz o1,0(o1) subi o2,a1,4 lea g1,heap_p3 sub o2,o2,o1 lwz o1,0(g1) slwi o2,o2,5 add a6,o2,o1 slwi o3,o3,2 lea g1,heap_end_after_gc add o2,a6,o3 stw o2,0(g1) .if USE_DCBZ subi d7,d7,15 li g2,32 .endif subi a6,a6,4 blr end_bits: sub o3,a0,a1 addi o3,o3,4 end_bits2: lea g1,free_after_mark slwi o3,o3,3 lwz o1,0(g1) cmplw 0,o3,o4 add o1,o1,o3 stw o1,0(g1) bge found_free_memory end_scan: mfctr o2 lea g1,bit_counter stw o2,0(g1) no_scan: .endif .if MARK_AND_COPY_GC no_mark3: .endif mflr r0 stwu r0,-4(sp) subi sp,sp,28 stw d0,0(sp) stw d1,4(sp) stw d2,8(sp) stw d3,12(sp) stw d4,16(sp) lea g1,garbage_collect_flag stw d5,20(sp) lbz o0,0(g1) stw d6,24(sp) extsb o0,o0 cmpwi 0,o0,0 ble collect subi o0,o0,2 stb o0,0(g1) lea o0,heap_end_after_gc lwz d0,0(o0) sub d0,d0,a6 srwi d0,d0,2 lea o0,extra_heap_size sub d0,d0,d7 lwz d1,0(o0) cmplw 0,d0,d1 bgt collect lea o0,extra_heap_size lwz d1,0(o0) lea o0,extra_heap sub d7,d1,d0 lwz a6,0(o0) slwi d1,d1,2 lea o0,heap_end_after_gc add d1,d1,a6 stw d1,0(o0) lwz d0,0(sp) lwz d1,4(sp) lwz d2,8(sp) lwz d3,12(sp) lwz d4,16(sp) lwz d5,20(sp) lwz d6,24(sp) lwz r0,28(sp) mtlr r0 .if USE_DCBZ subi d7,d7,15 li g2,32 .endif subi a6,a6,4 addi sp,sp,32 blr collect: bl _add_execute_time lea o1,_flags lwz o0,0(o1) andi. r0,o0,4 beq no_print_stack_sizes .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif lea o0,garbage_collect_string_1 .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif nop lea o0,stack_p lwz a0,0(o0) sub o0,a4,a0 .if MACOSX lea o1,_halt_sp lwz d0,0(o1) .else lea o1,_stack_size lwz o2,0(o1) add d0,a0,o2 .endif sub d0,d0,sp .if STDERR_TO_FILE bl _er_print_int .else bl _ew_print_int .endif nop lea o0,garbage_collect_string_2 .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif nop mr o0,d0 .if STDERR_TO_FILE bl _er_print_int .else bl _ew_print_int .endif nop lea o0,garbage_collect_string_3 .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif nop .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif no_print_stack_sizes: cmplw 0,a4,sp bgt stack_overflow .if MARK_AND_COPY_GC lea o0,_flags lwz o0,0(o0) andi. r0,o0,64 bne compacting_collector .else .if MARK_GC b compacting_collector .endif .endif .if MARK_AND_COPY_GC | !MARK_GC lea o0,garbage_collect_flag lbz o1,0(o0) extsb. o1,o1 bne compacting_collector .if COPIED_VECTOR lea o1,heap_end_after_copy_gc li g0,0 lwz a1,0(o1) lea a2,heap_copied_vector tst a1 lea o0,heap_copied_vector_size lwz a2,0(a2) lwz d1,0(o0) beq zero_all lea o0,heap_p1 stw g0,0(o1) lwz a0,0(o0) sub d0,a6,a0 addi d0,d0,63*4 srwi d0,d0,8 bl zero_bit_vector sub d2,a1,a0 lea a2,heap_copied_vector clrrwi d2,d2,8 lwz a2,0(a2) srwi d2,d2,6 add a2,a2,d2 sub d0,d1,d2 srwi d0,d0,2 bl zero_bit_vector b end_zero_bit_vector zero_all: srwi d0,d1,2 bl zero_bit_vector end_zero_bit_vector: .endif # comment calculate alloc_size lea o0,heap_end_after_gc lwz d0,0(o0) lea o1,alloc_size sub d0,d0,a6 srwi d0,d0,2 sub d0,d0,d7 stw d0,0(o1) #include "pcopy.a" .if WRITE_HEAP lea o0,heap2_begin_and_end stw o4,0(o0) .endif lea o0,heap_end_after_gc stw o4,0(o0) sub d7,o4,a6 srwi d7,d7,2 bl .add_garbage_collect_time lea o0,alloc_size lwz o1,0(o0) sub. d7,d7,o1 blt switch_to_mark_scan # comment bneg out_of_memory_4 slwi d0,d7,2 add d0,d0,d7 slwi d0,d0,5 lea o0,_heap_size lwz d2,0(o0) slwi d1,d2,2 add d1,d1,d2 slwi d1,d1,1 add d1,d1,d2 cmplw 0,d0,d1 bge no_mark_scan # comment b no_mark_scan switch_to_mark_scan: lea o0,heap_size_33 lwz d0,0(o0) slwi d0,d0,5 lea o0,heap_p lwz d1,0(o0) lea o0,heap_p1 lwz d2,0(o0) lea o0,heap_p2 lwz o1,0(o0) cmplw 0,d2,o1 blt vector_at_begin vector_at_end: lea o0,heap_p3 stw d1,0(o0) add d1,d1,d0 lea o0,heap_vector stw d1,0(o0) lea o0,heap_p1 lwz d0,0(o0) lea o0,extra_heap stw d0,0(o0) sub d1,d1,d0 srwi d1,d1,2 lea o0,extra_heap_size stw d1,0(o0) b switch_to_mark_scan_2 vector_at_begin: lea o0,heap_vector stw d1,0(o0) lea o1,_heap_size lwz o0,0(o1) add d1,d1,o0 sub d1,d1,d0 lea o0,heap_p3 stw d1,0(o0) lea o0,extra_heap stw d1,0(o0) lea o0,heap_p2 lwz d2,0(o0) sub d2,d2,d1 srwi d2,d2,2 lea o0,extra_heap_size stw d2,0(o0) switch_to_mark_scan_2: lea o0,_heap_size lwz d0,0(o0) srwi d0,d0,3 sub d0,d0,d7 slwi d0,d0,2 lea o0,garbage_collect_flag li o1,1 stb o1,0(o0) cmpwi 0,d7,0 bge end_garbage_collect li o1,-1 stb o1,0(o0) lea o0,extra_heap_size lea o1,alloc_size lwz d1,0(o0) lwz d7,0(o1) sub. d7,d1,d7 blt out_of_memory_4 lea o0,extra_heap lea o1,heap_end_after_gc .if WRITE_HEAP mr d2,a6 .endif lwz a6,0(o0) slwi d1,d1,2 add d1,d1,a6 stw d1,0(o1) .if WRITE_HEAP li d3,1 b end_garbage_collect_ .else b end_garbage_collect .endif no_mark_scan: # comment exchange the semi_spaces lea o0,heap_p1 lea o1,heap_p2 lwz d0,0(o0) lwz d1,0(o1) stw d0,0(o1) stw d1,0(o0) .if COPIED_VECTOR lea o0,heap_size_129 lwz d1,0(o0) slwi d1,d1,6-2 .else lea o0,_heap_size lwz d1,0(o0) srwi d1,d1,3 .endif sub d0,d1,d7 .if ADJUST_HEAP_SIZE lea o0,_heap_size_multiple lwz o0,0(o0) mullw d2,d0,o0 mulhwu o0,d0,o0 rlwinm d2,d2,32-9,9,31-2 # comment srwi d2,d2,9 rlwimi d2,o0,32-9,0,8 srwi. o0,o0,9 bne no_small_heap1 cmplwi d2,MINIMUM_HEAP_SIZE/2 bge not_too_small1 li d2,MINIMUM_HEAP_SIZE/2 not_too_small1: sub. d2,d1,d2 blt no_small_heap1 sub d7,d7,d2 lea o0,heap_end_after_gc slwi d2,d2,2 lwz d1,0(o0) sub d2,d1,d2 lea o1,heap_end_after_copy_gc stw d2,0(o0) stw d1,0(o1) no_small_heap1: .endif slwi d0,d0,2 .endif end_garbage_collect: .if WRITE_HEAP mr d2,a6 li d3,0 end_garbage_collect_: .endif lea o0,_flags lwz o1,0(o0) andi. r0,o1,2 beq+ no_heap_use_message .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif lea o0,heap_use_after_gc_string_1 .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif mr o0,d0 .if STDERR_TO_FILE bl _er_print_int .else bl _ew_print_int .endif lea o0,heap_use_after_gc_string_2 .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif no_heap_use_message: .if FINALIZERS bl call_finalizers .endif .if WRITE_HEAP .globl first_function .globl _write_heap .globl min_write_heap_size lea o0,_flags lea o1,min_write_heap_size lwz o0,0(o0) lwz o1,0(o1) andi. r0,o0,32 beq no_write_heap cmplw 0,d0,o1 blt no_write_heap subi sp,sp,64 lea r3,garbage_collect_flag cmpwi d3,0 lea r7,heap2_begin_and_end lbz r3,0(r3) lwz r5,0(r7) bne copy_to_compact_with_alloc_in_extra_heap extsb. r3,r3 lwz r6,4(r7) lea r4,heap_p1 beq gc0 lea r4,heap_p2 bgt gc1 lea r4,heap_p3 li r5,0 li r6,0 gc0: gc1: lwz r4,0(r4) mr r10,sp stw r4,0(r10) stw d2,4(r10) stw r5,8(r10) stw r6,12(r10) lea r6,stack_p lea r8,first_function lwz r6,0(r6) li r9,0 lwz r8,0(r8) stw r6,16(r10) stw a4,20(r10) stw r8,24(r10) stw r9,28(r10) lea r4,small_integers lea r5,static_characters stw r4,32(r10) stw r5,36(r10) stw r16,40(r10) stw r15,44(r10) stw r14,48(r10) stw r13,52(r10) lea d0,__STRING__+2 lea d1,__ARRAY__+2 stw d0,56(r10) stw d1,60(r10) .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif mr r3,r10 bl _write_heap nop .if MACOSX lwz sp,0(sp) addi sp,sp,64 .else addi sp,sp,128 .endif no_write_heap: .endif lwz d0,0(sp) lwz d1,4(sp) lwz d2,8(sp) lwz d3,12(sp) lwz d4,16(sp) lwz d5,20(sp) lwz d6,24(sp) lwz r0,28(sp) mtlr r0 .if USE_DCBZ subi d7,d7,15 li g2,32 .endif subi a6,a6,4 addi sp,sp,32 blr .if FINALIZERS call_finalizers: lea d0,free_finalizer_list lwz d0,0(d0) call_finalizers_lp: lea o0,__Nil-8 cmplw d0,o0 beq end_call_finalizers lwz d1,8(d0) lwz d0,4(d0) mflr d2 lwz r12,0(d1) lwz r3,4(d1) mtctr r12 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bctrl .if MACOSX lwz sp,0(sp) .else addi sp,sp,64 .endif mtlr d2 b call_finalizers_lp end_call_finalizers: lea d0,free_finalizer_list stw o0,0(d0) blr .endif .if WRITE_HEAP copy_to_compact_with_alloc_in_extra_heap: lwz r6,4(r7) lea r4,heap_p2 b gc1 .endif out_of_memory_4: bl .add_garbage_collect_time lea o0,out_of_memory_string_4 b print_error .text # comment d0 = n words # comment a2 = address # comment g0 = 0 zero_bit_vector: andi. r0,d0,1 srwi d0,d0,1 beq zero_bits1_1 stw g0,0(a2) addi a2,a2,4 zero_bits1_1: andi. r0,d0,1 srwi d0,d0,1 beq zero_bits1_5 subi a2,a2,8 b zero_bits1_2 zero_bits1_4: stw g0,0(a2) stw g0,4(a2) zero_bits1_2: stw g0,8(a2) stw g0,12(a2) addi a2,a2,16 zero_bits1_5: subic. d0,d0,1 bge zero_bits1_4 blr .text reorder: mr d2,d0 mr d3,d1 slwi d4,d0,2 slwi d5,d1,2 add a0,a0,d5 sub a1,a1,d4 b st_reorder_lp reorder_lp: lwzu o0,-4(a1) subic. d2,d2,1 lwz o1,0(a0) stw o0,0(a0) addi a0,a0,4 bne+ next_b_in_element mr d2,d0 add a0,a0,d5 next_b_in_element: subic. d3,d3,1 stw o1,0(a1) bne+ next_a_in_element mr d3,d1 sub a1,a1,d4 next_a_in_element: st_reorder_lp: cmplw 1,a1,a0 bgt cr1,reorder_lp blr # comment # comment the sliding compacting garbage collector # comment .text compacting_collector: # comment zero all mark bits lea o0,heap_p3 lea o1,heap_vector lwz d6,0(o0) lea o0,heap_end_after_gc lwz o4,0(o1) lwz d5,0(o0) sub d5,d5,a6 srwi d5,d5,2 lea o0,alloc_size sub d5,d5,d7 stw d5,0(o0) .if MARK_GC .if MARK_AND_COPY_GC lea o0,_flags lwz o0,0(o0) andi. r0,o0,64 beq no_mark4 .endif lea o0,zero_bits_before_mark li g0,0 lwz o1,0(o0) cmpwi 0,o1,0 beq no_zero_bits stw g0,0(o0) .if MARK_AND_COPY_GC no_mark4: .endif .endif lea o0,heap_size_33 mr a2,o4 lwz d0,0(o0) addi d0,d0,3 srwi d0,d0,2 li o0,0 andi. r0,d0,1 srwi d0,d0,1 beq zero_bits_1 stw o0,0(a2) addi a2,a2,4 zero_bits_1: andi. r0,d0,1 srwi d0,d0,1 beq zero_bits_5 subi a2,a2,8 b zero_bits_2 zero_bits_4: stw o0,0(a2) stw o0,4(a2) zero_bits_2: stw o0,8(a2) stw o0,12(a2) addi a2,a2,16 zero_bits_5: subic. d0,d0,1 bge zero_bits_4 .if MARK_GC .if MARK_AND_COPY_GC lea o0,_flags lwz o0,0(o0) andi. r0,o0,64 beq no_mark5 .endif no_zero_bits: lea o0,last_heap_free lea o1,free_after_mark lwz d0,0(o0) lwz d1,0(o1) slwi d1,d1,2 slwi d2,d1,3 add d2,d2,d1 srwi d2,d2,2 cmplw d0,d2 bgt compact_gc .if ADJUST_HEAP_SIZE lea o0,bit_vector_size lwz d1,0(o0) lea o0,_heap_size_multiple slwi d1,d1,2 lwz o0,0(o0) sub o2,d1,d0 mullw o1,o2,o0 mulhwu o2,o2,o0 rlwinm o1,o1,32-7,7,31-2 # comment srwi o1,o1,7 rlwimi o1,o2,32-7,0,6 srwi. o2,o2,7 bne no_smaller_heap cmplw o1,d1 bge no_smaller_heap cmplwi d1,MINIMUM_HEAP_SIZE ble no_smaller_heap b compact_gc no_smaller_heap: .endif #include "pmark.a" compact_gc: lea o0,zero_bits_before_mark li d0,1 stw d0,0(o0) lea o0,last_heap_free li g0,0 stw g0,0(o0) lea o0,free_after_mark li o1,1000 stw o1,0(o0) .endif .if MARK_AND_COPY_GC no_mark5: .endif #include "pcompact.a" lea o0,heap_size_33 lwz d7,0(o0) lea o0,heap_end_after_gc slwi d7,d7,5 add d7,d7,d6 stw d7,0(o0) lea o0,alloc_size sub d7,d7,a6 lwz d1,0(o0) srwi d7,d7,2 sub. d7,d7,d1 blt out_of_memory_4 slwi d0,d7,2 lea o0,_heap_size add d0,d0,d7 lwz o1,0(o0) slwi d0,d0,3 cmplw 0,d0,o1 blt out_of_memory_4 .if MARK_GC | COMPACT_GC_ONLY .if MARK_GC & ADJUST_HEAP_SIZE .if MARK_AND_COPY_GC lea o0,_flags lwz o0,0(o0) andi. r0,o0,64 beq no_mark6 .endif sub d0,a6,d6 lea o0,_heap_size_multiple slwi d1,d1,2 lwz o0,0(o0) add o2,d0,d1 lea d1,heap_size_33 lwz d1,0(d1) slwi d1,d1,5 mullw d0,o2,o0 mulhwu o0,o2,o0 rlwinm d0,d0,32-8,8,31-2 # comment srwi d0,d0,8 rlwimi d0,o0,32-8,0,7 # comment clrrwi d0,d0,2 srwi. o0,o0,8 bne no_small_heap2 cmplwi d0,MINIMUM_HEAP_SIZE bge not_too_small2 li d0,MINIMUM_HEAP_SIZE not_too_small2: sub. d2,d1,d0 blt no_small_heap2 lea o1,heap_end_after_gc srwi o0,d2,2 lwz d1,0(o1) sub d7,d7,o0 sub d1,d1,d2 stw d1,0(o1) mr d1,d0 no_small_heap2: lea o0,bit_vector_size srwi d1,d1,2 stw d1,0(o0) .if MARK_AND_COPY_GC no_mark6: .endif .endif b no_copy_garbage_collection .else lea o0,_heap_size slwi d0,d0,2 lwz d1,0(o0) lwz o1,0(o0) slwi d1,d1,5 sub d1,d1,o1 cmpw 0,d0,d1 ble no_copy_garbage_collection # comment b no_copy_garbage_collection lea o0,heap_p lwz d0,0(o0) lea o0,heap_p1 stw d0,0(o0) .if COPIED_VECTOR lea o0,heap_size_129 lwz d1,0(o0) slwi d1,d1,6 add d0,d0,d1 lea o0,heap_copied_vector lea o1,heap_end_after_gc stw d0,0(o0) lea o0,heap_copied_vector_size stw d0,0(o1) lwz d1,0(o0) lea o0,heap_p2 add d1,d1,d0 stw d1,0(o0) .else lea o0,_heap_size lwz d1,0(o0) srwi d1,d1,1 add d0,d0,d1 lea o0,heap_p2 stw d0,0(o0) lea o0,heap_end_after_gc stw d0,0(o0) .endif sub d0,d0,a6 srwi d0,d0,2 mr d7,d0 lea o0,alloc_size lwz o1,0(o0) sub d7,d7,o1 lea o0,heap_p3 lwz d0,0(o0) lea o0,heap_vector lwz o1,0(o0) cmpw 0,d0,o1 ble vector_at_end_2 lea o0,heap_vector lwz d1,0(o0) lea o0,extra_heap stw d1,0(o0) sub d0,d0,d1 srwi d0,d0,2 lea o0,extra_heap_size stw d0,0(o0) lea o0,garbage_collect_flag li o1,2 stb o1,0(o0) b no_copy_garbage_collection vector_at_end_2: lea o0,garbage_collect_flag li o1,0 stb o1,0(o0) .endif no_copy_garbage_collection: bl .add_garbage_collect_time lea o0,alloc_size sub d0,a6,d6 lwz d1,0(o0) slwi d1,d1,2 add d0,d0,d1 b end_garbage_collect _stack_overflow: stack_overflow: lea o0,_halt_sp lwz sp,0(o0) bl _add_execute_time lea o0,stack_overflow_string b print_error _IO_error: .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(128+28)(sp) .else stwu sp,-128(sp) .endif stw o0,124(sp) lea o0,IO_error_string .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif lwz o0,124(sp) .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif lea o0,new_line_string .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif .if MACOSX lwz sp,0(sp) .else addi sp,sp,128 .endif b halt print_error: .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif .if STDERR_TO_FILE bl _er_print_string .else bl _ew_print_string .endif .if MACOSX lwz sp,0(sp) .else baddi sp,64 .endif halt: lea o0,_halt_sp lwz sp,0(o0) .if PROFILE mflr r0 stwu r0,-4(sp) bl write_profile_stack mtlr r0 .endif .if EXCEPTIONS lea o0,exception_info lwz o0,0(o0) cmpwi 0,o0,0 bne e__Exceptions__sraise__exception .endif .if 0 lea o0,_flags lwz d0,0(o0) andi. r0,d0,8 bne exit andi. r0,d0,16 beq exit .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl _wait_for_key_press .if MACOSX lwz sp,0(sp) .else baddi sp,64 .endif .else lea o0,_execution_aborted li d0,1 stw d0,0(o0) .endif b exit .if EXCEPTIONS e__Exceptions__scatch__exception: lea o0,exception_info mflr d0 stw a4,0(o0) stw sp,4(o0) stw d0,8(o0) li d0,0 lwz r0,0(sp) addi sp,sp,4 blr e__Exceptions__sraise__exception: lea o0,exception_info li d0,-1 lwz o1,8(o0) lwz sp,4(o0) mtlr o1 lwz a4,0(o0) li o1,0 stw o1,0(o0) lwz r0,0(sp) addi sp,sp,4 blr .endif .text # __TEXT.eval_01: eval_01: stw a1,0(a4) addi a4,a4,4 bctr .text # __TEXT.eval_11: eval_11: stw a0,0(a4) mr a0,a1 addi a4,a4,4 bctr .text # __TEXT.eval_02: eval_02: stw a2,0(a4) addi a4,a4,8 stw a1,4-8(a4) bctr .text # __TEXT.eval_12: eval_12: stw a0,4(a4) mr a0,a1 stw a2,0(a4) addi a4,a4,8 bctr .text # __TEXT.eval_22: eval_22: stw a0,4(a4) mr a0,a2 stw a1,0(a4) addi a4,a4,8 bctr # __TEXT.__eaind: __eaind: eval_fill: stw a0,0(a4) mr a0,a1 lwz a1,0-NODE_POINTER_OFFSET(a1) addi a4,a4,4 mtctr a1 mflr r0 stwu r0,-4(sp) bctrl mtlr r0 mr a1,a0 lwzu a0,-4(a4) lwz g0,0-NODE_POINTER_OFFSET(a1) lwz g1,4-NODE_POINTER_OFFSET(a1) stw g0,0-NODE_POINTER_OFFSET(a0) lwz g0,8-NODE_POINTER_OFFSET(a1) stw g1,4-NODE_POINTER_OFFSET(a0) stw g0,8-NODE_POINTER_OFFSET(a0) lwz r0,0(sp) addi sp,sp,4 blr # __TEXT.__indirection: b eval_fill nop nop .if LINUX | MACOSX nop nop .endif .long 0 .long -2 __indirection: lwz a1,4(a0) lwz d0,0(a1) andi. r0,d0,2 .if MARK_GC beq eval_fill2 .else beq _cycle__in__spine .endif stw d0,0(a0) lwz g0,4(a1) lwz g1,8(a1) stw g0,4(a0) stw g1,8(a0) lwz r0,0(sp) addi sp,sp,4 blr _cycle__in__spine: b __cycle__in__spine .if MARK_GC .text eval_fill2: .if MARK_AND_COPY_GC lea o0,_flags stw a5,0-NODE_POINTER_OFFSET(a0) lwz o0,0(o0) stw a0,0(a4) andi. r0,o0,64 beq _cycle__in__spine .else stw a5,0-NODE_POINTER_OFFSET(a0) stw a0,0(a4) .endif addi a4,a4,4 mr a0,a1 mtctr d0 mflr r0 stwu r0,-4(sp) bctrl mtlr r0 lwzu a1,-4(a4) lwz o0,0-NODE_POINTER_OFFSET(a0) lwz o1,4-NODE_POINTER_OFFSET(a0) stw o0,0-NODE_POINTER_OFFSET(a1) lwz o0,8-NODE_POINTER_OFFSET(a0) stw o1,4-NODE_POINTER_OFFSET(a1) stw o0,8-NODE_POINTER_OFFSET(a1) mr a0,a1 lwz r0,0(sp) addi sp,sp,4 blr .endif .text # __TEXT.eval_upd_0: .if PROFILE mflr r0 bl profile_n .endif eval_upd_0: lea a3,__indirection mtctr a2 stw a0,4-NODE_POINTER_OFFSET(a1) stw a3,0-NODE_POINTER_OFFSET(a1) bctr .text # __TEXT.eval_upd_1: .if PROFILE mflr r0 bl profile_n .endif eval_upd_1: lea a3,__indirection mtctr a2 lwz d0,4-NODE_POINTER_OFFSET(a1) stw a3,0-NODE_POINTER_OFFSET(a1) stw a0,4-NODE_POINTER_OFFSET(a1) mr a1,d0 bctr .text # __TEXT.eval_upd_2: .if PROFILE mflr r0 bl profile_n .endif eval_upd_2: mtctr a2 lea a2,__indirection stw a2,0-NODE_POINTER_OFFSET(a1) lwz a2,4-NODE_POINTER_OFFSET(a1) stw a0,4-NODE_POINTER_OFFSET(a1) lwz a1,8-NODE_POINTER_OFFSET(a1) bctr .text # __TEXT.eval_upd_3: .if PROFILE mflr r0 bl profile_n .endif eval_upd_3: mtctr a2 lea a2,__indirection stw a0,0(a4) stw a2,0-NODE_POINTER_OFFSET(a1) lwz a2,4-NODE_POINTER_OFFSET(a1) stw a0,4-NODE_POINTER_OFFSET(a1) addi a4,a4,4 lwz a0,12-NODE_POINTER_OFFSET(a1) lwz a1,8-NODE_POINTER_OFFSET(a1) bctr .text # __TEXT.eval_upd_4: .if PROFILE mflr r0 bl profile_n .endif eval_upd_4: mtctr a2 lea a2,__indirection stw a0,0(a4) stw a2,0-NODE_POINTER_OFFSET(a1) lwz a2,4-NODE_POINTER_OFFSET(a1) stw a0,4-NODE_POINTER_OFFSET(a1) lwz g1,16-NODE_POINTER_OFFSET(a1) lwz a0,12-NODE_POINTER_OFFSET(a1) stw g1,4(a4) addi a4,a4,8 lwz a1,8-NODE_POINTER_OFFSET(a1) bctr .text # __TEXT.eval_upd_5: .if PROFILE mflr r0 bl profile_n .endif eval_upd_5: mtctr a2 lea a2,__indirection stw a0,0(a4) stw a2,0-NODE_POINTER_OFFSET(a1) lwz a2,4-NODE_POINTER_OFFSET(a1) stw a0,4-NODE_POINTER_OFFSET(a1) lwz g1,20-NODE_POINTER_OFFSET(a1) lwz a0,12-NODE_POINTER_OFFSET(a1) stw g1,4(a4) lwz g1,16-NODE_POINTER_OFFSET(a1) lwz a1,8-NODE_POINTER_OFFSET(a1) stw g1,8(a4) addi a4,a4,12 bctr .text # __TEXT.eval_upd_6: .if PROFILE mflr r0 bl profile_n .endif eval_upd_6: mtctr a2 lea a2,__indirection stw a0,0(a4) stw a2,0-NODE_POINTER_OFFSET(a1) lwz a2,4-NODE_POINTER_OFFSET(a1) stw a0,4-NODE_POINTER_OFFSET(a1) lwz g1,24-NODE_POINTER_OFFSET(a1) lwz a0,12-NODE_POINTER_OFFSET(a1) stw g1,4(a4) lwz g1,20-NODE_POINTER_OFFSET(a1) stw g1,8(a4) lwz g1,16-NODE_POINTER_OFFSET(a1) lwz a1,8-NODE_POINTER_OFFSET(a1) stw g1,12(a4) addi a4,a4,16 bctr .text # __TEXT.eval_upd_7: .if PROFILE mflr r0 bl profile_n .endif eval_upd_7: li d0,0 li d1,20 eval_upd_n: mtctr a2 lea a2,__indirection stw a0,0(a4) stw a2,0-NODE_POINTER_OFFSET(a1) lwz a2,4-NODE_POINTER_OFFSET(a1) stw a0,4-NODE_POINTER_OFFSET(a1) add a1,a1,d1 lwz g1,8-NODE_POINTER_OFFSET(a1) stw g1,4(a4) lwz g1,4-NODE_POINTER_OFFSET(a1) stw g1,8(a4) lwz g1,0-NODE_POINTER_OFFSET(a1) stw g1,12(a4) addi a4,a4,16 eval_upd_n_lp: lwz g1,-4-NODE_POINTER_OFFSET(a1) subi a1,a1,4 stw g1,0(a4) subic. d0,d0,1 addi a4,a4,4 bge eval_upd_n_lp lwz a0,-4-NODE_POINTER_OFFSET(a1) lwz a1,-8-NODE_POINTER_OFFSET(a1) bctr # __TEXT.eval_upd_8: .if PROFILE mflr r0 bl profile_n .endif eval_upd_8: li d0,1 li d1,24 b eval_upd_n # __TEXT.eval_upd_9: .if PROFILE mflr r0 bl profile_n .endif eval_upd_9: li d0,2 li d1,28 b eval_upd_n # __TEXT.eval_upd_10: .if PROFILE mflr r0 bl profile_n .endif eval_upd_10: li d0,3 li d1,32 b eval_upd_n # __TEXT.eval_upd_11: .if PROFILE mflr r0 bl profile_n .endif eval_upd_11: li d0,4 li d1,36 b eval_upd_n # __TEXT.eval_upd_12: .if PROFILE mflr r0 bl profile_n .endif eval_upd_12: li d0,5 li d1,40 b eval_upd_n # __TEXT.eval_upd_13: .if PROFILE mflr r0 bl profile_n .endif eval_upd_13: li d0,6 li d1,44 b eval_upd_n # __TEXT.eval_upd_14: .if PROFILE mflr r0 bl profile_n .endif eval_upd_14: li d0,7 li d1,48 b eval_upd_n # __TEXT.eval_upd_15: .if PROFILE mflr r0 bl profile_n .endif eval_upd_15: li d0,8 li d1,52 b eval_upd_n # __TEXT.eval_upd_16: .if PROFILE mflr r0 bl profile_n .endif eval_upd_16: li d0,9 li d1,56 b eval_upd_n # __TEXT.eval_upd_17: .if PROFILE mflr r0 bl profile_n .endif eval_upd_17: li d0,10 li d1,60 b eval_upd_n # __TEXT.eval_upd_18: .if PROFILE mflr r0 bl profile_n .endif eval_upd_18: li d0,11 li d1,64 b eval_upd_n # __TEXT.eval_upd_19: .if PROFILE mflr r0 bl profile_n .endif eval_upd_19: li d0,12 li d1,68 b eval_upd_n # __TEXT.eval_upd_20: .if PROFILE mflr r0 bl profile_n .endif eval_upd_20: li d0,13 li d1,72 b eval_upd_n # __TEXT.eval_upd_21: .if PROFILE mflr r0 bl profile_n .endif eval_upd_21: li d0,14 li d1,76 b eval_upd_n # __TEXT.eval_upd_22: .if PROFILE mflr r0 bl profile_n .endif eval_upd_22: li d0,15 li d1,80 b eval_upd_n # __TEXT.eval_upd_23: .if PROFILE mflr r0 bl profile_n .endif eval_upd_23: li d0,16 li d1,84 b eval_upd_n # __TEXT.eval_upd_24: .if PROFILE mflr r0 bl profile_n .endif eval_upd_24: li d0,17 li d1,88 b eval_upd_n # __TEXT.eval_upd_25: .if PROFILE mflr r0 bl profile_n .endif eval_upd_25: li d0,18 li d1,92 b eval_upd_n # __TEXT.eval_upd_26: .if PROFILE mflr r0 bl profile_n .endif eval_upd_26: li d0,19 li d1,96 b eval_upd_n # __TEXT.eval_upd_27: .if PROFILE mflr r0 bl profile_n .endif eval_upd_27: li d0,20 li d1,100 b eval_upd_n # __TEXT.eval_upd_28: .if PROFILE mflr r0 bl profile_n .endif eval_upd_28: li d0,21 li d1,104 b eval_upd_n # __TEXT.eval_upd_29: .if PROFILE mflr r0 bl profile_n .endif eval_upd_29: li d0,22 li d1,108 b eval_upd_n # __TEXT.eval_upd_30: .if PROFILE mflr r0 bl profile_n .endif eval_upd_30: li d0,23 li d1,112 b eval_upd_n # __TEXT.eval_upd_31: .if PROFILE mflr r0 bl profile_n .endif eval_upd_31: li d0,24 li d1,116 b eval_upd_n # __TEXT.eval_upd_32: .if PROFILE mflr r0 bl profile_n .endif eval_upd_32: li d0,25 li d1,120 b eval_upd_n # comment # comment STRINGS # comment .text # __TEXT.catAC: catAC: .if NODE_POINTER_OFFSET==0 lwzu d0,4(a0) lwzu d1,4(a1) .else lwz d0,4-NODE_POINTER_OFFSET(a0) baddi a0,4 lwz d1,4-NODE_POINTER_OFFSET(a1) baddi a1,4 .endif add d2,d0,d1 addi d5,d2,3+8 srwi d5,d5,2 sub. d7,d7,d5 # comment reserve one word extra, because # comment word after the string may change addi d6,d2,3 ble gc_3 gc_r_3: lea o1,__STRING__+2 addi d3,a6,4+NODE_POINTER_OFFSET stw o1,4(a6) stwu d2,8(a6) # comment copy string 1 addi d2,d1,3 srwi d2,d2,2 mr a2,a6 subic. d2,d2,1 blt cat_string_4 cat_string_3: .if NODE_POINTER_OFFSET==0 lwzu o0,4(a1) .else lwz o0,4-NODE_POINTER_OFFSET(a1) baddi a1,4 .endif subic. d2,d2,1 stwu o0,4(a2) bge cat_string_3 cat_string_4: # comment copy string 2 addi d0,d0,3 srwi d0,d0,2 subic. d0,d0,1 add a2,a6,d1 blt cat_string_1 cat_string_0: .if NODE_POINTER_OFFSET==0 lwzu o0,4(a0) .else lwz o0,4-NODE_POINTER_OFFSET(a0) baddi a0,4 .endif subic. d0,d0,1 stwu o0,4(a2) bge cat_string_0 cat_string_1: clrrwi d6,d6,2 mr a0,d3 add a6,a6,d6 lwz r0,0(sp) addi sp,sp,4 blr gc_3: subi d7,d7,1 subi a0,a0,4 subi a1,a1,4 mflr r0 bl collect_2 addi a0,a0,4 addi a1,a1,4 addi d7,d7,1 b gc_r_3 .text empty_string: lea a0,zero_length_string lwz r0,0(sp) addi sp,sp,4 blr # __TEXT.sliceAC: sliceAC: lwz d2,4-NODE_POINTER_OFFSET(a0) addi a2,a0,4-NODE_POINTER_OFFSET cmpwi 0,d1,0 bge slice_string_1 li d1,0 slice_string_1: cmpw 0,d1,d2 bge empty_string cmpw 0,d0,d1 addi d0,d0,1 blt empty_string cmpw 0,d0,d2 ble slice_string_2 mr d0,d2 slice_string_2: sub d0,d0,d1 subi d7,d7,2 addi d2,d0,3 srwi d2,d2,2 sub. d7,d7,d2 blt gc_4 r_gc_4: lea o1,__STRING__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o1,4(a6) stwu d0,8(a6) add a2,a2,d1 subic. d2,d2,1 blt slice_string__1 slice_string__0: lwzu o0,4(a2) subic. d2,d2,1 stwu o0,4(a6) bge slice_string__0 slice_string__1: lwz r0,0(sp) addi sp,sp,4 blr gc_4: mflr r0 bl collect_1 addi a2,a0,4-NODE_POINTER_OFFSET b r_gc_4 .text # __TEXT.updateAC: updateAC: lwz d2,4-NODE_POINTER_OFFSET(a0) addi a2,a0,4-NODE_POINTER_OFFSET cmplw 0,d1,d2 bge update_string_error addi d3,d2,3 subi d7,d7,2 srwi d3,d3,2 sub. d7,d7,d3 blt gc_5 r_gc_5: lea o1,__STRING__+2 subic. d3,d3,1 addi a0,a6,4+NODE_POINTER_OFFSET stw o1,4(a6) stwu d2,8(a6) blt update_string_5 update_string_4: lwzu o0,4(a2) subic. d3,d3,1 stwu o0,4(a6) bge update_string_4 update_string_5: addi d1,d1,8 lwz r0,0(sp) stbx d0,a0,d1 addi sp,sp,4 blr gc_5: mflr r0 bl collect_1 addi a2,a0,4-NODE_POINTER_OFFSET b r_gc_5 update_string_error: lea o0,high_index_string cmpwi 0,d1,0 bge print_error lea o0,low_index_string update_string_error_2: b print_error .text # __TEXT.eqAC: eqAC: lwzu d0,4-NODE_POINTER_OFFSET(a0) lwzu o0,4-NODE_POINTER_OFFSET(a1) cmpw 0,d0,o0 bne equal_string_ne andi. d1,d0,3 srwi d0,d0,2 subic. d0,d0,1 blt equal_string_b equal_string_1: lwzu o0,4(a1) lwzu o1,4(a0) cmpw o1,o0 bne equal_string_ne subic. d0,d0,1 bge equal_string_1 equal_string_b: subic. d1,d1,1 blt equal_string_eq equal_string_2: lbz o0,4(a1) addi a1,a1,1 lbz o1,4(a0) addi a0,a0,1 cmpw o1,o0 bne equal_string_ne subic. d1,d1,1 bge equal_string_2 equal_string_eq: li d0,-1 lwz r0,0(sp) addi sp,sp,4 blr equal_string_ne: li d0,0 lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT.cmpAC: cmpAC: lwzu d1,4-NODE_POINTER_OFFSET(a0) lwzu d2,4-NODE_POINTER_OFFSET(a1) cmplw 0,d2,d1 blt cmp_string_less li d0,0 beq cmp_string_chars li d0,1 b cmp_string_chars cmp_string_less: li d0,-1 mr d1,d2 cmp_string_chars: andi. d2,d1,3 srwi d1,d1,2 subic. d1,d1,1 blt cmp_string_b cmp_string_1: lwzu o0,4(a0) lwzu o1,4(a1) cmplw 0,o1,o0 bne cmp_string_ne subic. d1,d1,1 bge cmp_string_1 cmp_string_b: subic. d2,d2,1 blt cmp_string_eq cmp_string_2: lbz o0,4(a0) lbz o1,4(a1) addi a0,a0,1 cmplw 0,o1,o0 addi a1,a1,1 bne cmp_string_ne subic. d2,d2,1 bge cmp_string_2 cmp_string_eq: lwz r0,0(sp) addi sp,sp,4 blr cmp_string_ne: bgt cmp_string_r1 li d0,-1 lwz r0,0(sp) addi sp,sp,4 blr cmp_string_r1: li d0,1 lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT.string_to_string_node: string_to_string_node: lwz d0,0(a0) addi a0,a0,4 addi d1,d0,3 srwi d1,d1,2 subi d7,d7,2 sub. d7,d7,d1 blt string_to_string_node_gc string_to_string_node_r: lea o0,__STRING__+2 stw o0,4(a6) addi d2,a6,4+NODE_POINTER_OFFSET stwu d0,8(a6) b string_to_string_node_4 string_to_string_node_2: lwz o0,0(a0) addi a0,a0,4 stwu o0,4(a6) string_to_string_node_4: subic. d1,d1,1 bge string_to_string_node_2 mr a0,d2 lwz r0,0(sp) addi sp,sp,4 blr string_to_string_node_gc: mflr r0 stwu a0,-4(sp) bl collect_0 lwz a0,0(sp) addi sp,sp,4 b string_to_string_node_r .text .long 3 # __TEXT._c3: _c3: b __cycle__in__spine .long 4 # __TEXT._c4: _c4: b __cycle__in__spine .long 5 # __TEXT._c5: _c5: b __cycle__in__spine .long 6 # __TEXT._c6: _c6: b __cycle__in__spine .long 7 # __TEXT._c7: _c7: b __cycle__in__spine .long 8 # __TEXT._c8: _c8: b __cycle__in__spine .long 9 # __TEXT._c9: _c9: b __cycle__in__spine .long 10 # __TEXT._c10: _c10: b __cycle__in__spine .long 11 # __TEXT._c11: _c11: b __cycle__in__spine .long 12 # __TEXT._c12: _c12: b __cycle__in__spine .long 13 # __TEXT._c13: _c13: b __cycle__in__spine .long 14 # __TEXT._c14: _c14: b __cycle__in__spine .long 15 # __TEXT._c15: _c15: b __cycle__in__spine .long 16 # __TEXT._c16: _c16: b __cycle__in__spine .long 17 # __TEXT._c17: _c17: b __cycle__in__spine .long 18 # __TEXT._c18: _c18: b __cycle__in__spine .long 19 # __TEXT._c19: _c19: b __cycle__in__spine .long 20 # __TEXT._c20: _c20: b __cycle__in__spine .long 21 # __TEXT._c21: _c21: b __cycle__in__spine .long 22 # __TEXT._c22: _c22: b __cycle__in__spine .long 23 # __TEXT._c23: _c23: b __cycle__in__spine .long 24 # __TEXT._c24: _c24: b __cycle__in__spine .long 25 # __TEXT._c25: _c25: b __cycle__in__spine .long 26 # __TEXT._c26: _c26: b __cycle__in__spine .long 27 # __TEXT._c27: _c27: b __cycle__in__spine .long 28 # __TEXT._c28: _c28: b __cycle__in__spine .long 29 # __TEXT._c29: _c29: b __cycle__in__spine .long 30 # __TEXT._c30: _c30: b __cycle__in__spine .long 31 # __TEXT._c31: _c31: b __cycle__in__spine .long 32 # __TEXT._c32: _c32: b __cycle__in__spine # comment # comment ARRAYS # comment .text # __TEXT.create_arrayB: create_arrayB: mr d2,d1 addi d1,d1,3 srwi d1,d1,2 subi d7,d7,3 sub. d7,d7,d1 bge+ no_collect_4575 mflr r0 bl collect_0 no_collect_4575: slwi d3,d0,8 or d0,d0,d3 slwi d3,d0,16 or d0,d0,d3 lea o0,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d2,8(a6) stwu bool_reg,12(a6) b create_arrayBCI .text # __TEXT.create_arrayC: create_arrayC: mr d2,d1 addi d1,d1,3 srwi d1,d1,2 subi d7,d7,2 sub. d7,d7,d1 bge+ no_collect_4578 mflr r0 bl collect_0 no_collect_4578: slwi d3,d0,8 or d0,d0,d3 slwi d3,d0,16 or d0,d0,d3 lea o0,__STRING__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stwu d2,8(a6) b create_arrayBCI .text # __TEXT.create_arrayI: create_arrayI: subi d7,d7,3 sub. d7,d7,d1 bge+ no_collect_4577 mflr r0 bl collect_0 no_collect_4577: lea o0,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d1,8(a6) stwu int_reg,12(a6) create_arrayBCI: andi. o0,d1,1 beq st_filli_array stwu d0,4(a6) st_filli_array: srwi. d1,d1,1 beq skip_filli_array mtctr d1 filli_array: stw d0,4(a6) stwu d0,8(a6) bdnz filli_array skip_filli_array: lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT.create_arrayR: create_arrayR: stfd f14,-8(sp) sub d7,d7,d0 lwz d1,-8(sp) subi d7,d7,3+1 lwz d2,-4(sp) sub. d7,d7,d0 bge+ no_collect_4579 mflr r0 bl collect_0 no_collect_4579: addi a6,a6,4 rlwinm d3,a6,32-2,31,31 lea o0,__ARRAY__+2 rlwinm a6,a6,0,0,31-3 add d7,d7,d3 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) cmpwi 0,d0,0 stw d0,8(a6) stwu real_reg,12(a6) beq skip_fillr_array mtctr d0 fillr_array: stw d1,4(a6) stwu d2,8(a6) bdnz fillr_array skip_fillr_array: lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT.create_array: create_array: subi d7,d7,3 sub. d7,d7,d0 bge+ no_collect_4576 mflr r0 bl collect_1 no_collect_4576: mr d1,a0 lea o0,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d0,8(a6) li g0,0 stwu g0,12(a6) lwz r0,0(sp) addi sp,sp,4 b fillr1_array create_R_array: subic. d2,d2,2 blt create_R_array_1 beq create_R_array_2 subic. d2,d2,2 blt create_R_array_3 beq create_R_array_4 b create_R_array_5 create_R_array_1: subi d7,d7,3 sub. d7,d7,d0 bge+ no_collect_4581 mflr r0 bl collect_0 no_collect_4581: lea o0,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d0,8(a6) stwu d1,12(a6) cmpwi 0,d3,0 lwz r0,0(sp) addi sp,sp,4 beq r_array_1_b lwz d1,-4(a4) b fillr1_array r_array_1_b: lwz d1,0(sp) fillr1_array: andi. o0,d0,1 beq st_fillr1_array_1 stwu d1,4(a6) st_fillr1_array_1: srwi. d0,d0,1 beq skip_fillr1_array_lp mtctr d0 fillr1_array_lp: stw d1,4(a6) stwu d1,8(a6) bdnz fillr1_array_lp skip_fillr1_array_lp: blr create_R_array_2: subi d7,d7,3 sub d7,d7,d0 sub. d7,d7,d0 bge+ no_collect_4582 mflr r0 bl collect_0 no_collect_4582: lea o0,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d0,8(a6) stwu d1,12(a6) lwz r0,0(sp) addi sp,sp,4 subic. d3,d3,1 blt r_array_2_bb beq r_array_2_ab r_array_2_aa: lwz d1,-4(a4) lwz d2,-8(a4) b st_fillr2_array r_array_2_ab: lwz d1,-4(a4) lwz d2,0(sp) b st_fillr2_array r_array_2_bb: lwz d1,0(sp) lwz d2,4(sp) b st_fillr2_array st_fillr2_array: cmpwi 0,d0,0 beq skip_fillr2_array_1 mtctr d0 fillr2_array_1: stw d1,4(a6) stwu d2,8(a6) bdnz fillr2_array_1 skip_fillr2_array_1: blr create_R_array_3: subi d7,d7,3 sub d7,d7,d0 sub d7,d7,d0 sub. d7,d7,d0 bge+ no_collect_4583 mflr r0 bl collect_0 no_collect_4583: lea o0,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d0,8(a6) stwu d1,12(a6) cmpwi 0,d3,0 lwz r0,0(sp) addi a2,sp,4 addi sp,sp,4 beq r_array_3 slwi d4,d3,2 sub a3,a4,d4 subi d3,d3,1 copy_a_to_b_lp3: subic. d3,d3,1 lwz o0,0(a3) addi a3,a3,4 stwu o0,-4(sp) bge copy_a_to_b_lp3 r_array_3: lwz d1,0(sp) cmpwi 0,d0,0 lwz d2,4(sp) lwz d3,8(sp) mr sp,a2 beq skip_fillr3_array mtctr d0 fillr3_array_1: stw d1,4(a6) stw d2,8(a6) stwu d3,12(a6) bdnz fillr3_array_1 skip_fillr3_array: blr create_R_array_4: subi d7,d7,3 slwi d2,d0,2 sub. d7,d7,d2 bge+ no_collect_4584 mflr r0 bl collect_0 no_collect_4584: lea o1,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o1,4(a6) stw d0,8(a6) stwu d1,12(a6) cmpwi 0,d3,0 lwz r0,0(sp) addi a2,sp,4 addi sp,sp,4 beq r_array_4 slwi d4,d3,2 sub a3,a4,d4 subi d3,d3,1 copy_a_to_b_lp4: subic. d3,d3,1 lwz o1,0(a3) addi a3,a3,4 stwu o1,-4(sp) bge copy_a_to_b_lp4 r_array_4: lwz d1,0(sp) lwz d2,4(sp) cmpwi 0,d0,0 lwz d3,8(sp) lwz d4,12(sp) mr sp,a2 beq skip_fillr4_array mtctr d0 fillr4_array: stw d1,4(a6) stw d2,8(a6) stw d3,12(a6) stwu d4,16(a6) bdnz fillr4_array skip_fillr4_array: blr create_R_array_5: subi d7,d7,3 slwi d4,d0,2 sub d7,d7,d4 mr d5,d2 sub_size_lp: subic. d5,d5,1 sub d7,d7,d0 bgt sub_size_lp tst d7 bge+ no_collect_4585 mflr r0 bl collect_0 no_collect_4585: lea o0,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d0,8(a6) stwu d1,12(a6) cmpwi 0,d3,0 lwz r0,0(sp) addi a2,sp,4 addi sp,sp,4 mr d5,d2 beq r_array_5 slwi d4,d3,2 sub a3,a4,d4 subi d3,d3,1 copy_a_to_b_lp5: subic. d3,d3,1 lwz o0,0(a3) addi a3,a3,4 stwu o0,-4(sp) bge copy_a_to_b_lp5 r_array_5: lwz d1,0(sp) lwz d2,4(sp) lwz d3,8(sp) lwz d4,12(sp) b st_fillr5_array fillr5_array_1: stw d1,4(a6) stw d2,8(a6) mtctr d5 stw d3,12(a6) addi a3,sp,16 stwu d4,16(a6) copy_elem_lp5: lwz o0,0(a3) addi a3,a3,4 stwu o0,4(a6) bdnz copy_elem_lp5 st_fillr5_array: subic. d0,d0,1 bge fillr5_array_1 mr sp,a2 blr .text # __TEXT.e__system__sAP: e__system__sAP: lwz a2,0(a1) lwz a2,4-2(a2) mtctr a2 bctr # comment _ARRAYS .text # __TEXT._create_arrayB: _create_arrayB: mr d1,d0 addi d0,d0,3 srwi d0,d0,2 subi d7,d7,3 sub. d7,d7,d0 bge+ no_collect_3575 mflr r0 bl collect_0 no_collect_3575: lea o0,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d1,8(a6) stwu bool_reg,12(a6) slwi d0,d0,2 add a6,a6,d0 lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT._create_arrayC: _create_arrayC: mr d1,d0 addi d0,d0,3 srwi d0,d0,2 subi d7,d7,2 sub. d7,d7,d0 bge+ no_collect_3578 mflr r0 bl collect_0 no_collect_3578: lea o0,__STRING__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stwu d1,8(a6) slwi d0,d0,2 add a6,a6,d0 lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT._create_arrayI: _create_arrayI: subi d7,d7,3 sub. d7,d7,d0 bge+ no_collect_3577 mflr r0 bl collect_0 no_collect_3577: lea o0,__ARRAY__+2 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d0,8(a6) stwu int_reg,12(a6) slwi d0,d0,2 add a6,a6,d0 lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT._create_arrayR: _create_arrayR: sub d7,d7,d0 subi d7,d7,3+1 sub. d7,d7,d0 bge+ no_collect_3579 mflr r0 bl collect_0 no_collect_3579: addi a6,a6,4 lea o0,__ARRAY__+2 rlwinm d3,a6,32-2,31,31 rlwinm a6,a6,0,0,31-3 add d7,d7,d3 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d0,8(a6) slwi d0,d0,3 stwu real_reg,12(a6) add a6,a6,d0 lwz r0,0(sp) addi sp,sp,4 blr # comment d0: number of elements, d1: element descriptor, d2: element size, # comment d3: element a size a0: a_element -> a0: array .text # __TEXT._create_r_array: _create_r_array: subi d7,d7,3 mr d5,d2 sub_size_lp2: subic. d5,d5,1 sub d7,d7,d0 bgt sub_size_lp2 tst d7 bge+ no_collect_3585 mflr r0 bl collect_1 no_collect_3585: lea o0,__ARRAY__+2 mr d4,a0 addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) stw d0,8(a6) stwu d1,12(a6) tst d3 lwz r0,0(sp) addi sp,sp,4 beq _create_r_array_0 subic. d3,d3,2 blt _create_r_array_1 beq _create_r_array_2 subic. d3,d3,2 blt _create_r_array_3 beq _create_r_array_4 b _create_r_array_5 _create_r_array_0: tst d2 mtctr d2 slwi d0,d0,2 beq _skip_fillr0_array_lp _fillr0_array_1: add a6,a6,d0 bdnz _fillr0_array_1 _skip_fillr0_array_lp: blr _create_r_array_1: tst d0 mtctr d0 slwi d2,d2,2 beq _skip_fillr1_array_lp _fillr1_array_lp: stw d4,4(a6) add a6,a6,d2 bdnz _fillr1_array_lp _skip_fillr1_array_lp: blr _create_r_array_2: tst d0 mtctr d0 slwi d2,d2,2 beq _skip_fillr2_array_1 _fillr2_array_1: stw d4,4(a6) stw d4,8(a6) add a6,a6,d2 bdnz _fillr2_array_1 _skip_fillr2_array_1: blr _create_r_array_3: tst d0 mtctr d0 slwi d2,d2,2 beq _skip_fillr3_array _fillr3_array_1: stw d4,4(a6) stw d4,8(a6) stw d4,12(a6) add a6,a6,d2 bdnz _fillr3_array_1 _skip_fillr3_array: blr _create_r_array_4: tst d0 mtctr d0 slwi d2,d2,2 beq _skip_fillr4_array _fillr4_array: stw d4,4(a6) stw d4,8(a6) stw d4,12(a6) stw d4,16(a6) add a6,a6,d2 bdnz _fillr4_array _skip_fillr4_array: blr _create_r_array_5: mr d1,d3 subi d2,d2,4 sub d2,d2,d3 slwi d2,d2,2 b _st_fillr5_array _fillr5_array_1: stw d4,4(a6) stw d4,8(a6) mtctr d1 stw d4,12(a6) stwu d4,16(a6) _copy_elem_lp5: stwu d4,4(a6) bdnz _copy_elem_lp5 add a6,a6,d2 _st_fillr5_array: subic. d0,d0,1 bge _fillr5_array_1 blr .text # __TEXT.yet_args_needed: yet_args_needed: # comment for more than 4 arguments lwz d1,0(a1) lhz d0,-2(d1) subi d7,d7,3 sub. d7,d7,d0 blt gc_1 gc_r_1: lwz d3,4(a1) subi d0,d0,1+4 lwz a1,8(a1) addi d2,a6,4 lwz o0,0(a1) lwz o1,4(a1) stw o0,4(a6) lwz o2,8(a1) stw o1,8(a6) addi a1,a1,12 stwu o2,12(a6) cp_a: lwz o0,0(a1) addi a1,a1,4 stwu o0,4(a6) subic. d0,d0,1 bge cp_a stw a0,4(a6) addi d1,d1,8 stw d1,8(a6) addi a0,a6,8 stw d3,12(a6) stwu d2,16(a6) lwz r0,0(sp) addi sp,sp,4 blr gc_1: mflr r0 bl collect_2 b gc_r_1 .text # __TEXT.yet_args_needed_0: yet_args_needed_0: subic. d7,d7,2 blt gc_20 gc_r_20: stwu a0,8(a6) lwz d0,0(a1) addi a0,a6,4-8 addi d0,d0,8 stw d0,4-8(a6) lwz r0,0(sp) addi sp,sp,4 blr gc_20: mflr r0 bl collect_2 b gc_r_20 .text # __TEXT.yet_args_needed_1: yet_args_needed_1: subic. d7,d7,3 blt gc_21 gc_r_21: stwu a0,12(a6) lwz d0,0(a1) addi a0,a6,4-12 addi d0,d0,8 stw d0,4-12(a6) lwz d1,4(a1) stw d1,8-12(a6) lwz r0,0(sp) addi sp,sp,4 blr gc_21: mflr r0 bl collect_2 b gc_r_21 .text # __TEXT.yet_args_needed_2: yet_args_needed_2: subic. d7,d7,5 blt gc_22 gc_r_22: lwz d0,0(a1) stw a0,8(a6) addi d0,d0,8 lwz d2,4(a1) stw d0,12(a6) addi a0,a6,12 lwz o0,8(a1) stw d2,16(a6) stwu o0,4(a6) stwu a6,16(a6) lwz r0,0(sp) addi sp,sp,4 blr gc_22: mflr r0 bl collect_2 b gc_r_22 .text # __TEXT.yet_args_needed_3: yet_args_needed_3: subic. d7,d7,6 blt gc_23 gc_r_23: lwz d0,0(a1) stw a0,12(a6) addi d0,d0,8 lwz d2,4(a1) stw d0,16(a6) lwz a1,8(a1) stw d2,20(a6) lwz o0,0(a1) lwz o1,4(a1) stwu o0,4(a6) stwu a6,20(a6) addi a0,a6,16-24 stw o1,8-24(a6) lwz r0,0(sp) addi sp,sp,4 blr gc_23: mflr r0 bl collect_2 b gc_r_23 .text # __TEXT.yet_args_needed_4: yet_args_needed_4: subic. d7,d7,7 blt gc_24 gc_r_24: lwz d0,0(a1) stw a0,16(a6) addi d0,d0,8 lwz d2,4(a1) stw d0,20(a6) lwz a1,8(a1) stw d2,24(a6) lwz o0,0(a1) lwz o1,4(a1) stwu o0,4(a6) stwu a6,24(a6) addi a0,a6,20-28 lwz o2,8(a1) stw o1,8-28(a6) stw o2,12-28(a6) lwz r0,0(sp) addi sp,sp,4 blr gc_24: mflr r0 bl collect_2 b gc_r_24 .text # __TEXT.repl_args_b: repl_args_b: cmpwi 0,d0,0 ble repl_args_b_1 subic. d0,d0,1 beq repl_args_b_4 lwz a1,8(a0) subic. d1,d1,2 bne repl_args_b_2 stw a1,0(a4) addi a4,a4,4 b repl_args_b_4 repl_args_b_2: slwi d1,d0,2 add a1,a1,d1 subi d0,d0,1 repl_args_b_3: lwzu o0,-4(a1) addi a4,a4,4 stw o0,0-4(a4) cmpwi 0,d0,0 subi d0,d0,1 bne repl_args_b_3 repl_args_b_4: lwz o0,4(a0) addi a4,a4,4 stw o0,0-4(a4) repl_args_b_1: lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT.push_arg_b: push_arg_b: cmplwi 0,d1,2 blt push_arg_b_1 bne push_arg_b_2 cmpw 0,d1,d0 beq push_arg_b_1 push_arg_b_2: lwz a0,8(a0) subi d1,d1,2 push_arg_b_1: slwi d1,d1,2 lwzx a0,a0,d1 lwz r0,0(sp) addi sp,sp,4 blr .text # __TEXT.del_args: del_args: lwz d1,0(a0) sub d1,d1,d0 lhz d0,-2(d1) subic. d0,d0,2 bge del_args_2 lwz o0,4(a0) stw d1,0(a1) lwz o1,8(a0) stw o0,4(a1) stw o1,8(a1) lwz r0,0(sp) addi sp,sp,4 blr del_args_2: bne del_args_3 lwz o0,4(a0) stw d1,0(a1) lwz o1,8(a0) stw o0,4(a1) lwz o1,0(o1) stw o1,8(a1) lwz r0,0(sp) addi sp,sp,4 blr del_args_3: sub. d7,d7,d0 blt del_args_gc del_args_r_gc: stw d1,0(a1) lwz o0,4(a0) stw a6,8(a1) lwz a0,8(a0) stw o0,4(a1) del_args_copy_args: lwz o0,0(a0) addi a0,a0,4 stw o0,0(a6) addi a6,a6,4 subic. d0,d0,1 bgt del_args_copy_args lwz r0,0(sp) addi sp,sp,4 blr del_args_gc: mflr r0 bl collect_2 b del_args_r_gc .if 0 .text o__S_P2: lwz d0,0(a0) lha d0,-2(d0) cmpwi 0,d0,2 lwz a0,8(a0) beq o__S_P2_2 lwz a0,0(a0) o__S_P2_2: lwz r0,0(sp) addi sp,sp,4 blr .text ea__S_P2: lea a2,__indirection lwz d0,4(a1) stw a2,0(a1) stw a0,4(a1) mr a1,d0 lwz d0,0(a1) andi. r0,d0,2 bne ea__S_P2_1 stw a0,0(a4) addi a4,a4,4 mtctr d0 mr a0,a1 mflr r0 stwu r0,-4(sp) bctrl mtlr r0 mr a1,a0 lwzu a0,-4(a4) ea__S_P2_1: lwz d0,0(a1) lha d0,-2(d0) lwz a1,8(a1) cmpwi 0,d0,2 beq ea__S_P2_2 lwz a1,0(a1) ea__S_P2_2: lwz d0,0(a1) andi. r0,d0,2 bne ea__S_P2_3 subi d0,d0,20 mtctr d0 bctr ea__S_P2_3: stw d0,0(a0) lwz g1,4(a1) stw g1,4(a0) lwz g1,8(a1) stw g1,8(a0) lwz r0,0(sp) addi sp,sp,4 blr .endif .text # __TEXT.acos_real: acos_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_acos$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.asin_real: asin_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_asin$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.atan_real: atan_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_atan$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.cos_real: cos_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_cos$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.sin_real: sin_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_sin$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.tan_real: tan_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_tan$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.ln_real: ln_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_log$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.log10_real: log10_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_log10$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.exp_real: exp_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_exp$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.sqrt_real: sqrt_real: mflr r0 stwu r0,-4(sp) fmr f1,f14 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_sqrt$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.pow_real: pow_real: mflr r0 stwu r0,-4(sp) fmr f2,f14 fmr f1,f15 .if MACOSX mr g0,sp ori sp,sp,28 stwu g0,-(64+28)(sp) .else stwu sp,-64(sp) .endif bl L_pow$stub .if USE_DCBZ li g2,32 .endif .if MACOSX lwz sp,0(sp) lwz r0,0(sp) .else lwz r0,64(sp) .endif fmr f14,f1 mtlr r0 .if MACOSX lwz r0,4(sp) addi sp,sp,8 .else lwz r0,68(sp) addi sp,sp,72 .endif blr .text # __TEXT.entier_real: entier_real: lea o0,entier_constants_and_buffers fctiwz f2,f14 lfd f1,0(o0) stfd f2,8(o0) fcmpo 0,f14,f1 lwz d0,12(o0) bge+ entier_real_2 lfd f31,24(o0) xoris o1,d0,0x8000 stw o1,20(o0) lfd f1,16(o0) fsub f1,f1,f31 fcmpo 0,f14,f1 beq entier_real_2 subi d0,d0,1 entier_real_2: lwz r0,0(sp) addi sp,sp,4 blr .picsymbol_stub L_sin$stub: .indirect_symbol _sin mflr r0 bcl 20,31,L0$pb L0$pb: mflr r11 addis r11,r11,ha16(L0$lz-L0$pb) mtlr r0 lwz r12,lo16(L0$lz-L0$pb)(r11) mtctr r12 addi r11,r11,lo16(L0$lz-L0$pb ) bctr .lazy_symbol_pointer L0$lz: .indirect_symbol _sin .long dyld_stub_binding_helper .picsymbol_stub L_cos$stub: .indirect_symbol _cos mflr r0 bcl 20,31,L1$pb L1$pb: mflr r11 addis r11,r11,ha16(L1$lz-L1$pb) mtlr r0 lwz r12,lo16(L1$lz-L1$pb)(r11) mtctr r12 addi r11,r11,lo16(L1$lz-L1$pb ) bctr .lazy_symbol_pointer L1$lz: .indirect_symbol _cos .long dyld_stub_binding_helper .picsymbol_stub L_tan$stub: .indirect_symbol _tan mflr r0 bcl 20,31,L2$pb L2$pb: mflr r11 addis r11,r11,ha16(L2$lz-L2$pb) mtlr r0 lwz r12,lo16(L2$lz-L2$pb)(r11) mtctr r12 addi r11,r11,lo16(L2$lz-L2$pb ) bctr .lazy_symbol_pointer L2$lz: .indirect_symbol _tan .long dyld_stub_binding_helper .picsymbol_stub L_asin$stub: .indirect_symbol _asin mflr r0 bcl 20,31,L3$pb L3$pb: mflr r11 addis r11,r11,ha16(L3$lz-L3$pb) mtlr r0 lwz r12,lo16(L3$lz-L3$pb)(r11) mtctr r12 addi r11,r11,lo16(L3$lz-L3$pb ) bctr .lazy_symbol_pointer L3$lz: .indirect_symbol _asin .long dyld_stub_binding_helper .picsymbol_stub L_acos$stub: .indirect_symbol _acos mflr r0 bcl 20,31,L4$pb L4$pb: mflr r11 addis r11,r11,ha16(L4$lz-L4$pb) mtlr r0 lwz r12,lo16(L4$lz-L4$pb)(r11) mtctr r12 addi r11,r11,lo16(L4$lz-L4$pb ) bctr .lazy_symbol_pointer L4$lz: .indirect_symbol _acos .long dyld_stub_binding_helper .picsymbol_stub L_atan$stub: .indirect_symbol _atan mflr r0 bcl 20,31,L5$pb L5$pb: mflr r11 addis r11,r11,ha16(L5$lz-L5$pb) mtlr r0 lwz r12,lo16(L5$lz-L5$pb)(r11) mtctr r12 addi r11,r11,lo16(L5$lz-L5$pb ) bctr .lazy_symbol_pointer L5$lz: .indirect_symbol _atan .long dyld_stub_binding_helper .picsymbol_stub L_sqrt$stub: .indirect_symbol _sqrt mflr r0 bcl 20,31,L6$pb L6$pb: mflr r11 addis r11,r11,ha16(L6$lz-L6$pb) mtlr r0 lwz r12,lo16(L6$lz-L6$pb)(r11) mtctr r12 addi r11,r11,lo16(L6$lz-L6$pb ) bctr .lazy_symbol_pointer L6$lz: .indirect_symbol _sqrt .long dyld_stub_binding_helper .picsymbol_stub L_pow$stub: .indirect_symbol _pow mflr r0 bcl 20,31,L7$pb L7$pb: mflr r11 addis r11,r11,ha16(L7$lz-L7$pb) mtlr r0 lwz r12,lo16(L7$lz-L7$pb)(r11) mtctr r12 addi r11,r11,lo16(L7$lz-L7$pb ) bctr .lazy_symbol_pointer L7$lz: .indirect_symbol _pow .long dyld_stub_binding_helper .picsymbol_stub L_exp$stub: .indirect_symbol _exp mflr r0 bcl 20,31,L8$pb L8$pb: mflr r11 addis r11,r11,ha16(L8$lz-L8$pb) mtlr r0 lwz r12,lo16(L8$lz-L8$pb)(r11) mtctr r12 addi r11,r11,lo16(L8$lz-L8$pb ) bctr .lazy_symbol_pointer L8$lz: .indirect_symbol _exp .long dyld_stub_binding_helper .picsymbol_stub L_log$stub: .indirect_symbol _log mflr r0 bcl 20,31,L9$pb L9$pb: mflr r11 addis r11,r11,ha16(L9$lz-L9$pb) mtlr r0 lwz r12,lo16(L9$lz-L9$pb)(r11) mtctr r12 addi r11,r11,lo16(L9$lz-L9$pb ) bctr .lazy_symbol_pointer L9$lz: .indirect_symbol _log .long dyld_stub_binding_helper .picsymbol_stub L_log10$stub: .indirect_symbol _log10 mflr r0 bcl 20,31,L10$pb L10$pb: mflr r11 addis r11,r11,ha16(L10$lz-L10$pb) mtlr r0 lwz r12,lo16(L10$lz-L10$pb)(r11) mtctr r12 addi r11,r11,lo16(L10$lz-L10$pb ) bctr .lazy_symbol_pointer L10$lz: .indirect_symbol _log10 .long dyld_stub_binding_helper .picsymbol_stub L_sprintf$stub: .indirect_symbol _sprintf mflr r0 bcl 20,31,L11$pb L11$pb: mflr r11 addis r11,r11,ha16(L11$lz-L11$pb) mtlr r0 lwz r12,lo16(L11$lz-L11$pb)(r11) mtctr r12 addi r11,r11,lo16(L11$lz-L11$pb ) bctr .lazy_symbol_pointer L11$lz: .indirect_symbol _sprintf .long dyld_stub_binding_helper .picsymbol_stub L_TickCount$stub: .indirect_symbol _TickCount mflr r0 bcl 20,31,L12$pb L12$pb: mflr r11 addis r11,r11,ha16(L12$lz-L12$pb) mtlr r0 lwz r12,lo16(L12$lz-L12$pb)(r11) mtctr r12 addi r11,r11,lo16(L12$lz-L12$pb ) bctr .lazy_symbol_pointer L12$lz: .indirect_symbol _TickCount .long dyld_stub_binding_helper .picsymbol_stub L_DisposePtr$stub: .indirect_symbol _DisposePtr mflr r0 bcl 20,31,L13$pb L13$pb: mflr r11 addis r11,r11,ha16(L13$lz-L13$pb) mtlr r0 lwz r12,lo16(L13$lz-L13$pb)(r11) mtctr r12 addi r11,r11,lo16(L13$lz-L13$pb ) bctr .lazy_symbol_pointer L13$lz: .indirect_symbol _DisposePtr .long dyld_stub_binding_helper .picsymbol_stub L_NewPtr$stub: .indirect_symbol _NewPtr mflr r0 bcl 20,31,L14$pb L14$pb: mflr r11 addis r11,r11,ha16(L14$lz-L14$pb) mtlr r0 lwz r12,lo16(L14$lz-L14$pb)(r11) mtctr r12 addi r11,r11,lo16(L14$lz-L14$pb ) bctr .lazy_symbol_pointer L14$lz: .indirect_symbol _NewPtr .long dyld_stub_binding_helper