ZERO_ARITY_DESCRIPTOR_OFFSET = -4 COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP = 1 str r9,[sp,#-4]! lao r12,heap_p2,9 ldo r10,r12,heap_p2,9 lao r12,heap_size_129,4 ldo r4,r12,heap_size_129,4 lsl r4,r4,#6 lao r12,semi_space_size,0 sto r4,r12,semi_space_size,0 add r9,r10,r4 @ r0 = INT+2 @ r1 = CHAR+2 laol r0,INT+2,INT_o_2,6 laol r1,CHAR+2,CHAR_o_2,2 otoa r0,INT_o_2,6 otoa r1,CHAR_o_2,2 .if WRITE_HEAP laol r12,heap2_begin_and_end+4,heap2_begin_and_end_o_4,0 sto r9,r12,heap2_begin_and_end_o_4,0 .endif sub sp,sp,#16 lao r12,caf_list,0 ldo r4,r12,caf_list,0 tst r4,r4 beq end_copy_cafs copy_cafs_lp: ldr r12,[r4,#-4] str r12,[sp,#-4]! add r8,r4,#4 ldr r3,[r4] mov r2,#-2 bl copy_lp2 ldr r4,[sp],#4 cmp r4,#0 bne copy_cafs_lp end_copy_cafs: ldr r3,[sp,#16] lao r12,stack_p,4 ldo r8,r12,stack_p,4 sub r3,r3,r8 lsr r3,r3,#2 cmp r3,#0 beq end_copy0 mov r2,#-2 bl copy_lp2 end_copy0: lao r12,heap_p2,10 ldo r8,r12,heap_p2,10 bl copy_lp1 add sp,sp,#16 lao r12,heap_end_after_gc,10 sto r9,r12,heap_end_after_gc,10 .ifdef FINALIZERS lao r6,finalizer_list,1 lao r7,free_finalizer_list,3 otoa r6,finalizer_list,1 otoa r7,free_finalizer_list,3 ldr r8,[r6] determine_free_finalizers_after_copy: ldr r4,[r8] tst r4,#1 beq finalizer_not_used_after_copy ldr r8,[r8,#4] sub r4,r4,#1 str r4,[r6] add r6,r4,#4 b determine_free_finalizers_after_copy finalizer_not_used_after_copy: laol r12,__Nil-4,__Nil_o_m4,3 otoa r12,__Nil_o_m4,3 cmp r8,r12 beq end_finalizers_after_copy str r8,[r7] add r7,r8,#4 ldr r8,[r8,#4] b determine_free_finalizers_after_copy end_finalizers_after_copy: str r8,[r6] str r8,[r7] .endif b skip_copy_gc .ifdef PIC lto heap_p2,9 lto heap_size_129,4 lto semi_space_size,0 ltol INT+2,INT_o_2,6 ltol CHAR+2,CHAR_o_2,2 .if WRITE_HEAP ltol heap2_begin_and_end+4,heap2_begin_and_end_o_4,0 .endif lto caf_list,0 lto stack_p,4 lto heap_p2,10 lto heap_end_after_gc,10 .ifdef FINALIZERS lto finalizer_list,1 lto free_finalizer_list,3 ltol __Nil-4,__Nil_o_m4,3 .endif .endif .ltorg @ @ Copy nodes to the other semi-space @ copy_lp2_lp1_all_pointers: add r2,r8,r3,lsl #2 copy_lp2_lp1: copy_lp2: ldr r7,[r8],#4 sub r5,r8,#4 copy_lp2__lp1: copy_lp2_: @ selectors: continue_after_selector_2: ldr r6,[r7] tst r6,#2 beq not_in_hnf_2 in_hnf_2: ldrh r4,[r6,#-2] cmp r4,#0 beq copy_arity_0_node2 cmp r4,#256 bhs copy_record_2 subs r4,r4,#2 str r10,[r5] bhi copy_hnf_node2_3 str r6,[r10],#1 blo copy_hnf_node2_1 ldr r6,[r7,#4] str r10,[r7] ldr r4,[r7,#8] subs r3,r3,#1 str r6,[r10,#4-1] str r4,[r10,#8-1] add r10,r10,#12-1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_hnf_node2_1: ldr r4,[r7,#4] subs r3,r3,#1 str r10,[r7] str r4,[r10,#4-1] add r10,r10,#8-1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_hnf_node2_3: str r6,[r10],#1 str r10,[r7] ldr r6,[r7,#4] str r6,[r10,#4-1] ldr r6,[r7,#8] add r10,r10,#12-1 ldr r7,[r6] tst r7,#1 bne arguments_already_copied_2 str r10,[r10,#-4] str r7,[r10],#1 str r10,[r6],#4 add r10,r10,#4-1 cp_hnf_arg_lp2: ldr r7,[r6],#4 str r7,[r10],#4 subs r4,r4,#1 bne cp_hnf_arg_lp2 subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 arguments_already_copied_2: str r7,[r10,#-4] subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_arity_0_node2: cmp r6,r0 @ INT+2 blo copy_real_file_or_string_2 cmp r6,r1 @ CHAR+2 bhi copy_normal_hnf_0_2 copy_int_bool_or_char_2: ldr r4,[r7,#4] beq copy_char_2 cmp r6,r0 @ INT+2 bne no_small_int_or_char_2 copy_int_2: cmp r4,#33 bhs no_small_int_or_char_2 lao r12,small_integers,1 subs r3,r3,#1 otoa r12,small_integers,1 add r4,r12,r4,lsl #3 str r4,[r5] bne copy_lp2 mov r8,r2 b copy_lp1 copy_char_2: and r4,r4,#255 lao r12,static_characters,1 subs r3,r3,#1 otoa r12,static_characters,1 add r4,r12,r4,lsl #3 str r4,[r5] bne copy_lp2 mov r8,r2 b copy_lp1 no_small_int_or_char_2: copy_record_node2_1_b: str r6,[r9,#-8] str r4,[r9,#-4] sub r9,r9,#7 str r9,[r7] sub r9,r9,#1 str r9,[r5] subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_normal_hnf_0_2: sub r6,r6,#2-ZERO_ARITY_DESCRIPTOR_OFFSET subs r3,r3,#1 str r6,[r5] bne copy_lp2 mov r8,r2 b copy_lp1 copy_real_file_or_string_2: laol r12,__STRING__+2,__STRING___o_2,7 otoa r12,__STRING___o_2,7 cmp r6,r12 bls copy_string_or_array_2 copy_real_or_file_2: str r6,[r9,#-12] sub r9,r9,#12-1 str r9,[r7] sub r9,r9,#1 ldr r4,[r7,#4] ldr r6,[r7,#8] str r9,[r5] str r4,[r9,#4] subs r3,r3,#1 str r6,[r9,#8] bne copy_lp2 mov r8,r2 b copy_lp1 already_copied_2: sub r6,r6,#1 subs r3,r3,#1 str r6,[r5] bne copy_lp2 mov r8,r2 b copy_lp1 copy_record_2: ldrh r12,[r6,#-2+2] sub r4,r4,#256 subs r4,#2 bhi copy_record_node2_3 blo copy_record_node2_1 cmp r12,#0 beq copy_real_or_file_2 str r10,[r5] str r6,[r10] add r6,r10,#1 ldr r4,[r7,#4] str r6,[r7] str r4,[r10,#4] ldr r4,[r7,#8] str r4,[r10,#8] add r10,r10,#12 subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_record_node2_1: ldr r4,[r7,#4] cmp r12,#0 beq copy_record_node2_1_b str r10,[r5] str r6,[r10] add r6,r10,#1 str r4,[r10,#4] str r6,[r7] add r10,r10,#8 subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_record_node2_3: cmp r12,#1 bls copy_record_node2_3_ab_or_b str r4,[sp,#-4]! add r4,r10,#1 str r4,[r7] ldr r4,[r7,#8] str r6,[r10] ldr r7,[r7,#4] str r7,[r10,#4] str r10,[r5] ldr r12,[r4] mov r6,r4 tst r12,#1 bne record_arguments_already_copied_2 add r7,r10,#12 ldr r4,[sp],#4 str r7,[r10,#8] add r10,r10,#13 ldr r7,[r6] str r10,[r6],#4 str r7,[r10,#-1] add r10,r10,#3 cp_record_arg_lp2: ldr r7,[r6],#4 str r7,[r10],#4 subs r4,r4,#1 bne cp_record_arg_lp2 subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 record_arguments_already_copied_2: ldr r7,[r6] ldr r4,[sp],#4 str r7,[r10,#8] add r10,r10,#12 subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_record_node2_3_ab_or_b: blo copy_record_node2_3_b copy_record_node2_3_ab: str r4,[sp,#-4]! add r4,r10,#1 lao r12,heap_p1,9 str r4,[r7] ldr r4,[r7,#8] ldo r12,r12,heap_p1,9 str r6,[r10] ldr r7,[r7,#4] mov r6,r4 sub r4,r4,r12 lao r12,heap_copied_vector,4 str r7,[r10,#4] lsr r7,r4,#6 lsr r4,r4,#3 and r4,r4,#31 ldo r12,r12,heap_copied_vector,4 and r7,r7,#-4 str r10,[r5] add r7,r7,r12 mov r12,#1 lsl r4,r12,r4 ldr r12,[r7] tst r4,r12 bne record_arguments_already_copied_2 orr r12,r12,r4 str r12,[r7] ldr r4,[sp],#4 sub r9,r9,#4 lsl r4,r4,#2 sub r9,r9,r4 str r9,[sp,#-4]! add r9,r9,#1 str r9,[r10,#8] add r10,r10,#12 ldr r7,[r6] b cp_record_arg_lp3_c copy_record_node2_3_b: str r4,[sp,#-4]! add r4,r9,#-12+1 lao r12,heap_p1,10 str r4,[r7] ldr r4,[r7,#8] ldo r12,r12,heap_p1,10 str r6,[r9,#-12] ldr r7,[r7,#4] mov r6,r4 sub r4,r4,r12 lao r12,heap_copied_vector,5 str r7,[r9,#-8] lsr r7,r4,#6 sub r9,r9,#12 lsr r4,r4,#3 and r4,r4,#31 ldo r12,r12,heap_copied_vector,5 and r7,r7,#-4 str r9,[r5] add r7,r7,r12 mov r12,#1 lsl r4,r12,r4 ldr r12,[r7] tst r4,r12 bne record_arguments_already_copied_3_b orr r12,r12,r4 str r12,[r7] ldr r4,[sp],#4 mov r7,r9 sub r9,r9,#4 lsl r4,r4,#2 sub r9,r9,r4 str r9,[r7,#8] ldr r7,[r6] str r9,[sp,#-4]! add r9,r9,#1 cp_record_arg_lp3_c: str r9,[r6],#4 str r7,[r9,#-1] add r9,r9,#3 cp_record_arg_lp3: ldr r7,[r6],#4 str r7,[r9],#4 subs r4,r4,#4 bne cp_record_arg_lp3 ldr r9,[sp],#4 subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 record_arguments_already_copied_3_b: ldr r7,[r6] ldr r4,[sp],#4 sub r7,r7,#1 str r7,[r9,#8] subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 not_in_hnf_2: tst r6,#1 bne already_copied_2 ldr r4,[r6,#-4] cmp r4,#0 ble copy_arity_0_node2_ copy_node2_1_: and r4,r4,#255 subs r4,r4,#2 blt copy_arity_1_node2 copy_node2_3: str r10,[r5] str r6,[r10] add r10,r10,#1 str r10,[r7] ldr r6,[r7,#4] add r7,r7,#8 str r6,[r10,#4-1] add r10,r10,#8-1 cp_arg_lp2: ldr r6,[r7],#4 str r6,[r10],#4 subs r4,r4,#1 bhs cp_arg_lp2 subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_arity_1_node2__: ldr r3,[sp],#4 copy_arity_1_node2: copy_arity_1_node2_: str r10,[r5] add r10,r10,#1 str r10,[r7] ldr r4,[r7,#4] str r6,[r10,#-1] str r4,[r10,#4-1] add r10,r10,#12-1 subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_indirection_2: mov r4,r7 ldr r7,[r7,#4] ldr r6,[r7] tst r6,#2 bne in_hnf_2 tst r6,#1 bne already_copied_2 ldr r12,[r6,#-4] cmp r12,#-2 beq skip_indirections_2 movs r4,r12 ble copy_arity_0_node2_ b copy_node2_1_ skip_indirections_2: ldr r7,[r7,#4] ldr r6,[r7] tst r6,#2 bne update_indirection_list_2 tst r6,#1 bne update_indirection_list_2 ldr r12,[r6,#-4] cmp r12,#-2 beq skip_indirections_2 update_indirection_list_2: add r6,r4,#4 ldr r4,[r4,#4] str r7,[r6] cmp r7,r4 bne update_indirection_list_2 b continue_after_selector_2 copy_selector_2: cmp r4,#-2 beq copy_indirection_2 blt copy_record_selector_2 ldr r4,[r7,#4] str r3,[sp,#-4]! ldr r3,[r4] tst r3,#2 beq copy_arity_1_node2__ ldrh r12,[r3,#-2] cmp r12,#2 bls copy_selector_2_ ldr r3,[r4,#8] ldrb r12,[r3] tst r12,#1 bne copy_arity_1_node2__ .ifdef PIC add r11,r6,#-8+4 .endif ldr r6,[r6,#-8] lao r12,e__system__nind,8 .ifdef PIC ldrh r6,[r11,r6] .else ldrh r6,[r6,#4] .endif otoa r12,e__system__nind,8 str r12,[r7] cmp r6,#8 blt copy_selector_2_1 beq copy_selector_2_2 sub r3,r3,#12 ldr r6,[r6,r3] ldr r3,[sp],#4 str r6,[r7,#4] mov r7,r6 b continue_after_selector_2 copy_selector_2_1: ldr r6,[r4,#4] ldr r3,[sp],#4 str r6,[r7,#4] mov r7,r6 b continue_after_selector_2 copy_selector_2_2: ldr r6,[r3] ldr r3,[sp],#4 str r6,[r7,#4] mov r7,r6 b continue_after_selector_2 copy_selector_2_: .ifdef PIC add r11,r6,#-8+4 .endif ldr r6,[r6,#-8] ldr r3,[sp],#4 lao r12,e__system__nind,9 .ifdef PIC ldrh r6,[r11,r6] .else ldrh r6,[r6,#4] .endif otoa r12,e__system__nind,9 str r12,[r7] ldr r6,[r4,r6] str r6,[r7,#4] mov r7,r6 b continue_after_selector_2 copy_record_selector_2: cmp r4,#-3 ldr r4,[r7,#4] ldr r4,[r4] beq copy_strict_record_selector_2 tst r4,#2 beq copy_arity_1_node2_ ldrh r12,[r4,#-2] mov r11,#258/2 cmp r12,r11,lsl #1 bls copy_record_selector_2_ ldrh r12,[r4,#-2+2] cmp r12,#2 bhs copy_selector_2__ lao r12,heap_p1,11 ldr r4,[r7,#4] str r7,[sp,#-4]! ldo r12,r12,heap_p1,11 ldr r4,[r4,#8] sub r4,r4,r12 lao r12,heap_copied_vector,6 lsr r7,r4,#6 lsr r4,r4,#3 ldo r12,r12,heap_copied_vector,6 and r7,r7,#-4 and r4,r4,#31 add r7,r7,r12 mov r12,#1 lsl r4,r12,r4 ldr r12,[r7] ands r4,r4,r12 ldr r7,[sp],#4 beq copy_record_selector_2_ b copy_arity_1_node2_ copy_selector_2__: ldr r4,[r7,#4] ldr r4,[r4,#8] ldrb r12,[r4] tst r12,#1 bne copy_arity_1_node2_ copy_record_selector_2_: .ifdef PIC add r11,r6,#-8+4 .endif ldr r4,[r6,#-8] lao r12,e__system__nind,10 ldr r6,[r7,#4] otoa r12,e__system__nind,10 str r12,[r7] .ifdef PIC ldrh r4,[r11,r4] .else ldrh r4,[r4,#4] .endif cmp r4,#8 ble copy_record_selector_3 ldr r6,[r6,#8] sub r4,r4,#12 copy_record_selector_3: ldr r6,[r6,r4] str r6,[r7,#4] mov r7,r6 b continue_after_selector_2 copy_strict_record_selector_2: tst r4,#2 beq copy_arity_1_node2_ ldrh r12,[r4,#-2] mov r11,#258/2 cmp r12,r11,lsl #1 bls copy_strict_record_selector_2_ ldrh r12,[r4,#-2+2] cmp r12,#2 blo copy_strict_record_selector_2_b ldr r4,[r7,#4] ldr r4,[r4,#8] ldrb r12,[r4] tst r12,#1 bne copy_arity_1_node2_ b copy_strict_record_selector_2_ copy_strict_record_selector_2_b: lao r12,heap_p1,12 ldr r4,[r7,#4] str r7,[sp,#-4]! ldo r12,r12,heap_p1,12 ldr r4,[r4,#8] sub r4,r4,r12 lao r12,heap_copied_vector,7 lsr r7,r4,#6 lsr r4,r4,#3 ldo r12,r12,heap_copied_vector,7 and r7,r7,#-4 and r4,r4,#31 add r7,r7,r12 mov r12,#1 lsl r4,r12,r4 ldr r12,[r7] ands r4,r4,r12 ldr r7,[sp],#4 bne copy_arity_1_node2_ copy_strict_record_selector_2_: .ifdef PIC add r11,r6,#-8+4 .endif ldr r4,[r6,#-8] str r3,[sp,#-4]! ldr r6,[r7,#4] .ifdef PIC ldrh r3,[r4,r11]! .else ldrh r3,[r4,#4] .endif cmp r3,#8 ble copy_strict_record_selector_3 ldr r12,[r6,#8] add r3,r3,r12 ldr r3,[r3,#-12] b copy_strict_record_selector_4 copy_strict_record_selector_3: ldr r3,[r6,r3] copy_strict_record_selector_4: str r3,[r7,#4] .ifdef PIC ldrh r3,[r4,#6-4] .else ldrh r3,[r4,#6] .endif tst r3,r3 beq copy_strict_record_selector_6 cmp r3,#8 ble copy_strict_record_selector_5 ldr r6,[r6,#8] sub r3,r3,#12 copy_strict_record_selector_5: ldr r3,[r6,r3] str r3,[r7,#8] copy_strict_record_selector_6: .ifdef PIC ldr r6,[r4,#-4-4] .else ldr r6,[r4,#-4] .endif str r6,[r7] ldr r3,[sp],#4 tst r6,#2 bne in_hnf_2 hlt: b hlt copy_arity_0_node2_: blt copy_selector_2 str r6,[r9,#-12]! str r9,[r5] add r4,r9,#1 str r4,[r7] subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_string_or_array_2: .ifdef DLL beq copy_string_2 laol r12,__ARRAY__+2,__ARRAY___o_2,15 otoa r12,__ARRAY___o_2,15 cmp r6,r12 blo copy_normal_hnf_0_2 mov r6,r7 b copy_array_2 copy_string_2: mov r6,r7 .else mov r6,r7 bne copy_array_2 .endif lao r12,heap_p1,13 ldo r12,r12,heap_p1,13 sub r7,r7,r12 lao r12,semi_space_size,1 ldo r12,r12,semi_space_size,1 cmp r7,r12 bhs copy_string_or_array_constant ldr r7,[r6,#4] add r7,r7,#3 str r3,[sp,#-4]! lsr r4,r7,#2 and r7,r7,#-4 sub r9,r9,r7 ldr r3,[r6],#4 str r3,[r9,#-8]! str r9,[r5] add r7,r9,#1 str r7,[r6,#-4] add r7,r9,#4 cp_s_arg_lp2: ldr r3,[r6],#4 str r3,[r7],#4 subs r4,r4,#1 bge cp_s_arg_lp2 ldr r3,[sp],#4 subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 copy_array_2: lao r12,heap_p1,14 ldo r12,r12,heap_p1,14 sub r7,r7,r12 lao r12,semi_space_size,2 ldo r12,r12,semi_space_size,2 cmp r7,r12 bhs copy_string_or_array_constant str r3,[sp,#-4]! ldr r4,[r6,#8] cmp r4,#0 beq copy_array_a2 ldrh r3,[r4,#-2] cmp r3,#0 beq copy_strict_basic_array_2 sub r3,r3,#256 ldr r12,[r6,#4] mul r3,r12,r3 b copy_array_a3 copy_array_a2: ldr r3,[r6,#4] copy_array_a3: mov r7,r10 add r10,r10,#12 add r10,r10,r3,lsl #2 str r7,[r5] ldr r4,[r6] str r4,[r7] add r4,r7,#1 add r7,r7,#4 str r4,[r6],#4 add r4,r3,#1 b cp_s_arg_lp2 copy_strict_basic_array_2: ldr r3,[r6,#4] cmp r4,r0 @ INT+2 beq copy_int_array_2 laol r12,BOOL+2,BOOL_o_2,4 otoa r12,BOOL_o_2,4 cmp r4,r12 beq copy_bool_array_2 add r3,r3,r3 copy_int_array_2: add r7,r9,#-12 sub r7,r7,r3,lsl #2 ldr r4,[r6] str r7,[r5] mov r9,r7 str r4,[r7] add r4,r7,#1 add r7,r7,#4 str r4,[r6],#4 add r4,r3,#1 b cp_s_arg_lp2 copy_bool_array_2: add r3,r3,#3 lsr r3,r3,#2 b copy_int_array_2 copy_string_or_array_constant: str r6,[r5] subs r3,r3,#1 bne copy_lp2 mov r8,r2 b copy_lp1 @ @ Copy all referenced nodes to the other semi space @ copy_lp1: cmp r8,r10 bhs end_copy1 ldr r4,[r8],#4 tst r4,#2 beq not_in_hnf_1 in_hnf_1: ldrh r3,[r4,#-2] cmp r3,#0 beq copy_array_21 cmp r3,#2 bls copy_lp2_lp1_all_pointers cmp r3,#256 bhs copy_record_21 ldr r12,[r8,#4] tst r12,#1 bne node_without_arguments_part ldr r7,[r8],#8 sub r5,r8,#8 sub r2,r8,#4 add r2,r2,r3,lsl #2 b copy_lp2__lp1 copy_record_21: sub r3,r3,#256 subs r3,r3,#2 bhi copy_record_arguments_3 ldrh r3,[r4,#-2+2] blo copy_record_arguments_1 add r2,r8,#8 cmp r3,#1 bhi copy_lp2_lp1 b copy_node_arity1 copy_record_arguments_1: add r2,r8,#4 b copy_lp2_lp1 copy_record_arguments_3: ldr r12,[r8,#4] tst r12,#1 bne record_node_without_arguments_part ldrh r7,[r4,#-2+2] add r6,r8,r3,lsl #2 add r2,r6,#3*4 mov r3,r7 ldr r7,[r8],#8 sub r5,r8,#8 b copy_lp2__lp1 node_without_arguments_part: record_node_without_arguments_part: ldr r7,[r8],#8 sub r4,r12,#1 mov r3,#1 sub r5,r8,#8 str r4,[r8,#-4] mov r2,r8 b copy_lp2__lp1 not_in_hnf_1: ldr r3,[r4,#-4] cmp r3,#256 bgt copy_unboxed_closure_arguments cmp r3,#1 bgt copy_lp2_lp1_all_pointers copy_node_arity1: ldr r7,[r8],#8 mov r3,#1 sub r5,r8,#8 mov r2,r8 b copy_lp2__lp1 copy_unboxed_closure_arguments: ldr r12,=257 cmp r3,r12 beq copy_unboxed_closure_arguments1 uxtb r4,r3,ror #8 and r2,r3,#255 subs r3,r2,r4 add r2,r8,r2,lsl #2 bne copy_lp2_lp1 copy_unboxed_closure_arguments_without_pointers: mov r8,r2 b copy_lp1 copy_unboxed_closure_arguments1: add r8,r8,#8 b copy_lp1 copy_array_21: ldr r3,[r8,#4] add r8,r8,#8 cmp r3,#0 beq copy_array_21_a ldrh r4,[r3,#-2] ldrh r3,[r3,#-2+2] sub r4,r4,#256 cmp r3,#0 beq copy_array_21_b cmp r3,r4 bne copy_array_21_ab copy_array_21_r_a: ldr r3,[r8,#-8] mul r3,r4,r3 cmp r3,#0 beq copy_lp1 b copy_lp2_lp1_all_pointers copy_array_21_a: ldr r3,[r8,#-8] cmp r3,#0 beq copy_lp1 b copy_lp2_lp1_all_pointers copy_array_21_b: ldr r3,[r8,#-8] mul r3,r4,r3 add r8,r8,r3,lsl #2 b copy_lp1 copy_array_21_ab: ldr r12,[r8,#-8] cmp r12,#0 beq copy_lp1 str r12,[sp,#0] lsl r4,r4,#2 str r3,[sp,#8] str r4,[sp,#4] copy_array_21_lp_ab: add r2,r8,r4 str r2,[sp,#12] mov r2,#-1 b copy_lp2 end_copy1: cmp r8,#-1 it ne bxne lr copy_array_21_lp_ab_next: ldr r8,[sp,#12] ldr r12,[sp] ldr r3,[sp,#8] ldr r4,[sp,#4] subs r12,r12,#1 str r12,[sp] bne copy_array_21_lp_ab b copy_lp1 .ifdef PIC lto small_integers,1 lto static_characters,1 ltol __STRING__+2,__STRING___o_2,7 lto heap_p1,9 lto heap_copied_vector,4 lto heap_p1,10 lto heap_copied_vector,5 lto e__system__nind,8 lto e__system__nind,9 lto heap_p1,11 lto heap_copied_vector,6 lto e__system__nind,10 lto heap_p1,12 lto heap_copied_vector,7 .ifdef DLL ltol __ARRAY__+2,__ARRAY___o_2,15 .endif lto heap_p1,13 lto semi_space_size,1 lto heap_p1,14 lto semi_space_size,2 ltol BOOL+2,BOOL_o_2,4 .endif .ltorg skip_copy_gc: