diff options
-rw-r--r-- | acompact.asm | 8 | ||||
-rw-r--r-- | acopy.asm | 12 | ||||
-rw-r--r-- | amark.asm | 21 |
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 @@ -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 @@ -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 |