# 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