diff options
Diffstat (limited to 'macho/pmark.a')
-rw-r--r-- | macho/pmark.a | 2107 |
1 files changed, 2107 insertions, 0 deletions
diff --git a/macho/pmark.a b/macho/pmark.a new file mode 100644 index 0000000..5cb0823 --- /dev/null +++ b/macho/pmark.a @@ -0,0 +1,2107 @@ + +COUNT_GARBAGE_COLLECTIONS = 0 +MARK_USING_REVERSAL = 0 +REMOVE_INDIRECTION_LISTS = 0 + + .if 0 + subi sp,sp,256 + stmw r3,68(sp) + mflr r3 + stw r3,64(sp) + bl .Debugger + nop + lwz r3,64(sp) + mtlr r3 + lmw r3,68(sp) + baddi sp,256 + .endif + + lea d7,heap_size_33 + lea o0,lazy_array_list + lwz d7,0(d7) + li d4,0 + stw d4,0(o0) + + lis g3,32768 + + subi a3,sp,2000 + + lea d0,caf_list + slwi d7,d7,5 + lwz d0,0(d0) + + stwu a4,-4(sp) + + tst d0 + beq _end_mark_cafs + +_mark_cafs_lp: + lwz d1,0(d0) + lwz o5,-4(d0) + addi a2,d0,4 + slwi d0,d1,2 + add a4,a2,d0 + + bl _mark_stack_nodes + + addic. d0,o5,0 + bne _mark_cafs_lp + +_end_mark_cafs: + lea a2,stack_p + lwz a4,0(sp) + lwz a2,0(a2) + baddi sp,4 + + bl _mark_stack_nodes + + lea a0,lazy_array_list + lwz a0,0(a0) + + tst a0 + beq end_restore_arrays + +restore_arrays: + lwz d3,0(a0) ; size + lwz d1,4(a0) ; second last element + cmplwi 0,d3,1 + + lea o0,__ARRAY__+2 + lwz d2,8(a0) ; last element + stw o0,0(a0) + beq restore_array_size_1 + + slwi a1,d3,2 + add a1,a0,a1 + + lwz d0,8(a1) ; descriptor + + tst d0 + beq restore_lazy_array + + lhz o0,-2+2(d0) + divwu d3,d3,o0 + +restore_lazy_array: + stw d3,4(a0) + lwz a3,4(a1) ; next + stw d0,8(a0) + + stw d1,4(a1) + stw d2,8(a1) + + tst d0 + beq no_reorder_array + + lhz o1,-2(d0) + subi o1,o1,256 + cmpw 0,o1,o0 + beq no_reorder_array + + mr d0,o1 + mr d1,o0 + slwi d3,d3,2 + mullw d3,d3,d0 + baddi a0,12 + add a1,a0,d3 + sub d0,d0,d1 + + mr g1,d4 + + bl reorder + + mr d4,g1 + +no_reorder_array: + addic. a0,a3,0 + bne restore_arrays + + b end_restore_arrays + +restore_array_size_1: + stw d3,4(a0) + lwz a3,12(a0) ; descriptor + + stw d1,12(a0) + stw a3,8(a0) + + addic. a0,d2,0 + bne restore_arrays + +end_restore_arrays: + + .if FINALIZERS + lea a0,finalizer_list + lea a1,free_finalizer_list + + lwz a2,0(a0) +determine_free_finalizers_after_mark: + lea o0,__Nil-8 + cmplw o0,a2 + beq end_finalizers_after_mark + + sub d1,a2,d6 + rlwinm o0,d1,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d1,d1,32-2,27,31 + rlwnm. r0,o1,d1,0,0 + beq finalizer_not_used_after_mark + + addi a0,a2,4 + lwz a2,4(a2) + b determine_free_finalizers_after_mark + +finalizer_not_used_after_mark: + stw a2,0(a1) + addi a1,a2,4 + + lwz a2,4(a2) + stw a2,0(a0) + b determine_free_finalizers_after_mark + +end_finalizers_after_mark: + stw a2,0(a1) + .endif + + stwu o4,-4(sp) + + bl .add_garbage_collect_time + + lwz o4,0(sp) + baddi sp,4 + + .if ADJUST_HEAP_SIZE + lea o0,bit_vector_size + lea d2,alloc_size + lwz d0,0(o0) + .else + lea o0,heap_size_33 + lea d2,alloc_size + lwz d0,0(o0) + slwi d0,d0,3 + .endif + lwz d2,0(d2) + slwi d4,d4,2 + slwi d2,d2,2 + add d2,d2,d4 + + .if ADJUST_HEAP_SIZE + lea d1,_heap_size_multiple + slwi o1,d0,2 + lwz o2,0(d1) + + mullw d1,d2,o2 + mulhwu o2,d2,o2 + srwi d1,d1,8 + rlwimi d1,o2,32-8,0,7 + srwi. o2,o2,8 + beq+ not_largest_heap + + lea d1,heap_size_33 + lwz d1,0(d1) + slwi d1,d1,5 + +not_largest_heap: + cmpw d1,o1 + ble no_larger_heap + + lea o1,heap_size_33 + lwz o1,0(o1) + slwi o1,o1,5 + cmpw d1,o1 + ble not_larger_then_heap + mr d1,o1 +not_larger_then_heap: + srwi d0,d1,2 + stw d0,0(o0) +no_larger_heap: + .endif + + andi. r0,d0,31 + + srwi d5,d0,5 + + beq no_extra_word + + rlwinm d1,d0,32-3,3,29 + li g0,0 + stwx g0,o4,d1 + +no_extra_word: + + lea o0,last_heap_free + slwi d0,d0,2 + sub d0,d0,d4 + stw d0,0(o0) + + .if COUNT_GARBAGE_COLLECTIONS + lea o1,n_garbage_collections + lwz o2,0(o1) + addi o2,o2,1 + .endif + lea o0,_flags + lwz o0,0(o0) + andi. r0,o0,2 + .if COUNT_GARBAGE_COLLECTIONS + stw o2,0(o1) + .endif + beq+ _no_heap_use_message2 + + stwu o4,-4(sp) + .if MACOSX + mr g0,sp + ori sp,sp,28 + stwu g0,-(64+28)(sp) + .else + stwu sp,-64(sp) + .endif + + lea o0,marked_gc_string_1 + .if STDERR_TO_FILE + bl _er_print_string + .else + bl _ew_print_string + .endif + + mr o0,d4 + .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) + lwzu o4,0(sp) + .else + lwzu o4,64(sp) + .endif + baddi sp,4 + +_no_heap_use_message2: + .if FINALIZERS + bl call_finalizers + lea o4,heap_vector + lwz o4,0(o4) + .endif + lea d2,alloc_size + + mtctr d5 + + lwz d2,0(d2) + mr a0,o4 + + lea o0,free_after_mark + li g0,0 + stw g0,0(o0) + +_scan_bits: + lwz o0,0(a0) + baddi 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 d1,0(a0) + baddi a0,4 + tst d1 + bdnz _skip_zero_bits_lp + + beq _end_bits + stw g0,-4(a0) + sub d1,a0,a1 + b _end_bits2 + +_end_zero_bits: + lea o0,free_after_mark + + sub d1,a0,a1 + slwi d1,d1,3 + + cmplw 0,d1,d2 + + lwz o1,0(o0) + stw g0,-4(a0) + + add o1,o1,d1 + stw o1,0(o0) + blt _scan_bits + +_found_free_memory: + mfctr d0 + lea o0,bit_counter + lea o1,bit_vector_p + stw d0,0(o0) + stw a0,0(o1) + + sub d7,d1,d2 + + subi d0,a1,4 + sub d0,d0,o4 + slwi d0,d0,5 + add a6,d0,d6 + + slwi d1,d1,2 + lea o0,heap_end_after_gc + add d0,a6,d1 + stw d0,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 + + subi a6,a6,4 + baddi sp,32 + blr + +_end_bits: + sub d1,a0,a1 + baddi d1,4 +_end_bits2: + lea o0,free_after_mark + + slwi d1,d1,3 + + lwz o1,0(o0) + cmplw 0,d1,d2 + + add o1,o1,d1 + stw o1,0(o0) + bge _found_free_memory + +_end_scan: + lea o0,bit_counter + mfctr d0 + stw d0,0(o0) + b compact_gc + + + .text + .globl _mark_stack_nodes + +; a0,a1,a2,a3,a4 +; d0,d1,d2,d3,d4,d5,d6,d7 +; o0,o1,o2,o3,o4,o5 +; g0,g1,g2 +; g3 = 0x80000000 + +; a5 not used, __cycle__in__spine +; a6 not used, hp + + +_mark_stack_nodes: + cmpw a4,a2 + beqlr + + lwz a0,0(a2) + addi a2,a2,4 + + sub d1,a0,d6 + .if SHARE_CHAR_INT + cmplw d1,d7 + bge- _mark_stack_nodes + .endif + + rlwinm o0,d1,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d1,d1,32-2,27,31 + rlwnm. r0,o1,d1,0,0 + bne- _mark_stack_nodes + + .if MARK_USING_REVERSAL + addi o0,a2,-4 + stwu o0,-4(sp) + li d3,0 + li d5,1 + b __mark__node + +_mark_next_node: + b _mark_stack_nodes + + .else + li g0,0 + stwu g0,-4(sp) + +_mark_arguments: + lwz d0,0-NODE_POINTER_OFFSET(a0) + + srw o3,g3,d1 + + andi. r0,d0,2 + lha d2,-2(d0) + beq _mark_lazy_node + +_no_mark_lazy_node: + tst d2 + beq _mark_hnf_0 + + cmplwi 0,d2,256 + baddi a0,4 + bge _mark_record + + subic. d2,d2,2 + beq _mark_hnf_2 + blt _mark_hnf_1 + +_mark_hnf_3: + cmplwi 0,o3,4 + + lwz a1,4-NODE_POINTER_OFFSET(a0) + bor o1,o3 + stwx o1,o4,o0 + + bge+ fits_in_word_1 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits_in_word_1: + sub d0,a1,d6 + + rlwinm o0,d0,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d0,d0,32-2,27,31 + srw o3,g3,d0 + + and. r0,o1,o3 + baddi d4,3 + bne _shared_argument_part + +_no_shared_argument_part: + slwi o2,d2,2 + add a1,a1,o2 + + addi d2,d2,1 + + add o2,d0,d2 + cmplwi 0,o2,32 + + add d4,d4,d2 + + bor o1,o3 + stwx o1,o4,o0 + ble+ fits_in_word_2 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits_in_word_2: + .if NODE_POINTER_OFFSET + lwzu o0,0-NODE_POINTER_OFFSET(a1) + .else + lwz o0,0-NODE_POINTER_OFFSET(a1) + .endif + subi d2,d2,2 + stwu o0,-4(sp) + +_push_hnf_args: + cmplw 6,sp,a3 + +_push_hnf_args_lp: + lwzu o0,-4(a1) + subic. d2,d2,1 + stwu o0,-4(sp) + bge _push_hnf_args_lp + + bge cr6,_mark_node2 + + b __mark_using_reversal + +_mark_hnf_1: + cmplwi 0,o3,2 + bor o1,o3 + stwx o1,o4,o0 + bge+ fits_in_word_4 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits_in_word_4: + baddi d4,2 + +_shared_argument_part: + lwz a0,0-NODE_POINTER_OFFSET(a0) + b _mark_node + +_mark_lazy_node_1: + cmplwi 6,o3,4 + + bor o1,o3 + baddi a0,4 + stwx o1,o4,o0 + + bge+ cr6,fits_in_word_3 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits_in_word_3: +; tst d2 + baddi d4,3 + beq _mark_node2 + +_mark_selector_node_1: + baddicc d2,2 + lwz a1,0-NODE_POINTER_OFFSET(a0) + beq _mark_indirection_node + + sub d1,a1,d6 + + baddicc d2,1 + + rlwinm o0,d1,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d1,d1,32-2,27,31 + + ble _mark_record_selector_node_1 + + rlwnm. r0,o1,d1,0,0 + bne _mark_node3 + + lwz d2,0-NODE_POINTER_OFFSET(a1) + andi. r0,d2,2 + beq _mark_node3 + + lhz g1,-2(d2) + cmplwi 0,g1,2 + ble _small_tuple_or_record + +_large_tuple_or_record: + lwz d1,8(a1) + + sub d1,d1,d6 + rlwinm o0,d1,32-5,5,29 + lwzx g1,o4,o0 + rlwinm d1,d1,32-2,27,31 + rlwnm. r0,g1,d1,0,0 + bne _mark_node3 + +_small_tuple_or_record: + lwz g1,-8(d0) + subi d2,a0,4 + mr a0,a1 + lwz g1,4(g1) + + mtctr g1 + mflr r0 + stwu r0,-4(sp) + bctrl + mtlr r0 + + lea g1,__indirection + stw a0,4-NODE_POINTER_OFFSET(d2) + stw g1,0-NODE_POINTER_OFFSET(d2) + .if REMOVE_INDIRECTION_LISTS + addi g2,d2,4 + b __mark_node + .else + b _mark_node + .endif + +_mark_record_selector_node_1: + beq _mark_strict_record_selector_node_1 + + rlwnm. r0,o1,d1,0,0 + bne _mark_node3 + + lwz d2,0-NODE_POINTER_OFFSET(a1) + andi. r0,d2,2 + beq _mark_node3 + + lhz g1,-2(d2) + cmplwi 0,g1,258 + ble _small_tuple_or_record + b _large_tuple_or_record + +_mark_strict_record_selector_node_1: + rlwnm. r0,o1,d1,0,0 + bne _mark_node3 + +_no_mark_strict_record_selector_node_1: + lwz d2,0-NODE_POINTER_OFFSET(a1) + andi. r0,d2,2 + beq _mark_node3 + + lhz g1,-2(d2) + cmplwi 0,g1,258 + ble _select_from_small_record + + lwz d1,8-NODE_POINTER_OFFSET(a1) + + sub d1,d1,d6 + rlwinm o0,d1,32-5,5,29 + lwzx g1,o4,o0 + rlwinm d1,d1,32-2,27,31 + rlwnm. r0,g1,d1,0,0 + bne _mark_node3 + +_select_from_small_record: + lwz g1,-8(d0) + subi a0,a0,4 + lwz g1,4(g1) + + mtctr g1 + mflr r0 + stwu r0,-4(sp) + bctrl + mtlr r0 + + b _mark_next_node + +_mark_indirection_node: + + + + .if REMOVE_INDIRECTION_LISTS + mr g2,a0 +__mark_indirection_node: + mr a0,a1 +__mark_node: + sub d1,a0,d6 + .if SHARE_CHAR_INT + cmplw d1,d7 + bge- __mark_next_node + .endif + rlwinm o0,d1,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d1,d1,32-2,27,31 + rlwnm. r0,o1,d1,0,0 + beq __mark_arguments + +__mark_next_node: + + lwz g1,0-NODE_POINTER_OFFSET(g2) + cmpw g1,a0 + beq __end_indirection_list1 +__update_indirection_list1: + stw a0,0-NODE_POINTER_OFFSET(g2) + addi g2,g1,4 + lwz g1,4-NODE_POINTER_OFFSET(g1) + cmplw g1,a0 + bne __update_indirection_list1 +__end_indirection_list1: + + b _mark_next_node + +__mark_arguments: + lwz d0,0-NODE_POINTER_OFFSET(a0) + + srw o3,g3,d1 + + andi. r0,d0,2 + lha d2,-2(d0) + beq __mark_lazy_node + + lwz g1,0-NODE_POINTER_OFFSET(g2) + cmpw g1,a0 + beq __end_indirection_list2 +__update_indirection_list2: + stw a0,0-NODE_POINTER_OFFSET(g2) + addi g2,g1,4 + lwz g1,4-NODE_POINTER_OFFSET(g1) + cmplw g1,a0 + bne __update_indirection_list2 +__end_indirection_list2: + + b _no_mark_lazy_node + +__mark_lazy_node: + tst d2 + blt __mark_lazy_node_lt0 + + lwz g1,0-NODE_POINTER_OFFSET(g2) + cmpw g1,a0 + beq __end_indirection_list3 +__update_indirection_list3: + stw a0,0-NODE_POINTER_OFFSET(g2) + addi g2,g1,4 + lwz g1,4(g1) + cmplw g1,a0 + bne __update_indirection_list3 +__end_indirection_list3: + + b _mark_lazy_node + +__mark_lazy_node_lt0: + baddicc d2,2 + lwz a1,4-NODE_POINTER_OFFSET(a0) + beq __mark_indirection_node + + sub d1,a1,d6 + + baddicc d2,1 + + rlwinm g0,d1,32-5,5,29 + lwzx g1,o4,g0 + rlwinm d1,d1,32-2,27,31 + + ble __mark_record_selector_node_1 + + rlwnm. r0,g1,d1,0,0 + bne __mark_node3 + + lwz d2,0-NODE_POINTER_OFFSET(a1) + andi. r0,d2,2 + beq __mark_node3 + + lhz g1,-2(d2) + cmplwi 0,g1,2 + ble __small_tuple_or_record + +__large_tuple_or_record: + lwz d1,8-NODE_POINTER_OFFSET(a1) + + sub d1,d1,d6 + rlwinm g0,d1,32-5,5,29 + lwzx g1,o4,g0 + rlwinm d1,d1,32-2,27,31 + rlwnm. r0,g1,d1,0,0 + bne __mark_node3 + +__small_tuple_or_record: + .if LINUX + lwz g1,-8(d0) + .else + lha g1,-6(d0) + .endif + mr d2,a0 + .if LINUX + .else + lwzx g1,rtoc,g1 + .endif + mr a0,a1 + lwz g1,4(g1) + + mtctr g1 + mflr r0 + stwu r0,-4(sp) + bctrl + mtlr r0 + + lea g1,__indirection + stw a0,4-NODE_POINTER_OFFSET(d2) + stw g1,0-NODE_POINTER_OFFSET(d2) + b __mark_node + +__mark_record_selector_node_1: + beq __mark_strict_record_selector_node_1 + + rlwnm. r0,g1,d1,0,0 + bne __mark_node3 + + lwz d2,0-NODE_POINTER_OFFSET(a1) + andi. r0,d2,2 + beq __mark_node3 + + lhz g1,-2(d2) + cmplwi 0,g1,258 + ble __small_tuple_or_record + b __large_tuple_or_record + +__mark_node3: + cmplwi 6,o3,4 + + bor o1,o3 + stwx o1,o4,o0 + + bge+ cr6,_fits_in_word_3 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +_fits_in_word_3: + baddi d4,3 + + lwz g1,0-NODE_POINTER_OFFSET(g2) + cmpw g1,a0 + beq __end_indirection_list4 +__update_indirection_list4: + stw a0,0-NODE_POINTER_OFFSET(g2) + addi g2,g1,4 + lwz g1,4-NODE_POINTER_OFFSET(g1) + cmplw g1,a0 + bne __update_indirection_list4 +__end_indirection_list4: + + mr a0,a1 + b _mark_node + +__mark_strict_record_selector_node_1: + rlwnm. r0,g1,d1,0,0 + bne __mark_node3 + + cmplwi 6,o3,4 + + bor o1,o3 + stwx o1,o4,o0 + + bge+ cr6,_fits_in_word_3_ + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +_fits_in_word_3_: + baddi d4,3 + + lwz g1,0-NODE_POINTER_OFFSET(g2) + cmpw g1,a0 + beq __end_indirection_list5 +__update_indirection_list5: + stw a0,0-NODE_POINTER_OFFSET(g2) + addi g2,g1,4 + lwz g1,4-NODE_POINTER_OFFSET(g1) + cmplw g1,a0 + bne __update_indirection_list5 +__end_indirection_list5: + + baddi a0,4 + b _no_mark_strict_record_selector_node_1 + .endif + + + + + + + +_mark_node3: + mr a0,a1 + b _mark_node + +_mark_hnf_2: + cmplwi 0,o3,4 + bor o1,o3 + stwx o1,o4,o0 + bge+ fits_in_word_6 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits_in_word_6: + baddi d4,3 + +_mark_record_2_c: + lwz o0,4-NODE_POINTER_OFFSET(a0) + cmplw 0,sp,a3 + + stwu o0,-4(sp) + blt __mark_using_reversal + +_mark_node2: + lwz a0,0-NODE_POINTER_OFFSET(a0) + +_mark_node: + sub d1,a0,d6 + .if SHARE_CHAR_INT + cmplw d1,d7 + bge- _mark_next_node + .endif + + rlwinm o0,d1,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d1,d1,32-2,27,31 + rlwnm. r0,o1,d1,0,0 + beq _mark_arguments + +_mark_next_node: + lwz a0,0(sp) + baddi sp,4 + tst a0 + bne _mark_node + + b _mark_stack_nodes + +_mark_lazy_node: + tst d2 + beq _mark_real_or_file + + cmpwi 0,d2,1 + ble _mark_lazy_node_1 + + cmplwi 0,d2,256 + bge _mark_closure_with_unboxed_arguments + baddi d2,1 + + add o2,d1,d2 + cmpwi 0,o2,32 + + add d4,d4,d2 + bor o1,o3 + stwx o1,o4,o0 + + ble+ fits_in_word_7 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits_in_word_7: + slwi g2,d2,2 + add a0,a0,g2 + + cmplw 6,sp,a3 + + subi d2,d2,3 +_push_lazy_args: + lwzu o0,-4(a0) + subic. d2,d2,1 + stwu o0,-4(sp) + bge _push_lazy_args + + bsubi a0,4 + + bge cr6,_mark_node2 + + b __mark_using_reversal + +_mark_closure_with_unboxed_arguments: + srwi g2,d2,8 + bandic d2,255 + + bsubicc d2,1 + beq _mark_real_or_file + + baddi d2,2 + + add o2,d1,d2 + cmpwi 0,o2,32 + + badd d4,d2 + bor o1,o3 + stwx o1,o4,o0 + + ble+ fits_in_word_7_ + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits_in_word_7_: + bsub d2,g2 + slwi g2,d2,2 + + bsubicc d2,2 + blt- _mark_next_node + + badd a0,g2 + + cmplw 6,sp,a3 + bne _push_lazy_args + +_mark_closure_with_one_boxed_argument: + lwz a0,-4(a0) + b _mark_node + +_mark_hnf_0: + cmplw 0,d0,int_reg + blt _mark_real_file_or_string + + cmplw d0,char_reg + bgt _mark_normal_hnf_0 + +_mark_bool_or_small_string: + cmplwi 0,o3,2 + bor o1,o3 + + stwx o1,o4,o0 + baddi d4,2 + + bge+ _mark_next_node + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + b _mark_next_node + +_mark_normal_hnf_0: + bor o1,o3 + baddi d4,1 + stwx o1,o4,o0 + b _mark_next_node + +_mark_real_file_or_string: + lea g1,__STRING__+2 + cmplw 0,d0,g1 + ble _mark_string_or_array + +_mark_real_or_file: + cmplwi 0,o3,4 + bor o1,o3 + + stwx o1,o4,o0 + baddi d4,3 + + bge+ _mark_next_node + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + b _mark_next_node + +_mark_record: + subic. d2,d2,258 + beq _mark_record_2 + blt _mark_record_1 + +_mark_record_3: + cmplwi 0,o3,4 + + lhz d1,-2+2(d0) + + bor o1,o3 + stwx o1,o4,o0 + baddi d4,3 + + bge+ fits_in_word_13 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 +fits_in_word_13: + + lwz a1,4-NODE_POINTER_OFFSET(a0) + + subic. d1,d1,1 + + sub d0,a1,d6 + rlwinm o0,d0,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d0,d0,32-2,27,31 + srw o3,g3,d0 + + blt _mark_record_3_bb + + and. r0,o3,o1 + bne _mark_node2 + + addi d2,d2,1 + + add o2,d0,d2 + cmplwi 0,o2,32 + + add d4,d4,d2 + + bor o1,o3 + stwx o1,o4,o0 + ble+ _push_record_arguments + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +_push_record_arguments: + subic. d2,d1,1 + + slwi d1,d1,2 + add a1,a1,d1 + .if NODE_POINTER_OFFSET + bsubi a1,NODE_POINTER_OFFSET + .endif + bge _push_hnf_args + + b _mark_node2 + +_mark_record_3_bb: + and. r0,o3,o1 + bne _mark_next_node + + addi d2,d2,1 + + add o2,d0,d2 + cmplwi 0,o2,32 + + add d4,d4,d2 + + bor o1,o3 + stwx o1,o4,o0 + ble _mark_next_node + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + b _mark_next_node + +_mark_record_2: + cmplwi 0,o3,4 + + lhz g1,-2+2(d0) + bor o1,o3 + + cmplwi 6,g1,1 + + stwx o1,o4,o0 + bge+ fits_in_word_12 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits_in_word_12: + baddi d4,3 + + bgt cr6,_mark_record_2_c + beq cr6,_mark_node2 + b _mark_next_node + +_mark_record_1: + lhz g1,-2+2(d0) + tst g1 + bne _mark_hnf_1 + + b _mark_bool_or_small_string + +_mark_string_or_array: + beq _mark_string_ + +_mark_array: + lwz d1,8-NODE_POINTER_OFFSET(a0) + tst d1 + beq __mark_array_using_reversal + + lhz d0,-2(d1) + tst d0 + beq _mark_strict_basic_array + + lhz d1,-2+2(d1) + beq _mark_b_record_array + +__mark_array_using_reversal: + li d3,0 + stwu d3,-4(sp) + li d5,1 + b __mark__node + +_mark_strict_basic_array: + lwz d0,4-NODE_POINTER_OFFSET(a0) + cmplw 0,d1,int_reg + beq _mark_strict_int_array + cmplw 0,d1,bool_reg + beq _mark_strict_bool_array +_mark_strict_real_array: + badd d0,d0 +_mark_strict_int_array: + addi d0,d0,3 + b _mark_basic_array_ +_mark_strict_bool_array: + addi d0,d0,12+3 + srwi d0,d0,2 + b _mark_basic_array_ + +_mark_b_record_array: + lwz d1,4-NODE_POINTER_OFFSET(a0) + subi d0,d0,256 + mullw d0,d0,d1 + addi d0,d0,3 + b _mark_basic_array_ + +_mark_string_: + lwz d0,4-NODE_POINTER_OFFSET(a0) + addi d0,d0,8+3 + srwi d0,d0,2 + +_mark_basic_array_: + bor o1,o3 + stwx o1,o4,o0 + + add d4,d4,d0 + + slwi d0,d0,2 + badd d0,a0 + subi d0,d0,4 + + sub d0,d0,d6 + rlwinm d0,d0,32-5,5,29 + + cmplw 0,o0,d0 + bge _mark_next_node + + baddi o0,4 + cmplw 0,o0,d0 + bge _last_string_bits + +_mark_string_lp: + stwx g3,o4,o0 + baddi o0,4 + cmplw 0,o0,d0 + blt _mark_string_lp + +_last_string_bits: + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + b _mark_next_node + .endif + + + +__end__mark__using__reversal: + lwz a1,0(sp) + baddi sp,4 + tst a1 + beq _mark_next_node + stw a0,0(a1) + b _mark_next_node + +__end__mark__using__reversal__after__static: + lwz a1,0(sp) + baddi sp,4 + stw a0,0(a1) + b _mark_next_node + +__mark_using_reversal: + stwu a0,-4(sp) + li d3,0 + lwz a0,0(a0) + li d5,1 + b __mark__node + +__mark__arguments: + lwz d0,0-NODE_POINTER_OFFSET(a0) + srw o3,g3,d1 + + andi. r0,d0,2 + lha d2,-2(d0) + + beq __mark__lazy__node + + tst d2 + beq __mark__hnf__0 + + cmplwi 0,d2,256 + baddi a0,4 + bge __mark__record + + subic. d2,d2,2 + beq __mark__hnf__2 + blt __mark__hnf__1 + +__mark__hnf__3: + cmplwi 0,o3,4 + + lwz a1,4-NODE_POINTER_OFFSET(a0) + bor o1,o3 + stwx o1,o4,o0 + + bge+ fits__in__word__1 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits__in__word__1: + sub d0,a1,d6 + + rlwinm o0,d0,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d0,d0,32-2,27,31 + srw o3,g3,d0 + + and. r0,o1,o3 + baddi d4,3 + bne __shared__argument__part + +__no__shared__argument__part: + or d3,d3,d5 + stwu d3,4-NODE_POINTER_OFFSET(a0) + + lwz g1,0-NODE_POINTER_OFFSET(a1) + slwi d1,d2,2 + + addi d2,d2,1 + add o2,d0,d2 + cmplwi o2,32 + + ori g1,g1,1 + stw g1,0(a1) + + add d4,d4,d2 + + bor o1,o3 + stwx o1,o4,o0 + + ble+ fits__in__word__2 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits__in__word__2: + lwzux d2,a1,d1 + li d5,0 + stw a0,0-NODE_POINTER_OFFSET(a1) + mr d3,a1 + mr a0,d2 + b __mark__node + +__mark__lazy__node__1: + bne __mark__selector__node__1 + +__mark__selector__1: + cmplwi 0,o3,4 + bor o1,o3 + stwx o1,o4,o0 + baddi d4,3 + bge+ __shared__argument__part + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + b __shared__argument__part + +__mark__hnf__1: + cmplwi 0,o3,2 + + bor o1,o3 + stwx o1,o4,o0 + baddi d4,2 + + bge+ __shared__argument__part + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +__shared__argument__part: + lwz d2,0-NODE_POINTER_OFFSET(a0) + bor d3,d5 + stw d3,0-NODE_POINTER_OFFSET(a0) + mr d3,a0 + li d5,2 + mr a0,d2 + b __mark__node + +__mark__selector__node__1: + baddicc d2,2 + lwz a1,0-NODE_POINTER_OFFSET(a0) + beq __mark__indirection__node + + sub o2,a1,d6 + + addic. d2,d2,1 + + rlwinm d2,o2,32-5,5,29 + lwzx g1,o4,d2 + rlwinm o2,o2,32-2,27,31 + + ble __mark__record__selector__node__1 + + rlwnm. r0,g1,o2,0,0 + bne- __mark__selector__1 + + lwz d2,0-NODE_POINTER_OFFSET(a1) + andi. r0,d2,2 + beq- __mark__selector__1 + + lha g1,-2(d2) + cmplwi 0,g1,2 + ble __small__tuple__or__record + +__large__tuple__or__record: + lwz o2,8-NODE_POINTER_OFFSET(a1) + sub o2,o2,d6 + + rlwinm d2,o2,32-5,5,29 + lwzx g1,o4,d2 + rlwinm o2,o2,32-2,27,31 + srw g2,g3,o2 + + and. r0,g2,g1 + bne- __mark__selector__1 + +__small__tuple__or__record: + lwz g1,-8(d0) + subi d2,a0,4 + mr a0,a1 + lwz g1,4(g1) + + mtctr g1 + mflr r0 + stwu r0,-4(sp) + bctrl + mtlr r0 + + lea g1,__indirection + stw a0,4-NODE_POINTER_OFFSET(d2) + stw g1,0-NODE_POINTER_OFFSET(d2) + b __mark__node + +__mark__record__selector__node__1: + beq __mark__strict__record__selector__node__1 + + rlwnm. r0,g1,o2,0,0 + bne- __mark__selector__1 + + lwz d2,0(a1) + andi. r0,d2,2 + beq- __mark__selector__1 + + lhz g1,-2(d2) + cmplwi 0,g1,258 + ble __small__tuple__or__record + b __large__tuple__or__record + +__mark__strict__record__selector__node__1: + rlwnm. r0,g1,o2,0,0 + bne- __mark__selector__1 + + lwz d2,0-NODE_POINTER_OFFSET(a1) + andi. r0,d2,2 + beq- __mark__selector__1 + + lhz g1,-2(d2) + cmplwi 0,g1,258 + ble __select__from__small__record + + lwz o2,8-NODE_POINTER_OFFSET(a1) + sub o2,o2,d6 + + rlwinm d2,o2,32-5,5,29 + lwzx g1,o4,d2 + rlwinm o2,o2,32-2,27,31 + rlwnm. r0,g1,o2,0,0 + bne- __mark__selector__1 + +__select__from__small__record: + lwz g1,-8(d0) + subi a0,a0,4 + lwz g1,4(g1) + + mtctr g1 + mflr r0 + stwu r0,-4(sp) + bctrl + mtlr r0 + + b __mark__node + +__mark__indirection__node: + mr a0,a1 + b __mark__node + +__mark__hnf__2: + cmplwi 0,o3,4 + + bor o1,o3 + stwx o1,o4,o0 + baddi d4,3 + + bge+ fits__in__word__6 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 +fits__in__word__6: + +__mark__record__2__c: + lwz o0,0-NODE_POINTER_OFFSET(a0) + or d3,d3,d5 + ori o0,o0,2 + stw o0,0-NODE_POINTER_OFFSET(a0) + lwzu d2,4-NODE_POINTER_OFFSET(a0) + stw d3,0-NODE_POINTER_OFFSET(a0) + mr d3,a0 + li d5,0 + mr a0,d2 + +__mark__node: + sub d1,a0,d6 + .if SHARE_CHAR_INT + cmplw d1,d7 + bge- __mark__next__node__after__static + .endif + + rlwinm o0,d1,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d1,d1,32-2,27,31 + rlwnm. r0,o1,d1,0,0 + beq __mark__arguments + +__mark__next__node: + tst d5 + bne __mark__parent + +__mark__next__node2: + lwzu d2,-4-NODE_POINTER_OFFSET(d3) + lwz o0,4-NODE_POINTER_OFFSET(d3) + andi. d5,d2,3 + + stw o0,0-NODE_POINTER_OFFSET(d3) + + stw a0,4-NODE_POINTER_OFFSET(d3) + clrrwi a0,d2,2 + b __mark__node + +__mark__lazy__node: + tst d2 + beq __mark__real__or__file + + cmpwi 0,d2,1 + baddi a0,4 + ble __mark__lazy__node__1 + + cmplwi 0,d2,256 + bge __mark_closure_with_unboxed_arguments + baddi d2,1 + + add o2,d1,d2 + cmplwi 0,o2,32 + + add d4,d4,d2 + + bor o1,o3 + stwx o1,o4,o0 + ble+ fits__in__word__7 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits__in__word__7: + subi d2,d2,2 + +__mark_closure_with_unboxed_arguments__2: + lwz o0,0-NODE_POINTER_OFFSET(a0) + slwi d2,d2,2 + ori o0,o0,2 + stw o0,0-NODE_POINTER_OFFSET(a0) + + lwzux d2,a0,d2 + or d3,d3,d5 + stw d3,0-NODE_POINTER_OFFSET(a0) + mr d3,a0 + li d5,0 + mr a0,d2 + b __mark__node + +__mark_closure_with_unboxed_arguments: + srwi d0,d2,8 + bandic d2,255 + + bsubicc d2,1 + beq __mark_closure_1_with_unboxed_argument + + baddi d2,2 + add o2,d1,d2 + cmplwi 0,o2,32 + + badd d4,d2 + + bor o1,o3 + stwx o1,o4,o0 + ble+ fits__in__word__7_ + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits__in__word__7_: + bsub d2,d0 + bsubicc d2,2 + bgt __mark_closure_with_unboxed_arguments__2 + beq __shared__argument__part + bsubi a0,4 + b __mark__next__node + +__mark_closure_1_with_unboxed_argument: + bsubi a0,4 + b __mark__real__or__file + +__mark__hnf__0: + cmplw d0,int_reg + bne __no__int__3 + + lwz d2,4-NODE_POINTER_OFFSET(a0) + cmplwi 0,d2,33 + slwi d2,d2,3 + blt ____small____int + +__mark__bool__or__small__string: + cmplwi 0,o3,2 + + bor o1,o3 + stwx o1,o4,o0 + baddi d4,2 + + bge+ __mark__next__node + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + b __mark__next__node + +____small____int: + lea a0,small_integers + add a0,a0,d2 + b __mark__next__node__after__static + +__no__int__3: + blt __mark__real__file__or__string + + cmplw 0,d0,char_reg + bne __no__char__3 + + lbz d2,7-NODE_POINTER_OFFSET(a0) + lea a0,static_characters + slwi d2,d2,3 + add a0,a0,d2 + b __mark__next__node__after__static + +__no__char__3: + blt __mark__bool__or__small__string + + subi a0,d0,2-ZERO_ARITY_DESCRIPTOR_OFFSET + b __mark__next__node__after__static + +__mark__real__file__or__string: + lea g1,__STRING__+2 + cmplw 0,d0,g1 + ble __mark__string__or__array + +__mark__real__or__file: + cmplwi 0,o3,4 + bor o1,o3 + stwx o1,o4,o0 + baddi d4,3 + bge+ __mark__next__node + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + b __mark__next__node + +__mark__record: + subic. d2,d2,258 + beq __mark__record__2 + blt __mark__record__1 + +__mark__record__3: + cmplwi 0,o3,4 + + bor o1,o3 + stwx o1,o4,o0 + baddi d4,3 + + lwz a1,4-NODE_POINTER_OFFSET(a0) + + bge+ fits__in__word__13 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 +fits__in__word__13: + + lhz d1,-2+2(d0) + + sub d0,a1,d6 + rlwinm o0,d0,32-5,5,29 + lwzx o1,o4,o0 + rlwinm d0,d0,32-2,27,31 + srw o3,g3,d0 + + and. r0,o3,o1 + bne __shared__record__argument__part + + addi d2,d2,1 + + add o2,d0,d2 + cmplwi 6,o2,32 + + add d4,d4,d2 + + subic. d1,d1,1 + + bor o1,o3 + stwx o1,o4,o0 + ble+ cr6,fits__in__word__14 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits__in__word__14: + blt __mark__record__3__bb + beq __shared__argument__part + + subic. d1,d1,1 + or d3,d3,d5 + stwu d3,4-NODE_POINTER_OFFSET(a0) + + beq __mark__record__3__aab + + lwz g1,0-NODE_POINTER_OFFSET(a1) + slwi d1,d1,2 + ori g1,g1,1 + stw g1,0-NODE_POINTER_OFFSET(a1) + + lwzux d2,a1,d1 + li d5,0 + stw a0,0-NODE_POINTER_OFFSET(a1) + mr d3,a1 + mr a0,d2 + b __mark__node + +__mark__record__3__bb: + subi a0,a0,4 + b __mark__next__node + +__mark__record__3__aab: + lwz d2,0-NODE_POINTER_OFFSET(a1) + stw a0,0-NODE_POINTER_OFFSET(a1) + mr d3,a1 + li d5,1 + mr a0,d2 + b __mark__node + +__shared__record__argument__part: + tst d1 + bne __shared__argument__part + subi a0,a0,4 + b __mark__next__node + +__mark__record__2: + cmplwi 0,o3,4 + + lhz g1,-2+2(d0) + bor o1,o3 + + cmplwi 6,g1,1 + baddi d4,3 + + stwx o1,o4,o0 + bge+ fits__in__word_12 + + baddi o0,4 + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + +fits__in__word_12: + bgt cr6,__mark__record__2__c + beq cr6,__shared__argument__part + subi a0,a0,4 + b __mark__next__node + +__mark__record__1: + lhz g1,-2+2(d0) + tst g1 + bne __mark__hnf__1 + subi a0,a0,4 + b __mark__bool__or__small__string + +__mark__string__or__array: + beq __mark__string__ + +__mark__array: + lwz d1,8-NODE_POINTER_OFFSET(a0) + tst d1 + beq __mark__lazy__array + + lhz d0,-2(d1) + tst d0 + beq __mark__strict__basic__array + + lhz d1,-2+2(d1) + tst d1 + beq __mark__b__record__array + + subi d0,d0,256 + cmpw 0,d0,d1 + beq __mark__a__record__array + +__mark__ab__record__array: + mr o2,d2 + mr g0,d3 + mr g1,d4 + mr g2,d5 + + lwz d2,4-NODE_POINTER_OFFSET(a0) + baddi a0,8 + stw a0,-4(sp) + + slwi d2,d2,2 + mullw a1,d2,d0 + + sub d0,d0,d1 + baddi a0,4 + add a1,a0,a1 + + mflr r0 + stw o0,-8(sp) + stw o1,-12(sp) + stw r0,-16(sp) + + bl reorder + + lwz o0,-8(sp) + lwz o1,-12(sp) + lwz r0,-16(sp) + + lwz a0,-4(sp) + mtlr r0 + + mr d5,g2 + mr d4,g1 + mr d3,g0 + mr d2,o2 + + lwz g1,-4(a0) + mr a1,d0 + mullw d0,d1,g1 + mullw d1,a1,g1 + badd d4,d1 + badd d1,d0 + +; to do add n b elements to d4 + + slwi d1,d1,2 + add d1,a0,d1 + sub d1,d1,d6 + + slwi a1,d0,2 + add a1,a0,a1 + b __mark__r__array + +__mark__a__record__array: + lwz g1,4-NODE_POINTER_OFFSET(a0) + baddi a0,8 + mullw d0,d0,g1 + b __mark__lr__array + +__mark__lazy__array: + lwz d0,4-NODE_POINTER_OFFSET(a0) + baddi a0,8 + +__mark__lr__array: + slwi a1,d0,2 + add a1,a0,a1 + + sub d1,a1,d6 +__mark__r__array: + rlwinm d1,d1,32-5,5,29 + + cmplw 0,o0,d1 + + bor o1,o3 + stwx o1,o4,o0 + + bge __skip__mark__lazy__array__bits + +__mark__lazy__array__bits: + baddi o0,4 + lwzx o1,o4,o0 + cmplw 0,o0,d1 + bor o1,g3 + stwx o1,o4,o0 + blt __mark__lazy__array__bits + +__skip__mark__lazy__array__bits: + cmplwi d0,1 + + baddi d4,3 + add d4,d4,d0 + lea o2,lazy_array_list + + ble __mark__array__length__0__1 + + lwz d2,0-NODE_POINTER_OFFSET(a1) + lwz o0,0-NODE_POINTER_OFFSET(a0) + stw d2,0-NODE_POINTER_OFFSET(a0) + stw o0,0-NODE_POINTER_OFFSET(a1) + + lwzu d2,-4-NODE_POINTER_OFFSET(a1) + lwz o1,0(o2) + addi d2,d2,2 + stw o1,0-NODE_POINTER_OFFSET(a1) + stw d2,-4-NODE_POINTER_OFFSET(a0) + stwu d0,-8-NODE_POINTER_OFFSET(a0) + stw a0,0(o2) + + lwzu d2,-4-NODE_POINTER_OFFSET(a1) + or d3,d3,d5 + stw d3,0-NODE_POINTER_OFFSET(a1) + mr d3,a1 + li d5,0 + mr a0,d2 + b __mark__node + +__mark__array__length__0__1: + subi a0,a0,8 + blt __mark__next__node + + lwz d1,12-NODE_POINTER_OFFSET(a0) ; element + lwz o0,8-NODE_POINTER_OFFSET(a0) ; element descriptor + lwz o3,0(o2) + stw o0,12-NODE_POINTER_OFFSET(a0) + stw o3,8-NODE_POINTER_OFFSET(a0) + stw d0,0-NODE_POINTER_OFFSET(a0) + + stw a0,0(o2) + stwu d1,4-NODE_POINTER_OFFSET(a0) + + lwz d2,0-NODE_POINTER_OFFSET(a0) + or d3,d3,d5 + stw d3,0-NODE_POINTER_OFFSET(a0) + mr d3,a0 + li d5,2 + mr a0,d2 + b __mark__node + +__mark__b__record__array: + lwz d1,4-NODE_POINTER_OFFSET(a0) + subi d0,d0,256 + mullw d0,d0,d1 + addi d0,d0,3 + b __mark__basic__array + +__mark__strict__basic__array: + lwz d0,4-NODE_POINTER_OFFSET(a0) + cmplw 0,d1,int_reg + beq __mark__strict__int__array + cmplw 0,d1,bool_reg + beq __mark__strict__bool__array +__mark__strict__real__array: + badd d0,d0 +__mark__strict__int__array: + addi d0,d0,3 + b __mark__basic__array +__mark__strict__bool__array: + addi d0,d0,12+3 + srwi d0,d0,2 + b __mark__basic__array + +__mark__string__: + lwz d0,4-NODE_POINTER_OFFSET(a0) + addi d0,d0,8+3 + srwi d0,d0,2 + +__mark__basic__array: + bor o1,o3 + stwx o1,o4,o0 + + add d4,d4,d0 + + slwi d0,d0,2 + badd d0,a0 + subi d0,d0,4 + + sub d0,d0,d6 + rlwinm d0,d0,32-5,5,29 + + cmplw 0,o0,d0 + bge __mark__next__node + + baddi o0,4 + cmplw 0,o0,d0 + bge __last__string__bits + +__mark__string__lp: + stwx g3,o4,o0 + baddi o0,4 + cmplw 0,o0,d0 + blt __mark__string__lp + +__last__string__bits: + lwzx o1,o4,o0 + bor o1,g3 + stwx o1,o4,o0 + b __mark__next__node + +__mark__parent: + tst d3 + beq __end__mark__using__reversal + + subic. d5,d5,1 + lwz d2,0-NODE_POINTER_OFFSET(d3) + stw a0,0-NODE_POINTER_OFFSET(d3) + beq __argument__part__parent + + subi a0,d3,4 + andi. d5,d2,3 + clrrwi d3,d2,2 + b __mark__next__node + +__argument__part__parent: + mr a1,d3 + + clrrwi d3,d2,2 + + lwzu a0,-4-NODE_POINTER_OFFSET(d3) + lwz o0,4-NODE_POINTER_OFFSET(d3) + li d5,2 + stw o0,0-NODE_POINTER_OFFSET(d3) + stw a1,4-NODE_POINTER_OFFSET(d3) + b __mark__node + +__mark__next__node__after__static: + tst d5 + beq __mark__next__node2 + + tst d3 + beq __end__mark__using__reversal__after__static + + subic. d5,d5,1 + lwz d2,0-NODE_POINTER_OFFSET(d3) + stw a0,0-NODE_POINTER_OFFSET(d3) + beq __argument__part__parent + + subi a0,d3,4 + andi. d5,d2,3 + clrrwi d3,d2,2 + b __mark__next__node + + .text |