rmarkp_stack_nodes1: mov rbx,qword ptr [rcx] lea rax,1[rsi] mov qword ptr [rsi],rbx mov qword ptr [rcx],rax rmarkp_next_stack_node: add rsi,8 cmp rsi,qword ptr end_vector_offset[r9] je end_rmarkp_nodes rmarkp_stack_nodes: mov rcx,qword ptr [rsi] mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] att_jnc rmarkp_next_stack_node mov rbx,rax and rax,31*8 shr rbx,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] mov ebp,dword ptr [rdi+rbx*4] test rbp,rax att_jne rmarkp_stack_nodes1 or rbp,rax mov dword ptr [rdi+rbx*4],ebp mov rax,qword ptr [rcx] call rmarkp_stack_node add rsi,8 cmp rsi,qword ptr end_vector_offset[r9] att_jne rmarkp_stack_nodes ret rmarkp_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 rmarkp_no_reverse rmarkp_node_d1: mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] jnc rmarkp_next_node jmp rmarkp_node_ rmarkp_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_offset[r9] att_jb rmark_using_reversal rmarkp_node: mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] att_jnc rmarkp_next_node mov rbx,rsi rmarkp_node_: mov rdx,rax and rax,31*8 shr rdx,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] test eax,dword ptr [rdi+rdx*4] jne rmarkp_reverse_and_mark_next_node mov rbp,qword ptr rmarkp_queue_first_offset[r9] mov rdx,qword ptr rmarkp_n_queue_items_16_offset[r9] prefetch [rcx] mov qword ptr rmarkp_queue_offset[r9+rbp],rcx mov qword ptr rmarkp_queue_offset+8[r9+rbp],rsi mov qword ptr rmarkp_queue_offset+16[r9+rbp],rbx lea rbx,[rbp+rdx] add rbp,32 and rbp,7*32 and rbx,7*32 mov qword ptr rmarkp_queue_first_offset[r9],rbp cmp rdx,-4*32 je rmarkp_last_item_in_queue rmarkp_add_items: mov rcx,[rsp] cmp rcx,1 jbe rmarkp_add_stacked_item mov rsi,8[rsp] add rsp,16 mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] att_jnc rmarkp_add_items mov rdx,rax and rax,31*8 shr rdx,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] mov ebp,dword ptr [rdi+rdx*4] test rbp,rax je rmarkp_add_item cmp rcx,rsi att_ja rmarkp_add_items mov rax,[rcx] mov [rsi],rax add rsi,1 mov [rcx],rsi att_jmp rmarkp_add_items rmarkp_add_stacked_item: att_je rmarkp_last_item_in_queue rmarkp_add_items2: mov rsi,8[rsp] add rsi,8 cmp rsi,qword ptr end_vector_offset[r9] att_je rmarkp_last_item_in_queue mov rcx,[rsi] mov 8[rsp],rsi mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] att_jnc rmarkp_add_items2 mov rdx,rax and rax,31*8 shr rdx,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] mov ebp,dword ptr [rdi+rdx*4] test rbp,rax je rmarkp_add_item2 mov rax,[rcx] mov [rsi],rax add rsi,1 mov [rcx],rsi att_jmp rmarkp_add_items2 rmarkp_add_item2: prefetch [rcx] mov rbp,qword ptr rmarkp_queue_first_offset[r9] mov rdx,qword ptr rmarkp_n_queue_items_16_offset[r9] mov qword ptr rmarkp_queue_offset[r9+rbp],rcx mov qword ptr rmarkp_queue_offset+8[r9+rbp],rsi mov qword ptr rmarkp_queue_offset+16[r9+rbp],-1 add rbp,32 and rbp,7*32 sub rdx,32 mov qword ptr rmarkp_queue_first_offset[r9],rbp mov qword ptr rmarkp_n_queue_items_16_offset[r9],rdx cmp rdx,-4*32 att_jne rmarkp_add_items2 att_jmp rmarkp_last_item_in_queue rmarkp_add_items3: mov rsi,8[rsp] add rsi,8 cmp rsi,24[rsp] att_je rmarkp_last_item_in_queue mov rcx,[rsi] mov 8[rsp],rsi mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] att_jnc rmarkp_add_items3 mov rdx,rax and rax,31*8 shr rdx,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] mov ebp,[rdi+rdx*4] test rbp,rax je rmarkp_add_item3 cmp rcx,rsi att_ja rmarkp_add_items3 mov rax,[rcx] mov [rsi],rax add rsi,1 mov [rcx],rsi att_jmp rmarkp_add_items3 rmarkp_add_item3: prefetch [rcx] mov rbp,qword ptr rmarkp_queue_first_offset[r9] mov rdx,qword ptr rmarkp_n_queue_items_16_offset[r9] mov qword ptr rmarkp_queue_offset+8[r9+rbp],rsi mov qword ptr rmarkp_queue_offset+16[r9+rbp],rsi add rbp,32 and rbp,7*32 sub rdx,32 mov qword ptr rmarkp_queue_first_offset[r9],rbp mov qword ptr rmarkp_n_queue_items_16_offset[r9],rdx cmp rdx,-4*32 att_jne rmarkp_add_items3 att_jmp rmarkp_last_item_in_queue rmarkp_add_item: prefetch [rcx] mov rbp,qword ptr rmarkp_queue_first_offset[r9] mov rdx,qword ptr rmarkp_n_queue_items_16_offset[r9] mov qword ptr rmarkp_queue_offset[r9+rbp],rcx mov qword ptr rmarkp_queue_offset+8[r9+rbp],rsi mov qword ptr rmarkp_queue_offset+16[r9+rbp],rsi add rbp,32 and rbp,7*32 sub rdx,32 mov qword ptr rmarkp_queue_first_offset[r9],rbp mov qword ptr rmarkp_n_queue_items_16_offset[r9],rdx cmp rdx,-4*32 att_jne rmarkp_add_items rmarkp_last_item_in_queue: mov rcx,qword ptr rmarkp_queue_offset[r9+rbx] mov rax,qword ptr neg_heap_p3_offset[r9] mov rsi,qword ptr rmarkp_queue_offset+8[r9+rbx] mov rbx,qword ptr rmarkp_queue_offset+16[r9+rbx] add rax,rcx rmarkp_node_no_prefetch: mov rdx,rax and rax,31*8 shr rdx,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] mov ebp,dword ptr [rdi+rdx*4] test rbp,rax att_jne rmarkp_reverse_and_mark_next_node or rbp,rax mov dword ptr [rdi+rdx*4],ebp mov rax,qword ptr [rcx] rmarkp_arguments: cmp rcx,rbx att_ja rmarkp_no_reverse lea rbp,1[rsi] mov qword ptr [rsi],rax mov qword ptr [rcx],rbp rmarkp_no_reverse: test al,2 je rmarkp_lazy_node movzx rbp,word ptr (-2)[rax] test rbp,rbp je rmarkp_hnf_0 add rcx,8 cmp rbp,256 jae rmarkp_record sub rbp,2 att_je rmarkp_hnf_2 jc rmarkp_hnf_1 rmarkp_hnf_3: mov rdx,qword ptr 8[rcx] rmarkp_hnf_3_: cmp rsp,qword ptr end_stack_offset[r9] att_jb rmark_using_reversal_ mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rdx mov rbx,rax and rax,31*8 shr rbx,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] test eax,[rdi+rbx*4] jne rmarkp_shared_argument_part or dword ptr [rdi+rbx*4],eax rmarkp_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 rmarkp_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 rmarkp_push_hnf_args mov rcx,qword ptr [rdx] cmp rdx,rsi ja rmarkp_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_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] att_jnc rmarkp_next_node mov rbx,rdx att_jmp rmarkp_node_ rmarkp_no_reverse_argument_pointer: mov rsi,rdx mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] att_jnc rmarkp_next_node mov rbx,rsi att_jmp rmarkp_node_no_prefetch rmarkp_shared_argument_part: cmp rdx,rcx att_ja rmarkp_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 rmarkp_hnf_1 rmarkp_record: sub rbp,258 je rmarkp_record_2 jb rmarkp_record_1 rmarkp_record_3: movzx rbp,word ptr (-2+2)[rax] mov rdx,qword ptr (16-8)[rcx] sub rbp,1 jb rmarkp_record_3_bb je rmarkp_record_3_ab sub rbp,1 je rmarkp_record_3_aab att_jmp rmarkp_hnf_3_ rmarkp_record_3_bb: sub rcx,8 mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rdx mov rbp,rax and rax,31*8 shr rbp,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] or dword ptr [rdi+rbp*4],eax cmp rdx,rcx att_ja rmarkp_next_node add eax,eax jne rmarkp_bit_in_same_word1 inc rbp mov rax,1 rmarkp_bit_in_same_word1: test eax,dword ptr [rdi+rbp*4] je rmarkp_not_yet_linked_bb mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx add rax,16 mov rbp,rax and rax,31*8 shr rbp,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+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 rmarkp_next_node rmarkp_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 rmarkp_next_node rmarkp_record_3_ab: mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rdx mov rbp,rax and rax,31*8 shr rbp,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] or dword ptr [rdi+rbp*4],eax cmp rdx,rcx att_ja rmarkp_hnf_1 add eax,eax jne rmarkp_bit_in_same_word2 inc rbp mov rax,1 rmarkp_bit_in_same_word2: test eax,dword ptr [rdi+rbp*4] je rmarkp_not_yet_linked_ab mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx add rax,8 mov rbp,rax and rax,31*8 shr rbp,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+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 rmarkp_hnf_1 rmarkp_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 rmarkp_hnf_1 rmarkp_record_3_aab: cmp rsp,qword ptr end_stack_offset[r9] att_jb rmark_using_reversal_ mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rdx mov rbp,rax and rax,31*8 shr rbp,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] test eax,dword ptr [rdi+rbp*4] att_jne rmarkp_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 rmarkp_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_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] att_jnc rmarkp_next_node mov rbx,rdx att_jmp rmarkp_node_ rmarkp_record_2: cmp word ptr (-2+2)[rax],1 att_ja rmarkp_hnf_2 att_je rmarkp_hnf_1 att_jmp rmarkp_next_node rmarkp_record_1: cmp word ptr (-2+2)[rax],0 att_jne rmarkp_hnf_1 att_jmp rmarkp_next_node rmarkp_lazy_node_1: /* selectors: */ jne rmarkp_selector_node_1 rmarkp_hnf_1: mov rsi,rcx mov rcx,qword ptr [rcx] att_jmp rmarkp_node /* selectors */ rmarkp_indirection_node: mov rdx,qword ptr neg_heap_p3_offset[r9] sub rcx,8 add rdx,rcx mov rbp,rdx and rbp,31*8 shr rdx,8 lea r11,bit_clear_table2[rip] mov ebp,dword ptr [r11+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 rmarkp_node_d1 mov qword ptr [rdx],rax att_jmp rmarkp_node_d1 rmarkp_selector_node_1: add rbp,3 att_je rmarkp_indirection_node mov rdx,qword ptr [rcx] mov r12,rbx mov rbx,qword ptr neg_heap_p3_offset[r9] add rbx,rdx shr rbx,3 add rbp,1 jle rmarkp_record_selector_node_1 mov rbp,rbx shr rbx,5 and rbp,31 lea r11,bit_set_table[rip] mov ebp,dword ptr [r11+rbp*4] mov ebx,dword ptr [rdi+rbx*4] and rbx,rbp att_jne rmarkp_hnf_1 mov rbx,qword ptr [rdx] test bl,2 att_je rmarkp_hnf_1 cmp word ptr (-2)[rbx],2 jbe rmarkp_small_tuple_or_record rmarkp_large_tuple_or_record: mov r10,qword ptr 16[rdx] mov rbx,qword ptr neg_heap_p3_offset[r9] add rbx,r10 shr rbx,3 mov rbp,rbx shr rbx,5 and rbp,31 lea r11,bit_set_table[rip] mov ebp,dword ptr [r11+rbp*4] mov ebx,dword ptr [rdi+rbx*4] and rbx,rbp att_jne rmarkp_hnf_1 mov rbx,qword ptr neg_heap_p3_offset[r9] 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 r13,bit_clear_table2[rip] mov r11d,dword ptr [r13+r11] and dword ptr [rdi+rbx*4],r11d movzx eax,word ptr (4-8)[rax] mov rbx,r12 lea r11,__indirection[rip] mov qword ptr (-8)[rcx],r11 cmp rax,16 jl rmarkp_tuple_or_record_selector_node_2 mov rdx,rcx je rmarkp_tuple_selector_node_2 mov rcx,qword ptr (-24)[r10+rax] mov qword ptr [rsi],rcx mov qword ptr [rdx],rcx att_jmp rmarkp_node_d1 rmarkp_tuple_selector_node_2: mov rcx,qword ptr [r10] mov qword ptr [rsi],rcx mov qword ptr [rdx],rcx att_jmp rmarkp_node_d1 rmarkp_record_selector_node_1: je rmarkp_strict_record_selector_node_1 mov rbp,rbx shr rbx,5 and rbp,31 lea r11,bit_set_table[rip] mov ebp,dword ptr [r11+rbp*4] mov ebx,dword ptr [rdi+rbx*4] and rbx,rbp att_jne rmarkp_hnf_1 mov rbx,qword ptr [rdx] test bl,2 att_je rmarkp_hnf_1 cmp word ptr (-2)[rbx],258 att_jbe rmarkp_small_tuple_or_record mov r10,qword ptr 16[rdx] mov rbx,qword ptr neg_heap_p3_offset[r9] add rbx,r10 shr rbx,3 mov rbp,rbx shr rbx,5 and rbp,31 lea r11,bit_set_table[rip] mov ebp,dword ptr [r11+rbp*4] mov ebx,dword ptr [rdi+rbx*4] and rbx,rbp att_jne rmarkp_hnf_1 rmarkp_small_tuple_or_record: mov rbx,qword ptr neg_heap_p3_offset[r9] 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 r13,bit_clear_table2[rip] mov r11d,dword ptr [r13+r11] and dword ptr [rdi+rbx*4],r11d movzx eax,word ptr (4-8)[rax] mov rbx,r12 lea r11,__indirection[rip] mov qword ptr (-8)[rcx],r11 cmp rax,16 att_jle rmarkp_tuple_or_record_selector_node_2 mov rdx,r10 sub rax,24 rmarkp_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 rmarkp_node_d1 rmarkp_strict_record_selector_node_1: mov rbp,rbx shr rbx,5 and rbp,31 lea r11,bit_set_table[rip] mov ebp,dword ptr [r11+rbp*4] mov ebx,dword ptr [rdi+rbx*4] and rbx,rbp att_jne rmarkp_hnf_1 mov rbx,qword ptr [rdx] test bl,2 att_je rmarkp_hnf_1 cmp word ptr (-2)[rbx],258 jbe rmarkp_select_from_small_record mov r10,qword ptr 16[rdx] mov rbx,qword ptr neg_heap_p3_offset[r9] add rbx,r10 mov rbp,rbx shr rbx,8 and rbp,31*8 lea r11,bit_set_table2[rip] mov ebp,dword ptr [r11+rbp] mov ebx,dword ptr [rdi+rbx*4] and rbx,rbp att_jne rmarkp_hnf_1 rmarkp_select_from_small_record: movsxd rbx,dword ptr(-8)[rax] add rbx,rax sub rcx,8 cmp rcx,r12 ja rmarkp_selector_pointer_not_reversed movzx eax,word ptr (4-8)[rbx] cmp rax,16 jle rmarkp_strict_record_selector_node_2 mov rax,qword ptr (-24)[r10+rax] jmp rmarkp_strict_record_selector_node_3 rmarkp_strict_record_selector_node_2: mov rax,qword ptr [rdx+rax] rmarkp_strict_record_selector_node_3: mov qword ptr 8[rcx],rax movzx eax,word ptr (6-8)[rbx] test rax,rax je rmarkp_strict_record_selector_node_5 cmp rax,16 jle rmarkp_strict_record_selector_node_4 mov rdx,r10 sub rax,24 rmarkp_strict_record_selector_node_4: mov rax,qword ptr [rdx+rax] mov qword ptr 16[rcx],rax rmarkp_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 rmarkp_next_node rmarkp_selector_pointer_not_reversed: movzx eax,word ptr (4-8)[rbx] cmp rax,16 jle rmarkp_strict_record_selector_node_6 mov rax,qword ptr (-24)[r10+rax] jmp rmarkp_strict_record_selector_node_7 rmarkp_strict_record_selector_node_6: mov rax,qword ptr [rdx+rax] rmarkp_strict_record_selector_node_7: mov qword ptr 8[rcx],rax movzx eax,word ptr (6-8)[rbx] test rax,rax je rmarkp_strict_record_selector_node_9 cmp rax,16 jle rmarkp_strict_record_selector_node_8 mov rdx,r10 sub rax,24 rmarkp_strict_record_selector_node_8: mov rax,qword ptr [rdx+rax] mov qword ptr 16[rcx],rax rmarkp_strict_record_selector_node_9: mov rax,qword ptr ((-8)-8)[rbx] mov qword ptr [rcx],rax att_jmp rmarkp_next_node rmarkp_reverse_and_mark_next_node: cmp rcx,rbx att_ja rmarkp_next_node mov rax,qword ptr [rcx] mov qword ptr [rsi],rax add rsi,1 mov qword ptr [rcx],rsi /* %rbp ,%rbx : free */ rmarkp_next_node: mov rcx,qword ptr [rsp] mov rsi,qword ptr 8[rsp] add rsp,16 cmp rcx,1 att_ja rmarkp_node rmarkp_next_node_: mov rdx,qword ptr rmarkp_n_queue_items_16_offset[r9] test rdx,rdx att_je end_rmarkp_nodes sub rsp,16 mov rbp,qword ptr rmarkp_queue_first_offset[r9] lea rbx,[rbp+rdx] add rdx,32 and rbx,7*32 mov qword ptr rmarkp_n_queue_items_16_offset[r9],rdx att_jmp rmarkp_last_item_in_queue end_rmarkp_nodes: ret rmarkp_lazy_node: movsxd rbp,dword ptr (-4)[rax] test rbp,rbp att_je rmarkp_next_node add rcx,8 sub rbp,1 att_jle rmarkp_lazy_node_1 cmp rbp,255 jge rmarkp_closure_with_unboxed_arguments rmarkp_closure_with_unboxed_arguments_: lea rcx,[rcx+rbp*8] rmarkp_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 rmarkp_push_lazy_args mov rsi,rcx mov rcx,qword ptr [rcx] cmp rsp,qword ptr end_stack_offset[r9] att_jae rmarkp_node att_jmp rmark_using_reversal rmarkp_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 rmarkp_closure_with_unboxed_arguments_ att_je rmarkp_hnf_1 att_jmp rmarkp_next_node rmarkp_hnf_0: lea rbp,dINT+2[rip] cmp rax,rbp je rmarkp_int_3 lea rbp,CHAR+2[rip] cmp rax,rbp je rmarkp_char_3 jb rmarkp_no_normal_hnf_0 mov rbp,qword ptr neg_heap_p3_offset[r9] add rbp,rcx mov rdx,rbp and rdx,31*8 shr rbp,8 lea r11,bit_clear_table2[rip] mov edx,dword ptr [r11+rdx] and dword ptr [rdi+rbp*4],edx lea rdx,((-8)-2)[rax] mov qword ptr [rsi],rdx cmp rcx,rbx att_ja rmarkp_next_node mov qword ptr [rcx],rax att_jmp rmarkp_next_node rmarkp_int_3: mov rbp,qword ptr 8[rcx] cmp rbp,33 att_jnc rmarkp_next_node shl rbp,4 lea rdx,small_integers[rip] add rdx,rbp mov rbp,qword ptr neg_heap_p3_offset[r9] mov qword ptr [rsi],rdx add rbp,rcx mov rdx,rbp and rdx,31*8 shr rbp,8 lea r11,bit_clear_table2[rip] mov edx,dword ptr [r11+rdx] and dword ptr [rdi+rbp*4],edx cmp rcx,rbx att_ja rmarkp_next_node mov qword ptr [rcx],rax att_jmp rmarkp_next_node rmarkp_char_3: movzx rdx,byte ptr 8[rcx] mov rbp,qword ptr neg_heap_p3_offset[r9] shl rdx,4 add rbp,rcx lea r11,static_characters[rip] add rdx,r11 mov qword ptr [rsi],rdx mov rdx,rbp and rdx,31*8 shr rbp,8 lea r11,bit_clear_table2[rip] mov edx,dword ptr [r11+rdx] and dword ptr [rdi+rbp*4],edx cmp rcx,rbx att_ja rmarkp_next_node mov qword ptr [rcx],rax att_jmp rmarkp_next_node rmarkp_no_normal_hnf_0: lea rbp,__ARRAY__+2[rip] cmp rax,rbp att_jne rmarkp_next_node mov rax,qword ptr 16[rcx] test rax,rax je rmarkp_lazy_array movzx rdx,word ptr (-2+2)[rax] test rdx,rdx je rmarkp_b_array movzx rax,word ptr (-2)[rax] test rax,rax att_je rmarkp_b_array cmp rsp,qword ptr end_stack_offset[r9] att_jb rmark_array_using_reversal sub rax,256 cmp rdx,rax mov rbx,rdx je rmarkp_a_record_array rmarkp_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 rmarkp_lr_array rmarkp_b_array: mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx add rax,8 mov rbp,rax and rax,31*8 shr rbp,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] or dword ptr [rdi+rbp*4],eax att_jmp rmarkp_next_node rmarkp_a_record_array: mov rax,qword ptr 8[rcx] add rcx,16 cmp rbx,2 att_jb rmarkp_lr_array imul rax,rbx att_jmp rmarkp_lr_array rmarkp_lazy_array: cmp rsp,qword ptr end_stack_offset[r9] att_jb rmark_array_using_reversal mov rax,qword ptr 8[rcx] add rcx,16 rmarkp_lr_array: mov rbx,qword ptr neg_heap_p3_offset[r9] add rbx,rcx shr rbx,3 add rbx,rax mov rdx,rbx and rbx,31 shr rdx,5 lea r11,bit_set_table[rip] mov ebx,dword ptr [r11+rbx*4] or dword ptr [rdi+rdx*4],ebx cmp rax,1 jbe rmarkp_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 rmarkp_array_nodes rmarkp_array_nodes1: cmp rcx,rsi ja rmarkp_next_array_node mov rbx,qword ptr [rcx] lea rax,1[rsi] mov qword ptr [rsi],rbx mov qword ptr [rcx],rax rmarkp_next_array_node: add rsi,8 cmp rsi,qword ptr [rsp] je end_rmarkp_array_node rmarkp_array_nodes: mov rcx,qword ptr [rsi] mov rax,qword ptr neg_heap_p3_offset[r9] add rax,rcx cmp rax,qword ptr heap_size_64_65_offset[r9] att_jnc rmarkp_next_array_node mov rbx,rax and rax,31*8 shr rbx,8 lea r11,bit_set_table2[rip] mov eax,dword ptr [r11+rax] mov ebp,dword ptr [rdi+rbx*4] test rbp,rax att_jne rmarkp_array_nodes1 or rbp,rax mov dword ptr [rdi+rbx*4],ebp mov rax,qword ptr [rcx] call rmarkp_array_node add rsi,8 cmp rsi,qword ptr [rsp] att_jne rmarkp_array_nodes end_rmarkp_array_node: add rsp,8 att_jmp rmarkp_next_node rmarkp_array_node: sub rsp,16 mov qword ptr 8[rsp],rsi mov rbx,rsi mov qword ptr [rsp],1 att_jmp rmarkp_arguments rmarkp_array_length_0_1: lea rcx,-16[rcx] att_jb rmarkp_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 rmarkp_hnf_1