diff options
-rw-r--r-- | acompact_rmark_prefetch.asm | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/acompact_rmark_prefetch.asm b/acompact_rmark_prefetch.asm index 77df8a2..6bcb75a 100644 --- a/acompact_rmark_prefetch.asm +++ b/acompact_rmark_prefetch.asm @@ -121,7 +121,7 @@ rmarkp_node_: prefetch [rcx] ifdef PIC - lea r9,rmarkp_queue+0 + lea r9,rmarkp_queue+0 mov qword ptr [r9+rbp],rcx mov qword ptr 8[r9+rbp],rsi mov qword ptr 16[r9+rbp],rbx @@ -307,7 +307,7 @@ rmarkp_add_item: mov rdx,qword ptr rmarkp_n_queue_items_16+0 ifdef PIC - lea r9,rmarkp_queue+0 + lea r9,rmarkp_queue+0 mov qword ptr [r9+rbp],rcx mov qword ptr 8[r9+rbp],rsi mov qword ptr 16[r9+rbp],rsi @@ -747,7 +747,12 @@ rmarkp_large_tuple_or_record: mov rbx,qword ptr neg_heap_p3+0 lea rbx,(-8)[rcx+rbx] + ifdef PIC + movsxd d3,dword ptr(-8)[rax] + add rax,d3 + else mov eax,(-8)[rax] + endif mov d3,rbx and d3,31*8 @@ -760,7 +765,11 @@ rmarkp_large_tuple_or_record: endif and dword ptr [rdi+rbx*4],d3d + ifdef PIC + movzx eax,word ptr (4-8)[rax] + else movzx eax,word ptr 4[rax] + endif mov rbx,qword ptr pointer_compare_address+0 ifdef PIC @@ -864,7 +873,12 @@ rmarkp_small_tuple_or_record: mov rbx,qword ptr neg_heap_p3+0 lea rbx,(-8)[rcx+rbx] + ifdef PIC + movsxd d3,dword ptr(-8)[rax] + add rax,d3 + else mov eax,(-8)[rax] + endif mov d3,rbx and d3,31*8 @@ -877,7 +891,11 @@ rmarkp_small_tuple_or_record: endif and dword ptr [rdi+rbx*4],d3d + ifdef PIC + movzx eax,word ptr (4-8)[rax] + else movzx eax,word ptr 4[rax] + endif mov rbx,qword ptr pointer_compare_address+0 ifdef PIC @@ -942,14 +960,23 @@ rmarkp_strict_record_selector_node_1: jne rmarkp_hnf_1 rmarkp_select_from_small_record: + ifdef PIC + movsxd rbx,dword ptr(-8)[rax] + add rbx,rax + else mov ebx,(-8)[rax] + endif sub rcx,8 cmp rcx,qword ptr pointer_compare_address+0 ja rmarkp_selector_pointer_not_reversed ifdef NEW_DESCRIPTORS + ifdef PIC + movzx eax,word ptr (4-8)[rbx] + else movzx eax,word ptr 4[rbx] + endif cmp rax,16 jle rmarkp_strict_record_selector_node_2 mov rax,qword ptr (-24)[d2+rax] @@ -959,7 +986,11 @@ rmarkp_strict_record_selector_node_2: rmarkp_strict_record_selector_node_3: mov qword ptr 8[rcx],rax + ifdef PIC + movzx eax,word ptr (6-8)[rbx] + else movzx eax,word ptr 6[rbx] + endif test rax,rax je rmarkp_strict_record_selector_node_5 cmp rax,16 @@ -971,7 +1002,11 @@ rmarkp_strict_record_selector_node_4: mov qword ptr 16[rcx],rax rmarkp_strict_record_selector_node_5: + ifdef PIC + mov rax,qword ptr ((-8)-8)[rbx] + else mov rax,qword ptr (-8)[rbx] + endif else mov qword ptr [rcx],rax mov qword ptr [rsi],rcx @@ -990,7 +1025,11 @@ rmarkp_strict_record_selector_node_5: rmarkp_selector_pointer_not_reversed: ifdef NEW_DESCRIPTORS + ifdef PIC + movzx eax,word ptr (4-8)[rbx] + else movzx eax,word ptr 4[rbx] + endif cmp rax,16 jle rmarkp_strict_record_selector_node_6 mov rax,qword ptr (-24)[d2+rax] @@ -1000,7 +1039,11 @@ rmarkp_strict_record_selector_node_6: rmarkp_strict_record_selector_node_7: mov qword ptr 8[rcx],rax + ifdef PIC + movzx eax,word ptr (6-8)[rbx] + else movzx eax,word ptr 6[rbx] + endif test rax,rax je rmarkp_strict_record_selector_node_9 cmp rax,16 @@ -1012,7 +1055,11 @@ rmarkp_strict_record_selector_node_8: mov qword ptr 16[rcx],rax rmarkp_strict_record_selector_node_9: + ifdef PIC + mov rax,qword ptr ((-8)-8)[rbx] + else mov rax,qword ptr (-8)[rbx] + endif mov qword ptr [rcx],rax else mov ebx,4[rbx] |