summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--acompact.asm8
-rw-r--r--acopy.asm12
-rw-r--r--amark.asm21
3 files changed, 40 insertions, 1 deletions
diff --git a/acompact.asm b/acompact.asm
index b42b802..d722faf 100644
--- a/acompact.asm
+++ b/acompact.asm
@@ -862,6 +862,9 @@ move_hnf_0:
cmp rax,offset CHAR+2
endif
jbe move_real_int_bool_or_char
+ ifdef PIC
+move_normal_hnf_0:
+ endif
test rsi,rsi
jne bsf_and_copy_nodes
@@ -887,6 +890,11 @@ cp_s_arg_lp3:
jmp find_non_zero_long
move_array:
+ ifdef PIC
+ lea r9,__ARRAY__+2+0
+ cmp rax,r9
+ jb move_normal_hnf_0
+ endif
test rsi,rsi
push rcx
jne bsf_and_end_array_bit
diff --git a/acopy.asm b/acopy.asm
index 9410d6a..312bf22 100644
--- a/acopy.asm
+++ b/acopy.asm
@@ -1235,9 +1235,19 @@ copy_arity_0_node2_:
ret
copy_string_or_array_2:
+ ifdef PIC
+ je copy_string_2
+ lea r9,__ARRAY__+2+0
+ cmp rcx,r9
+ jb copy_normal_hnf_0_2
+ mov rcx,rdx
+ jmp copy_array_2
+copy_string_2:
+ mov rcx,rdx
+ else
mov rcx,rdx
jne copy_array_2
-
+ endif
sub rdx,heap_p1+0
cmp rdx,semi_space_size+0
jae copy_string_or_array_constant
diff --git a/amark.asm b/amark.asm
index afcc68e..94cb980 100644
--- a/amark.asm
+++ b/amark.asm
@@ -864,6 +864,11 @@ _mark_real_int_bool_or_char:
or dword ptr 4[rdi+rbx*4],1
jmp _mark_next_node
+ ifdef PIC
+_mark_normal_hnf_0_:
+ or dword ptr [rdi+rbx*4],esi
+ endif
+
_mark_normal_hnf_0:
inc r14
jmp _mark_next_node
@@ -966,6 +971,12 @@ _mark_record_1:
_mark_string_or_array:
je _mark_string_
+ ifdef PIC
+ lea r9,__ARRAY__+2+0
+ cmp rax,r9
+ jb _mark_normal_hnf_0_
+ endif
+
_mark_array:
mov rbp,qword ptr 16[rcx]
test rbp,rbp
@@ -1876,6 +1887,10 @@ __no_int_3:
__no_char_3:
jb __mark_real_bool_or_small_string
+ ifdef PIC
+__mark_normal_hnf_0:
+ endif
+
ifdef NEW_DESCRIPTORS
lea rcx,((-8)-2)[rax]
else
@@ -2018,6 +2033,12 @@ __mark_record_1:
__mark_string_or_array:
je __mark_string_
+ ifdef PIC
+ lea r9,__ARRAY__+2+0
+ cmp rax,r9
+ jb __mark_normal_hnf_0
+ endif
+
__mark_array:
mov rbp,qword ptr 16[rcx]
test rbp,rbp