summaryrefslogtreecommitdiff
path: root/acompact_rmark.asm
diff options
context:
space:
mode:
Diffstat (limited to 'acompact_rmark.asm')
-rw-r--r--acompact_rmark.asm36
1 files changed, 28 insertions, 8 deletions
diff --git a/acompact_rmark.asm b/acompact_rmark.asm
index d173b59..b3b1221 100644
--- a/acompact_rmark.asm
+++ b/acompact_rmark.asm
@@ -68,6 +68,9 @@ rmark_hnf_2:
mov qword ptr 8[rsp],rbx
mov qword ptr [rsp],rax
+ cmp rsp,qword ptr end_stack
+ jb rmark_using_reversal
+
rmark_node:
mov rax,qword ptr neg_heap_p3
add rax,rcx
@@ -118,6 +121,9 @@ rmark_no_reverse:
rmark_hnf_3:
mov rdx,qword ptr 8[rcx]
rmark_hnf_3_:
+ cmp rsp,qword ptr end_stack
+ jb rmark_using_reversal_
+
mov rax,qword ptr neg_heap_p3
add rax,rdx
@@ -289,6 +295,9 @@ rmark_not_yet_linked_ab:
jmp rmark_hnf_1
rmark_record_3_aab:
+ cmp rsp,qword ptr end_stack
+ jb rmark_using_reversal_
+
mov rax,qword ptr neg_heap_p3
add rax,rdx
@@ -418,7 +427,7 @@ rmark_large_tuple_or_record:
and d3,31*8
shr rbx,8
mov d3d,dword ptr (bit_clear_table2)[d3]
- and dword ptr [rdi+rbx*4],d3d
+ and dword ptr [rdi+rbx*4],d3d
movzx eax,word ptr 4[rax]
mov rbx,qword ptr pointer_compare_address
@@ -432,14 +441,14 @@ rmark_large_tuple_or_record:
je rmark_tuple_selector_node_2
mov rcx,qword ptr (-24)[d2+rax]
- mov qword ptr [rsi],rcx
- mov qword ptr [rdx],rcx
+ mov qword ptr [rsi],rcx
+ mov qword ptr [rdx],rcx
jmp rmark_node_d1
rmark_tuple_selector_node_2:
mov rcx,qword ptr [d2]
- mov qword ptr [rsi],rcx
- mov qword ptr [rdx],rcx
+ mov qword ptr [rsi],rcx
+ mov qword ptr [rdx],rcx
jmp rmark_node_d1
else
rmark_small_tuple_or_record:
@@ -480,7 +489,7 @@ rmark_record_selector_node_1:
and rbp,31
mov ebp,dword ptr (bit_set_table)[rbp*4]
mov ebx,dword ptr [rdi+rbx*4]
- and rbx,rbp
+ and rbx,rbp
jne rmark_hnf_1
mov rbx,qword ptr [rdx]
@@ -511,7 +520,7 @@ rmark_small_tuple_or_record:
mov eax,(-8)[rax]
- mov d3,rbx
+ mov d3,rbx
and d3,31*8
shr rbx,8
mov d3d,dword ptr (bit_clear_table2)[d3]
@@ -664,6 +673,7 @@ rmark_next_node:
cmp rcx,1
ja rmark_node
+rmark_next_node_:
end_rmark_nodes:
ret
@@ -694,7 +704,11 @@ rmark_push_lazy_args:
mov rsi,rcx
mov rcx,qword ptr [rcx]
- jmp rmark_node
+
+ cmp rsp,qword ptr end_stack
+ jae rmark_node
+
+ jmp rmark_using_reversal
rmark_closure_with_unboxed_arguments:
; (a_size+b_size)+(b_size<<8)
@@ -796,6 +810,9 @@ rmark_no_normal_hnf_0:
test rax,rax
je rmark_b_array
+ cmp rsp,qword ptr end_stack
+ jb rmark_array_using_reversal
+
sub rax,256
cmp rdx,rax
mov rbx,rdx
@@ -841,6 +858,9 @@ rmark_a_record_array:
jmp rmark_lr_array
rmark_lazy_array:
+ cmp rsp,qword ptr end_stack
+ jb rmark_array_using_reversal
+
mov rax,qword ptr 8[rcx]
add rcx,16