COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP = 1
push rsi
mov rdi,heap_p2[rip]
mov rax,heap_size_257[rip]
shl rax,7
mov semi_space_size[rip],rax
lea rsi,[rdi+rax]
mov qword ptr (heap2_begin_and_end+8)[rip],rsi
mov rax,qword ptr caf_list[rip]
test rax,rax
je end_copy_cafs
copy_cafs_lp:
push (-8)[rax]
lea rbp,8[rax]
mov rbx,qword ptr [rax]
sub rbx,1
call copy_lp2
pop rax
test rax,rax
att_jne copy_cafs_lp
end_copy_cafs:
mov rbx,qword ptr [rsp]
mov rbp,stack_p[rip]
sub rbx,rbp
shr rbx,3
sub rbx,1
jb end_copy0
att_call copy_lp2
end_copy0:
mov rbp,heap_p2[rip]
jmp copy_lp1
/* */
/* Copy all referenced nodes to the other semi space */
/* */
in_hnf_1_2:
dec rbx
copy_lp2_lp1:
att_call copy_lp2
copy_lp1:
cmp rbp,rdi
jae end_copy1
mov rax,[rbp]
add rbp,8
test al,2
je not_in_hnf_1
in_hnf_1:
movzx rbx,word ptr (-2)[rax]
test rbx,rbx
je copy_array_21
cmp rbx,2
att_jbe in_hnf_1_2
cmp rbx,256
jae copy_record_21
mov rax,8[rbp]
test al,1
jne node_without_arguments_part
push rbx
xor rbx,rbx
att_call copy_lp2
pop rbx
add rbp,8
sub rbx,2
att_jmp copy_lp2_lp1
node_without_arguments_part:
dec rax
xor rbx,rbx
mov 8[rbp],rax
att_call copy_lp2
add rbp,8
att_jmp copy_lp1
copy_record_21:
sub rbx,258
ja copy_record_arguments_3
movzx rbx,word ptr (-2+2)[rax]
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
att_jb in_hnf_1_2
sub rbx,1
att_ja copy_lp2_lp1
jmp copy_node_arity1
.else
jb copy_record_arguments_1
sub rbx,1
ja copy_lp2_lp1
je copy_node_arity1
add rbp,16
jmp copy_lp1
copy_record_arguments_1:
dec rbx
jmp copy_lp2_lp1
je copy_lp2_lp1
add rbp,8
jmp copy_lp1
.endif
copy_record_arguments_3:
test byte ptr 8[rbp],1
jne record_node_without_arguments_part
movzx rdx,word ptr (-2+2)[rax]
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
sub rdx,1
.else
test rdx,rdx
je copy_record_arguments_3b
sub rdx,1
je copy_record_arguments_3abb
.endif
lea rcx,(3*8)[rbp+rbx*8]
push rcx
push rdx
sub rbx,rbx
att_call copy_lp2
add rbp,8
pop rbx
dec rbx
att_call copy_lp2
pop rbp
att_jmp copy_lp1
.if ! COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
copy_record_arguments_3abb:
push rbx
sub rbx,rbx
call copy_lp2
pop rbx
lea rbp,(2*8)[rbp+rbx*8]
jmp copy_lp1
copy_record_arguments_3b:
lea rbp,(3*8)[rbp+rbx*8]
jmp copy_lp1
.endif
record_node_without_arguments_part:
and qword ptr 8[rbp],-2
.if ! COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
cmp word ptr (-2+2)[rax],0
je record_node_without_arguments_part_3b
.endif
sub rbx,rbx
att_call copy_lp2
add rbp,8
att_jmp copy_lp1
.if ! COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
record_node_without_arguments_part_3b:
add rbp,16
jmp copy_lp1
.endif
not_in_hnf_1:
movsxd rbx,dword ptr (-4)[rax]
cmp rbx,257
jge copy_unboxed_closure_arguments
sub rbx,1
att_jg copy_lp2_lp1
copy_node_arity1:
xor rbx,rbx
att_call copy_lp2
add rbp,8
att_jmp copy_lp1
copy_unboxed_closure_arguments:
je copy_unboxed_closure_arguments1
xor rax,rax
mov al,bh
and rbx,255
sub rbx,rax
sub rbx,1
jl copy_unboxed_closure_arguments_without_pointers
push rax
att_call copy_lp2
pop rax
copy_unboxed_closure_arguments_without_pointers:
lea rbp,[rbp+rax*8]
att_jmp copy_lp1
copy_unboxed_closure_arguments1:
add rbp,16
att_jmp copy_lp1
copy_array_21:
mov rbx,qword ptr 8[rbp]
add rbp,16
test rbx,rbx
je copy_array_21_a
movzx rax,word ptr (-2)[rbx]
movzx rbx,word ptr (-2+2)[rbx]
sub rax,256
test rbx,rbx
je copy_array_21_b
cmp rbx,rax
je copy_array_21_r_a
copy_array_21_ab:
cmp qword ptr (-16)[rbp],0
att_je copy_lp1
sub rax,rbx
shl rax,3
sub rbx,1
push rbx
push rax
mov rbx,qword ptr (-16)[rbp]
sub rbx,1
push rbx
copy_array_21_lp_ab:
mov rbx,qword ptr 16[rsp]
att_call copy_lp2
add rbp,qword ptr 8[rsp]
sub qword ptr [rsp],1
att_jnc copy_array_21_lp_ab
add rsp,24
att_jmp copy_lp1
copy_array_21_b:
mov rbx,qword ptr (-16)[rbp]
imul rbx,rax
lea rbp,[rbp+rbx*8]
att_jmp copy_lp1
copy_array_21_r_a:
mov rbx,qword ptr (-16)[rbp]
imul rbx,rax
sub rbx,1
att_jc copy_lp1
att_jmp copy_lp2_lp1
copy_array_21_a:
mov rbx,qword ptr (-16)[rbp]
sub rbx,1
att_jc copy_lp1
att_jmp copy_lp2_lp1
/* */
/* Copy nodes to the other semi-space */
/* */
copy_lp2:
mov rdx,qword ptr [rbp]
/* selectors: */
continue_after_selector_2:
mov rcx,qword ptr [rdx]
test cl,2
je not_in_hnf_2
in_hnf_2:
movzx rax,word ptr (-2)[rcx]
test rax,rax
je copy_arity_0_node2
cmp rax,256
jae copy_record_2
sub rax,2
mov [rbp],rdi
lea rbp,8[rbp ]
ja copy_hnf_node2_3
mov [rdi],rcx
jb copy_hnf_node2_1
inc rdi
mov rcx,8[rdx]
mov [rdx],rdi
mov rax,16[rdx]
sub rbx,1
mov (8-1)[rdi],rcx
mov (16-1)[rdi],rax
lea rdi,(24-1)[rdi]
att_jae copy_lp2
ret
copy_hnf_node2_1:
inc rdi
mov rax,8[rdx]
sub rbx,1
mov [rdx],rdi
mov (8-1)[rdi],rax
lea rdi,(16-1)[rdi]
att_jae copy_lp2
ret
copy_hnf_node2_3:
mov [rdi],rcx
inc rdi
mov [rdx],rdi
mov rcx,8[rdx]
mov (8-1)[rdi],rcx
mov rcx,16[rdx]
add rdi,24-1
mov rdx,[rcx]
test dl,1
jne arguments_already_copied_2
mov (-8)[rdi],rdi
add rcx,8
mov [rdi],rdx
inc rdi
mov (-8)[rcx],rdi
add rdi,8-1
cp_hnf_arg_lp2:
mov rdx,[rcx]
add rcx,8
mov [rdi],rdx
add rdi,8
dec rax
att_jne cp_hnf_arg_lp2
sub rbx,1
att_jae copy_lp2
ret
arguments_already_copied_2:
mov (-8)[rdi],rdx
sub rbx,1
att_jae copy_lp2
ret
copy_arity_0_node2:
lea r9,__STRING__+2[rip]
cmp rcx,r9
jbe copy_string_or_array_2
lea r9,CHAR+2[rip]
cmp rcx,r9
ja copy_normal_hnf_0_2
copy_int_bool_or_char_2:
mov rax,8[rdx]
je copy_char_2
lea r9,dINT+2[rip]
cmp rcx,r9
jne no_small_int_or_char_2
copy_int_2:
cmp rax,33
att_jae no_small_int_or_char_2
shl rax,4
add rbp,8
lea r9,small_integers[rip]
add rax,r9
sub rbx,1
mov (-8)[rbp],rax
att_jae copy_lp2
ret
copy_char_2:
and rax,255
shl rax,4
add rbp,8
lea r9,static_characters[rip]
add rax,r9
sub rbx,1
mov (-8)[rbp],rax
att_jae copy_lp2
ret
no_small_int_or_char_2:
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
copy_record_node2_1_b:
.endif
mov (-16)[rsi],rcx
add rbp,8
mov (-8)[rsi],rax
sub rsi,15
mov [rdx],rsi
dec rsi
mov (-8)[rbp],rsi
sub rbx,1
att_jae copy_lp2
ret
copy_normal_hnf_0_2:
sub rcx,2-(-8)
sub rbx,1
mov [rbp],rcx
lea rbp,8[rbp]
att_jae copy_lp2
ret
already_copied_2:
dec rcx
sub rbx,1
mov [rbp],rcx
lea rbp,8[rbp]
att_jae copy_lp2
ret
copy_record_2:
sub rax,258
ja copy_record_node2_3
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
jb copy_record_node2_1
cmp word ptr (-2+2)[rcx],0
att_je copy_record_node2_bb
mov qword ptr [rbp],rdi
mov qword ptr [rdi],rcx
lea rcx,1[rdi]
mov rax,qword ptr 8[rdx]
mov qword ptr [rdx],rcx
mov qword ptr 8[rdi],rax
mov rax,qword ptr 16[rdx]
add rbp,8
mov qword ptr 16[rdi],rax
add rdi,24
sub rbx,1
att_jae copy_lp2
ret
copy_record_node2_1:
mov rax,qword ptr 8[rdx]
cmp word ptr (-2+2)[rcx],0
att_je copy_record_node2_1_b
mov qword ptr [rbp],rdi
mov qword ptr [rdi],rcx
lea rcx,1[rdi]
mov qword ptr 8[rdi],rax
mov qword ptr [rdx],rcx
add rbp,8
add rdi,16
sub rbx,1
att_jae copy_lp2
ret
copy_record_node2_bb:
mov (-24)[rsi],rcx
sub rsi,24-1
mov [rdx],rsi
dec rsi
mov rax,8[rdx]
mov rcx,16[rdx]
mov [rbp],rsi
add rbp,8
mov 8[rsi],rax
sub rbx,1
mov 16[rsi],rcx
att_jae copy_lp2
ret
.else
mov qword ptr [rbp],rdi
mov qword ptr [rdi],rcx
lea rcx,1[rdi]
mov rax,qword ptr 8[rdx]
mov qword ptr [rdx],rcx
jb copy_record_node2_1
mov qword ptr 8[rdi],rax
mov rax,qword ptr 16[rdx]
add rbp,8
mov qword ptr 16[rdi],rax
add rdi,24
sub rbx,1
jae copy_lp2
ret
copy_record_node2_1:
add rbp,8
mov qword ptr 8[rdi],rax
add rdi,16
sub rbx,1
jae copy_lp2
ret
.endif
copy_record_node2_3:
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
cmp word ptr (-2+2)[rcx],1
jbe copy_record_node2_3_ab_or_b
.endif
push rax
lea rax,1[rdi]
mov qword ptr [rdx],rax
mov rax,qword ptr 16[rdx]
mov qword ptr [rdi],rcx
mov rdx,qword ptr 8[rdx]
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
mov qword ptr 8[rdi],rdx
mov qword ptr [rbp],rdi
add rbp,8
mov rcx,rax
test byte ptr [rax],1
jne record_arguments_already_copied_2
.else
mov rcx,rax
sub rax,qword ptr heap_p1
shr rax,4
mov qword ptr 8[rdi],rdx
mov rdx,rax
and rax,31
shr rdx,3
mov qword ptr [rbp],rdi
and rdx,-4
mov eax,dword ptr (bit_set_table)[rax*4]
add rdx,qword ptr heap_copied_vector
add rbp,8
test eax,[rdx]
jne record_arguments_already_copied_2
or [rdx],eax
.endif
lea rdx,24[rdi]
pop rax
mov qword ptr 16[rdi],rdx
add rdi,25
mov rdx,qword ptr [rcx]
mov qword ptr [rcx],rdi
add rcx,8
mov qword ptr (-1)[rdi],rdx
add rdi,7
cp_record_arg_lp2:
mov rdx,qword ptr [rcx]
add rcx,8
mov qword ptr [rdi],rdx
add rdi,8
sub rax,1
att_jne cp_record_arg_lp2
sub rbx,1
att_jae copy_lp2
ret
record_arguments_already_copied_2:
mov rdx,qword ptr [rcx]
pop rax
mov qword ptr 16[rdi],rdx
add rdi,24
sub rbx,1
att_jae copy_lp2
ret
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
copy_record_node2_3_ab_or_b:
jb copy_record_node2_3_b
push rax
lea rax,1[rdi]
mov qword ptr [rdx],rax
mov rax,qword ptr 16[rdx]
mov qword ptr [rdi],rcx
mov rdx,qword ptr 8[rdx]
mov rcx,rax
sub rax,qword ptr heap_p1[rip]
shr rax,4
mov qword ptr 8[rdi],rdx
mov rdx,rax
and rax,31
shr rdx,3
mov qword ptr [rbp],rdi
and rdx,-4
lea r9,bit_set_table[rip]
mov eax,dword ptr [r9+rax*4]
add rdx,qword ptr heap_copied_vector[rip]
add rbp,8
test eax,[rdx]
att_jne record_arguments_already_copied_2
or [rdx],eax
pop rax
sub rsi,8
shl rax,3
sub rsi,rax
push rsi
add rsi,1
mov qword ptr 16[rdi],rsi
add rdi,24
mov rdx,qword ptr [rcx]
jmp cp_record_arg_lp3_c
copy_record_node2_3_b:
push rax
lea rax,(-24+1)[rsi]
mov qword ptr [rdx],rax
mov rax,qword ptr 16[rdx]
mov qword ptr (-24)[rsi],rcx
mov rdx,qword ptr 8[rdx]
mov rcx,rax
sub rax,qword ptr heap_p1[rip]
shr rax,4
mov qword ptr (-16)[rsi],rdx
mov rdx,rax
and rax,31
sub rsi,24
shr rdx,3
mov qword ptr [rbp],rsi
and rdx,-4
lea r9,bit_set_table[rip]
mov eax,dword ptr [r9+rax*4]
add rdx,qword ptr heap_copied_vector[rip]
add rbp,8
test eax,[rdx]
jne record_arguments_already_copied_3_b
or [rdx],eax
pop rax
mov rdx,rsi
sub rsi,8
shl rax,3
sub rsi,rax
mov qword ptr 16[rdx],rsi
mov rdx,qword ptr [rcx]
push rsi
add rsi,1
cp_record_arg_lp3_c:
mov qword ptr [rcx],rsi
add rcx,8
mov qword ptr (-1) [rsi],rdx
add rsi,7
cp_record_arg_lp3:
mov rdx,qword ptr [rcx]
add rcx,8
mov qword ptr [rsi],rdx
add rsi,8
sub rax,8
att_jne cp_record_arg_lp3
pop rsi
sub rbx,1
att_jae copy_lp2
ret
record_arguments_already_copied_3_b:
mov rdx,qword ptr [rcx]
pop rax
sub rdx,1
mov qword ptr 16[rsi],rdx
sub rbx,1
att_jae copy_lp2
ret
.endif
not_in_hnf_2:
test cl,1
att_jne already_copied_2
movsxd rax,dword ptr (-4)[rcx]
test rax,rax
jle copy_arity_0_node2_
copy_node2_1_:
and rax,255
sub rax,2
jl copy_arity_1_node2
copy_node2_3:
mov [rbp],rdi
add rbp,8
mov [rdi],rcx
inc rdi
mov [rdx],rdi
mov rcx,8[rdx]
add rdx,16
mov (8-1)[rdi],rcx
add rdi,16-1
cp_arg_lp2:
mov rcx,[rdx]
add rdx,8
mov [rdi],rcx
add rdi,8
sub rax,1
att_jae cp_arg_lp2
sub rbx,1
att_jae copy_lp2
ret
copy_arity_1_node2:
copy_arity_1_node2_:
mov [rbp],rdi
inc rdi
add rbp,8
mov [rdx],rdi
mov rax,8[rdx]
mov (-1)[rdi],rcx
mov (8-1)[rdi],rax
add rdi,24-1
sub rbx,1
att_jae copy_lp2
ret
copy_indirection_2:
mov rax,rdx
mov rdx,8[rdx]
mov rcx,[rdx]
test cl,2
att_jne in_hnf_2
test cl,1
att_jne already_copied_2
cmp dword ptr (-4)[rcx],-2
je skip_indirections_2
movsxd rax,dword ptr(-4)[rcx]
test rax,rax
att_jle copy_arity_0_node2_
att_jmp copy_node2_1_
skip_indirections_2:
mov rdx,8[rdx]
mov rcx,[rdx]
test cl,2
jne update_indirection_list_2
test cl,1
att_jne update_indirection_list_2
cmp dword ptr (-4)[rcx],-2
att_je skip_indirections_2
update_indirection_list_2:
lea rcx,8[rax]
mov rax,8[rax]
mov [rcx],rdx
cmp rdx,rax
att_jne update_indirection_list_2
att_jmp continue_after_selector_2
copy_selector_2:
cmp rax,-2
att_je copy_indirection_2
jl copy_record_selector_2
mov rax,8[rdx]
mov r10,[rax]
test r10b,2
att_je copy_arity_1_node2_
movsxd r11,dword ptr (-8)[rcx]
cmp word ptr (-2)[r10],2
jbe copy_selector_2_
mov r10,16[rax]
test byte ptr [r10],1
att_jne copy_arity_1_node2_
movzx r11,word ptr (4-8)[rcx+r11]
lea r9,__indirection[rip]
mov qword ptr [rdx],r9
cmp r11,16
jl copy_selector_2_1
je copy_selector_2_2
mov rcx,qword ptr (-24)[r10+r11]
mov qword ptr 8[rdx],rcx
mov rdx,rcx
att_jmp continue_after_selector_2
copy_selector_2_1:
mov rcx,qword ptr 8[rax]
mov qword ptr 8[rdx],rcx
mov rdx,rcx
att_jmp continue_after_selector_2
copy_selector_2_2:
mov rcx,qword ptr [r10]
mov qword ptr 8[rdx],rcx
mov rdx,rcx
att_jmp continue_after_selector_2
copy_selector_2_:
movzx r11,word ptr (4-8)[rcx+r11]
lea r9,__indirection[rip]
mov qword ptr [rdx],r9
mov rcx,qword ptr [rax+r11]
mov qword ptr 8[rdx],rcx
mov rdx,rcx
att_jmp continue_after_selector_2
copy_record_selector_2:
cmp rax,-3
mov rax,qword ptr 8[rdx]
mov r10,qword ptr [rax]
je copy_strict_record_selector_2
test r10b,2
att_je copy_arity_1_node2_
movsxd r11,dword ptr (-8)[rcx]
cmp word ptr (-2)[r10],258
jbe copy_record_selector_2_
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
cmp word ptr (-2+2)[r10],2
jae copy_selector_2__
.endif
mov r12,qword ptr 16[rax]
lea r10,(-24)[r12]
sub r12,qword ptr heap_p1[rip]
mov r13,r12
and r12,31*16
shr r13,7
shr r12,2
and r13,-4
add r13,qword ptr heap_copied_vector[rip]
lea r9,bit_set_table[rip]
mov r12d,dword ptr [r9+r12]
and r12d,dword ptr [r13]
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
att_je copy_record_selector_2_
att_jmp copy_arity_1_node2_
copy_selector_2__:
mov r12,qword ptr 16[rax]
lea r10,(-24)[r12]
test byte ptr [r12],1
att_jne copy_arity_1_node2_
.else
jne copy_arity_1_node2_
.endif
copy_record_selector_2_:
movzx r11,word ptr (4-8)[rcx+r11]
lea r9,__indirection[rip]
mov qword ptr [rdx],r9
cmp r11,16
jle copy_record_selector_3
mov rax,r10
copy_record_selector_3:
mov rcx,qword ptr [rax+r11]
mov qword ptr 8[rdx],rcx
mov rdx,rcx
att_jmp continue_after_selector_2
copy_strict_record_selector_2:
test r10b,2
att_je copy_arity_1_node2_
movsxd r11,dword ptr (-8)[rcx]
cmp word ptr (-2)[r10],258
jbe copy_strict_record_selector_2_
.if COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP
cmp word ptr (-2+2)[r10],2
jb copy_strict_record_selector_2_b
mov r12,qword ptr 16[rax]
lea r10,(-24)[r12]
test byte ptr [r12],1
att_jne copy_arity_1_node2_
att_jmp copy_strict_record_selector_2_
copy_strict_record_selector_2_b:
.endif
mov r12,qword ptr 16[rax]
lea r10,(-24)[r12]
sub r12,qword ptr heap_p1[rip]
mov r13,r12
and r12,31*16
shr r13,7
shr r12,2
and r13,-4
add r13,qword ptr heap_copied_vector[rip]
lea r9,bit_set_table[rip]
mov r12d,dword ptr [r9+r12]
and r12d,[r13]
att_jne copy_arity_1_node2_
copy_strict_record_selector_2_:
add r11,rcx
movzx rcx,word ptr (4-8)[r11]
cmp rcx,16
jle copy_strict_record_selector_3
mov rcx,qword ptr [r10+rcx]
jmp copy_strict_record_selector_4
copy_strict_record_selector_3:
mov rcx,qword ptr [rax+rcx]
copy_strict_record_selector_4:
mov qword ptr 8[rdx],rcx
movzx rcx,word ptr (6-8)[r11]
test rcx,rcx
je copy_strict_record_selector_6
cmp rcx,16
jle copy_strict_record_selector_5
mov rax,r10
copy_strict_record_selector_5:
mov rcx,qword ptr [rax+rcx]
mov qword ptr 16[rdx],rcx
copy_strict_record_selector_6:
mov rcx,qword ptr ((-8)-8)[r11]
mov qword ptr [rdx],rcx
att_jmp in_hnf_2
copy_arity_0_node2_:
att_jl copy_selector_2
mov (-24)[rsi],rcx
sub rsi,24
mov [rbp],rsi
lea rax,1[rsi]
add rbp,8
mov [rdx],rax
sub rbx,1
att_jae copy_lp2
ret
copy_string_or_array_2:
mov rcx,rdx
jne copy_array_2
sub rdx,heap_p1[rip]
cmp rdx,semi_space_size[rip]
jae copy_string_or_array_constant
mov rdx,8[rcx]
add rbp,8
add rdx,7
push rbx
mov rax,rdx
and rdx,-8
shr rax,3
sub rsi,rdx
mov rbx,[rcx]
add rcx,8
mov (-16)[rsi],rbx
sub rsi,16
mov (-8)[rbp],rsi
lea rdx,1[rsi]
mov (-8)[rcx],rdx
lea rdx,8[rsi]
cp_s_arg_lp2:
mov rbx,[rcx]
add rcx,8
mov [rdx],rbx
add rdx,8
sub rax,1
att_jge cp_s_arg_lp2
pop rbx
sub rbx,1
att_jae copy_lp2
ret
copy_array_2:
sub rdx,heap_p1[rip]
cmp rdx,semi_space_size[rip]
att_jae copy_string_or_array_constant
push rbx
mov rax,qword ptr 16[rcx]
test rax,rax
je copy_array_a2
movzx rbx,word ptr (-2)[rax]
test rbx,rbx
je copy_strict_basic_array_2
sub rbx,256
imul rbx,qword ptr 8[rcx]
jmp copy_array_a3
copy_array_a2:
mov rbx,qword ptr 8[rcx]
copy_array_a3:
mov rdx,rdi
lea rdi,24[rdi+rbx*8]
mov qword ptr [rbp],rdx
mov rax,qword ptr [rcx]
add rbp,8
mov qword ptr [rdx],rax
lea rax,1[rdx]
add rdx,8
mov qword ptr [rcx],rax
add rcx,8
lea rax,1[rbx]
att_jmp cp_s_arg_lp2
copy_strict_basic_array_2:
mov rbx,qword ptr 8[rcx]
lea r9,dINT+2[rip]
cmp rax,r9
jle copy_int_or_real_array_2
lea r9,BOOL+2[rip]
cmp rax,r9
je copy_bool_array_2
copy_int32_or_real32_array_2:
add rbx,1
shr rbx,1
copy_int_or_real_array_2:
shl rbx,3
lea rdx,(-24)[rsi]
sub rdx,rbx
mov rax,qword ptr [rcx]
shr rbx,3
mov qword ptr [rbp],rdx
add rbp,8
mov rsi,rdx
mov qword ptr [rdx],rax
lea rax,1[rdx]
add rdx,8
mov qword ptr [rcx],rax
add rcx,8
lea rax,1[rbx]
att_jmp cp_s_arg_lp2
copy_bool_array_2:
add rbx,7
shr rbx,3
att_jmp copy_int_or_real_array_2
copy_string_or_array_constant:
mov qword ptr [rbp],rcx
add rbp,8
sub rbx,1
att_jae copy_lp2
ret
end_copy1:
mov heap_end_after_gc[rip],rsi
lea rcx,finalizer_list[rip]
lea rdx,free_finalizer_list[rip]
mov rbp,qword ptr finalizer_list[rip]
determine_free_finalizers_after_copy:
mov rax,qword ptr [rbp]
test al,1
je finalizer_not_used_after_copy
mov rbp,qword ptr 8[rbp]
sub rax,1
mov qword ptr [rcx],rax
lea rcx,8[rax]
att_jmp determine_free_finalizers_after_copy
finalizer_not_used_after_copy:
lea r9,__Nil-8[rip]
cmp rbp,r9
je end_finalizers_after_copy
mov qword ptr [rdx],rbp
lea rdx,8[rbp]
mov rbp,qword ptr 8[rbp]
att_jmp determine_free_finalizers_after_copy
end_finalizers_after_copy:
mov qword ptr [rcx],rbp
mov qword ptr [rdx],rbp