rmark_using_reversal:
push rsi
push rsi
mov rsi,1
jmp rmarkr_node
rmark_using_reversal_:
sub rcx,8
push rbx
push rsi
cmp rcx,rbx
ja rmark_no_undo_reverse_1
mov qword ptr [rsi],rcx
mov qword ptr [rcx],rax
rmark_no_undo_reverse_1:
mov rsi,1
jmp rmarkr_arguments
rmark_array_using_reversal:
push rbx
push rsi
cmp rcx,rbx
ja rmark_no_undo_reverse_2
mov qword ptr [rsi],rcx
ifdef PIC
lea r9,__ARRAY__+2+0
mov qword ptr [rcx],r9
else
mov qword ptr [rcx],offset __ARRAY__+2
endif
rmark_no_undo_reverse_2:
mov rsi,1
jmp rmarkr_arguments
rmarkr_hnf_2:
or qword ptr [rcx],2
mov rbp,qword ptr 8[rcx]
mov qword ptr 8[rcx],rsi
lea rsi,8[rcx]
mov rcx,rbp
rmarkr_node:
mov rax,qword ptr neg_heap_p3+0
add rax,rcx
cmp rax,qword ptr heap_size_64_65+0
jnc rmarkr_next_node_after_static
mov rbx,rax
and rax,31*8
shr rbx,8
ifdef PIC
lea r9,bit_set_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr (bit_set_table2)[rax]
endif
mov ebp,dword ptr [rdi+rbx*4]
test rbp,rax
jne rmarkr_next_node
or rbp,rax
mov dword ptr [rdi+rbx*4],ebp
rmarkr_arguments:
mov rax,qword ptr [rcx]
test al,2
je rmarkr_lazy_node
movzx rbp,word ptr (-2)[rax]
test rbp,rbp
je rmarkr_hnf_0
add rcx,8
cmp rbp,256
jae rmarkr_record
sub rbp,2
je rmarkr_hnf_2
jc rmarkr_hnf_1
rmarkr_hnf_3:
mov rdx,qword ptr 8[rcx]
mov rax,qword ptr neg_heap_p3+0
add rax,rdx
mov rbx,rax
and rax,31*8
shr rbx,8
ifdef PIC
lea r9,bit_set_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr (bit_set_table2)[rax]
endif
test eax,[rdi+rbx*4]
jne rmarkr_shared_argument_part
or dword ptr [rdi+rbx*4],eax
rmarkr_no_shared_argument_part:
or qword ptr [rcx],2
mov qword ptr 8[rcx],rsi
add rcx,8
or qword ptr [rdx],1
lea rdx,[rdx+rbp*8]
mov rbp,qword ptr [rdx]
mov qword ptr [rdx],rcx
mov rsi,rdx
mov rcx,rbp
jmp rmarkr_node
rmarkr_shared_argument_part:
cmp rdx,rcx
ja rmarkr_hnf_1
mov rbx,qword ptr [rdx]
lea rax,(8+2+1)[rcx]
mov qword ptr [rdx],rax
mov qword ptr 8[rcx],rbx
jmp rmarkr_hnf_1
rmarkr_record:
sub rbp,258
je rmarkr_record_2
jb rmarkr_record_1
rmarkr_record_3:
movzx rbp,word ptr (-2+2)[rax]
sub rbp,1
jb rmarkr_record_3_bb
je rmarkr_record_3_ab
dec rbp
je rmarkr_record_3_aab
jmp rmarkr_hnf_3
rmarkr_record_3_bb:
mov rdx,qword ptr (16-8)[rcx]
sub rcx,8
mov rax,qword ptr neg_heap_p3+0
add rax,rdx
mov rbp,rax
and rax,31*8
shr rbp,8
ifdef PIC
lea r9,bit_set_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr (bit_set_table2)[rax]
endif
or dword ptr [rdi+rbp*4],eax
cmp rdx,rcx
ja rmarkr_next_node
add eax,eax
jne rmarkr_bit_in_same_word1
inc rbp
mov rax,1
rmarkr_bit_in_same_word1:
test eax,dword ptr [rdi+rbp*4]
je rmarkr_not_yet_linked_bb
mov rax,qword ptr neg_heap_p3+0
add rax,rcx
add rax,2*8
mov rbp,rax
and rax,31*8
shr rbp,8
ifdef PIC
lea r9,bit_set_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr (bit_set_table2)[rax]
endif
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
jmp rmarkr_next_node
rmarkr_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
jmp rmarkr_next_node
rmarkr_record_3_ab:
mov rdx,qword ptr 8[rcx]
mov rax,qword ptr neg_heap_p3+0
add rax,rdx
mov rbp,rax
and rax,31*8
shr rbp,8
ifdef PIC
lea r9,bit_set_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr (bit_set_table2)[rax]
endif
or dword ptr [rdi+rbp*4],eax
cmp rdx,rcx
ja rmarkr_hnf_1
add eax,eax
jne rmarkr_bit_in_same_word2
inc rbp
mov rax,1
rmarkr_bit_in_same_word2:
test eax,dword ptr [rdi+rbp*4]
je rmarkr_not_yet_linked_ab
mov rax,qword ptr neg_heap_p3+0
add rax,rcx
add rax,8
mov rbp,rax
and rax,31*8
shr rbp,8
ifdef PIC
lea r9,bit_set_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr (bit_set_table2)[rax]
endif
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
jmp rmarkr_hnf_1
rmarkr_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
jmp rmarkr_hnf_1
rmarkr_record_3_aab:
mov rdx,qword ptr 8[rcx]
mov rax,qword ptr neg_heap_p3+0
add rax,rdx
mov rbp,rax
and rax,31*8
shr rbp,8
ifdef PIC
lea r9,bit_set_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr (bit_set_table2)[rax]
endif
test eax,dword ptr [rdi+rbp*4]
jne rmarkr_shared_argument_part
or dword ptr [rdi+rbp*4],eax
add qword ptr [rcx],2
mov qword ptr 8[rcx],rsi
add rcx,8
mov rsi,qword ptr [rdx]
mov qword ptr [rdx],rcx
mov rcx,rsi
lea rsi,1[rdx]
jmp rmarkr_node
rmarkr_record_2:
cmp word ptr (-2+2)[rax],1
ja rmarkr_hnf_2
je rmarkr_hnf_1
sub rcx,8
jmp rmarkr_next_node
rmarkr_record_1:
cmp word ptr (-2+2)[rax],0
jne rmarkr_hnf_1
sub rcx,8
jmp rmarkr_next_node
rmarkr_lazy_node_1:
jne rmarkr_selector_node_1
rmarkr_hnf_1:
mov rbp,qword ptr [rcx]
mov qword ptr [rcx],rsi
lea rsi,2[rcx]
mov rcx,rbp
jmp rmarkr_node
rmarkr_indirection_node:
mov rbx,qword ptr neg_heap_p3+0
lea rbx,(-8)[rcx+rbx]
mov rax,rbx
and rax,31*8
shr rbx,8
ifdef PIC
lea r9,bit_clear_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr (bit_clear_table2)[rax]
endif
and dword ptr [rdi+rbx*4],eax
mov rcx,qword ptr [rcx]
jmp rmarkr_node
rmarkr_selector_node_1:
add rbp,3
je rmarkr_indirection_node
mov rdx,qword ptr [rcx]
mov rbx,qword ptr neg_heap_p3+0
add rbx,rdx
shr rbx,3
add rbp,1
jle rmarkr_record_selector_node_1
push rax
mov rax,rbx
shr rbx,5
and rax,31
ifdef PIC
lea r9,bit_set_table+0
mov eax,dword ptr [r9+rax*4]
else
mov eax,dword ptr (bit_set_table)[rax*4]
endif
mov ebx,dword ptr [rdi+rbx*4]
and rbx,rax
pop rax
jne rmarkr_hnf_1
mov rbx,qword ptr [rdx]
test bl,2
je rmarkr_hnf_1
cmp word ptr (-2)[rbx],2
jbe rmarkr_small_tuple_or_record
rmarkr_large_tuple_or_record:
mov rbx,qword ptr 16[rdx]
add rbx,qword ptr neg_heap_p3+0
shr rbx,3
push rax
mov rax,rbx
shr rbx,5
and rax,31
ifdef PIC
lea r9,bit_set_table+0
mov eax,dword ptr [r9+rax*4]
else
mov eax,dword ptr (bit_set_table)[rax*4]
endif
mov ebx,dword ptr [rdi+rbx*4]
and rbx,rax
pop rax
jne rmarkr_hnf_1
ifdef NEW_DESCRIPTORS
mov rbx,qword ptr neg_heap_p3+0
lea rbx,(-8)[rcx+rbx]
push rcx
ifdef PIC
movsxd rcx,dword ptr (-8)[rax]
add rax,rcx
else
mov eax,dword ptr (-8)[rax]
endif
mov rcx,rbx
and rcx,31*8
shr rbx,8
ifdef PIC
lea r9,bit_clear_table2+0
mov ecx,dword ptr [r9+rcx]
else
mov ecx,dword ptr (bit_clear_table2)[rcx]
endif
and dword ptr [rdi+rbx*4],ecx
ifdef PIC
movzx eax,word ptr (4-8)[rax]
else
movzx eax,word ptr 4[rax]
endif
cmp rax,16
jl rmarkr_tuple_or_record_selector_node_2
mov rdx,qword ptr 16[rdx]
je rmarkr_tuple_selector_node_2
mov rcx,qword ptr (-24)[rdx+rax]
pop rdx
ifdef PIC
lea r9,__indirection+0
mov qword ptr (-8)[rdx],r9
else
mov qword ptr (-8)[rdx],offset __indirection
endif
mov qword ptr [rdx],rcx
jmp rmarkr_node
rmarkr_tuple_selector_node_2:
mov rcx,qword ptr [rdx]
pop rdx
ifdef PIC
lea r9,__indirection+0
mov qword ptr (-8)[rdx],r9
else
mov qword ptr (-8)[rdx],offset __indirection
endif
mov qword ptr [rdx],rcx
jmp rmarkr_node
else
rmarkr_small_tuple_or_record:
mov rbx,qword ptr neg_heap_p3+0
lea rbx,(-8)[rcx+rbx]
push rcx
mov rcx,rbx
and rcx,31*8
shr rbx,8
mov ecx,dword ptr (bit_clear_table2)[rcx]
and dword ptr [rdi+rbx*4],ecx
mov eax,(-8)[rax]
mov rcx,rdx
push rbp
mov eax,4[rax]
call near ptr rax
pop rbp
pop rdx
mov qword ptr (-8)[rdx],offset __indirection
mov qword ptr [rdx],rcx
jmp rmarkr_node
endif
rmarkr_record_selector_node_1:
je rmarkr_strict_record_selector_node_1
push rax
mov rax,rbx
shr rbx,5
and rax,31
ifdef PIC
lea r9,bit_set_table+0
mov eax,dword ptr [r9+rax*4]
else
mov eax,dword ptr (bit_set_table)[rax*4]
endif
mov ebx,dword ptr [rdi+rbx*4]
and rbx,rax
pop rax
jne rmarkr_hnf_1
mov rbx,qword ptr [rdx]
test bl,2
je rmarkr_hnf_1
cmp word ptr (-2)[rbx],258
ifdef NEW_DESCRIPTORS
jbe rmarkr_small_tuple_or_record
mov rbx,qword ptr 16[rdx]
add rbx,qword ptr neg_heap_p3+0
shr rbx,3
push rax
mov rax,rbx
shr rbx,5
and rax,31
ifdef PIC
lea r9,bit_set_table+0
mov eax,dword ptr [r9+rax*4]
else
mov eax,dword ptr (bit_set_table)[rax*4]
endif
mov ebx,dword ptr [rdi+rbx*4]
and rbx,rax
pop rax
jne rmarkr_hnf_1
rmarkr_small_tuple_or_record:
mov rbx,qword ptr neg_heap_p3+0
lea rbx,(-8)[rcx+rbx]
push rcx
ifdef PIC
movsxd rcx,dword ptr(-8)[rax]
add rax,rcx
else
mov eax,(-8)[rax]
endif
mov rcx,rbx
and rcx,31*8
shr rbx,8
ifdef PIC
lea r9,bit_clear_table2+0
mov ecx,dword ptr [r9+rcx]
else
mov ecx,dword ptr (bit_clear_table2)[rcx]
endif
and dword ptr [rdi+rbx*4],ecx
ifdef PIC
movzx eax,word ptr (4-8)[rax]
else
movzx eax,word ptr 4[rax]
endif
cmp rax,16
jle rmarkr_tuple_or_record_selector_node_2
mov rdx,qword ptr 16[rdx]
sub rax,24
rmarkr_tuple_or_record_selector_node_2:
mov rcx,qword ptr [rdx+rax]
pop rdx
ifdef PIC
lea r9,__indirection+0
mov qword ptr (-8)[rdx],r9
else
mov qword ptr (-8)[rdx],offset __indirection
endif
mov qword ptr [rdx],rcx
jmp rmarkr_node
else
jbe rmarkr_small_tuple_or_record
jmp rmarkr_large_tuple_or_record
endif
rmarkr_strict_record_selector_node_1:
push rax
mov rax,rbx
shr rbx,5
and rax,31
ifdef PIC
lea r9,bit_set_table+0
mov eax,dword ptr [r9+rax*4]
else
mov eax,dword ptr (bit_set_table)[rax*4]
endif
mov ebx,dword ptr [rdi+rbx*4]
and rbx,rax
pop rax
jne rmarkr_hnf_1
mov rbx,qword ptr [rdx]
test bl,2
je rmarkr_hnf_1
cmp word ptr (-2)[rbx],258
jbe rmarkr_select_from_small_record
mov rbx,qword ptr 16[rdx]
add rbx,qword ptr neg_heap_p3+0
push rax
mov rax,rbx
shr rbx,8
and rax,31*8
ifdef PIC
lea r9,bit_set_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr (bit_set_table2)[rax]
endif
mov ebx,dword ptr [rdi+rbx*4]
and rbx,rax
pop rax
jne rmarkr_hnf_1
rmarkr_select_from_small_record:
ifdef PIC
movsxd rbx,dword ptr(-8)[rax]
add rax,rbx
else
mov eax,(-8)[rax]
endif
sub rcx,8
ifdef NEW_DESCRIPTORS
ifdef PIC
movzx ebx,word ptr (4-8)[rax]
else
movzx ebx,word ptr 4[rax]
endif
cmp rbx,16
jle rmarkr_strict_record_selector_node_2
add rbx,qword ptr 16[rdx]
mov rbx,qword ptr (-24)[rbx]
jmp rmarkr_strict_record_selector_node_3
rmarkr_strict_record_selector_node_2:
mov rbx,qword ptr [rdx+rbx]
rmarkr_strict_record_selector_node_3:
mov qword ptr 8[rcx],rbx
ifdef PIC
movzx ebx,word ptr (6-8)[rax]
else
movzx ebx,word ptr 6[rax]
endif
test rbx,rbx
je rmarkr_strict_record_selector_node_5
cmp rbx,16
jle rmarkr_strict_record_selector_node_4
mov rdx,qword ptr 16[rdx]
sub rbx,24
rmarkr_strict_record_selector_node_4:
mov rbx,qword ptr [rdx+rbx]
mov qword ptr 16[rcx],rbx
rmarkr_strict_record_selector_node_5:
ifdef PIC
mov rax,qword ptr ((-8)-8)[rbx]
else
mov rax,qword ptr (-8)[rbx]
endif
mov qword ptr [rcx],rax
else
mov eax,4[rax]
call near ptr rax
endif
jmp rmarkr_next_node
; a2,d1: free
rmarkr_next_node:
test rsi,3
jne rmarkr_parent
mov rbp,qword ptr (-8)[rsi]
mov rbx,3
and rbx,rbp
sub rsi,8
cmp rbx,3
je rmarkr_argument_part_cycle1
mov rdx,qword ptr 8[rsi]
mov qword ptr [rsi],rdx
rmarkr_c_argument_part_cycle1:
cmp rcx,rsi
ja rmarkr_no_reverse_1
mov rdx,qword ptr [rcx]
lea rax,(8+1)[rsi]
mov qword ptr 8[rsi],rdx
mov qword ptr [rcx],rax
or rsi,rbx
mov rcx,rbp
xor rcx,rbx
jmp rmarkr_node
rmarkr_no_reverse_1:
mov qword ptr 8[rsi],rcx
mov rcx,rbp
or rsi,rbx
xor rcx,rbx
jmp rmarkr_node
rmarkr_lazy_node:
movsxd rbp,dword ptr (-4)[rax]
test rbp,rbp
je rmarkr_next_node
add rcx,8
sub rbp,1
jle rmarkr_lazy_node_1
cmp rbp,255
jge rmarkr_closure_with_unboxed_arguments
rmarkr_closure_with_unboxed_arguments_:
or qword ptr [rcx],2
lea rcx,[rcx+rbp*8]
mov rbp,qword ptr [rcx]
mov qword ptr [rcx],rsi
mov rsi,rcx
mov rcx,rbp
jmp rmarkr_node
rmarkr_closure_with_unboxed_arguments:
; (a_size+b_size)+(b_size<<8)
; add rbp,1
mov rax,rbp
and rbp,255
shr rax,8
sub rbp,rax
; sub rbp,1
jg rmarkr_closure_with_unboxed_arguments_
je rmarkr_hnf_1
sub rcx,8
jmp rmarkr_next_node
rmarkr_hnf_0:
ifdef PIC
lea r9,dINT+2+0
cmp rax,r9
else
cmp rax,offset dINT+2
endif
je rmarkr_int_3
ifdef PIC
lea r9,CHAR+2+0
cmp rax,r9
else
cmp rax,offset CHAR+2
endif
je rmarkr_char_3
jb rmarkr_no_normal_hnf_0
mov rbx,qword ptr neg_heap_p3+0
add rbx,rcx
mov rcx,rbx
and rcx,31*8
shr rbx,8
ifdef PIC
lea r9,bit_clear_table2+0
mov ecx,dword ptr [r9+rcx]
else
mov ecx,dword ptr (bit_clear_table2)[rcx]
endif
and dword ptr [rdi+rbx*4],ecx
ifdef NEW_DESCRIPTORS
lea rcx,((-8)-2)[rax]
else
lea rcx,((-12)-2)[rax]
endif
jmp rmarkr_next_node_after_static
rmarkr_int_3:
mov rbp,qword ptr 8[rcx]
cmp rbp,33
jnc rmarkr_next_node
mov rbx,qword ptr neg_heap_p3+0
add rbx,rcx
mov rcx,rbx
and rcx,31*8
shr rbx,8
ifdef PIC
lea r9,bit_clear_table2+0
mov ecx,dword ptr [r9+rcx]
else
mov ecx,dword ptr (bit_clear_table2)[rcx]
endif
shl rbp,4
and dword ptr [rdi+rbx*4],ecx
ifdef PIC
lea rcx,small_integers+0
add rcx,rbp
else
lea rcx,(small_integers)[rbp]
endif
jmp rmarkr_next_node_after_static
rmarkr_char_3:
mov rbx,qword ptr neg_heap_p3+0
movzx rax,byte ptr 8[rcx]
add rbx,rcx
mov rbp,rbx
and rbp,31*8
shr rbx,8
ifdef PIC
lea r9,bit_clear_table2+0
mov ebp,dword ptr [r9+rbp]
else
mov ebp,dword ptr (bit_clear_table2)[rbp]
endif
and dword ptr [rdi+rbx*4],ebp
shl rax,4
ifdef PIC
lea rcx,static_characters+0
add rcx,rax
else
lea rcx,static_characters[rax]
endif
jmp rmarkr_next_node_after_static
rmarkr_no_normal_hnf_0:
lea r9,__ARRAY__+2+0
cmp rax,r9
jne rmarkr_next_node
mov rax,qword ptr 16[rcx]
test rax,rax
je rmarkr_lazy_array
movzx rbx,word ptr (-2+2)[rax]
test rbx,rbx
je rmarkr_b_array
movzx rax,word ptr (-2)[rax]
test rax,rax
je rmarkr_b_array
sub rax,256
cmp rbx,rax
je rmarkr_a_record_array
rmarkr_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
call reorder
pop rcx
mov rax,rbx
imul rax,qword ptr (-8)[rcx]
jmp rmarkr_lr_array
rmarkr_b_array:
mov rax,qword ptr neg_heap_p3+0
add rax,rcx
add rax,8
mov rbp,rax
and rax,31*8
shr rbp,8
ifdef PIC
lea r9,bit_set_table2+0
mov eax,dword ptr [r9+rax]
else
mov eax,dword ptr bit_set_table2[rax]
endif
or dword ptr [rdi+rbp*4],eax
jmp rmarkr_next_node
rmarkr_a_record_array:
mov rax,qword ptr 8[rcx]
add rcx,16
cmp rbx,2
jb rmarkr_lr_array
imul rax,rbx
jmp rmarkr_lr_array
rmarkr_lazy_array:
mov rax,qword ptr 8[rcx]
add rcx,16
rmarkr_lr_array:
mov rbx,qword ptr neg_heap_p3+0
add rbx,rcx
shr rbx,3
add rbx,rax
mov rdx,rbx
and rbx,31
shr rdx,5
ifdef PIC
lea r9,bit_set_table+0
mov ebx,dword ptr [r9+rbx*4]
else
mov ebx,dword ptr (bit_set_table)[rbx*4]
endif
or dword ptr [rdi+rdx*4],ebx
cmp rax,1
jbe rmarkr_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
add rax,2
mov rbx,qword ptr (-8)[rdx]
sub rdx,8
mov qword ptr [rcx],rbx
mov qword ptr [rdx],rax
mov rax,qword ptr (-8)[rcx]
sub rcx,8
mov qword ptr [rcx],rsi
mov rsi,rcx
mov rcx,rax
jmp rmarkr_node
rmarkr_array_length_0_1:
lea rcx,-16[rcx]
jb rmarkr_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
jmp rmarkr_hnf_1
; a2: free
rmarkr_parent:
mov rbx,rsi
and rbx,3
and rsi,-4
je end_rmarkr
sub rbx,1
je rmarkr_argument_part_parent
mov rbp,qword ptr [rsi]
cmp rcx,rsi
ja rmarkr_no_reverse_2
mov rdx,rcx
lea rax,1[rsi]
mov rcx,qword ptr [rdx]
mov qword ptr [rdx],rax
rmarkr_no_reverse_2:
mov qword ptr [rsi],rcx
lea rcx,(-8)[rsi]
mov rsi,rbp
jmp rmarkr_next_node
rmarkr_argument_part_parent:
mov rbp,qword ptr [rsi]
mov rdx,rsi
mov rsi,rcx
mov rcx,rdx
rmarkr_skip_upward_pointers:
mov rax,rbp
and rax,3
cmp rax,3
jne rmarkr_no_upward_pointer
lea rdx,(-3)[rbp]
mov rbp,qword ptr (-3)[rbp]
jmp rmarkr_skip_upward_pointers
rmarkr_no_upward_pointer:
cmp rsi,rcx
ja rmarkr_no_reverse_3
mov rbx,rsi
mov rsi,qword ptr [rsi]
lea rax,1[rcx]
mov qword ptr [rbx],rax
rmarkr_no_reverse_3:
mov qword ptr [rdx],rsi
lea rsi,(-8)[rbp]
and rsi,-4
mov rdx,rsi
mov rbx,3
mov rbp,qword ptr [rsi]
and rbx,rbp
mov rax,qword ptr 8[rdx]
or rsi,rbx
mov qword ptr [rdx],rax
cmp rcx,rdx
ja rmarkr_no_reverse_4
mov rax,qword ptr [rcx]
mov qword ptr 8[rdx],rax
lea rax,(8+2+1)[rdx]
mov qword ptr [rcx],rax
mov rcx,rbp
and rcx,-4
jmp rmarkr_node
rmarkr_no_reverse_4:
mov qword ptr 8[rdx],rcx
mov rcx,rbp
and rcx,-4
jmp rmarkr_node
rmarkr_argument_part_cycle1:
mov rax,qword ptr 8[rsi]
push rdx
rmarkr_skip_pointer_list1:
mov rdx,rbp
and rdx,-4
mov rbp,qword ptr [rdx]
mov rbx,3
and rbx,rbp
cmp rbx,3
je rmarkr_skip_pointer_list1
mov qword ptr [rdx],rax
pop rdx
jmp rmarkr_c_argument_part_cycle1
rmarkr_next_node_after_static:
test rsi,3
jne rmarkr_parent_after_static
mov rbp,qword ptr (-8)[rsi]
mov rbx,3
and rbx,rbp
sub rsi,8
cmp rbx,3
je rmarkr_argument_part_cycle2
mov rax,qword ptr 8[rsi]
mov qword ptr [rsi],rax
rmarkr_c_argument_part_cycle2:
mov qword ptr 8[rsi],rcx
mov rcx,rbp
or rsi,rbx
xor rcx,rbx
jmp rmarkr_node
rmarkr_parent_after_static:
mov rbx,rsi
and rbx,3
and rsi,-4
je end_rmarkr_after_static
sub rbx,1
je rmarkr_argument_part_parent_after_static
mov rbp,qword ptr [rsi]
mov qword ptr [rsi],rcx
lea rcx,(-8)[rsi]
mov rsi,rbp
jmp rmarkr_next_node
rmarkr_argument_part_parent_after_static:
mov rbp,qword ptr [rsi]
mov rdx,rsi
mov rsi,rcx
mov rcx,rdx
; movl rbp,qword ptr [rdx]
rmarkr_skip_upward_pointers_2:
mov rax,rbp
and rax,3
cmp rax,3
jne rmarkr_no_reverse_3
lea rdx,(-3)[rbp]
mov rbp,qword ptr (-3)[rbp]
jmp rmarkr_skip_upward_pointers_2
rmarkr_argument_part_cycle2:
mov rax,qword ptr 8[rsi]
push rdx
rmarkr_skip_pointer_list2:
mov rdx,rbp
and rdx,-4
mov rbp,qword ptr [rdx]
mov rbx,3
and rbx,rbp
cmp rbx,3
je rmarkr_skip_pointer_list2
mov qword ptr [rdx],rax
pop rdx
jmp rmarkr_c_argument_part_cycle2
end_rmarkr_after_static:
mov rsi,qword ptr [rsp]
add rsp,16
mov qword ptr [rsi],rcx
jmp rmarkr_next_stack_node
end_rmarkr:
pop rsi
pop rbx
cmp rcx,rbx
ja rmarkr_no_reverse_5
mov rdx,rcx
lea rax,1[rsi]
mov rcx,qword ptr [rcx]
mov qword ptr [rdx],rax
rmarkr_no_reverse_5:
mov qword ptr [rsi],rcx
rmarkr_next_stack_node:
cmp rsp,qword ptr end_stack+0
jae rmarkr_end
mov rcx,qword ptr [rsp]
mov rsi,qword ptr 8[rsp]
add rsp,16
cmp rcx,1
ja rmark_using_reversal
test qword ptr flags+0,4096
je rmark_next_node_
jmp rmarkp_next_node_
rmarkr_end:
test qword ptr flags+0,4096
je rmark_next_node
jmp rmarkp_next_node