summaryrefslogtreecommitdiff
path: root/pstartup.a
diff options
context:
space:
mode:
authorJohn van Groningen2003-05-06 14:27:29 +0000
committerJohn van Groningen2003-05-06 14:27:29 +0000
commitc45cc0d5012345ea137f1e2012f85dbd09e4f5a1 (patch)
treedef1da00b91a6b1079b774d3f36f32a4d5969a8b /pstartup.a
parentmacho files (diff)
macintosh files
Diffstat (limited to 'pstartup.a')
-rw-r--r--pstartup.a6085
1 files changed, 6085 insertions, 0 deletions
diff --git a/pstartup.a b/pstartup.a
new file mode 100644
index 0000000..49a1dd8
--- /dev/null
+++ b/pstartup.a
@@ -0,0 +1,6085 @@
+;
+; File: pstartup.a
+; Author: John van Groningen
+; Machine: power macintosh
+
+ string asis
+
+ macro
+ setmbit &vector,&bit_n,&byte_offset,&bit,&byte,&scratch,&shift
+ rlwinm &byte_offset,&bit_n,32-&shift-3,3+&shift,31
+ lbzx &byte,&vector,&byte_offset
+ rlwinm &scratch,&bit_n,(32-&shift) & 31,29,31
+ srw &bit,g3,&scratch
+ or &byte,&byte,&bit
+ stbx &byte,&vector,&byte_offset
+ endm
+
+ macro
+ tstmbit &vector,&bit_n,&byte_offset,&bit,&byte,&bit_n_in_byte,&shift
+ rlwinm &byte_offset,&bit_n,32-&shift-3,3+&shift,31
+ lbzx &byte,&vector,&byte_offset
+ rlwinm &bit_n_in_byte,&bit_n,32-&shift,29,31
+ rlwnm. &bit,&byte,&bit_n_in_byte,24,24
+ endm
+
+ macro
+ clrmbit &vector,&bit_n,&byte_offset,&bit,&byte,&scratch,&shift
+ rlwinm &byte_offset,&bit_n,32-&shift-3,3+&shift,31
+ lbzx &byte,&vector,&byte_offset
+ rlwinm &scratch,&bit_n,32-&shift,29,31
+ srw &bit,g3,&scratch
+ andc &byte,&byte,&bit
+ stbx &byte,&vector,&byte_offset
+ endm
+
+ include 'pmacros.a'
+
+d0: set r24
+d1: set r25
+d2: set r26
+d3: set r27
+d4: set r28
+d5: set r29
+d6: set r30
+d7: set r31
+
+a0: set r23
+a1: set r22
+a2: set r21
+a3: set r20
+a4: set r19
+a5: set r18
+a6: set r17
+
+o0: set r3
+o1: set r4
+o2: set r5
+o3: set r6
+o4: set r7
+o5: set r8
+
+g2: set r9
+g3: set r10
+
+g0: set r11
+g1: set r12
+
+int_reg set r16
+char_reg set r15
+real_reg set r14
+bool_reg set r13
+
+MACOSX set 1
+
+SHARE_CHAR_INT set 1
+MY_ITOS set 1
+FINALIZERS set 1
+MEASURE_GC set 0
+
+COPIED_VECTOR set 1
+USE_DCBZ set 0
+COMPACT_GC_ONLY set 0
+
+ADJUST_HEAP_SIZE set 1
+MARK_GC set 1
+MARK_AND_COPY_GC set 1
+
+ if LINUX
+STDERR_TO_FILE set 0
+WRITE_HEAP set 0
+ else
+WRITE_HEAP set 1
+STDERR_TO_FILE set 1
+ endif
+;PROFILE set 1
+UNBOXED_CLOSURES set 1
+
+MODULE_NAMES_IN_TIME_PROFILER set 1
+
+EXCEPTIONS set 0
+
+MINIMUM_HEAP_SIZE set 8000
+
+ if 1
+DESCRIPTOR_ARITY_OFFSET set (-2)
+ZERO_ARITY_DESCRIPTOR_OFFSET set (-8)
+ else
+DESCRIPTOR_ARITY_OFFSET set (-8)
+ZERO_ARITY_DESCRIPTOR_OFFSET set (-12)
+ endif
+
+ export 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
+; 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
+ if MEASURE_GC
+ comm compact_garbage_collect_time,4
+ comm mark_compact_garbage_collect_time,4
+ endif
+ export saved_heap_p
+ comm saved_heap_p,8
+
+ export saved_a_stack_p
+ comm saved_a_stack_p,4
+
+ comm sprintf_buffer,32
+ comm sprintf_time_buffer,20
+
+ export small_integers
+ comm small_integers,33*8
+ export static_characters
+ comm static_characters,256*8
+
+ if EXCEPTIONS
+ comm exception_info,12
+ endif
+
+ comm caf_list,4
+ export caf_listp
+ comm caf_listp,4
+
+ csect data{RW}
+
+heap_p3: dc.l 0
+heap_vector:dc.l 0
+heap_end_after_gc: dc.l 0
+
+ if MARK_GC
+bit_counter:
+ dc.l 0
+bit_vector_p:
+ dc.l 0
+zero_bits_before_mark:
+ dc.l 1
+free_after_mark:
+ dc.l 1000
+last_heap_free:
+ dc.l 0
+lazy_array_list:
+ dc.l 0
+ if ADJUST_HEAP_SIZE
+bit_vector_size:
+ dc.l 0 ; in bits
+ endif
+ endif
+
+ align 2
+zero_length_string:
+ dc.l __STRING__+2
+ dc.l 0
+true_string:
+ dc.l __STRING__+2
+ dc.l 4
+true_c_string:
+ dc.b 'True'
+ dc.b 0,0,0,0
+false_string:
+ dc.l __STRING__+2
+ dc.l 5
+false_c_string:
+ dc.b 'False'
+ dc.b 0,0,0
+file_c_string:
+ dc.b 'File'
+ dc.b 0,0,0,0
+
+; -1: compact or mark, no extra heap
+; 0: copy, no extra heap
+; 1: compact, extra heap
+; 2: copy, extra heap
+garbage_collect_flag:
+ dc.b 0
+ dc.b 0,0,0
+
+out_of_memory_string_1:
+ dc.b 'Not enough memory to allocate heap and stack'
+ dc.b 13,0
+printf_int_string:
+ dc.b '%d'
+ dc.b 0
+printf_real_string:
+ dc.b '%g'
+ dc.b 0
+printf_string_string:
+ dc.b '%s'
+ dc.b 0
+printf_char_string:
+ dc.b '%c'
+ dc.b 0
+garbage_collect_string_1:
+ dc.b 'A stack: '
+ dc.b 0
+garbage_collect_string_2:
+ dc.b ' bytes. BC stack: '
+ dc.b 0
+garbage_collect_string_3:
+ dc.b ' bytes.'
+ dc.b 13,0
+heap_use_after_gc_string_1:
+ dc.b 'Heap use after garbage collection: '
+ dc.b 0
+heap_use_after_gc_string_2:
+ dc.b ' Bytes.'
+ dc.b 13,0
+stack_overflow_string:
+ dc.b 'Stack overflow.'
+ dc.b 13,0
+out_of_memory_string_4:
+ dc.b 'Heap full.'
+ dc.b 13,0
+time_string_1:
+ dc.b 'Execution: '
+ dc.b 0
+time_string_2:
+ dc.b ' Garbage collection: '
+ dc.b 0
+ if MEASURE_GC
+time_string_2a:
+ dc.b ' '
+ dc.b 0
+ endif
+time_string_3:
+ dc.b ' IO: '
+ dc.b 0
+time_string_4:
+ dc.b ' Total: '
+ dc.b 0
+high_index_string:
+ dc.b 'Index too high in UPDATE string.'
+ dc.b 13,0
+low_index_string:
+ dc.b 'Index negative in UPDATE string.'
+ dc.b 13,0
+IO_error_string:
+ dc.b 'IO error: '
+ dc.b 0
+new_line_string:
+ dc.b 13,0
+
+sprintf_time_string:
+ dc.b '%d.%02d'
+ dc.b 0
+
+ if MARK_GC
+marked_gc_string_1:
+ dc.b 'Marked: '
+ dc.b 0
+ endif
+ if PROFILE
+ align 2
+ if MODULE_NAMES_IN_TIME_PROFILER
+m_system:
+ dc.l 6
+ dc.b 'System'
+ dc.b 0,0
+ dc.l m_system
+ endif
+garbage_collector_name:
+ dc.l 0
+ dc.b 'garbage_collector'
+ dc.b 0
+ align 2
+ endif
+ if WRITE_HEAP
+ comm heap2_begin_and_end,8
+ endif
+
+ align 3
+entier_constants_and_buffers:
+ dc.d "0.0"
+ dc.d "0.0"
+ dc.l 0x43300000
+ dc.l 0x00000000
+ dc.l 0x43300000
+ dc.l 0x80000000
+
+ if FINALIZERS
+ import __Nil
+ import e____system__kFinalizer
+ import e____system__kFinalizerGCTemp
+ export finalizer_list
+ comm finalizer_list,4
+ export free_finalizer_list
+ comm free_finalizer_list,4
+ endif
+
+ align 1
+
+ csect text{PR}
+ if LINUX
+ export abc_main
+ else
+ export .abc_main
+ endif
+ export print_
+ export print_char
+ export print_int
+ export print_real
+ export print_sc
+ export print_symbol
+ export print_symbol_sc
+ export print__string__
+ export print__chars__sc
+ export printD
+
+ export eprint__
+ export eprint__string__
+ export eprintD
+
+ export push_t_r_args
+ export push_a_r_args
+ export halt
+
+ export catAC
+ export sliceAC
+ export updateAC
+ export eqAC
+ export cmpAC
+
+ export string_to_string_node
+
+ export create_array
+ export create_arrayB
+ export create_arrayC
+ export create_arrayI
+ export create_arrayR
+ export create_R_array
+
+ export _create_arrayB
+ export _create_arrayC
+ export _create_arrayI
+ export _create_arrayR
+ export _create_r_array
+
+ export BtoAC
+ export DtoAC
+ export ItoAC
+ export RtoAC
+ export eqD
+
+ export collect_0,collect_1,collect_2,collect_3
+ export collect_00,collect_01,collect_02,collect_03
+
+ export eval_01,eval_11,eval_02,eval_12,eval_22
+
+ import e__system__AP
+
+ export e__system__sAP
+ export yet_args_needed,yet_args_needed_0,yet_args_needed_1
+ export yet_args_needed_2,yet_args_needed_3,yet_args_needed_4
+
+ export _c3,_c4,_c5,_c6,_c7,_c8,_c9,_c10,_c11,_c12
+ export _c13,_c14,_c15,_c16,_c17,_c18,_c19,_c20,_c21,_c22
+ export _c23,_c24,_c25,_c26,_c27,_c28,_c29,_c30,_c31,_c32
+
+ export __indirection,__eaind,eval_fill
+ export eval_upd_0,eval_upd_1,eval_upd_2,eval_upd_3,eval_upd_4
+ export eval_upd_5,eval_upd_6,eval_upd_7,eval_upd_8,eval_upd_9
+ export eval_upd_10,eval_upd_11,eval_upd_12,eval_upd_13,eval_upd_14
+ export eval_upd_15,eval_upd_16,eval_upd_17,eval_upd_18,eval_upd_19
+ export eval_upd_20,eval_upd_21,eval_upd_22,eval_upd_23,eval_upd_24
+ export eval_upd_25,eval_upd_26,eval_upd_27,eval_upd_28,eval_upd_29
+ export eval_upd_30,eval_upd_31,eval_upd_32
+
+ export repl_args_b
+ export push_arg_b
+ export del_args
+ if 0
+ export o__S_P2
+ export ea__S_P2
+ endif
+ export .add_IO_time
+ export .add_execute_time
+
+ export .IO_error
+ export print_error
+ export stack_overflow
+
+ export out_of_memory_4
+
+ export acos_real
+ export asin_real
+ export atan_real
+ export cos_real
+ export sin_real
+ export tan_real
+ export ln_real
+ export log10_real
+ export exp_real
+ export sqrt_real
+ export pow_real
+ export entier_real
+ if LINUX
+ else
+ export .my_pointer_glue{PR}
+ endif
+ if EXCEPTIONS
+ export e__Exceptions__scatch__exception
+ export e__Exceptions__sraise__exception
+ endif
+ if LINUX
+ import __start
+ else
+ import _start
+ endif
+ export __driver
+
+
+; from system.abc:
+ import INT
+ import CHAR
+ import BOOL
+ import REAL
+ import __STRING<='STRING'
+ import FILE
+ import __STRING__
+ import __ARRAY__
+ import __cycle__in__spine
+ import __print__graph
+ import __eval__to__nf
+
+ if STDERR_TO_FILE
+ import .close_stderr_file
+ endif
+
+; from cgcon.c:
+ import .w_print_char
+ import .w_print_text
+ import .w_print_int
+ import .w_print_real
+ import .w_print_string
+
+ if STDERR_TO_FILE
+ import .er_print_char
+ import .er_print_string
+ import .er_print_int
+ import .er_print_text
+ else
+ import .ew_print_char
+ import .ew_print_string
+ import .ew_print_int
+ endif
+ if 0
+
+ import .wait_for_key_press
+ else
+ import execution_aborted
+ endif
+ import stack_size
+ import heap_size
+ import flags
+ if ADJUST_HEAP_SIZE
+ import heap_size_multiple
+ import initial_heap_size
+ endif
+
+; from standard c library:
+ import .sprintf
+ if LINUX
+ import malloc
+ import free
+ else
+ import .NewPtr
+ import .DisposePtr
+ import .TickCount
+ if 0
+ import .Debugger
+ endif
+ endif
+ import .acos
+ import .asin
+ import .atan
+ import .cos
+ import .sin
+ import .tan
+ import .log
+ import .log10
+ import .exp
+ import .sqrt
+ import .pow
+
+ if PROFILE
+ import init_profiler
+ import profile_s,profile_n,profile_r,profile_ti
+ import write_profile_information,write_profile_stack
+ endif
+
+ if LINUX
+abc_main:
+ else
+.abc_main:
+ endif
+ 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 .NewPtr
+ 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)
+
+ mr g0,sp
+ ori sp,sp,28
+ stwu g0,-(64+28)(sp)
+
+ bl .NewPtr
+ nop
+
+ lwz sp,0(sp)
+
+ 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,INT2
+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,CHAR2
+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
+ if LINUX
+ lea a0,caf_list+4
+ else
+ lea a0,caf_list4
+ endif
+ 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_m8
+ 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,INT2
+ lea char_reg,CHAR2
+ lea real_reg,REAL2
+ lea bool_reg,BOOL2
+
+ 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
+
+ if MEASURE_GC
+ lea o0,time_string_2a
+ if STDERR_TO_FILE
+ bl .er_print_string
+ else
+ bl .ew_print_string
+ endif
+ lea a0,mark_compact_garbage_collect_time
+ lwz d0,0(a0)
+ bl _print_time
+
+ lea o0,time_string_2a
+ if STDERR_TO_FILE
+ bl .er_print_string
+ else
+ bl .ew_print_string
+ endif
+ lea a0,compact_garbage_collect_time
+ lwz d0,0(a0)
+ bl _print_time
+ endif
+
+ 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
+ if MEASURE_GC
+ lea a0,mark_compact_garbage_collect_time
+ lwz d2,0(a0)
+ add d0,d0,d2
+ lea a0,compact_garbage_collect_time
+ lwz d2,0(a0)
+ add d0,d0,d2
+ endif
+ 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 .DisposePtr
+ 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 .sprintf
+ nop
+
+ 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
+
+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
+#ifdef 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
+
+printD: andi. r0,d0,2
+ bne printD_
+
+ mr a2,d0
+ b print_string_a2
+
+print_symbol:
+ li d1,0
+ b print_symbol_2
+
+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
+
+ lhz d1,DESCRIPTOR_ARITY_OFFSET(a2)
+ addi a2,a2,4
+ slwi d1,d1,3
+ add a2,a2,d1
+ b print_string_a2
+
+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
+#ifdef 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_int:
+ mr o0,d0
+ b print_int2
+
+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
+#ifdef 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
+#ifdef 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
+
+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
+#ifdef 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
+#ifdef 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__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
+#ifdef 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
+
+ csect .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
+#ifdef 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
+
+ csect .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
+#ifdef 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
+
+ csect .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
+#ifdef 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
+
+ csect .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
+
+ csect .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
+
+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
+
+ csect .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
+
+ csect .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 .sprintf
+ nop
+ 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
+
+ csect .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
+
+ li o1,10
+ divwu o0,d0,o1
+
+ mullw a1,o0,o1
+ sub a1,d0,a1
+ addi a1,a1,48
+
+ stb a1,0(a2)
+ addi a2,a2,1
+
+ mr d0,o0
+ 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 .sprintf
+ nop
+ 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
+#ifdef USE_DCBZ
+ li g2,32
+#endif
+ blr
+
+ csect .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
+
+;
+; the timer
+;
+
+_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 .TickCount
+ nop
+ 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)
+ if MEASURE_GC
+ lea o1,mark_compact_garbage_collect_time
+ stw o0,0(o1)
+
+ lea o1,compact_garbage_collect_time
+ stw o0,0(o1)
+ endif
+ 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 .TickCount
+ nop
+ 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
+
+ if MEASURE_GC
+.add_mark_compact_garbage_collect_time:
+ mflr r0
+ stwu r0,-4(sp)
+
+ bl _get_time_diff
+
+ lea o2,mark_compact_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_compact_garbage_collect_time:
+ mflr r0
+ stwu r0,-4(sp)
+
+ bl _get_time_diff
+
+ lea o2,compact_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
+ endif
+;
+; the garbage collector
+;
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+
+ csect ._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
+
+; 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
+; 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
+; 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:
+; 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
+; 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
+ import first_function{DS}
+ import .write_heap
+ import 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)
+ if LINUX
+ li r9,0
+ else
+ addi r9,rtoc,-32768
+ endif
+ 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_m8
+ 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)
+
+ if MACOSX
+ mr g0,sp
+ ori sp,sp,28
+ stwu g0,-(64+28)(sp)
+ else
+ stwu sp,-64(sp)
+ endif
+
+ lwz r0,0(r12)
+ stw RTOC,20(SP)
+ mtctr r0
+ lwz RTOC,4(r12)
+ bctrl
+ lwz RTOC,20(sp)
+
+ 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
+
+ csect .zero_bit_vector
+; d0 = n words
+; a2 = address
+; 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
+
+ csect .reorder
+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 1,reorder_lp
+
+ blr
+
+;
+; the sliding compacting garbage collector
+;
+
+ csect text{PR}
+compacting_collector:
+
+; 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
+; 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
+; srwi d0,d0,8
+ rlwimi d0,o0,32-8,0,7
+; 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
+; 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:
+ if MEASURE_GC
+ bl .add_compact_garbage_collect_time
+ else
+ bl .add_garbage_collect_time
+ endif
+ 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:
+ 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
+ addi sp,sp,64
+ endif
+halt:
+
+ 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
+
+ lea o0,halt_sp
+ lwz sp,0(o0)
+ 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
+ addi sp,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
+
+ csect .eval_01
+eval_01:
+ stw a1,0(a4)
+ addi a4,a4,4
+ bctr
+
+ csect .eval_11
+eval_11:
+ stw a0,0(a4)
+ mr a0,a1
+ addi a4,a4,4
+ bctr
+
+ csect .eval_02
+eval_02:
+ stw a2,0(a4)
+ addi a4,a4,8
+ stw a1,4-8(a4)
+ bctr
+
+ csect .eval_12
+eval_12:
+ stw a0,4(a4)
+ mr a0,a1
+ stw a2,0(a4)
+ addi a4,a4,8
+ bctr
+
+ csect .eval_22
+eval_22:
+ stw a0,4(a4)
+ mr a0,a2
+ stw a1,0(a4)
+ addi a4,a4,8
+ bctr
+
+__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
+
+ b eval_fill
+ nop
+ nop
+ if LINUX
+ nop
+ nop
+ endif
+ dc.l 0
+ dc.l -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
+ csect .eval_fill2
+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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .eval_upd_n
+ 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
+
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_8:
+ li d0,1
+ li d1,24
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_9:
+ li d0,2
+ li d1,28
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_10:
+ li d0,3
+ li d1,32
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_11:
+ li d0,4
+ li d1,36
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_12:
+ li d0,5
+ li d1,40
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_13:
+ li d0,6
+ li d1,44
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_14:
+ li d0,7
+ li d1,48
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_15:
+ li d0,8
+ li d1,52
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_16:
+ li d0,9
+ li d1,56
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_17:
+ li d0,10
+ li d1,60
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_18:
+ li d0,11
+ li d1,64
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_19:
+ li d0,12
+ li d1,68
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_20:
+ li d0,13
+ li d1,72
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_21:
+ li d0,14
+ li d1,76
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_22:
+ li d0,15
+ li d1,80
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_23:
+ li d0,16
+ li d1,84
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_24:
+ li d0,17
+ li d1,88
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_25:
+ li d0,18
+ li d1,92
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_26:
+ li d0,19
+ li d1,96
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_27:
+ li d0,20
+ li d1,100
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_28:
+ li d0,21
+ li d1,104
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_29:
+ li d0,22
+ li d1,108
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_30:
+ li d0,23
+ li d1,112
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_31:
+ li d0,24
+ li d1,116
+ b eval_upd_n
+ if PROFILE
+ mflr r0
+ bl profile_n
+ endif
+eval_upd_32:
+ li d0,25
+ li d1,120
+ b eval_upd_n
+
+;
+; STRINGS
+;
+ csect .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
+; reserve one word extra, because
+; 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)
+
+; 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:
+
+; 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
+
+ csect .sliceAC
+empty_string:
+ lea a0,zero_length_string
+ lwz r0,0(sp)
+ addi sp,sp,4
+ blr
+
+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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect _cn
+ dc.l 3
+_c3: b __cycle__in__spine
+ dc.l 4
+_c4: b __cycle__in__spine
+ dc.l 5
+_c5: b __cycle__in__spine
+ dc.l 6
+_c6: b __cycle__in__spine
+ dc.l 7
+_c7: b __cycle__in__spine
+ dc.l 8
+_c8: b __cycle__in__spine
+ dc.l 9
+_c9: b __cycle__in__spine
+ dc.l 10
+_c10: b __cycle__in__spine
+ dc.l 11
+_c11: b __cycle__in__spine
+ dc.l 12
+_c12: b __cycle__in__spine
+ dc.l 13
+_c13: b __cycle__in__spine
+ dc.l 14
+_c14: b __cycle__in__spine
+ dc.l 15
+_c15: b __cycle__in__spine
+ dc.l 16
+_c16: b __cycle__in__spine
+ dc.l 17
+_c17: b __cycle__in__spine
+ dc.l 18
+_c18: b __cycle__in__spine
+ dc.l 19
+_c19: b __cycle__in__spine
+ dc.l 20
+_c20: b __cycle__in__spine
+ dc.l 21
+_c21: b __cycle__in__spine
+ dc.l 22
+_c22: b __cycle__in__spine
+ dc.l 23
+_c23: b __cycle__in__spine
+ dc.l 24
+_c24: b __cycle__in__spine
+ dc.l 25
+_c25: b __cycle__in__spine
+ dc.l 26
+_c26: b __cycle__in__spine
+ dc.l 27
+_c27: b __cycle__in__spine
+ dc.l 28
+_c28: b __cycle__in__spine
+ dc.l 29
+_c29: b __cycle__in__spine
+ dc.l 30
+_c30: b __cycle__in__spine
+ dc.l 31
+_c31: b __cycle__in__spine
+ dc.l 32
+_c32: b __cycle__in__spine
+
+;
+; ARRAYS
+;
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .e__system__sAP
+e__system__sAP:
+ lwz a2,0(a1)
+ lwz a2,4-2(a2)
+ mtctr a2
+ bctr
+
+; _ARRAYS
+
+ csect ._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
+
+ csect ._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
+
+ csect ._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
+
+ csect ._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
+
+; d0: number of elements, d1: element descriptor, d2: element size,
+; d3: element a size a0: a_element -> a0: array
+
+ csect ._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
+
+ csect .yet_args_needed
+yet_args_needed:
+; 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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+
+ csect .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
+ csect .o__S_P2
+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
+
+ csect .ea__S_P2
+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
+
+ csect .acos_real{PR}
+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 .acos
+ nop
+#ifdef 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
+
+ csect .asin_real{PR}
+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 .asin
+ nop
+#ifdef 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
+
+ csect .atan_real{PR}
+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 .atan
+ nop
+#ifdef 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
+
+ csect .cos_real{PR}
+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 .cos
+ nop
+#ifdef 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
+
+ csect .sin_real{PR}
+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 .sin
+ nop
+#ifdef 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
+
+ csect .tan_real{PR}
+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 .tan
+ nop
+#ifdef 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
+
+ csect .ln_real{PR}
+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 .log
+ nop
+#ifdef 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
+
+ csect .log10_real{PR}
+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 .log10
+ nop
+#ifdef 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
+
+ csect .exp_real{PR}
+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 .exp
+ nop
+#ifdef 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
+
+ csect .sqrt_real{PR}
+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 .sqrt
+ nop
+#ifdef 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
+
+ csect .pow_real{PR}
+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 .pow
+ nop
+#ifdef 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
+
+ csect .entier_real{PR}
+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
+
+ csect .my_pointer_glue{PR}
+ lwz r0,0(r3)
+ stw RTOC,20(SP)
+ mtctr r0
+ lwz RTOC,4(r3)
+ bctr
+
+
+ macro
+ te &address
+ tc &address{TC},&address
+ endm
+
+ toc
+
+ tc INT2{TC},INT+2
+ tc CHAR2{TC},CHAR+2
+ tc BOOL2{TC},BOOL+2
+ tc REAL2{TC},REAL+2
+ tc __STRING__2{TC},__STRING__+2
+ tc __ARRAY__2{TC},__ARRAY__+2
+
+ tc small_integers{TC},small_integers{BS}
+ if 1
+ tc small_integers8{TC},small_integers{BS}+8
+ endif
+ tc stack_p{TC},stack_p{BS}
+ if MACOSX
+ tc end_a_stack{TC},end_a_stack{BS}
+ tc end_b_stack{TC},end_b_stack{BS}
+ endif
+ tc static_characters{TC},static_characters{BS}
+ if 1
+ tc static_characters8{TC},static_characters{BS}+8
+ endif
+ tc sprintf_time_buffer{TC},sprintf_time_buffer{BS}
+ tc sprintf_buffer{TC},sprintf_buffer{BS}
+ tc last_time{TC},last_time{BS}
+ tc heap_size_33{TC},heap_size_33{BS}
+ tc heap_size_129{TC},heap_size_129{BS}
+ tc heap_p{TC},heap_p{BS}
+ tc heap_p1{TC},heap_p1{BS}
+ tc heap_p2{TC},heap_p2{BS}
+ tc heap_mbp{TC},heap_mbp{BS}
+ tc heap_copied_vector_size{TC},heap_copied_vector_size{BS}
+ tc heap_copied_vector{TC},heap_copied_vector{BS}
+ tc halt_sp{TC},halt_sp{BS}
+ tc garbage_collect_time{TC},garbage_collect_time{BS}
+ tc extra_heap{TC},extra_heap{BS}
+ tc extra_heap_size{TC},extra_heap_size{BS}
+ tc execute_time{TC},execute_time{BS}
+ tc basic_only{TC},basic_only{BS}
+ tc alloc_size{TC},alloc_size{BS}
+ tc IO_time{TC},IO_time{BS}
+ if MEASURE_GC
+ tc compact_garbage_collect_time{TC},compact_garbage_collect_time{BS}
+ tc mark_compact_garbage_collect_time{TC},mark_compact_garbage_collect_time{BS}
+ endif
+ tc heap_end_after_copy_gc{TC},heap_end_after_copy_gc{BS}
+ tc caf_listp{TC},caf_listp{BS}
+ tc caf_list{TC},caf_list{BS}
+ tc caf_list4{TC},caf_list{BS}+4
+
+ if EXCEPTIONS
+ tc exception_info{TC},exception_info{BS}
+ endif
+ if FINALIZERS
+ tc finalizer_list{TC},finalizer_list{BS}
+ tc free_finalizer_list{TC},free_finalizer_list{BS}
+ tc __Nil_m8{TC},__Nil-8
+ tc e____system__kFinalizer_2{TC},e____system__kFinalizer+2
+ tc e____system__kFinalizerGCTemp_2{TC},e____system__kFinalizerGCTemp+2
+ endif
+ if MARK_GC
+ te last_heap_free
+ te free_after_mark
+ te bit_counter
+ te zero_bits_before_mark
+ te bit_vector_p
+ te marked_gc_string_1
+ te lazy_array_list
+ if ADJUST_HEAP_SIZE
+ te bit_vector_size
+ te heap_size_multiple
+ te initial_heap_size
+ endif
+ endif
+ if MARK_AND_COPY_GC || !MARK_GC
+ te copy_lp1
+ endif
+ te IO_error_string
+ te __cycle__in__spine
+ te __indirection
+ te stack_size
+ te flags
+ te execution_aborted
+ te heap_size
+ te false_c_string
+ te false_string
+ te file_c_string
+ te garbage_collect_string_1
+ te garbage_collect_string_2
+ te garbage_collect_string_3
+ te heap_end_after_gc
+ te heap_p3
+ te heap_use_after_gc_string_1
+ te heap_use_after_gc_string_2
+ te heap_vector
+ te high_index_string
+ te low_index_string
+ te new_line_string
+ te out_of_memory_string_1
+ te out_of_memory_string_4
+ te print_
+ te printf_int_string
+ te printf_real_string
+ te sprintf_time_string
+ te stack_overflow_string
+ te time_string_1
+ te time_string_2
+ if MEASURE_GC
+ te time_string_2a
+ endif
+ te time_string_3
+ te time_string_4
+ te true_c_string
+ te true_string
+ te zero_length_string
+ te garbage_collect_flag
+ te entier_constants_and_buffers
+
+ if WRITE_HEAP
+ tc first_function{TC},first_function{DS}
+ tc heap2_begin_and_end{TC},heap2_begin_and_end{BS}
+ te min_write_heap_size
+ endif
+ if PROFILE
+ te garbage_collector_name
+ endif