diff options
Diffstat (limited to 'macho64/acompact_rmark.s')
-rw-r--r-- | macho64/acompact_rmark.s | 953 |
1 files changed, 953 insertions, 0 deletions
diff --git a/macho64/acompact_rmark.s b/macho64/acompact_rmark.s new file mode 100644 index 0000000..359fe1b --- /dev/null +++ b/macho64/acompact_rmark.s @@ -0,0 +1,953 @@ + +rmark_stack_nodes1: + mov rbx,qword ptr [rcx] + lea rax,1[rsi] + mov qword ptr [rsi],rbx + mov qword ptr [rcx],rax + +rmark_next_stack_node: + add rsi,8 + cmp rsi,qword ptr end_vector[rip] + je end_rmark_nodes + +rmark_stack_nodes: + mov rcx,qword ptr [rsi] + + mov rax,qword ptr neg_heap_p3[rip] + add rax,rcx + + cmp rax,qword ptr heap_size_64_65[rip] + att_jnc rmark_next_stack_node + + mov rbx,rax + and rax,31*8 + shr rbx,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + mov ebp,dword ptr [rdi+rbx*4] + test rbp,rax + att_jne rmark_stack_nodes1 + + or rbp,rax + mov dword ptr [rdi+rbx*4],ebp + + mov rax,qword ptr [rcx] + call rmark_stack_node + + add rsi,8 + cmp rsi,qword ptr end_vector[rip] + att_jne rmark_stack_nodes + ret + +rmark_stack_node: + sub rsp,16 + mov qword ptr [rsi],rax + lea rbp,1[rsi] + mov qword ptr 8[rsp],rsi + mov rbx,-1 + mov qword ptr [rsp],0 + mov qword ptr [rcx],rbp + jmp rmark_no_reverse + +rmark_node_d1: + mov rax,qword ptr neg_heap_p3[rip] + add rax,rcx + + cmp rax,qword ptr heap_size_64_65[rip] + jnc rmark_next_node + + jmp rmark_node_ + +rmark_hnf_2: + lea rbx,8[rcx] + mov rax,qword ptr 8[rcx] + sub rsp,16 + + mov rsi,rcx + mov rcx,qword ptr [rcx] + + mov qword ptr 8[rsp],rbx + mov qword ptr [rsp],rax + + cmp rsp,qword ptr end_stack[rip] + jb rmark_using_reversal + +rmark_node: + mov rax,qword ptr neg_heap_p3[rip] + add rax,rcx + + cmp rax,qword ptr heap_size_64_65[rip] + att_jnc rmark_next_node + + mov rbx,rsi + +rmark_node_: + mov rdx,rax + and rax,31*8 + shr rdx,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + mov ebp,dword ptr [rdi+rdx*4] + test rbp,rax + jne rmark_reverse_and_mark_next_node + + or rbp,rax + mov dword ptr [rdi+rdx*4],ebp + + mov rax,qword ptr [rcx] +rmark_arguments: + cmp rcx,rbx + att_ja rmark_no_reverse + + lea rbp,1[rsi] + mov qword ptr [rsi],rax + mov qword ptr [rcx],rbp + +rmark_no_reverse: + test al,2 + je rmark_lazy_node + + movzx rbp,word ptr (-2)[rax] + test rbp,rbp + je rmark_hnf_0 + + add rcx,8 + + cmp rbp,256 + jae rmark_record + + sub rbp,2 + att_je rmark_hnf_2 + jc rmark_hnf_1 + +rmark_hnf_3: + mov rdx,qword ptr 8[rcx] +rmark_hnf_3_: + cmp rsp,qword ptr end_stack[rip] + jb rmark_using_reversal_ + + mov rax,qword ptr neg_heap_p3[rip] + add rax,rdx + + mov rbx,rax + and rax,31*8 + shr rbx,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + test eax,[rdi+rbx*4] + jne rmark_shared_argument_part + + or dword ptr [rdi+rbx*4],eax + +rmark_no_shared_argument_part: + sub rsp,16 + mov qword ptr 8[rsp],rcx + lea rsi,8[rcx] + mov rcx,qword ptr [rcx] + lea rdx,[rdx+rbp*8] + mov qword ptr [rsp],rcx + +rmark_push_hnf_args: + mov rbx,qword ptr [rdx] + sub rsp,16 + mov qword ptr 8[rsp],rdx + sub rdx,8 + mov qword ptr [rsp],rbx + + sub rbp,1 + att_jg rmark_push_hnf_args + + mov rcx,qword ptr [rdx] + + cmp rdx,rsi + ja rmark_no_reverse_argument_pointer + + lea rbp,3[rsi] + mov qword ptr [rsi],rcx + mov qword ptr [rdx],rbp + + mov rax,qword ptr neg_heap_p3[rip] + add rax,rcx + + cmp rax,qword ptr heap_size_64_65[rip] + att_jnc rmark_next_node + + mov rbx,rdx + att_jmp rmark_node_ + +rmark_no_reverse_argument_pointer: + mov rsi,rdx + att_jmp rmark_node + +rmark_shared_argument_part: + cmp rdx,rcx + att_ja rmark_hnf_1 + + mov rbx,qword ptr [rdx] + lea rax,(8+2+1)[rcx] + mov qword ptr [rdx],rax + mov qword ptr 8[rcx],rbx + att_jmp rmark_hnf_1 + +rmark_record: + sub rbp,258 + je rmark_record_2 + jb rmark_record_1 + +rmark_record_3: + movzx rbp,word ptr (-2+2)[rax] + mov rdx,qword ptr (16-8)[rcx] + sub rbp,1 + jb rmark_record_3_bb + je rmark_record_3_ab + sub rbp,1 + je rmark_record_3_aab + att_jmp rmark_hnf_3_ + +rmark_record_3_bb: + sub rcx,8 + + mov rax,qword ptr neg_heap_p3[rip] + add rax,rdx + + mov rbp,rax + and rax,31*8 + shr rbp,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + or dword ptr [rdi+rbp*4],eax + + cmp rdx,rcx + att_ja rmark_next_node + + add eax,eax + jne rmark_bit_in_same_word1 + inc rbp + mov rax,1 +rmark_bit_in_same_word1: + test eax,dword ptr [rdi+rbp*4] + je rmark_not_yet_linked_bb + + mov rax,qword ptr neg_heap_p3[rip] + add rax,rcx + + add rax,16 + + mov rbp,rax + and rax,31*8 + shr rbp,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + or dword ptr [rdi+rbp*4],eax + + mov rbp,qword ptr [rdx] + lea rax,(16+2+1)[rcx] + mov qword ptr 16[rcx],rbp + mov qword ptr [rdx],rax + att_jmp rmark_next_node + +rmark_not_yet_linked_bb: + or dword ptr [rdi+rbp*4],eax + mov rbp,qword ptr [rdx] + lea rax,(16+2+1)[rcx] + mov qword ptr 16[rcx],rbp + mov qword ptr [rdx],rax + att_jmp rmark_next_node + +rmark_record_3_ab: + mov rax,qword ptr neg_heap_p3[rip] + add rax,rdx + + mov rbp,rax + and rax,31*8 + shr rbp,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + or dword ptr [rdi+rbp*4],eax + + cmp rdx,rcx + att_ja rmark_hnf_1 + + add eax,eax + jne rmark_bit_in_same_word2 + inc rbp + mov rax,1 +rmark_bit_in_same_word2: + test eax,dword ptr [rdi+rbp*4] + je rmark_not_yet_linked_ab + + mov rax,qword ptr neg_heap_p3[rip] + add rax,rcx + add rax,8 + + mov rbp,rax + and rax,31*8 + shr rbp,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + or dword ptr [rdi+rbp*4],eax + + mov rbp,qword ptr [rdx] + lea rax,(8+2+1)[rcx] + mov qword ptr 8[rcx],rbp + mov qword ptr [rdx],rax + att_jmp rmark_hnf_1 + +rmark_not_yet_linked_ab: + or dword ptr [rdi+rbp*4],eax + mov rbp,qword ptr [rdx] + lea rax,(8+2+1)[rcx] + mov qword ptr 8[rcx],rbp + mov qword ptr [rdx],rax + att_jmp rmark_hnf_1 + +rmark_record_3_aab: + cmp rsp,qword ptr end_stack[rip] + att_jb rmark_using_reversal_ + + mov rax,qword ptr neg_heap_p3[rip] + add rax,rdx + + mov rbp,rax + and rax,31*8 + shr rbp,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + test eax,dword ptr [rdi+rbp*4] + att_jne rmark_shared_argument_part + or dword ptr [rdi+rbp*4],eax + + sub rsp,16 + mov qword ptr 8[rsp],rcx + lea rsi,8[rcx] + mov rcx,qword ptr [rcx] + mov qword ptr [rsp],rcx + + mov rcx,qword ptr [rdx] + + cmp rdx,rsi + att_ja rmark_no_reverse_argument_pointer + + lea rbp,3[rsi] + mov qword ptr [rsi],rcx + mov qword ptr [rdx],rbp + + mov rax,qword ptr neg_heap_p3[rip] + add rax,rcx + + cmp rax,qword ptr heap_size_64_65[rip] + att_jnc rmark_next_node + + mov rbx,rdx + att_jmp rmark_node_ + +rmark_record_2: + cmp word ptr (-2+2)[rax],1 + att_ja rmark_hnf_2 + att_je rmark_hnf_1 + att_jmp rmark_next_node + +rmark_record_1: + cmp word ptr (-2+2)[rax],0 + att_jne rmark_hnf_1 + att_jmp rmark_next_node + +rmark_lazy_node_1: +/* selectors: */ + jne rmark_selector_node_1 + +rmark_hnf_1: + mov rsi,rcx + mov rcx,qword ptr [rcx] + att_jmp rmark_node + +/* selectors */ +rmark_indirection_node: + mov rdx,qword ptr neg_heap_p3[rip] + sub rcx,8 + add rdx,rcx + + mov rbp,rdx + and rbp,31*8 + shr rdx,8 + lea r9,bit_clear_table2[rip] + mov ebp,dword ptr [r9+rbp] + and dword ptr [rdi+rdx*4],ebp + + mov rdx,rcx + cmp rcx,rbx + mov rcx,qword ptr 8[rcx] + mov qword ptr [rsi],rcx + att_ja rmark_node_d1 + mov qword ptr [rdx],rax + att_jmp rmark_node_d1 + +rmark_selector_node_1: + add rbp,3 + att_je rmark_indirection_node + + mov rdx,qword ptr [rcx] + mov qword ptr pointer_compare_address[rip],rbx + + mov rbx,qword ptr neg_heap_p3[rip] + add rbx,rdx + shr rbx,3 + + add rbp,1 + jle rmark_record_selector_node_1 + + mov rbp,rbx + shr rbx,5 + and rbp,31 + lea r9,bit_set_table[rip] + mov ebp,dword ptr [r9+rbp*4] + mov ebx,dword ptr [rdi+rbx*4] + and rbx,rbp + att_jne rmark_hnf_1 + + mov rbx,qword ptr [rdx] + test bl,2 + att_je rmark_hnf_1 + + cmp word ptr (-2)[rbx],2 + jbe rmark_small_tuple_or_record + +rmark_large_tuple_or_record: + mov r10,qword ptr 16[rdx] + + mov rbx,qword ptr neg_heap_p3[rip] + add rbx,r10 + shr rbx,3 + + mov rbp,rbx + shr rbx,5 + and rbp,31 + lea r9,bit_set_table[rip] + mov ebp,dword ptr [r9+rbp*4] + mov ebx,dword ptr [rdi+rbx*4] + and rbx,rbp + att_jne rmark_hnf_1 + + mov rbx,qword ptr neg_heap_p3[rip] + lea rbx,(-8)[rcx+rbx] + + movsxd r11,dword ptr (-8)[rax] + add rax,r11 + + mov r11,rbx + and r11,31*8 + shr rbx,8 + lea r9,bit_clear_table2[rip] + mov r11d,dword ptr [r9+r11] + and dword ptr [rdi+rbx*4],r11d + + movzx eax,word ptr (4-8)[rax] + mov rbx,qword ptr pointer_compare_address[rip] + + lea r9,__indirection[rip] + mov qword ptr (-8)[rcx],r9 + + cmp rax,16 + jl rmark_tuple_or_record_selector_node_2 + + mov rdx,rcx + je rmark_tuple_selector_node_2 + + mov rcx,qword ptr (-24)[r10+rax] + mov qword ptr [rsi],rcx + mov qword ptr [rdx],rcx + att_jmp rmark_node_d1 + +rmark_tuple_selector_node_2: + mov rcx,qword ptr [r10] + mov qword ptr [rsi],rcx + mov qword ptr [rdx],rcx + att_jmp rmark_node_d1 + +rmark_record_selector_node_1: + je rmark_strict_record_selector_node_1 + + mov rbp,rbx + shr rbx,5 + and rbp,31 + lea r9,bit_set_table[rip] + mov ebp,dword ptr [r9+rbp*4] + mov ebx,dword ptr [rdi+rbx*4] + and rbx,rbp + att_jne rmark_hnf_1 + + mov rbx,qword ptr [rdx] + test bl,2 + att_je rmark_hnf_1 + + cmp word ptr (-2)[rbx],258 + att_jbe rmark_small_tuple_or_record + + mov r10,qword ptr 16[rdx] + + mov rbx,qword ptr neg_heap_p3[rip] + add rbx,r10 + shr rbx,3 + + mov rbp,rbx + shr rbx,5 + and rbp,31 + lea r9,bit_set_table[rip] + mov ebp,dword ptr [r9+rbp*4] + mov ebx,dword ptr [rdi+rbx*4] + and rbx,rbp + att_jne rmark_hnf_1 + +rmark_small_tuple_or_record: + mov rbx,qword ptr neg_heap_p3[rip] + lea rbx,(-8)[rcx+rbx] + + movsxd r11,dword ptr(-8)[rax] + add rax,r11 + + mov r11,rbx + and r11,31*8 + shr rbx,8 + lea r9,bit_clear_table2[rip] + mov r11d,dword ptr [r9+r11] + and dword ptr [rdi+rbx*4],r11d + + movzx eax,word ptr (4-8)[rax] + mov rbx,qword ptr pointer_compare_address[rip] + + lea r9,__indirection[rip] + mov qword ptr (-8)[rcx],r9 + + cmp rax,16 + att_jle rmark_tuple_or_record_selector_node_2 + mov rdx,r10 + sub rax,24 +rmark_tuple_or_record_selector_node_2: + mov rbp,rcx + mov rcx,qword ptr [rdx+rax] + mov qword ptr [rsi],rcx + mov qword ptr [rbp],rcx + mov rdx,rbp + att_jmp rmark_node_d1 + +rmark_strict_record_selector_node_1: + mov rbp,rbx + shr rbx,5 + and rbp,31 + lea r9,bit_set_table[rip] + mov ebp,dword ptr [r9+rbp*4] + mov ebx,dword ptr [rdi+rbx*4] + and rbx,rbp + att_jne rmark_hnf_1 + + mov rbx,qword ptr [rdx] + test bl,2 + att_je rmark_hnf_1 + + cmp word ptr (-2)[rbx],258 + jbe rmark_select_from_small_record + + mov r10,qword ptr 16[rdx] + + mov rbx,qword ptr neg_heap_p3[rip] + add rbx,r10 + mov rbp,rbx + + shr rbx,8 + and rbp,31*8 + lea r9,bit_set_table2[rip] + mov ebp,dword ptr [r9+rbp] + mov ebx,dword ptr [rdi+rbx*4] + and rbx,rbp + att_jne rmark_hnf_1 + +rmark_select_from_small_record: + movsxd rbx,dword ptr(-8)[rax] + add rbx,rax + sub rcx,8 + + cmp rcx,qword ptr pointer_compare_address[rip] + ja rmark_selector_pointer_not_reversed + + movzx eax,word ptr (4-8)[rbx] + cmp rax,16 + jle rmark_strict_record_selector_node_2 + mov rax,qword ptr (-24)[r10+rax] + jmp rmark_strict_record_selector_node_3 +rmark_strict_record_selector_node_2: + mov rax,qword ptr [rdx+rax] +rmark_strict_record_selector_node_3: + mov qword ptr 8[rcx],rax + + movzx eax,word ptr (6-8)[rbx] + test rax,rax + je rmark_strict_record_selector_node_5 + cmp rax,16 + jle rmark_strict_record_selector_node_4 + mov rdx,r10 + sub rax,24 +rmark_strict_record_selector_node_4: + mov rax,qword ptr [rdx+rax] + mov qword ptr 16[rcx],rax +rmark_strict_record_selector_node_5: + + mov rax,qword ptr ((-8)-8)[rbx] + + add rsi,1 + mov qword ptr [rcx],rsi + mov qword ptr (-1)[rsi],rax + att_jmp rmark_next_node + +rmark_selector_pointer_not_reversed: + movzx eax,word ptr (4-8)[rbx] + cmp rax,16 + jle rmark_strict_record_selector_node_6 + mov rax,qword ptr (-24)[r10+rax] + jmp rmark_strict_record_selector_node_7 +rmark_strict_record_selector_node_6: + mov rax,qword ptr [rdx+rax] +rmark_strict_record_selector_node_7: + mov qword ptr 8[rcx],rax + + movzx eax,word ptr (6-8)[rbx] + test rax,rax + je rmark_strict_record_selector_node_9 + cmp rax,16 + jle rmark_strict_record_selector_node_8 + mov rdx,r10 + sub rax,24 +rmark_strict_record_selector_node_8: + mov rax,qword ptr [rdx+rax] + mov qword ptr 16[rcx],rax +rmark_strict_record_selector_node_9: + + mov rax,qword ptr ((-8)-8)[rbx] + mov qword ptr [rcx],rax + att_jmp rmark_next_node + +rmark_reverse_and_mark_next_node: + cmp rcx,rbx + att_ja rmark_next_node + + mov rax,qword ptr [rcx] + mov qword ptr [rsi],rax + add rsi,1 + mov qword ptr [rcx],rsi + +/* %rbp ,%rbx : free */ + +rmark_next_node: + mov rcx,qword ptr [rsp] + mov rsi,qword ptr 8[rsp] + add rsp,16 + + cmp rcx,1 + att_ja rmark_node + +rmark_next_node_: +end_rmark_nodes: + ret + +rmark_lazy_node: + movsxd rbp,dword ptr (-4)[rax] + test rbp,rbp + att_je rmark_next_node + + add rcx,8 + + sub rbp,1 + att_jle rmark_lazy_node_1 + + cmp rbp,255 + jge rmark_closure_with_unboxed_arguments + +rmark_closure_with_unboxed_arguments_: + lea rcx,[rcx+rbp*8] + +rmark_push_lazy_args: + mov rbx,qword ptr [rcx] + sub rsp,16 + mov qword ptr 8[rsp],rcx + sub rcx,8 + mov qword ptr [rsp],rbx + sub rbp,1 + att_jg rmark_push_lazy_args + + mov rsi,rcx + mov rcx,qword ptr [rcx] + + cmp rsp,qword ptr end_stack[rip] + att_jae rmark_node + + att_jmp rmark_using_reversal + +rmark_closure_with_unboxed_arguments: +/* (a_size+b_size)+(b_size<<8) */ +/* addl $1,%rbp */ + mov rax,rbp + and rbp,255 + shr rax,8 + sub rbp,rax +/* subl $1,%rbp */ + att_jg rmark_closure_with_unboxed_arguments_ + att_je rmark_hnf_1 + att_jmp rmark_next_node + +rmark_hnf_0: + lea r9,dINT+2[rip] + cmp rax,r9 + je rmark_int_3 + + lea r9,CHAR+2[rip] + cmp rax,r9 + je rmark_char_3 + + jb rmark_no_normal_hnf_0 + + mov rbp,qword ptr neg_heap_p3[rip] + add rbp,rcx + + mov rdx,rbp + and rdx,31*8 + shr rbp,8 + lea r9,bit_clear_table2[rip] + mov edx,dword ptr [r9+rdx] + and dword ptr [rdi+rbp*4],edx + + lea rdx,((-8)-2)[rax] + mov qword ptr [rsi],rdx + cmp rcx,rbx + att_ja rmark_next_node + mov qword ptr [rcx],rax + att_jmp rmark_next_node + +rmark_int_3: + mov rbp,qword ptr 8[rcx] + cmp rbp,33 + att_jnc rmark_next_node + + shl rbp,4 + lea rdx,small_integers[rip] + add rdx,rbp + mov rbp,qword ptr neg_heap_p3[rip] + mov qword ptr [rsi],rdx + add rbp,rcx + + mov rdx,rbp + and rdx,31*8 + shr rbp,8 + lea r9,bit_clear_table2[rip] + mov edx,dword ptr [r9+rdx] + and dword ptr [rdi+rbp*4],edx + + cmp rcx,rbx + att_ja rmark_next_node + mov qword ptr [rcx],rax + att_jmp rmark_next_node + +rmark_char_3: + movzx rdx,byte ptr 8[rcx] + mov rbp,qword ptr neg_heap_p3[rip] + + shl rdx,4 + add rbp,rcx + lea r9,static_characters[rip] + add rdx,r9 + mov qword ptr [rsi],rdx + + mov rdx,rbp + and rdx,31*8 + shr rbp,8 + lea r9,bit_clear_table2[rip] + mov edx,dword ptr [r9+rdx] + and dword ptr [rdi+rbp*4],edx + + cmp rcx,rbx + att_ja rmark_next_node + mov qword ptr [rcx],rax + att_jmp rmark_next_node + +rmark_no_normal_hnf_0: + lea r9,__ARRAY__+2[rip] + cmp rax,r9 + att_jne rmark_next_node + + mov rax,qword ptr 16[rcx] + test rax,rax + je rmark_lazy_array + + movzx rdx,word ptr (-2+2)[rax] + test rdx,rdx + je rmark_b_array + + movzx rax,word ptr (-2)[rax] + test rax,rax + att_je rmark_b_array + + cmp rsp,qword ptr end_stack[rip] + jb rmark_array_using_reversal + + sub rax,256 + cmp rdx,rax + mov rbx,rdx + je rmark_a_record_array + +rmark_ab_record_array: + mov rdx,qword ptr 8[rcx] + add rcx,16 + push rcx + + imul rdx,rax + shl rdx,3 + + sub rax,rbx + add rcx,8 + add rdx,rcx + att_call reorder + + pop rcx + mov rax,rbx + imul rax,qword ptr (-8)[rcx] + jmp rmark_lr_array + +rmark_b_array: + mov rax,qword ptr neg_heap_p3[rip] + add rax,rcx + add rax,8 + mov rbp,rax + and rax,31*8 + shr rbp,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + or dword ptr [rdi+rbp*4],eax + + att_jmp rmark_next_node + +rmark_a_record_array: + mov rax,qword ptr 8[rcx] + add rcx,16 + cmp rbx,2 + att_jb rmark_lr_array + + imul rax,rbx + att_jmp rmark_lr_array + +rmark_lazy_array: + cmp rsp,qword ptr end_stack[rip] + att_jb rmark_array_using_reversal + + mov rax,qword ptr 8[rcx] + add rcx,16 + +rmark_lr_array: + mov rbx,qword ptr neg_heap_p3[rip] + add rbx,rcx + shr rbx,3 + add rbx,rax + + mov rdx,rbx + and rbx,31 + shr rdx,5 + lea r9,bit_set_table[rip] + mov ebx,dword ptr [r9+rbx*4] + or dword ptr [rdi+rdx*4],ebx + + cmp rax,1 + jbe rmark_array_length_0_1 + + mov rdx,rcx + lea rcx,[rcx+rax*8] + + mov rax,qword ptr [rcx] + + mov rbx,qword ptr [rdx] + mov qword ptr [rdx],rax + + mov qword ptr [rcx],rbx + + mov rax,qword ptr (-8)[rcx] + sub rcx,8 + + mov rbx,qword ptr (-8)[rdx] + + sub rdx,8 + mov qword ptr [rcx],rbx + + mov qword ptr [rdx],rax + + push rcx + mov rsi,rdx + jmp rmark_array_nodes + +rmark_array_nodes1: + cmp rcx,rsi + ja rmark_next_array_node + + mov rbx,qword ptr [rcx] + lea rax,1[rsi] + mov qword ptr [rsi],rbx + mov qword ptr [rcx],rax + +rmark_next_array_node: + add rsi,8 + cmp rsi,qword ptr [rsp] + je end_rmark_array_node + +rmark_array_nodes: + mov rcx,qword ptr [rsi] + + mov rax,qword ptr neg_heap_p3[rip] + add rax,rcx + + cmp rax,qword ptr heap_size_64_65[rip] + att_jnc rmark_next_array_node + + mov rbx,rax + and rax,31*8 + shr rbx,8 + lea r9,bit_set_table2[rip] + mov eax,dword ptr [r9+rax] + mov ebp,dword ptr [rdi+rbx*4] + test rbp,rax + att_jne rmark_array_nodes1 + + or rbp,rax + mov dword ptr [rdi+rbx*4],ebp + + mov rax,qword ptr [rcx] + call rmark_array_node + + add rsi,8 + cmp rsi,qword ptr [rsp] + att_jne rmark_array_nodes + +end_rmark_array_node: + add rsp,8 + att_jmp rmark_next_node + +rmark_array_node: + sub rsp,16 + mov qword ptr 8[rsp],rsi + mov rbx,rsi + mov qword ptr [rsp],1 + att_jmp rmark_arguments + +rmark_array_length_0_1: + lea rcx,-16[rcx] + att_jb rmark_next_node + + mov rbx,qword ptr 24[rcx] + mov rbp,qword ptr 16[rcx] + mov qword ptr 24[rcx],rbp + mov rbp,qword ptr 8[rcx] + mov qword ptr 16[rcx],rbp + mov qword ptr 8[rcx],rbx + add rcx,8 + att_jmp rmark_hnf_1 + + + .data +pointer_compare_address: + .quad 0 + + .text |