summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn van Groningen2011-08-17 12:16:36 +0000
committerJohn van Groningen2011-08-17 12:16:36 +0000
commit3214e0f7b6f70587bafe5073c84aa7713250202c (patch)
tree2b12ec1a5b6773b732be22a634f5084681e5a6ed
parentfix copying of Real nodes (diff)
fix marking of Real nodes
-rw-r--r--amark.asm61
-rw-r--r--amark_prefetch.asm48
2 files changed, 45 insertions, 64 deletions
diff --git a/amark.asm b/amark.asm
index ce4e8a2..21e026f 100644
--- a/amark.asm
+++ b/amark.asm
@@ -2,11 +2,11 @@
mov rax,qword ptr heap_size_65
xor rbx,rbx
- mov qword ptr n_marked_words,rbx
+ mov qword ptr n_marked_words,rbx
shl rax,6
- mov qword ptr lazy_array_list,rbx
- mov qword ptr heap_size_64_65,rax
+ mov qword ptr lazy_array_list,rbx
+ mov qword ptr heap_size_64_65,rax
lea rsi,(-4000)[rsp]
@@ -199,7 +199,7 @@ not_largest_heap:
not_larger_than_heap:
mov rax,rbx
shr rax,3
- mov qword ptr bit_vector_size,rax
+ mov qword ptr bit_vector_size,rax
no_larger_heap:
mov rbp,rax
@@ -267,7 +267,7 @@ _no_heap_use_message2:
mov rsi,qword ptr n_allocated_words
xor rbx,rbx
- mov rcx,rdi
+ mov rcx,rdi
mov qword ptr n_free_words_after_mark,rbx
_scan_bits:
@@ -314,8 +314,8 @@ _end_zero_bits:
jb _scan_bits
_found_free_memory:
- mov qword ptr bit_counter,rbp
- mov qword ptr bit_vector_p,rcx
+ mov qword ptr bit_counter,rbp
+ mov qword ptr bit_vector_p,rcx
lea rbx,(-4)[rdx]
sub rbx,rdi
@@ -344,7 +344,7 @@ _end_bits2:
jae _found_free_memory
_end_scan:
- mov qword ptr bit_counter,rbp
+ mov qword ptr bit_counter,rbp
jmp compact_gc
; %rbp : pointer to stack element
@@ -698,7 +698,7 @@ _end_mark_nodes:
_mark_lazy_node:
movsxd rbp,dword ptr (-4)[rax]
test rbp,rbp
- je _mark_real_or_file
+ je _mark_node2_bb
cmp rbp,1
jle _mark_lazy_node_1
@@ -735,7 +735,7 @@ _mark_closure_with_unboxed_arguments:
mov rax,rbp
and rbp,255
sub rbp,1
- je _mark_real_or_file
+ je _mark_node2_bb
shr rax,8
add rbp,2
@@ -761,9 +761,9 @@ _mark_closure_with_one_boxed_argument:
jmp _mark_node
_mark_hnf_0:
- lea r9,dINT+2
+ lea r9,__STRING__+2
cmp rax,r9
- jb _mark_real_file_or_string
+ jbe _mark_string_or_array
or dword ptr [rdi+rbx*4],esi
@@ -771,7 +771,7 @@ _mark_hnf_0:
cmp rax,r9
ja _mark_normal_hnf_0
-_mark_bool:
+_mark_real_int_bool_or_char:
add r14,2
cmp rsi,40000000h
@@ -784,12 +784,7 @@ _mark_normal_hnf_0:
inc r14
jmp _mark_next_node
-_mark_real_file_or_string:
- lea r9,__STRING__+2
- cmp rax,r9
- jbe _mark_string_or_array
-
-_mark_real_or_file:
+_mark_node2_bb:
or dword ptr [rdi+rbx*4],esi
add r14,3
@@ -877,7 +872,7 @@ _mark_record_1:
cmp word ptr (-2+2)[rax],0
jne _mark_hnf_1
- jmp _mark_bool
+ jmp _mark_real_int_bool_or_char
_mark_string_or_array:
je _mark_string_
@@ -1515,7 +1510,7 @@ __argument_part_parent:
__mark_lazy_node:
movsxd rbp,dword ptr(-4)[rax]
test rbp,rbp
- je __mark_real_or_file
+ je __mark_node2_bb
add rcx,8
cmp rbp,1
@@ -1578,7 +1573,7 @@ fits__in_word_7_:
__mark_closure_1_with_unboxed_argument:
sub rcx,8
- jmp __mark_real_or_file
+ jmp __mark_node2_bb
__mark_hnf_0:
cmp rax,offset dINT+2
@@ -1588,7 +1583,7 @@ __mark_hnf_0:
cmp rbp,33
jb ____small_int
-__mark_bool_or_small_string:
+__mark_real_bool_or_small_string:
mov edx,dword ptr (bit_set_table2)[rdx]
add r14,2
or dword ptr [rdi+rbx*4],edx
@@ -1603,7 +1598,8 @@ ____small_int:
jmp __mark_next_node
__no_int_3:
- jb __mark_real_file_or_string
+ cmp rax,offset __STRING__+2
+ jbe __mark_string_or_array
cmp rax,offset CHAR+2
jne __no_char_3
@@ -1614,7 +1610,7 @@ __no_int_3:
jmp __mark_next_node
__no_char_3:
- jb __mark_bool_or_small_string
+ jb __mark_real_bool_or_small_string
ifdef NEW_DESCRIPTORS
lea rcx,((-8)-2)[rax]
@@ -1623,12 +1619,7 @@ __no_char_3:
endif
jmp __mark_next_node
-__mark_real_file_or_string:
- lea r9,__STRING__+2
- cmp rax,r9
- jbe __mark_string_or_array
-
-__mark_real_or_file:
+__mark_node2_bb:
mov edx,dword ptr (bit_set_table2)[rdx]
add r14,3
@@ -1738,7 +1729,7 @@ __mark_record_1:
cmp word ptr (-2+2)[rax],0
jne __mark_hnf_1
sub rcx,8
- jmp __mark_bool_or_small_string
+ jmp __mark_real_bool_or_small_string
__mark_string_or_array:
je __mark_string_
@@ -1866,9 +1857,9 @@ __mark_array_length_0_1:
mov rdx,qword ptr lazy_array_list
mov qword ptr 24[rcx],rbp
mov qword ptr 16[rcx],rdx
- mov qword ptr [rcx],rax
- mov qword ptr lazy_array_list,rcx
- mov qword ptr 8[rcx],rbx
+ mov qword ptr [rcx],rax
+ mov qword ptr lazy_array_list,rcx
+ mov qword ptr 8[rcx],rbx
add rcx,8
mov rbp,qword ptr [rcx]
diff --git a/amark_prefetch.asm b/amark_prefetch.asm
index f2f632c..b1e17b5 100644
--- a/amark_prefetch.asm
+++ b/amark_prefetch.asm
@@ -15,7 +15,7 @@ pmark:
mov rax,qword ptr heap_size_65
xor rbx,rbx
- mov qword ptr n_marked_words,rbx
+ mov qword ptr n_marked_words,rbx
shl rax,6
mov qword ptr heap_size_64_65,rax
@@ -25,7 +25,7 @@ pmark:
mov rax,qword ptr caf_list
- mov qword ptr end_stack,rsi
+ mov qword ptr end_stack,rsi
mov r15,0
mov r8,0
@@ -375,7 +375,7 @@ pmark_tuple_selector_node_1:
mov rcx,rdx
mov eax,4[rax]
call near ptr rax
- pop rdx
+ pop rdx
lea r9,__indirection
mov qword ptr (-8)[rdx],r9
@@ -517,7 +517,7 @@ end_pmark_nodes_:
pmark_lazy_node:
movsxd rbp,dword ptr (-4)[rax]
test rbp,rbp
- je pmark_real_or_file
+ je pmark_node2_bb
cmp rbp,1
jle pmark_lazy_node_1
@@ -554,7 +554,7 @@ pmark_closure_with_unboxed_arguments:
mov rax,rbp
and rbp,255
sub rbp,1
- je pmark_real_or_file
+ je pmark_node2_bb
shr rax,8
add rbp,2
@@ -580,9 +580,9 @@ pmark_closure_with_one_boxed_argument:
jmp pmark_node
pmark_hnf_0:
- lea r9,dINT+2
+ lea r9,__STRING__+2
cmp rax,r9
- jb pmark_real_file_or_string
+ jbe pmark_string_or_array
or dword ptr [rdi+rbx*4],esi
@@ -603,12 +603,7 @@ pmark_normal_hnf_0:
inc r14
jmp pmark_next_node
-pmark_real_file_or_string:
- lea r9,__STRING__+2
- cmp rax,r9
- jbe pmark_string_or_array
-
-pmark_real_or_file:
+pmark_node2_bb:
or dword ptr [rdi+rbx*4],esi
add r14,3
@@ -935,7 +930,7 @@ pmark_last_string_bits:
jmp pmark_next_node
end_pmarkr_using_reversal:
- pop rdx
+ pop rdx
test rdx,rdx
je pmark_next_node
mov qword ptr [rdx],rcx
@@ -1145,7 +1140,7 @@ pmarkr_record_selector_node_1:
shr rbx,8
mov eax,dword ptr (bit_set_table2)[rax]
test eax,dword ptr [rdi+rbx*4]
- pop rax
+ pop rax
jne pmarkr_no_selector_2
mov rbx,qword ptr [rbp]
@@ -1336,7 +1331,7 @@ pmarkr_argument_part_parent:
pmarkr_lazy_node:
movsxd rbp,dword ptr (-4)[rax]
test rbp,rbp
- je pmarkr_real_or_file
+ je pmarkr_node2_bb
add rcx,8
cmp rbp,1
@@ -1399,7 +1394,7 @@ pmarkr_fits_in_word_7_:
pmarkr_closure_1_with_unboxed_argument:
sub rcx,8
- jmp pmarkr_real_or_file
+ jmp pmarkr_node2_bb
pmarkr_hnf_0:
cmp rax,offset dINT+2
@@ -1407,10 +1402,9 @@ pmarkr_hnf_0:
mov rbp,qword ptr 8[rcx]
cmp rbp,33
-
jb pmarkr_small_int
-pmarkr_bool_or_small_string:
+pmarkr_real_int_bool_or_small_string:
mov edx,dword ptr (bit_set_table2)[rdx]
add r14,2
or dword ptr [rdi+rbx*4],edx
@@ -1425,7 +1419,8 @@ pmarkr_small_int:
jmp pmarkr_next_node
pmarkr_no_int_3:
- jb pmarkr_real_file_or_string
+ cmp rax,offset __STRING__+2
+ jbe pmarkr_string_or_array
cmp rax,offset CHAR+2
jne pmarkr_no_char_3
@@ -1436,7 +1431,7 @@ pmarkr_no_int_3:
jmp pmarkr_next_node
pmarkr_no_char_3:
- jb pmarkr_bool_or_small_string
+ jb pmarkr_real_int_bool_or_small_string
ifdef NEW_DESCRIPTORS
lea rcx,((-8)-2)[rax]
@@ -1445,12 +1440,7 @@ pmarkr_no_char_3:
endif
jmp pmarkr_next_node
-pmarkr_real_file_or_string:
- lea r9,__STRING__+2
- cmp rax,r9
- jbe pmarkr_string_or_array
-
-pmarkr_real_or_file:
+pmarkr_node2_bb:
mov edx,dword ptr (bit_set_table2)[rdx]
add r14,3
@@ -1560,7 +1550,7 @@ pmarkr_record_1:
cmp word ptr (-2+2)[rax],0
jne pmarkr_hnf_1
sub rcx,8
- jmp pmarkr_bool_or_small_string
+ jmp pmarkr_real_int_bool_or_small_string
pmarkr_string_or_array:
je pmarkr_string_
@@ -1688,7 +1678,7 @@ pmarkr_array_length_0_1:
mov rdx,qword ptr lazy_array_list
mov qword ptr 24[rcx],rbp
mov qword ptr 16[rcx],rdx
- mov qword ptr [rcx],rax
+ mov qword ptr [rcx],rax
mov qword ptr lazy_array_list,rcx
mov qword ptr 8[rcx],rbx
add rcx,8