From 355c7daa2cfc3a6b29f72376dcea6a3976a8695f Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sat, 26 Nov 2016 13:44:41 +0000 Subject: monster commit: replace all registers with aliases to ease optimisation --- thumb2compact.s | 1225 +++++++++++++++++++++++++++---------------------------- 1 file changed, 612 insertions(+), 613 deletions(-) (limited to 'thumb2compact.s') diff --git a/thumb2compact.s b/thumb2compact.s index 33a214e..314bb68 100644 --- a/thumb2compact.s +++ b/thumb2compact.s @@ -1,50 +1,49 @@ - COMPACT_MARK_WITH_STACK = 1 NO_BIT_INSTRUCTIONS = 1 @ mark used nodes and pointers in argument parts and link backward pointers - lao r12,heap_size_33,10 - ldo r4,r12,heap_size_33,10 - lsl r4,r4,#5 - lao r12,heap_size_32_33,1 - sto r4,r12,heap_size_32_33,1 -@ heap_size_32_33 in r2 - mov r2,r4 + lao SCRATCH_REG,heap_size_33,10 + ldo BSTACK_0,SCRATCH_REG,heap_size_33,10 + lsl BSTACK_0,BSTACK_0,#5 + lao SCRATCH_REG,heap_size_32_33,1 + sto BSTACK_0,SCRATCH_REG,heap_size_32_33,1 +@ heap_size_32_33 in BSTACK_2 + mov BSTACK_2,BSTACK_0 - lao r12,heap_p3,11 - ldo r11,r12,heap_p3,11 -@ heap_p3 in r11 + lao SCRATCH_REG,heap_p3,11 + ldo ASTACK_3,SCRATCH_REG,heap_p3,11 +@ heap_p3 in ASTACK_3 .if COMPACT_MARK_WITH_STACK - add r9,sp,#-8000 + add ASTACK_PTR,sp,#-8000 .endif - lao r12,caf_list,2 - ldo r4,r12,caf_list,2 + lao SCRATCH_REG,caf_list,2 + ldo BSTACK_0,SCRATCH_REG,caf_list,2 .if COMPACT_MARK_WITH_STACK - lao r12,end_stack,1 - sto r9,r12,end_stack,1 -@ end_stack in r0 - mov r0,r9 + lao SCRATCH_REG,end_stack,1 + sto ASTACK_PTR,SCRATCH_REG,end_stack,1 +@ end_stack in BSTACK_4 + mov BSTACK_4,ASTACK_PTR .endif - cmp r4,#0 + cmp BSTACK_0,#0 beq end_mark_cafs .thumb_func mark_cafs_lp: - ldr r12,[r4,#-4] - str r12,[sp,#-4]! + ldr SCRATCH_REG,[BSTACK_0,#-4] + str SCRATCH_REG,[sp,#-4]! .if COMPACT_MARK_WITH_STACK - add r9,r4,#4 - ldr r4,[r4] - add r6,r9,r4,lsl #2 + add ASTACK_PTR,BSTACK_0,#4 + ldr BSTACK_0,[BSTACK_0] + add ASTACK_0,ASTACK_PTR,BSTACK_0,lsl #2 .else - add r8,r4,#4 - ldr r4,[r4] - add r6,r8,r4,lsl #2 + add ASTACK_2,BSTACK_0,#4 + ldr BSTACK_0,[BSTACK_0] + add ASTACK_0,ASTACK_2,BSTACK_0,lsl #2 .endif - lao r12,end_vector,13 - sto r6,r12,end_vector,13 + lao SCRATCH_REG,end_vector,13 + sto ASTACK_0,SCRATCH_REG,end_vector,13 .align add lr,pc,#9 @@ -55,24 +54,24 @@ mark_cafs_lp: bl mark_stack_nodes .endif - ldr r4,[sp],#4 - tst r4,r4 + ldr BSTACK_0,[sp],#4 + tst BSTACK_0,BSTACK_0 bne mark_cafs_lp .thumb_func end_mark_cafs: .if COMPACT_MARK_WITH_STACK - lao r12,stack_p,6 - ldo r9,r12,stack_p,6 + lao SCRATCH_REG,stack_p,6 + ldo ASTACK_PTR,SCRATCH_REG,stack_p,6 .else - lao r12,stack_p,6 - ldo r8,r12,stack_p,6 + lao SCRATCH_REG,stack_p,6 + ldo ASTACK_2,SCRATCH_REG,stack_p,6 .endif - lao r12,stack_top,4 - ldo r6,r12,stack_top,4 - lao r12,end_vector,14 - sto r6,r12,end_vector,14 + lao SCRATCH_REG,stack_top,4 + ldo ASTACK_0,SCRATCH_REG,stack_top,4 + lao SCRATCH_REG,end_vector,14 + sto ASTACK_0,SCRATCH_REG,end_vector,14 .align add lr,pc,#9 str lr,[sp,#-4]! @@ -119,113 +118,113 @@ end_mark_cafs: compact_heap: .ifdef FINALIZERS - lao r6,finalizer_list,3 - lao r7,free_finalizer_list,5 - otoa r6,finalizer_list,3 - otoa r7,free_finalizer_list,5 + lao ASTACK_0,finalizer_list,3 + lao ASTACK_1,free_finalizer_list,5 + otoa ASTACK_0,finalizer_list,3 + otoa ASTACK_1,free_finalizer_list,5 - ldr r8,[r6] + ldr ASTACK_2,[ASTACK_0] determine_free_finalizers_after_compact1: - laol r12,__Nil-4,__Nil_o_m4,5 - otoa r12,__Nil_o_m4,5 - cmp r8,r12 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,5 + otoa SCRATCH_REG,__Nil_o_m4,5 + cmp ASTACK_2,SCRATCH_REG beq end_finalizers_after_compact1 - lao r12,heap_p3,12 - ldo r4,r12,heap_p3,12 - sub r4,r8,r4 - lsr r3,r4,#7 - and r4,r4,#31*4 - lsr r9,r4,#2 - mov r12,#1 - lsl r9,r12,r9 - - ldr r12,[r10,r3,lsl #2] - tst r9,r12 + lao SCRATCH_REG,heap_p3,12 + ldo BSTACK_0,SCRATCH_REG,heap_p3,12 + sub BSTACK_0,ASTACK_2,BSTACK_0 + lsr BSTACK_1,BSTACK_0,#7 + and BSTACK_0,BSTACK_0,#31*4 + lsr ASTACK_PTR,BSTACK_0,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_PTR,SCRATCH_REG,ASTACK_PTR + + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_PTR,SCRATCH_REG beq finalizer_not_used_after_compact1 - ldr r4,[r8] - mov r9,r8 + ldr BSTACK_0,[ASTACK_2] + mov ASTACK_PTR,ASTACK_2 b finalizer_find_descriptor .thumb_func finalizer_find_descriptor_lp: - and r4,r4,#-4 - mov r9,r4 - ldr r4,[r4] + and BSTACK_0,BSTACK_0,#-4 + mov ASTACK_PTR,BSTACK_0 + ldr BSTACK_0,[BSTACK_0] .thumb_func finalizer_find_descriptor: - tst r4,#1 + tst BSTACK_0,#1 bne finalizer_find_descriptor_lp - laol r12,e____system__kFinalizerGCTemp+2,e____system__kFinalizerGCTemp_o_2,0 - sto r12,r9,e____system__kFinalizerGCTemp_o_2,0 + laol SCRATCH_REG,e____system__kFinalizerGCTemp+2,e____system__kFinalizerGCTemp_o_2,0 + sto SCRATCH_REG,ASTACK_PTR,e____system__kFinalizerGCTemp_o_2,0 - cmp r8,r6 + cmp ASTACK_2,ASTACK_0 bhi finalizer_no_reverse - ldr r4,[r8] - add r9,r6,#1 - str r9,[r8] - str r4,[r6] + ldr BSTACK_0,[ASTACK_2] + add ASTACK_PTR,ASTACK_0,#1 + str ASTACK_PTR,[ASTACK_2] + str BSTACK_0,[ASTACK_0] .thumb_func finalizer_no_reverse: - add r6,r8,#4 - ldr r8,[r8,#4] + add ASTACK_0,ASTACK_2,#4 + ldr ASTACK_2,[ASTACK_2,#4] b determine_free_finalizers_after_compact1 finalizer_not_used_after_compact1: - laol r12,e____system__kFinalizerGCTemp+2,e____system__kFinalizerGCTemp_o_2,1 - sto r12,r8,e____system__kFinalizerGCTemp_o_2,1 + laol SCRATCH_REG,e____system__kFinalizerGCTemp+2,e____system__kFinalizerGCTemp_o_2,1 + sto SCRATCH_REG,ASTACK_2,e____system__kFinalizerGCTemp_o_2,1 - str r8,[r7] - add r7,r8,#4 + str ASTACK_2,[ASTACK_1] + add ASTACK_1,ASTACK_2,#4 - ldr r8,[r8,#4] - str r8,[r6] + ldr ASTACK_2,[ASTACK_2,#4] + str ASTACK_2,[ASTACK_0] b determine_free_finalizers_after_compact1 end_finalizers_after_compact1: - str r8,[r7] + str ASTACK_2,[ASTACK_1] - lao r12,finalizer_list,4 - ldo r6,r12,finalizer_list,4 - laol r12,__Nil-4,__Nil_o_m4,6 - otoa r12,__Nil_o_m4,6 - cmp r6,r12 + lao SCRATCH_REG,finalizer_list,4 + ldo ASTACK_0,SCRATCH_REG,finalizer_list,4 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,6 + otoa SCRATCH_REG,__Nil_o_m4,6 + cmp ASTACK_0,SCRATCH_REG beq finalizer_list_empty - tst r6,#3 + tst ASTACK_0,#3 bne finalizer_list_already_reversed - ldr r4,[r6] - laol r12,finalizer_list+1,finalizer_list_o_1,0 - otoa r12,finalizer_list_o_1,0 - str r12,[r6] - lao r12,finalizer_list,5 - sto r4,r12,finalizer_list,5 + ldr BSTACK_0,[ASTACK_0] + laol SCRATCH_REG,finalizer_list+1,finalizer_list_o_1,0 + otoa SCRATCH_REG,finalizer_list_o_1,0 + str SCRATCH_REG,[ASTACK_0] + lao SCRATCH_REG,finalizer_list,5 + sto BSTACK_0,SCRATCH_REG,finalizer_list,5 .thumb_func finalizer_list_already_reversed: .thumb_func finalizer_list_empty: .if COMPACT_MARK_WITH_STACK - lao r9,free_finalizer_list,6 - otoa r9,free_finalizer_list,6 - ldr r6,[r9] + lao ASTACK_PTR,free_finalizer_list,6 + otoa ASTACK_PTR,free_finalizer_list,6 + ldr ASTACK_0,[ASTACK_PTR] .else - lao r8,free_finalizer_list,6 - otoa r8,free_finalizer_list,6 - ldr r6,[r8] + lao ASTACK_2,free_finalizer_list,6 + otoa ASTACK_2,free_finalizer_list,6 + ldr ASTACK_0,[ASTACK_2] .endif - laol r12,__Nil-4,__Nil_o_m4,7 - otoa r12,__Nil_o_m4,7 - cmp r6,r12 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,7 + otoa SCRATCH_REG,__Nil_o_m4,7 + cmp ASTACK_0,SCRATCH_REG beq free_finalizer_list_empty - laol r6,free_finalizer_list+4,free_finalizer_list_o_4,0 - otoa r6,free_finalizer_list_o_4,0 - lao r12,end_vector,15 - sto r6,r12,end_vector,15 + laol ASTACK_0,free_finalizer_list+4,free_finalizer_list_o_4,0 + otoa ASTACK_0,free_finalizer_list_o_4,0 + lao SCRATCH_REG,end_vector,15 + sto ASTACK_0,SCRATCH_REG,end_vector,15 .if COMPACT_MARK_WITH_STACK .align add lr,pc,#9 @@ -241,40 +240,40 @@ finalizer_list_empty: free_finalizer_list_empty: .endif - lao r12,heap_size_33,11 - ldo r4,r12,heap_size_33,11 - mov r3,r4 - lsl r3,r3,#5 - - lao r12,heap_p3,13 - ldo r12,r12,heap_p3,13 - add r3,r3,r12 - - lao r12,end_heap_p3,0 - sto r3,r12,end_heap_p3,0 -@ end_heap_p3 in r0 - mov r0,r3 - - add r4,r4,#3 - lsr r4,r4,#2 -@ vector_counter in r2 - mov r2,r4 - - lao r12,heap_vector,9 - ldo r6,r12,heap_vector,9 -@ vector_p in r1 - mov r1,r6 - - mov r12,#-4 - rsb r3,r6,r12 - lao r12,neg_heap_vector_plus_4,0 - sto r3,r12,neg_heap_vector_plus_4,0 - - lao r12,heap_p3,14 - ldo r10,r12,heap_p3,14 - mov r9,#0 -@ heap_p3 in r11 - mov r11,r10 + lao SCRATCH_REG,heap_size_33,11 + ldo BSTACK_0,SCRATCH_REG,heap_size_33,11 + mov BSTACK_1,BSTACK_0 + lsl BSTACK_1,BSTACK_1,#5 + + lao SCRATCH_REG,heap_p3,13 + ldo SCRATCH_REG,SCRATCH_REG,heap_p3,13 + add BSTACK_1,BSTACK_1,SCRATCH_REG + + lao SCRATCH_REG,end_heap_p3,0 + sto BSTACK_1,SCRATCH_REG,end_heap_p3,0 +@ end_heap_p3 in BSTACK_4 + mov BSTACK_4,BSTACK_1 + + add BSTACK_0,BSTACK_0,#3 + lsr BSTACK_0,BSTACK_0,#2 +@ vector_counter in BSTACK_2 + mov BSTACK_2,BSTACK_0 + + lao SCRATCH_REG,heap_vector,9 + ldo ASTACK_0,SCRATCH_REG,heap_vector,9 +@ vector_p in BSTACK_3 + mov BSTACK_3,ASTACK_0 + + mov SCRATCH_REG,#-4 + rsb BSTACK_1,ASTACK_0,SCRATCH_REG + lao SCRATCH_REG,neg_heap_vector_plus_4,0 + sto BSTACK_1,SCRATCH_REG,neg_heap_vector_plus_4,0 + + lao SCRATCH_REG,heap_p3,14 + ldo HEAP_PTR,SCRATCH_REG,heap_p3,14 + mov ASTACK_PTR,#0 +@ heap_p3 in ASTACK_3 + mov ASTACK_3,HEAP_PTR b skip_zeros @ d0,a0,a2: free @@ -282,930 +281,930 @@ free_finalizer_list_empty: find_non_zero_long: .thumb_func skip_zeros: - subs r2,r2,#1 + subs BSTACK_2,BSTACK_2,#1 bcc end_copy - ldr r9,[r1],#4 - cmp r9,#0 + ldr ASTACK_PTR,[BSTACK_3],#4 + cmp ASTACK_PTR,#0 beq skip_zeros @ a2: free .thumb_func end_skip_zeros: - lao r12,neg_heap_vector_plus_4,1 - ldo r8,r12,neg_heap_vector_plus_4,1 - add r8,r8,r1 + lao SCRATCH_REG,neg_heap_vector_plus_4,1 + ldo ASTACK_2,SCRATCH_REG,neg_heap_vector_plus_4,1 + add ASTACK_2,ASTACK_2,BSTACK_3 - add r8,r11,r8,lsl #5 + add ASTACK_2,ASTACK_3,ASTACK_2,lsl #5 .thumb_func bsf_and_copy_nodes: - neg r12,r9 - and r12,r12,r9 - clz r3,r12 - rsb r3,r3,#31 + neg SCRATCH_REG,ASTACK_PTR + and SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + clz BSTACK_1,SCRATCH_REG + rsb BSTACK_1,BSTACK_1,#31 .thumb_func copy_nodes: - ldr r4,[r8,r3,lsl #2] + ldr BSTACK_0,[ASTACK_2,BSTACK_1,lsl #2] - bic r9,r9,r12 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - add r12,r8,#4 - add r6,r12,r3,lsl #2 - sub r4,r4,#1 + add SCRATCH_REG,ASTACK_2,#4 + add ASTACK_0,SCRATCH_REG,BSTACK_1,lsl #2 + sub BSTACK_0,BSTACK_0,#1 - tst r4,#2 + tst BSTACK_0,#2 beq begin_update_list_2 - ldr r3,[r4,#-10] - subs r4,r4,#2 + ldr BSTACK_1,[BSTACK_0,#-10] + subs BSTACK_0,BSTACK_0,#2 - tst r3,#1 + tst BSTACK_1,#1 beq end_list_2 find_descriptor_2: - and r3,r3,#-4 - ldr r3,[r3] - tst r3,#1 + and BSTACK_1,BSTACK_1,#-4 + ldr BSTACK_1,[BSTACK_1] + tst BSTACK_1,#1 bne find_descriptor_2 end_list_2: - mov r7,r3 - ldrh r3,[r3,#-2] - cmp r3,#256 + mov ASTACK_1,BSTACK_1 + ldrh BSTACK_1,[BSTACK_1,#-2] + cmp BSTACK_1,#256 blo no_record_arguments - ldrh r7,[r7,#-2+2] - subs r7,r7,#2 + ldrh ASTACK_1,[ASTACK_1,#-2+2] + subs ASTACK_1,ASTACK_1,#2 bhs copy_record_arguments_aa - sub r3,r3,#256 - sub r3,r3,#3 + sub BSTACK_1,BSTACK_1,#256 + sub BSTACK_1,BSTACK_1,#3 .thumb_func copy_record_arguments_all_b: - str r3,[sp,#-4]! - lao r12,heap_vector,10 - ldo r3,r12,heap_vector,10 + str BSTACK_1,[sp,#-4]! + lao SCRATCH_REG,heap_vector,10 + ldo BSTACK_1,SCRATCH_REG,heap_vector,10 update_up_list_1r: - mov r7,r4 - sub r4,r4,r11 + mov ASTACK_1,BSTACK_0 + sub BSTACK_0,BSTACK_0,ASTACK_3 - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! - and r6,r4,#31*4 - lsr r4,r4,#7 - lsr r6,r6,#2 - mov r12,#1 - lsl r6,r12,r6 + and ASTACK_0,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#7 + lsr ASTACK_0,ASTACK_0,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_0,SCRATCH_REG,ASTACK_0 - ldr r4,[r3,r4,lsl #2] + ldr BSTACK_0,[BSTACK_1,BSTACK_0,lsl #2] - ands r4,r4,r6 + ands BSTACK_0,BSTACK_0,ASTACK_0 - ldr r6,[sp],#4 + ldr ASTACK_0,[sp],#4 beq copy_argument_part_1r - ldr r4,[r7] - str r10,[r7] - subs r4,r4,#3 + ldr BSTACK_0,[ASTACK_1] + str HEAP_PTR,[ASTACK_1] + subs BSTACK_0,BSTACK_0,#3 b update_up_list_1r copy_argument_part_1r: - ldr r4,[r7] - str r10,[r7] - str r4,[r10],#4 + ldr BSTACK_0,[ASTACK_1] + str HEAP_PTR,[ASTACK_1] + str BSTACK_0,[HEAP_PTR],#4 - sub r4,r6,r11 - lsr r4,r4,#2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + lsr BSTACK_0,BSTACK_0,#2 - mov r3,r4 - and r3,r3,#31 - cmp r3,#1 + mov BSTACK_1,BSTACK_0 + and BSTACK_1,BSTACK_1,#31 + cmp BSTACK_1,#1 bhs bit_in_this_word - sub r2,r2,#1 - ldr r9,[r1],#4 + sub BSTACK_2,BSTACK_2,#1 + ldr ASTACK_PTR,[BSTACK_3],#4 - lao r12,neg_heap_vector_plus_4,2 - ldo r8,r12,neg_heap_vector_plus_4,2 - add r8,r8,r1 - add r8,r11,r8,lsl #5 + lao SCRATCH_REG,neg_heap_vector_plus_4,2 + ldo ASTACK_2,SCRATCH_REG,neg_heap_vector_plus_4,2 + add ASTACK_2,ASTACK_2,BSTACK_3 + add ASTACK_2,ASTACK_3,ASTACK_2,lsl #5 .thumb_func bit_in_this_word: - mov r12,#1 - lsl r12,r12,r3 - bic r9,r9,r12 + mov SCRATCH_REG,#1 + lsl SCRATCH_REG,SCRATCH_REG,BSTACK_1 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - ldr r3,[sp],#4 + ldr BSTACK_1,[sp],#4 .thumb_func copy_b_record_argument_part_arguments: - ldr r4,[r6],#4 - str r4,[r10],#4 - subs r3,r3,#1 + ldr BSTACK_0,[ASTACK_0],#4 + str BSTACK_0,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs copy_b_record_argument_part_arguments - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func copy_record_arguments_aa: - mov r12,#(256+2)/2 - sub r3,r3,r7 - sub r3,r3,r12,lsl #1 + mov SCRATCH_REG,#(256+2)/2 + sub BSTACK_1,BSTACK_1,ASTACK_1 + sub BSTACK_1,BSTACK_1,SCRATCH_REG,lsl #1 - str r3,[sp,#-4]! - str r7,[sp,#-4]! + str BSTACK_1,[sp,#-4]! + str ASTACK_1,[sp,#-4]! update_up_list_2r: - mov r7,r4 - ldr r4,[r7] - and r3,r4,#3 - subs r3,r3,#3 + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[ASTACK_1] + and BSTACK_1,BSTACK_0,#3 + subs BSTACK_1,BSTACK_1,#3 bne copy_argument_part_2r - str r10,[r7] - subs r4,r4,#3 + str HEAP_PTR,[ASTACK_1] + subs BSTACK_0,BSTACK_0,#3 b update_up_list_2r copy_argument_part_2r: - str r10,[r7] - cmp r4,r6 + str HEAP_PTR,[ASTACK_1] + cmp BSTACK_0,ASTACK_0 blo copy_record_argument_2 .ifdef SHARE_CHAR_INT - cmp r4,r0 + cmp BSTACK_0,BSTACK_4 bhs copy_record_argument_2 .endif - mov r7,r4 - ldr r4,[r7] - add r3,r10,#1 - str r3,[r7] + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[ASTACK_1] + add BSTACK_1,HEAP_PTR,#1 + str BSTACK_1,[ASTACK_1] copy_record_argument_2: - str r4,[r10],#4 + str BSTACK_0,[HEAP_PTR],#4 - ldr r3,[sp],#4 - subs r3,r3,#1 + ldr BSTACK_1,[sp],#4 + subs BSTACK_1,BSTACK_1,#1 bcc no_pointers_in_record .thumb_func copy_record_pointers: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 blo copy_record_pointers_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bhs copy_record_pointers_2 .endif - ldr r4,[r7] - add r10,r10,#1 - str r10,[r7] - subs r10,r10,#1 - mov r7,r4 + ldr BSTACK_0,[ASTACK_1] + add HEAP_PTR,HEAP_PTR,#1 + str HEAP_PTR,[ASTACK_1] + subs HEAP_PTR,HEAP_PTR,#1 + mov ASTACK_1,BSTACK_0 copy_record_pointers_2: - str r7,[r10],#4 - subs r3,r3,#1 + str ASTACK_1,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs copy_record_pointers .thumb_func no_pointers_in_record: - ldr r3,[sp],#4 + ldr BSTACK_1,[sp],#4 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bcc no_non_pointers_in_record .thumb_func copy_non_pointers_in_record: - ldr r4,[r6],#4 - str r4,[r10],#4 - subs r3,r3,#1 + ldr BSTACK_0,[ASTACK_0],#4 + str BSTACK_0,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs copy_non_pointers_in_record .thumb_func no_non_pointers_in_record: - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func no_record_arguments: - subs r3,r3,#3 + subs BSTACK_1,BSTACK_1,#3 update_up_list_2: - mov r7,r4 - ldr r4,[r4] - add r4,r4,#1 - str r10,[r7] - tst r4,#3 + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[BSTACK_0] + add BSTACK_0,BSTACK_0,#1 + str HEAP_PTR,[ASTACK_1] + tst BSTACK_0,#3 bne copy_argument_part_2 - subs r4,r4,#4 + subs BSTACK_0,BSTACK_0,#4 b update_up_list_2 copy_argument_part_2: - sub r4,r4,#1 - cmp r4,r6 + sub BSTACK_0,BSTACK_0,#1 + cmp BSTACK_0,ASTACK_0 bcc copy_arguments_1 .ifdef SHARE_CHAR_INT - cmp r4,r0 + cmp BSTACK_0,BSTACK_4 bcs copy_arguments_1 .endif - mov r7,r4 - ldr r4,[r4] - add r10,r10,#1 - str r10,[r7] - subs r10,r10,#1 + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[BSTACK_0] + add HEAP_PTR,HEAP_PTR,#1 + str HEAP_PTR,[ASTACK_1] + subs HEAP_PTR,HEAP_PTR,#1 copy_arguments_1: - str r4,[r10],#4 + str BSTACK_0,[HEAP_PTR],#4 .thumb_func copy_argument_part_arguments: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc copy_arguments_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs copy_arguments_2 .endif - ldr r4,[r7] - add r10,r10,#1 - str r10,[r7] - subs r10,r10,#1 - mov r7,r4 + ldr BSTACK_0,[ASTACK_1] + add HEAP_PTR,HEAP_PTR,#1 + str HEAP_PTR,[ASTACK_1] + subs HEAP_PTR,HEAP_PTR,#1 + mov ASTACK_1,BSTACK_0 copy_arguments_2: - str r7,[r10],#4 - subs r3,r3,#1 + str ASTACK_1,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs copy_argument_part_arguments - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long update_list_2_: - subs r4,r4,#1 + subs BSTACK_0,BSTACK_0,#1 update_list_2: - str r10,[r7] + str HEAP_PTR,[ASTACK_1] begin_update_list_2: - mov r7,r4 - ldr r4,[r4] + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[BSTACK_0] update_list__2: - tst r4,#1 + tst BSTACK_0,#1 beq end_update_list_2 - tst r4,#2 + tst BSTACK_0,#2 beq update_list_2_ - add r7,r4,#-3 - ldr r4,[r4,#-3] + add ASTACK_1,BSTACK_0,#-3 + ldr BSTACK_0,[BSTACK_0,#-3] b update_list__2 end_update_list_2: - str r10,[r7] + str HEAP_PTR,[ASTACK_1] - str r4,[r10],#4 + str BSTACK_0,[HEAP_PTR],#4 - tst r4,#2 + tst BSTACK_0,#2 beq move_lazy_node - ldrh r3,[r4,#-2] - tst r3,r3 + ldrh BSTACK_1,[BSTACK_0,#-2] + tst BSTACK_1,BSTACK_1 beq move_hnf_0 - cmp r3,#256 + cmp BSTACK_1,#256 bhs move_record - subs r3,r3,#2 + subs BSTACK_1,BSTACK_1,#2 bcc move_hnf_1 beq move_hnf_2 move_hnf_3: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_3_1 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_3_1 .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_3_1: - str r7,[r10] + str ASTACK_1,[HEAP_PTR] - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_3_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_3_2 .endif - add r4,r10,#4+2+1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#4+2+1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_3_2: - str r7,[r10,#4] - add r10,r10,#8 + str ASTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_hnf_2: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_2_1 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_2_1 .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_2_1: - str r7,[r10] + str ASTACK_1,[HEAP_PTR] - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_2_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_2_2 .endif - add r4,r10,#4+1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#4+1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_2_2: - str r7,[r10,#4] - add r10,r10,#8 + str ASTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_hnf_1: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_1_ .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_1_ .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_1_: - str r7,[r10],#4 + str ASTACK_1,[HEAP_PTR],#4 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_record: - mov r12,#258/2 - subs r3,r3,r12,lsl #1 + mov SCRATCH_REG,#258/2 + subs BSTACK_1,BSTACK_1,SCRATCH_REG,lsl #1 blo move_record_1 beq move_record_2 move_record_3: - ldrh r3,[r4,#-2+2] - subs r3,r3,#1 + ldrh BSTACK_1,[BSTACK_0,#-2+2] + subs BSTACK_1,BSTACK_1,#1 bhi move_hnf_3 - ldr r7,[r6],#4 + ldr ASTACK_1,[ASTACK_0],#4 blo move_record_3_1b move_record_3_1a: - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 blo move_record_3_1b .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bhs move_record_3_1b .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_record_3_1b: - str r7,[r10],#4 + str ASTACK_1,[HEAP_PTR],#4 - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 blo move_record_3_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bhs move_record_3_2 .endif - str r8,[sp,#-4]! - sub r4,r7,r11 - - lao r12,heap_vector,11 - ldo r3,r12,heap_vector,11 - add r4,r4,#4 - and r8,r4,#31*4 - lsr r4,r4,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - - ldr r12,[r3,r4,lsl #2] - tst r8,r12 + str ASTACK_2,[sp,#-4]! + sub BSTACK_0,ASTACK_1,ASTACK_3 + + lao SCRATCH_REG,heap_vector,11 + ldo BSTACK_1,SCRATCH_REG,heap_vector,11 + add BSTACK_0,BSTACK_0,#4 + and ASTACK_2,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#7 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + + ldr SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + tst ASTACK_2,SCRATCH_REG beq not_linked_record_argument_part_3_b - sub r4,r10,r11 - - and r8,r4,#31*4 - lsr r4,r4,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - ldr r12,[r3,r4,lsl #2] - orr r12,r12,r8 - str r12,[r3,r4,lsl #2] - ldr r8,[sp],#4 + sub BSTACK_0,HEAP_PTR,ASTACK_3 + + and ASTACK_2,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#7 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + ldr ASTACK_2,[sp],#4 b linked_record_argument_part_3_b not_linked_record_argument_part_3_b: - ldr r12,[r3,r4,lsl #2] - orr r12,r12,r8 - str r12,[r3,r4,lsl #2] + ldr SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] - sub r4,r10,r11 + sub BSTACK_0,HEAP_PTR,ASTACK_3 - and r8,r4,#31*4 - lsr r4,r4,#7 + and ASTACK_2,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r12,r8 - mvn r8,r12 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl SCRATCH_REG,ASTACK_2 + mvn ASTACK_2,SCRATCH_REG - ldr r12,[r3,r4,lsl #2] - and r12,r12,r8 - str r12,[r3,r4,lsl #2] - ldr r8,[sp],#4 + ldr SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + and SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + ldr ASTACK_2,[sp],#4 linked_record_argument_part_3_b: - ldr r3,[r7] - add r4,r10,#2+1 - str r4,[r7] - mov r7,r3 + ldr BSTACK_1,[ASTACK_1] + add BSTACK_0,HEAP_PTR,#2+1 + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_record_3_2: - str r7,[r10],#4 + str ASTACK_1,[HEAP_PTR],#4 - sub r3,r6,r11 - lsr r3,r3,#2 - subs r3,r3,#1 - and r3,r3,#31 - cmp r3,#2 + sub BSTACK_1,ASTACK_0,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + subs BSTACK_1,BSTACK_1,#1 + and BSTACK_1,BSTACK_1,#31 + cmp BSTACK_1,#2 blo bit_in_next_word - mov r12,#1 - lsl r12,r12,r3 - bic r9,r9,r12 + mov SCRATCH_REG,#1 + lsl SCRATCH_REG,SCRATCH_REG,BSTACK_1 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func bit_in_next_word: - sub r2,r2,#1 - ldr r9,[r1],#4 + sub BSTACK_2,BSTACK_2,#1 + ldr ASTACK_PTR,[BSTACK_3],#4 - mov r12,#1 - lsl r12,r12,r3 - bic r9,r9,r12 + mov SCRATCH_REG,#1 + lsl SCRATCH_REG,SCRATCH_REG,BSTACK_1 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - cmp r9,#0 + cmp ASTACK_PTR,#0 beq skip_zeros b end_skip_zeros move_record_2: - ldrh r12,[r4,#-2+2] - cmp r12,#1 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#1 bhi move_hnf_2 blo move_real_or_file move_record_2_ab: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 blo move_record_2_1 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bhs move_record_2_1 .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_record_2_1: - str r7,[r10] - ldr r3,[r6],#4 - str r3,[r10,#4] - add r10,r10,#8 + str ASTACK_1,[HEAP_PTR] + ldr BSTACK_1,[ASTACK_0],#4 + str BSTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_record_1: - ldrh r3,[r4,#-2+2] - tst r3,r3 + ldrh BSTACK_1,[BSTACK_0,#-2+2] + tst BSTACK_1,BSTACK_1 bne move_hnf_1 b move_int_bool_or_char .thumb_func move_real_or_file: - ldr r4,[r6],#4 - str r4,[r10],#4 + ldr BSTACK_0,[ASTACK_0],#4 + str BSTACK_0,[HEAP_PTR],#4 .thumb_func move_int_bool_or_char: - ldr r4,[r6],#4 - str r4,[r10],#4 + ldr BSTACK_0,[ASTACK_0],#4 + str BSTACK_0,[HEAP_PTR],#4 copy_normal_hnf_0: - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_hnf_0: - laol r12,INT+2,INT_o_2,13 - otoa r12,INT_o_2,13 - cmp r4,r12 + laol SCRATCH_REG,INT+2,INT_o_2,13 + otoa SCRATCH_REG,INT_o_2,13 + cmp BSTACK_0,SCRATCH_REG blo move_real_file_string_or_array - laol r12,CHAR+2,CHAR_o_2,8 - otoa r12,CHAR_o_2,8 - cmp r4,r12 + laol SCRATCH_REG,CHAR+2,CHAR_o_2,8 + otoa SCRATCH_REG,CHAR_o_2,8 + cmp BSTACK_0,SCRATCH_REG bls move_int_bool_or_char .ifdef DLL move_normal_hnf_0: .endif - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_real_file_string_or_array: - laol r12,__STRING__+2,__STRING___o_2,10 - otoa r12,__STRING___o_2,10 - cmp r4,r12 + laol SCRATCH_REG,__STRING__+2,__STRING___o_2,10 + otoa SCRATCH_REG,__STRING___o_2,10 + cmp BSTACK_0,SCRATCH_REG bhi move_real_or_file bne move_array - ldr r4,[r6] - add r4,r4,#3 - lsr r4,r4,#2 + ldr BSTACK_0,[ASTACK_0] + add BSTACK_0,BSTACK_0,#3 + lsr BSTACK_0,BSTACK_0,#2 cp_s_arg_lp3: - ldr r3,[r6],#4 - str r3,[r10],#4 - subs r4,r4,#1 + ldr BSTACK_1,[ASTACK_0],#4 + str BSTACK_1,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bcs cp_s_arg_lp3 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_array: .ifdef DLL - laol r12,__ARRAY__+2,__ARRAY___o_2,2 - otoa r12,__ARRAY___o_2,2 - cmp r4,r12 + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,2 + otoa SCRATCH_REG,__ARRAY___o_2,2 + cmp BSTACK_0,SCRATCH_REG blo move_normal_hnf_0 .endif - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_end_array_bit .thumb_func skip_zeros_a: - ldr r9,[r1],#4 - sub r2,r2,#1 - cmp r9,#0 + ldr ASTACK_PTR,[BSTACK_3],#4 + sub BSTACK_2,BSTACK_2,#1 + cmp ASTACK_PTR,#0 beq skip_zeros_a - lao r12,neg_heap_vector_plus_4,3 - ldo r8,r12,neg_heap_vector_plus_4,3 - add r8,r8,r1 + lao SCRATCH_REG,neg_heap_vector_plus_4,3 + ldo ASTACK_2,SCRATCH_REG,neg_heap_vector_plus_4,3 + add ASTACK_2,ASTACK_2,BSTACK_3 - add r8,r11,r8,lsl #5 + add ASTACK_2,ASTACK_3,ASTACK_2,lsl #5 .thumb_func bsf_and_end_array_bit: - neg r12,r9 - and r12,r12,r9 - clz r3,r12 - rsb r3,r3,#31 + neg SCRATCH_REG,ASTACK_PTR + and SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + clz BSTACK_1,SCRATCH_REG + rsb BSTACK_1,BSTACK_1,#31 .thumb_func end_array_bit: - bic r9,r9,r12 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - add r3,r8,r3,lsl #2 + add BSTACK_1,ASTACK_2,BSTACK_1,lsl #2 - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bne move_a_array .thumb_func move_b_array: - ldr r7,[r6] - str r7,[r10] - ldr r3,[r6,#4]! - ldrh r4,[r3,#-2] - add r10,r10,#4 - tst r4,r4 + ldr ASTACK_1,[ASTACK_0] + str ASTACK_1,[HEAP_PTR] + ldr BSTACK_1,[ASTACK_0,#4]! + ldrh BSTACK_0,[BSTACK_1,#-2] + add HEAP_PTR,HEAP_PTR,#4 + tst BSTACK_0,BSTACK_0 beq move_strict_basic_array - subs r4,r4,#256 - mul r7,r4,r7 - mov r4,r7 + subs BSTACK_0,BSTACK_0,#256 + mul ASTACK_1,BSTACK_0,ASTACK_1 + mov BSTACK_0,ASTACK_1 b cp_s_arg_lp3 .thumb_func move_strict_basic_array: - mov r4,r7 - laol r12,INT+2,INT_o_2,14 - otoa r12,INT_o_2,14 - cmp r3,r12 + mov BSTACK_0,ASTACK_1 + laol SCRATCH_REG,INT+2,INT_o_2,14 + otoa SCRATCH_REG,INT_o_2,14 + cmp BSTACK_1,SCRATCH_REG beq cp_s_arg_lp3 - laol r12,BOOL+2,BOOL_o_2,7 - otoa r12,BOOL_o_2,7 - cmp r3,r12 + laol SCRATCH_REG,BOOL+2,BOOL_o_2,7 + otoa SCRATCH_REG,BOOL_o_2,7 + cmp BSTACK_1,SCRATCH_REG beq move_bool_array - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 b cp_s_arg_lp3 .thumb_func move_bool_array: - add r4,r4,#3 - lsr r4,r4,#2 + add BSTACK_0,BSTACK_0,#3 + lsr BSTACK_0,BSTACK_0,#2 b cp_s_arg_lp3 .thumb_func move_a_array: - mov r7,r3 - subs r3,r3,r6 - lsr r3,r3,#2 + mov ASTACK_1,BSTACK_1 + subs BSTACK_1,BSTACK_1,ASTACK_0 + lsr BSTACK_1,BSTACK_1,#2 - str r9,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 blo end_array - ldr r9,[r6] - ldr r4,[r7,#-4] - str r9,[r7,#-4] - str r4,[r10] - ldr r4,[r7] - ldr r9,[r6,#4] - add r6,r6,#8 - str r9,[r7] - str r4,[r10,#4] - add r10,r10,#8 - tst r4,r4 + ldr ASTACK_PTR,[ASTACK_0] + ldr BSTACK_0,[ASTACK_1,#-4] + str ASTACK_PTR,[ASTACK_1,#-4] + str BSTACK_0,[HEAP_PTR] + ldr BSTACK_0,[ASTACK_1] + ldr ASTACK_PTR,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 + str ASTACK_PTR,[ASTACK_1] + str BSTACK_0,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 + tst BSTACK_0,BSTACK_0 beq st_move_array_lp - ldrh r9,[r4,#-2+2] - ldrh r4,[r4,#-2] - subs r4,r4,#256 - cmp r4,r9 + ldrh ASTACK_PTR,[BSTACK_0,#-2+2] + ldrh BSTACK_0,[BSTACK_0,#-2] + subs BSTACK_0,BSTACK_0,#256 + cmp BSTACK_0,ASTACK_PTR beq st_move_array_lp .thumb_func move_array_ab: - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! - ldr r7,[r10,#-8] - mov r3,r9 - mul r7,r4,r7 - lsl r7,r7,#2 + ldr ASTACK_1,[HEAP_PTR,#-8] + mov BSTACK_1,ASTACK_PTR + mul ASTACK_1,BSTACK_0,ASTACK_1 + lsl ASTACK_1,ASTACK_1,#2 - subs r4,r4,r3 - add r7,r7,r6 + subs BSTACK_0,BSTACK_0,BSTACK_1 + add ASTACK_1,ASTACK_1,ASTACK_0 .align add lr,pc,#9 str lr,[sp,#-4]! bl reorder - ldr r6,[sp],#4 - subs r3,r3,#1 - subs r4,r4,#1 + ldr ASTACK_0,[sp],#4 + subs BSTACK_1,BSTACK_1,#1 + subs BSTACK_0,BSTACK_0,#1 - str r3,[sp,#-4]! - str r4,[sp,#-4]! - ldr r12,[r10,#-8] - str r12,[sp,#-4]! + str BSTACK_1,[sp,#-4]! + str BSTACK_0,[sp,#-4]! + ldr SCRATCH_REG,[HEAP_PTR,#-8] + str SCRATCH_REG,[sp,#-4]! b st_move_array_lp_ab move_array_ab_lp1: - ldr r4,[sp,#8] + ldr BSTACK_0,[sp,#8] .thumb_func move_array_ab_a_elements: - ldr r3,[r6],#4 - cmp r3,r6 + ldr BSTACK_1,[ASTACK_0],#4 + cmp BSTACK_1,ASTACK_0 blo move_array_element_ab .ifdef SHARE_CHAR_INT - cmp r3,r0 + cmp BSTACK_1,BSTACK_4 bcs move_array_element_ab .endif - mov r7,r3 - ldr r3,[r7] - add r10,r10,#1 - str r10,[r7] - subs r10,r10,#1 + mov ASTACK_1,BSTACK_1 + ldr BSTACK_1,[ASTACK_1] + add HEAP_PTR,HEAP_PTR,#1 + str HEAP_PTR,[ASTACK_1] + subs HEAP_PTR,HEAP_PTR,#1 .thumb_func move_array_element_ab: - str r3,[r10],#4 - subs r4,r4,#1 + str BSTACK_1,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bcs move_array_ab_a_elements - ldr r4,[sp,#4] + ldr BSTACK_0,[sp,#4] .thumb_func move_array_ab_b_elements: - ldr r3,[r6],#4 - str r3,[r10],#4 - subs r4,r4,#1 + ldr BSTACK_1,[ASTACK_0],#4 + str BSTACK_1,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bcs move_array_ab_b_elements .thumb_func st_move_array_lp_ab: - ldr r12,[sp] - subs r12,r12,#1 - str r12,[sp] + ldr SCRATCH_REG,[sp] + subs SCRATCH_REG,SCRATCH_REG,#1 + str SCRATCH_REG,[sp] bcs move_array_ab_lp1 add sp,sp,#12 b end_array move_array_lp1: - ldr r4,[r6],#4 - add r10,r10,#4 - cmp r4,r6 + ldr BSTACK_0,[ASTACK_0],#4 + add HEAP_PTR,HEAP_PTR,#4 + cmp BSTACK_0,ASTACK_0 blo move_array_element .ifdef SHARE_CHAR_INT - cmp r4,r0 + cmp BSTACK_0,BSTACK_4 bcs move_array_element .endif - ldr r9,[r4] - mov r7,r4 - str r9,[r10,#-4] - add r4,r10,#-4+1 - str r4,[r7] + ldr ASTACK_PTR,[BSTACK_0] + mov ASTACK_1,BSTACK_0 + str ASTACK_PTR,[HEAP_PTR,#-4] + add BSTACK_0,HEAP_PTR,#-4+1 + str BSTACK_0,[ASTACK_1] - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bcs move_array_lp1 b end_array .thumb_func move_array_element: - str r4,[r10,#-4] + str BSTACK_0,[HEAP_PTR,#-4] .thumb_func st_move_array_lp: - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bcs move_array_lp1 .thumb_func end_array: - ldr r9,[sp],#4 + ldr ASTACK_PTR,[sp],#4 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_lazy_node: - mov r7,r4 - ldr r3,[r7,#-4] - tst r3,r3 + mov ASTACK_1,BSTACK_0 + ldr BSTACK_1,[ASTACK_1,#-4] + tst BSTACK_1,BSTACK_1 beq move_lazy_node_0 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 ble move_lazy_node_1 - cmp r3,#256 + cmp BSTACK_1,#256 bge move_closure_with_unboxed_arguments .thumb_func move_lazy_node_arguments: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_lazy_node_arguments_ .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_lazy_node_arguments_ .endif - ldr r4,[r7] - str r4,[r10] - add r4,r10,#1 - add r10,r10,#4 - str r4,[r7] - subs r3,r3,#1 + ldr BSTACK_0,[ASTACK_1] + str BSTACK_0,[HEAP_PTR] + add BSTACK_0,HEAP_PTR,#1 + add HEAP_PTR,HEAP_PTR,#4 + str BSTACK_0,[ASTACK_1] + subs BSTACK_1,BSTACK_1,#1 bcs move_lazy_node_arguments - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_lazy_node_arguments_: - str r7,[r10],#4 - subs r3,r3,#1 + str ASTACK_1,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs move_lazy_node_arguments - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_lazy_node_1: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_lazy_node_1_ .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_lazy_node_1_ .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_lazy_node_1_: - str r7,[r10] - add r10,r10,#8 + str ASTACK_1,[HEAP_PTR] + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_lazy_node_0: - add r10,r10,#8 + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_closure_with_unboxed_arguments: beq move_closure_with_unboxed_arguments_1 - add r3,r3,#1 - mov r4,r3 - and r3,r3,#255 - lsr r4,r4,#8 - subs r3,r3,r4 + add BSTACK_1,BSTACK_1,#1 + mov BSTACK_0,BSTACK_1 + and BSTACK_1,BSTACK_1,#255 + lsr BSTACK_0,BSTACK_0,#8 + subs BSTACK_1,BSTACK_1,BSTACK_0 beq move_non_pointers_of_closure - str r4,[sp,#-4]! + str BSTACK_0,[sp,#-4]! .thumb_func move_closure_with_unboxed_arguments_lp: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_closure_with_unboxed_arguments_ .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_closure_with_unboxed_arguments_ .endif - ldr r4,[r7] - str r4,[r10] - add r4,r10,#1 - add r10,r10,#4 - str r4,[r7] - subs r3,r3,#1 + ldr BSTACK_0,[ASTACK_1] + str BSTACK_0,[HEAP_PTR] + add BSTACK_0,HEAP_PTR,#1 + add HEAP_PTR,HEAP_PTR,#4 + str BSTACK_0,[ASTACK_1] + subs BSTACK_1,BSTACK_1,#1 bne move_closure_with_unboxed_arguments_lp - ldr r4,[sp],#4 + ldr BSTACK_0,[sp],#4 b move_non_pointers_of_closure .thumb_func move_closure_with_unboxed_arguments_: - str r7,[r10],#4 - subs r3,r3,#1 + str ASTACK_1,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bne move_closure_with_unboxed_arguments_lp - ldr r4,[sp],#4 + ldr BSTACK_0,[sp],#4 .thumb_func move_non_pointers_of_closure: - ldr r3,[r6],#4 - str r3,[r10],#4 - subs r4,r4,#1 + ldr BSTACK_1,[ASTACK_0],#4 + str BSTACK_1,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bne move_non_pointers_of_closure - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_closure_with_unboxed_arguments_1: - ldr r4,[r6] - str r4,[r10] - add r10,r10,#8 - cmp r9,#0 + ldr BSTACK_0,[ASTACK_0] + str BSTACK_0,[HEAP_PTR] + add HEAP_PTR,HEAP_PTR,#8 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long @@ -1259,20 +1258,20 @@ move_closure_with_unboxed_arguments_1: end_copy: .ifdef FINALIZERS - lao r12,finalizer_list,6 - ldo r6,r12,finalizer_list,6 + lao SCRATCH_REG,finalizer_list,6 + ldo ASTACK_0,SCRATCH_REG,finalizer_list,6 .thumb_func restore_finalizer_descriptors: - laol r12,__Nil-4,__Nil_o_m4,8 - otoa r12,__Nil_o_m4,8 - cmp r6,r12 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,8 + otoa SCRATCH_REG,__Nil_o_m4,8 + cmp ASTACK_0,SCRATCH_REG beq end_restore_finalizer_descriptors - laol r12,e____system__kFinalizer+2,e____system__kFinalizer_o_2,0 - otoa r12,e____system__kFinalizer_o_2,0 - str r12,[r6] - ldr r6,[r6,#4] + laol SCRATCH_REG,e____system__kFinalizer+2,e____system__kFinalizer_o_2,0 + otoa SCRATCH_REG,e____system__kFinalizer_o_2,0 + str SCRATCH_REG,[ASTACK_0] + ldr ASTACK_0,[ASTACK_0,#4] b restore_finalizer_descriptors .thumb_func -- cgit v1.2.3