summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--acompact_rmark_prefetch.asm51
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]