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 --- thumb2mark.s | 2727 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 1363 insertions(+), 1364 deletions(-) (limited to 'thumb2mark.s') diff --git a/thumb2mark.s b/thumb2mark.s index a94235f..e7e1e99 100644 --- a/thumb2mark.s +++ b/thumb2mark.s @@ -1,4 +1,3 @@ - ZERO_ARITY_DESCRIPTOR_OFFSET = -4 #undef COUNT_GARBAGE_COLLECTIONS @@ -6,109 +5,109 @@ ZERO_ARITY_DESCRIPTOR_OFFSET = -4 #undef COMPARE_HEAP_AFTER_MARK #undef DEBUG_MARK_COLLECT - lao r12,heap_size_33,6 - ldo r4,r12,heap_size_33,6 - mov r3,#0 + lao SCRATCH_REG,heap_size_33,6 + ldo BSTACK_0,SCRATCH_REG,heap_size_33,6 + mov BSTACK_1,#0 -@ heap_p3 in r0 +@ heap_p3 in BSTACK_4 - lao r12,heap_p3,9 - ldo r0,r12,heap_p3,9 + lao SCRATCH_REG,heap_p3,9 + ldo BSTACK_4,SCRATCH_REG,heap_p3,9 -@ n_marked_words in r2 +@ n_marked_words in BSTACK_2 - mov r2,#0 + mov BSTACK_2,#0 - lsl r1,r4,#5 -@ heap_size_32_33 in r1 - lao r12,heap_size_32_33,0 - sto r1,r12,heap_size_32_33,0 + lsl BSTACK_3,BSTACK_0,#5 +@ heap_size_32_33 in BSTACK_3 + lao SCRATCH_REG,heap_size_32_33,0 + sto BSTACK_3,SCRATCH_REG,heap_size_32_33,0 - lao r12,lazy_array_list,0 - sto r3,r12,lazy_array_list,0 + lao SCRATCH_REG,lazy_array_list,0 + sto BSTACK_1,SCRATCH_REG,lazy_array_list,0 - add r9,sp,#-2000 + add ASTACK_PTR,sp,#-2000 - lao r12,caf_list,1 - ldo r4,r12,caf_list,1 + lao SCRATCH_REG,caf_list,1 + ldo BSTACK_0,SCRATCH_REG,caf_list,1 - lao r12,end_stack,0 -@ end_stack in r11 - mov r11,r9 - sto r9,r12,end_stack,0 + lao SCRATCH_REG,end_stack,0 +@ end_stack in ASTACK_3 + mov ASTACK_3,ASTACK_PTR + sto ASTACK_PTR,SCRATCH_REG,end_stack,0 - tst r4,r4 + tst BSTACK_0,BSTACK_0 beq _end_mark_cafs .thumb_func _mark_cafs_lp: - ldr r3,[r4] - ldr r8,[r4,#-4] + ldr BSTACK_1,[BSTACK_0] + ldr ASTACK_2,[BSTACK_0,#-4] - str r8,[sp,#-4]! - add r8,r4,#4 - add r12,r4,#4 - add r4,r12,r3,lsl #2 - lao r12,end_vector,0 - sto r4,r12,end_vector,0 + str ASTACK_2,[sp,#-4]! + add ASTACK_2,BSTACK_0,#4 + add SCRATCH_REG,BSTACK_0,#4 + add BSTACK_0,SCRATCH_REG,BSTACK_1,lsl #2 + lao SCRATCH_REG,end_vector,0 + sto BSTACK_0,SCRATCH_REG,end_vector,0 .align add lr,pc,#9 str lr,[sp,#-4]! bl _mark_stack_nodes - 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: - lao r12,stack_top,2 - ldo r9,r12,stack_top,2 - lao r12,stack_p,5 - ldo r8,r12,stack_p,5 + lao SCRATCH_REG,stack_top,2 + ldo ASTACK_PTR,SCRATCH_REG,stack_top,2 + lao SCRATCH_REG,stack_p,5 + ldo ASTACK_2,SCRATCH_REG,stack_p,5 - lao r12,end_vector,1 - sto r9,r12,end_vector,1 + lao SCRATCH_REG,end_vector,1 + sto ASTACK_PTR,SCRATCH_REG,end_vector,1 .align add lr,pc,#9 str lr,[sp,#-4]! bl _mark_stack_nodes - lao r12,lazy_array_list,1 - ldo r6,r12,lazy_array_list,1 + lao SCRATCH_REG,lazy_array_list,1 + ldo ASTACK_0,SCRATCH_REG,lazy_array_list,1 - cmp r6,#0 + cmp ASTACK_0,#0 beq end_restore_arrays .thumb_func restore_arrays: - ldr r3,[r6] - laol r12,__ARRAY__+2,__ARRAY___o_2,16 - otoa r12,__ARRAY___o_2,16 - str r12,[r6] + ldr BSTACK_1,[ASTACK_0] + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,16 + otoa SCRATCH_REG,__ARRAY___o_2,16 + str SCRATCH_REG,[ASTACK_0] - cmp r3,#1 + cmp BSTACK_1,#1 beq restore_array_size_1 - add r7,r6,r3,lsl #2 - ldr r4,[r7,#8] - cmp r4,#0 + add ASTACK_1,ASTACK_0,BSTACK_1,lsl #2 + ldr BSTACK_0,[ASTACK_1,#8] + cmp BSTACK_0,#0 beq restore_lazy_array - ldrh r8,[r4,#-2+2] - - neg r12,r8 - and r12,r12,r8 -@ r12 contains lowest 1 bit of r8 - clz r12,r12 - rsb r12,r12,#31 - lsr r8,r8,r12 - lsr r3,r3,r12 - sub r8,r8,#1 - add r8,r8,r8 - add r12,pc,#0 @TODO check offset - ldr r8,[r12,r8] + ldrh ASTACK_2,[BSTACK_0,#-2+2] + + neg SCRATCH_REG,ASTACK_2 + and SCRATCH_REG,SCRATCH_REG,ASTACK_2 +@ SCRATCH_REG contains lowest 1 bit of ASTACK_2 + clz SCRATCH_REG,SCRATCH_REG + rsb SCRATCH_REG,SCRATCH_REG,#31 + lsr ASTACK_2,ASTACK_2,SCRATCH_REG + lsr BSTACK_1,BSTACK_1,SCRATCH_REG + sub ASTACK_2,ASTACK_2,#1 + add ASTACK_2,ASTACK_2,ASTACK_2 + add SCRATCH_REG,pc,#0 @TODO check offset + ldr ASTACK_2,[SCRATCH_REG,ASTACK_2] b skip_mod_inverse_table .word 1 @@ -130,33 +129,33 @@ restore_arrays: .thumb_func skip_mod_inverse_table: - mul r3,r8,r3 + mul BSTACK_1,ASTACK_2,BSTACK_1 .thumb_func restore_lazy_array: - ldr r10,[r6,#8] - ldr r8,[r6,#4] - str r3,[r6,#4] - ldr r9,[r7,#4] - str r4,[r6,#8] - str r8,[r7,#4] - str r10,[r7,#8] - - cmp r4,#0 + ldr HEAP_PTR,[ASTACK_0,#8] + ldr ASTACK_2,[ASTACK_0,#4] + str BSTACK_1,[ASTACK_0,#4] + ldr ASTACK_PTR,[ASTACK_1,#4] + str BSTACK_0,[ASTACK_0,#8] + str ASTACK_2,[ASTACK_1,#4] + str HEAP_PTR,[ASTACK_1,#8] + + cmp BSTACK_0,#0 beq no_reorder_array - ldrh r7,[r4,#-2] - sub r7,r7,#256 - ldrh r8,[r4,#-2+2] - cmp r8,r7 + ldrh ASTACK_1,[BSTACK_0,#-2] + sub ASTACK_1,ASTACK_1,#256 + ldrh ASTACK_2,[BSTACK_0,#-2+2] + cmp ASTACK_2,ASTACK_1 beq no_reorder_array - add r6,r6,#12 - mul r3,r7,r3 - mov r4,r7 - add r7,r6,r3,lsl #2 - mov r3,r8 - sub r4,r4,r8 + add ASTACK_0,ASTACK_0,#12 + mul BSTACK_1,ASTACK_1,BSTACK_1 + mov BSTACK_0,ASTACK_1 + add ASTACK_1,ASTACK_0,BSTACK_1,lsl #2 + mov BSTACK_1,ASTACK_2 + sub BSTACK_0,BSTACK_0,ASTACK_2 .align add lr,pc,#9 @@ -165,179 +164,179 @@ restore_lazy_array: .thumb_func no_reorder_array: - mov r6,r9 - cmp r6,#0 + mov ASTACK_0,ASTACK_PTR + cmp ASTACK_0,#0 bne restore_arrays b end_restore_arrays restore_array_size_1: - ldr r8,[r6,#4] - ldr r7,[r6,#8] - str r3,[r6,#4] - ldr r4,[r6,#12] - str r8,[r6,#12] - str r4,[r6,#8] - - mov r6,r7 - tst r6,r6 + ldr ASTACK_2,[ASTACK_0,#4] + ldr ASTACK_1,[ASTACK_0,#8] + str BSTACK_1,[ASTACK_0,#4] + ldr BSTACK_0,[ASTACK_0,#12] + str ASTACK_2,[ASTACK_0,#12] + str BSTACK_0,[ASTACK_0,#8] + + mov ASTACK_0,ASTACK_1 + tst ASTACK_0,ASTACK_0 bne restore_arrays .thumb_func end_restore_arrays: .ifdef FINALIZERS - lao r12,heap_vector,7 - ldo r10,r12,heap_vector,7 - lao r6,finalizer_list,2 - lao r7,free_finalizer_list,4 - otoa r6,finalizer_list,2 - otoa r7,free_finalizer_list,4 + lao SCRATCH_REG,heap_vector,7 + ldo HEAP_PTR,SCRATCH_REG,heap_vector,7 + lao ASTACK_0,finalizer_list,2 + lao ASTACK_1,free_finalizer_list,4 + otoa ASTACK_0,finalizer_list,2 + otoa ASTACK_1,free_finalizer_list,4 - ldr r8,[r6] + ldr ASTACK_2,[ASTACK_0] .thumb_func determine_free_finalizers_after_mark: - laol r12,__Nil-4,__Nil_o_m4,4 - otoa r12,__Nil_o_m4,4 - cmp r8,r12 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,4 + otoa SCRATCH_REG,__Nil_o_m4,4 + cmp ASTACK_2,SCRATCH_REG beq end_finalizers_after_mark - sub r4,r8,r0 - lsr r3,r4,#7 - and r4,r4,#31*4 - lsr r9,r4,#2 - mov r12,#1 - lsl r9,r12,r9 + sub BSTACK_0,ASTACK_2,BSTACK_4 + 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 r12,[r10,r3,lsl #2] - tst r9,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_PTR,SCRATCH_REG beq finalizer_not_used_after_mark - 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_mark .thumb_func finalizer_not_used_after_mark: - 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_mark .thumb_func end_finalizers_after_mark: - str r8,[r7] + str ASTACK_2,[ASTACK_1] .endif - str r2,[sp,#-4]! + str BSTACK_2,[sp,#-4]! .align add lr,pc,#9 str lr,[sp,#-4]! bl add_garbage_collect_time - ldr r2,[sp],#4 + ldr BSTACK_2,[sp],#4 .ifdef ADJUST_HEAP_SIZE - lao r12,bit_vector_size,3 - ldo r4,r12,bit_vector_size,3 + lao SCRATCH_REG,bit_vector_size,3 + ldo BSTACK_0,SCRATCH_REG,bit_vector_size,3 .else - lao r12,heap_size_33,7 - ldo r4,r12,heap_size_33,7 - lsl r4,r4,#3 + lao SCRATCH_REG,heap_size_33,7 + ldo BSTACK_0,SCRATCH_REG,heap_size_33,7 + lsl BSTACK_0,BSTACK_0,#3 .endif .ifdef ADJUST_HEAP_SIZE - lao r12,n_allocated_words,7 - ldo r10,r12,n_allocated_words,7 - add r10,r10,r2 - lsl r10,r10,#2 + lao SCRATCH_REG,n_allocated_words,7 + ldo HEAP_PTR,SCRATCH_REG,n_allocated_words,7 + add HEAP_PTR,HEAP_PTR,BSTACK_2 + lsl HEAP_PTR,HEAP_PTR,#2 - lsl r9,r4,#2 + lsl ASTACK_PTR,BSTACK_0,#2 - str r7,[sp,#-4]! - str r4,[sp,#-4]! + str ASTACK_1,[sp,#-4]! + str BSTACK_0,[sp,#-4]! - lao r12,heap_size_multiple,3 - ldo r12,r12,heap_size_multiple,3 - umull r4,r7,r12,r10 - lsr r4,r4,#8 - orr r4,r4,r7,lsl #32-8 - lsr r7,r7,#8 + lao SCRATCH_REG,heap_size_multiple,3 + ldo SCRATCH_REG,SCRATCH_REG,heap_size_multiple,3 + umull BSTACK_0,ASTACK_1,SCRATCH_REG,HEAP_PTR + lsr BSTACK_0,BSTACK_0,#8 + orr BSTACK_0,BSTACK_0,ASTACK_1,lsl #32-8 + lsr ASTACK_1,ASTACK_1,#8 - mov r3,r4 - cmp r7,#0 + mov BSTACK_1,BSTACK_0 + cmp ASTACK_1,#0 - ldr r4,[sp],#4 - ldr r7,[sp],#4 + ldr BSTACK_0,[sp],#4 + ldr ASTACK_1,[sp],#4 beq not_largest_heap - lao r12,heap_size_33,8 - ldo r3,r12,heap_size_33,8 - lsl r3,r3,#5 + lao SCRATCH_REG,heap_size_33,8 + ldo BSTACK_1,SCRATCH_REG,heap_size_33,8 + lsl BSTACK_1,BSTACK_1,#5 .thumb_func not_largest_heap: - cmp r3,r9 + cmp BSTACK_1,ASTACK_PTR bls no_larger_heap - lao r12,heap_size_33,9 - ldo r9,r12,heap_size_33,9 - lsl r9,r9,#5 - cmp r3,r9 + lao SCRATCH_REG,heap_size_33,9 + ldo ASTACK_PTR,SCRATCH_REG,heap_size_33,9 + lsl ASTACK_PTR,ASTACK_PTR,#5 + cmp BSTACK_1,ASTACK_PTR bls not_larger_then_heap - mov r3,r9 + mov BSTACK_1,ASTACK_PTR .thumb_func not_larger_then_heap: - lsr r4,r3,#2 - lao r12,bit_vector_size,4 - sto r4,r12,bit_vector_size,4 + lsr BSTACK_0,BSTACK_1,#2 + lao SCRATCH_REG,bit_vector_size,4 + sto BSTACK_0,SCRATCH_REG,bit_vector_size,4 .thumb_func no_larger_heap: .endif - mov r8,r4 + mov ASTACK_2,BSTACK_0 - lao r12,heap_vector,8 - ldo r10,r12,heap_vector,8 + lao SCRATCH_REG,heap_vector,8 + ldo HEAP_PTR,SCRATCH_REG,heap_vector,8 - lsr r8,r8,#5 + lsr ASTACK_2,ASTACK_2,#5 - tst r4,#31 + tst BSTACK_0,#31 beq no_extra_word - mov r12,#0 - str r12,[r10,r8,lsl #2] + mov SCRATCH_REG,#0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] .thumb_func no_extra_word: - sub r4,r4,r2 - lsl r4,r4,#2 - lao r12,n_last_heap_free_bytes,2 - sto r4,r12,n_last_heap_free_bytes,2 - - lao r12,flags,15 - ldo r12,r12,flags,15 - tst r12,#2 + sub BSTACK_0,BSTACK_0,BSTACK_2 + lsl BSTACK_0,BSTACK_0,#2 + lao SCRATCH_REG,n_last_heap_free_bytes,2 + sto BSTACK_0,SCRATCH_REG,n_last_heap_free_bytes,2 + + lao SCRATCH_REG,flags,15 + ldo SCRATCH_REG,SCRATCH_REG,flags,15 + tst SCRATCH_REG,#2 beq _no_heap_use_message2 - str r2,[sp,#-4]! + str BSTACK_2,[sp,#-4]! - lao r0,marked_gc_string_1,0 - otoa r0,marked_gc_string_1,0 + lao BSTACK_4,marked_gc_string_1,0 + otoa BSTACK_4,marked_gc_string_1,0 bl ew_print_string - ldr r2,[sp] - lsl r0,r2,#2 + ldr BSTACK_2,[sp] + lsl BSTACK_4,BSTACK_2,#2 bl ew_print_int - lao r0,heap_use_after_gc_string_2,1 - otoa r0,heap_use_after_gc_string_2,1 + lao BSTACK_4,heap_use_after_gc_string_2,1 + otoa BSTACK_4,heap_use_after_gc_string_2,1 bl ew_print_string - ldr r2,[sp],#4 + ldr BSTACK_2,[sp],#4 _no_heap_use_message2: @@ -348,115 +347,115 @@ _no_heap_use_message2: bl call_finalizers .endif - lao r12,n_allocated_words,8 - ldo r9,r12,n_allocated_words,8 - mov r3,#0 + lao SCRATCH_REG,n_allocated_words,8 + ldo ASTACK_PTR,SCRATCH_REG,n_allocated_words,8 + mov BSTACK_1,#0 -@ n_free_words_after_mark in r2 - mov r6,r10 - mov r2,#0 +@ n_free_words_after_mark in BSTACK_2 + mov ASTACK_0,HEAP_PTR + mov BSTACK_2,#0 .thumb_func _scan_bits: - ldr r12,[r6] - cmp r3,r12 + ldr SCRATCH_REG,[ASTACK_0] + cmp BSTACK_1,SCRATCH_REG beq _zero_bits - str r3,[r6],#4 - subs r8,r8,#1 + str BSTACK_1,[ASTACK_0],#4 + subs ASTACK_2,ASTACK_2,#1 bne _scan_bits - lao r12,n_free_words_after_mark,5 - sto r2,r12,n_free_words_after_mark,5 + lao SCRATCH_REG,n_free_words_after_mark,5 + sto BSTACK_2,SCRATCH_REG,n_free_words_after_mark,5 b _end_scan .thumb_func _zero_bits: - add r7,r6,#4 - add r6,r6,#4 - subs r8,r8,#1 + add ASTACK_1,ASTACK_0,#4 + add ASTACK_0,ASTACK_0,#4 + subs ASTACK_2,ASTACK_2,#1 bne _skip_zero_bits_lp1 - lao r12,n_free_words_after_mark,6 - sto r2,r12,n_free_words_after_mark,6 + lao SCRATCH_REG,n_free_words_after_mark,6 + sto BSTACK_2,SCRATCH_REG,n_free_words_after_mark,6 b _end_bits .thumb_func _skip_zero_bits_lp: - cmp r4,#0 + cmp BSTACK_0,#0 bne _end_zero_bits _skip_zero_bits_lp1: - ldr r4,[r6],#4 - subs r8,r8,#1 + ldr BSTACK_0,[ASTACK_0],#4 + subs ASTACK_2,ASTACK_2,#1 bne _skip_zero_bits_lp - lao r12,n_free_words_after_mark,7 - sto r2,r12,n_free_words_after_mark,7 + lao SCRATCH_REG,n_free_words_after_mark,7 + sto BSTACK_2,SCRATCH_REG,n_free_words_after_mark,7 - cmp r4,#0 + cmp BSTACK_0,#0 beq _end_bits - mov r4,r6 - str r3,[r6,#-4] - subs r4,r4,r7 + mov BSTACK_0,ASTACK_0 + str BSTACK_1,[ASTACK_0,#-4] + subs BSTACK_0,BSTACK_0,ASTACK_1 b _end_bits2 .thumb_func _end_zero_bits: - sub r4,r6,r7 - lsl r4,r4,#3 - add r2,r2,r4 - str r3,[r6,#-4] + sub BSTACK_0,ASTACK_0,ASTACK_1 + lsl BSTACK_0,BSTACK_0,#3 + add BSTACK_2,BSTACK_2,BSTACK_0 + str BSTACK_1,[ASTACK_0,#-4] - cmp r4,r9 + cmp BSTACK_0,ASTACK_PTR blo _scan_bits @ n_free_words_after_mark updated .thumb_func _found_free_memory: - lao r12,n_free_words_after_mark,8 - sto r2,r12,n_free_words_after_mark,8 - lao r12,bit_counter,3 - sto r8,r12,bit_counter,3 - lao r12,bit_vector_p,2 - sto r6,r12,bit_vector_p,2 + lao SCRATCH_REG,n_free_words_after_mark,8 + sto BSTACK_2,SCRATCH_REG,n_free_words_after_mark,8 + lao SCRATCH_REG,bit_counter,3 + sto ASTACK_2,SCRATCH_REG,bit_counter,3 + lao SCRATCH_REG,bit_vector_p,2 + sto ASTACK_0,SCRATCH_REG,bit_vector_p,2 - sub r5,r4,r9 + sub HEAP_FREE,BSTACK_0,ASTACK_PTR - add r3,r7,#-4 - sub r3,r3,r10 - lsl r3,r3,#5 - lao r12,heap_p3,10 - ldo r10,r12,heap_p3,10 - add r10,r10,r3 + add BSTACK_1,ASTACK_1,#-4 + sub BSTACK_1,BSTACK_1,HEAP_PTR + lsl BSTACK_1,BSTACK_1,#5 + lao SCRATCH_REG,heap_p3,10 + ldo HEAP_PTR,SCRATCH_REG,heap_p3,10 + add HEAP_PTR,HEAP_PTR,BSTACK_1 - lao r12,stack_top,3 - ldo r9,r12,stack_top,3 + lao SCRATCH_REG,stack_top,3 + ldo ASTACK_PTR,SCRATCH_REG,stack_top,3 - add r3,r10,r4,lsl #2 - lao r12,heap_end_after_gc,11 - sto r3,r12,heap_end_after_gc,11 + add BSTACK_1,HEAP_PTR,BSTACK_0,lsl #2 + lao SCRATCH_REG,heap_end_after_gc,11 + sto BSTACK_1,SCRATCH_REG,heap_end_after_gc,11 - ldmia sp!,{r0-r4,pc} + ldmia sp!,{BSTACK_4-BSTACK_0,pc} @ n_free_words_after_mark updated .thumb_func _end_bits: - sub r4,r6,r7 - add r4,r4,#4 + sub BSTACK_0,ASTACK_0,ASTACK_1 + add BSTACK_0,BSTACK_0,#4 _end_bits2: - lsl r4,r4,#3 - add r2,r2,r4 + lsl BSTACK_0,BSTACK_0,#3 + add BSTACK_2,BSTACK_2,BSTACK_0 - cmp r4,r9 + cmp BSTACK_0,ASTACK_PTR bhs _found_free_memory - lao r12,n_free_words_after_mark,9 - sto r2,r12,n_free_words_after_mark,9 + lao SCRATCH_REG,n_free_words_after_mark,9 + sto BSTACK_2,SCRATCH_REG,n_free_words_after_mark,9 @ n_free_words_after_mark updated .thumb_func _end_scan: - lao r12,bit_counter,4 - sto r8,r12,bit_counter,4 + lao SCRATCH_REG,bit_counter,4 + sto ASTACK_2,SCRATCH_REG,bit_counter,4 b compact_gc .ifdef PIC @@ -516,432 +515,432 @@ _end_scan: .thumb_func _mark_stack_nodes: - lao r12,end_vector,2 - ldo r12,r12,end_vector,2 - cmp r8,r12 + lao SCRATCH_REG,end_vector,2 + ldo SCRATCH_REG,SCRATCH_REG,end_vector,2 + cmp ASTACK_2,SCRATCH_REG beq _end_mark_nodes .thumb_func _mark_stack_nodes_: - ldr r6,[r8],#4 + ldr ASTACK_0,[ASTACK_2],#4 - sub r7,r6,r0 - cmp r7,r1 + sub ASTACK_1,ASTACK_0,BSTACK_4 + cmp ASTACK_1,BSTACK_3 bcs _mark_stack_nodes - lsr r3,r7,#7 - and r7,r7,#31*4 - lsr r9,r7,#2 - mov r12,#1 - lsl r9,r12,r9 + lsr BSTACK_1,ASTACK_1,#7 + and ASTACK_1,ASTACK_1,#31*4 + lsr ASTACK_PTR,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_PTR,SCRATCH_REG,ASTACK_PTR - ldr r12,[r10,r3,lsl #2] - tst r9,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_PTR,SCRATCH_REG bne _mark_stack_nodes - str r8,[sp,#-4]! + str ASTACK_2,[sp,#-4]! .ifdef MARK_USING_REVERSAL - mov r9,#1 + mov ASTACK_PTR,#1 b __mark_node .thumb_func __end_mark_using_reversal: - ldr r8,[sp],#4 - str r6,[r8,#-4] + ldr ASTACK_2,[sp],#4 + str ASTACK_0,[ASTACK_2,#-4] b _mark_stack_nodes .else - mov r12,#0 - str r12,[sp,#-4]! + mov SCRATCH_REG,#0 + str SCRATCH_REG,[sp,#-4]! b _mark_arguments _mark_hnf_2: - cmp r9,#0x20000000 + cmp ASTACK_PTR,#0x20000000 bls fits_in_word_6 - add r12,r10,#4 - ldr r9,[r12,r3,lsl #2] - orr r9,r9,#1 - str r9,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] fits_in_word_6: - add r2,r2,#3 + add BSTACK_2,BSTACK_2,#3 _mark_record_2_c: - ldr r3,[r6,#4] - str r3,[sp,#-4]! + ldr BSTACK_1,[ASTACK_0,#4] + str BSTACK_1,[sp,#-4]! - cmp sp,r11 + cmp sp,ASTACK_3 blo __mark_using_reversal _mark_node2: .thumb_func _shared_argument_part: - ldr r6,[r6] + ldr ASTACK_0,[ASTACK_0] .thumb_func _mark_node: - sub r7,r6,r0 - cmp r7,r1 + sub ASTACK_1,ASTACK_0,BSTACK_4 + cmp ASTACK_1,BSTACK_3 bcs _mark_next_node - lsr r3,r7,#7 - and r7,r7,#31*4 - lsr r9,r7,#2 - mov r12,#1 - lsl r9,r12,r9 + lsr BSTACK_1,ASTACK_1,#7 + and ASTACK_1,ASTACK_1,#31*4 + lsr ASTACK_PTR,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_PTR,SCRATCH_REG,ASTACK_PTR - ldr r12,[r10,r3,lsl #2] - tst r9,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_PTR,SCRATCH_REG bne _mark_next_node .thumb_func _mark_arguments: - ldr r4,[r6] - tst r4,#2 + ldr BSTACK_0,[ASTACK_0] + tst BSTACK_0,#2 beq _mark_lazy_node - ldrh r8,[r4,#-2] + ldrh ASTACK_2,[BSTACK_0,#-2] - cmp r8,#0 + cmp ASTACK_2,#0 beq _mark_hnf_0 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] - add r6,r6,#4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add ASTACK_0,ASTACK_0,#4 - cmp r8,#256 + cmp ASTACK_2,#256 bhs _mark_record - subs r8,r8,#2 + subs ASTACK_2,ASTACK_2,#2 beq _mark_hnf_2 blo _mark_hnf_1 _mark_hnf_3: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - cmp r9,#0x20000000 + cmp ASTACK_PTR,#0x20000000 bls fits_in_word_1 - add r12,r10,#4 - ldr r9,[r12,r3,lsl #2] - orr r9,r9,#1 - str r9,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] fits_in_word_1: - sub r4,r7,r0 - add r2,r2,#3 + sub BSTACK_0,ASTACK_1,BSTACK_4 + add BSTACK_2,BSTACK_2,#3 - lsr r3,r4,#7 - and r4,r4,#31*4 + lsr BSTACK_1,BSTACK_0,#7 + and BSTACK_0,BSTACK_0,#31*4 - lsr r9,r4,#2 - mov r12,#1 - lsl r9,r12,r9 + lsr ASTACK_PTR,BSTACK_0,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_PTR,SCRATCH_REG,ASTACK_PTR - ldr r12,[r10,r3,lsl #2] - tst r9,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_PTR,SCRATCH_REG bne _shared_argument_part .thumb_func _no_shared_argument_part: - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] - add r8,r8,#1 + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add ASTACK_2,ASTACK_2,#1 - add r2,r2,r8 - add r4,r4,r8,lsl #2 - add r12,r7,#-4 - add r7,r12,r8,lsl #2 + add BSTACK_2,BSTACK_2,ASTACK_2 + add BSTACK_0,BSTACK_0,ASTACK_2,lsl #2 + add SCRATCH_REG,ASTACK_1,#-4 + add ASTACK_1,SCRATCH_REG,ASTACK_2,lsl #2 - cmp r4,#32*4 + cmp BSTACK_0,#32*4 bls fits_in_word_2 - add r12,r10,#4 - ldr r9,[r12,r3,lsl #2] - orr r9,r9,#1 - str r9,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] fits_in_word_2: - ldr r3,[r7] - sub r8,r8,#2 - str r3,[sp,#-4]! + ldr BSTACK_1,[ASTACK_1] + sub ASTACK_2,ASTACK_2,#2 + str BSTACK_1,[sp,#-4]! .thumb_func _push_hnf_args: - ldr r3,[r7,#-4]! - str r3,[sp,#-4]! - subs r8,r8,#1 + ldr BSTACK_1,[ASTACK_1,#-4]! + str BSTACK_1,[sp,#-4]! + subs ASTACK_2,ASTACK_2,#1 bge _push_hnf_args - cmp sp,r11 + cmp sp,ASTACK_3 bhs _mark_node2 b __mark_using_reversal _mark_hnf_1: - cmp r9,#0x40000000 + cmp ASTACK_PTR,#0x40000000 bls fits_in_word_4 - add r12,r10,#4 - ldr r9,[r12,r3,lsl #2] - orr r9,r9,#1 - str r9,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] fits_in_word_4: - add r2,r2,#2 - ldr r6,[r6] + add BSTACK_2,BSTACK_2,#2 + ldr ASTACK_0,[ASTACK_0] b _mark_node _mark_lazy_node_1: - add r6,r6,#4 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] - cmp r9,#0x20000000 + add ASTACK_0,ASTACK_0,#4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + cmp ASTACK_PTR,#0x20000000 bls fits_in_word_3 - add r12,r10,#4 - ldr r9,[r12,r3,lsl #2] - orr r9,r9,#1 - str r9,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] fits_in_word_3: - add r2,r2,#3 + add BSTACK_2,BSTACK_2,#3 - cmp r8,#1 + cmp ASTACK_2,#1 beq _mark_node2 _mark_selector_node_1: - cmp r8,#-2 - ldr r7,[r6] + cmp ASTACK_2,#-2 + ldr ASTACK_1,[ASTACK_0] beq _mark_indirection_node - sub r9,r7,r0 + sub ASTACK_PTR,ASTACK_1,BSTACK_4 - lsr r3,r9,#7 - and r9,r9,#31*4 + lsr BSTACK_1,ASTACK_PTR,#7 + and ASTACK_PTR,ASTACK_PTR,#31*4 - cmp r8,#-3 + cmp ASTACK_2,#-3 - lsr r9,r9,#2 - mov r12,#1 - lsl r9,r12,r9 + lsr ASTACK_PTR,ASTACK_PTR,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_PTR,SCRATCH_REG,ASTACK_PTR ble _mark_record_selector_node_1 - ldr r12,[r10,r3,lsl #2] - tst r9,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_PTR,SCRATCH_REG bne _mark_node3 - ldr r8,[r7] - tst r8,#2 + ldr ASTACK_2,[ASTACK_1] + tst ASTACK_2,#2 beq _mark_node3 - ldrh r12,[r8,#-2] - cmp r12,#2 + ldrh SCRATCH_REG,[ASTACK_2,#-2] + cmp SCRATCH_REG,#2 bls _small_tuple_or_record .thumb_func _large_tuple_or_record: - ldr r8,[r7,#8] - sub r8,r8,r0 - lsr r3,r8,#7 - and r8,r8,#31*4 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - - ldr r12,[r10,r3,lsl #2] - tst r8,r12 + ldr ASTACK_2,[ASTACK_1,#8] + sub ASTACK_2,ASTACK_2,BSTACK_4 + lsr BSTACK_1,ASTACK_2,#7 + and ASTACK_2,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,SCRATCH_REG bne _mark_node3 - lao r8,e__system__nind,11 + lao ASTACK_2,e__system__nind,11 .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - ldr r4,[r4,#-8] - otoa r8,e__system__nind,11 - str r8,[r6,#-4] - mov r8,r6 + ldr BSTACK_0,[BSTACK_0,#-8] + otoa ASTACK_2,e__system__nind,11 + str ASTACK_2,[ASTACK_0,#-4] + mov ASTACK_2,ASTACK_0 .ifdef PIC - ldrh r4,[r12,r4] + ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .else - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 blt _mark_tuple_selector_node_1 - ldr r7,[r7,#8] + ldr ASTACK_1,[ASTACK_1,#8] beq _mark_tuple_selector_node_2 - add r12,r4,#-12 - ldr r6,[r7,r12] - str r6,[r8] + add SCRATCH_REG,BSTACK_0,#-12 + ldr ASTACK_0,[ASTACK_1,SCRATCH_REG] + str ASTACK_0,[ASTACK_2] b _mark_node _mark_tuple_selector_node_2: - ldr r6,[r7] - str r6,[r8] + ldr ASTACK_0,[ASTACK_1] + str ASTACK_0,[ASTACK_2] b _mark_node .thumb_func _small_tuple_or_record: - lao r8,e__system__nind,12 + lao ASTACK_2,e__system__nind,12 .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - ldr r4,[r4,#-8] - otoa r8,e__system__nind,12 - str r8,[r6,#-4] - mov r8,r6 + ldr BSTACK_0,[BSTACK_0,#-8] + otoa ASTACK_2,e__system__nind,12 + str ASTACK_2,[ASTACK_0,#-4] + mov ASTACK_2,ASTACK_0 .ifdef PIC - ldrh r4,[r12,r4] + ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .else - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif _mark_tuple_selector_node_1: - ldr r6,[r7,r4] - str r6,[r8] + ldr ASTACK_0,[ASTACK_1,BSTACK_0] + str ASTACK_0,[ASTACK_2] b _mark_node _mark_record_selector_node_1: beq _mark_strict_record_selector_node_1 - ldr r12,[r10,r3,lsl #2] - tst r9,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_PTR,SCRATCH_REG bne _mark_node3 - ldr r8,[r7] - tst r8,#2 + ldr ASTACK_2,[ASTACK_1] + tst ASTACK_2,#2 beq _mark_node3 - ldrh r12,[r8,#-2] - mov r3,#258/2 - cmp r12,r3,lsl #1 + ldrh SCRATCH_REG,[ASTACK_2,#-2] + mov BSTACK_1,#258/2 + cmp SCRATCH_REG,BSTACK_1,lsl #1 bls _small_tuple_or_record - ldr r8,[r7,#8] - sub r8,r8,r0 - lsr r3,r8,#7 - and r8,r8,#31*4 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 + ldr ASTACK_2,[ASTACK_1,#8] + sub ASTACK_2,ASTACK_2,BSTACK_4 + lsr BSTACK_1,ASTACK_2,#7 + and ASTACK_2,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 - ldr r12,[r10,r3,lsl #2] - tst r8,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,SCRATCH_REG bne _mark_node3 - lao r8,e__system__nind,13 + lao ASTACK_2,e__system__nind,13 .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - ldr r4,[r4,#-8] - otoa r8,e__system__nind,13 - str r8,[r6,#-4] - mov r8,r6 + ldr BSTACK_0,[BSTACK_0,#-8] + otoa ASTACK_2,e__system__nind,13 + str ASTACK_2,[ASTACK_0,#-4] + mov ASTACK_2,ASTACK_0 .ifdef PIC - ldrh r4,[r12,r4] + ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .else - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 ble _mark_record_selector_node_2 - ldr r7,[r7,#8] - sub r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + sub BSTACK_0,BSTACK_0,#12 _mark_record_selector_node_2: - ldr r6,[r7,r4] + ldr ASTACK_0,[ASTACK_1,BSTACK_0] - str r6,[r8] + str ASTACK_0,[ASTACK_2] b _mark_node _mark_strict_record_selector_node_1: - ldr r12,[r10,r3,lsl #2] - tst r9,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_PTR,SCRATCH_REG bne _mark_node3 - ldr r8,[r7] - tst r8,#2 + ldr ASTACK_2,[ASTACK_1] + tst ASTACK_2,#2 beq _mark_node3 - ldrh r12,[r8,#-2] - mov r3,#258/2 - cmp r12,r3,lsl #1 + ldrh SCRATCH_REG,[ASTACK_2,#-2] + mov BSTACK_1,#258/2 + cmp SCRATCH_REG,BSTACK_1,lsl #1 bls _select_from_small_record - ldr r8,[r7,#8] - sub r8,r8,r0 - lsr r3,r8,#7 - and r8,r8,#31*4 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 + ldr ASTACK_2,[ASTACK_1,#8] + sub ASTACK_2,ASTACK_2,BSTACK_4 + lsr BSTACK_1,ASTACK_2,#7 + and ASTACK_2,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 - ldr r12,[r10,r3,lsl #2] - tst r8,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,SCRATCH_REG bne _mark_node3 .thumb_func _select_from_small_record: .ifdef PIC - ldr r12,[r4,#-8] - add r4,r4,#-8+4 + ldr SCRATCH_REG,[BSTACK_0,#-8] + add BSTACK_0,BSTACK_0,#-8+4 .else - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] .endif - sub r6,r6,#4 + sub ASTACK_0,ASTACK_0,#4 .ifdef PIC - ldrh r3,[r4,r12]! + ldrh BSTACK_1,[BSTACK_0,SCRATCH_REG]! .else - ldrh r3,[r4,#4] + ldrh BSTACK_1,[BSTACK_0,#4] .endif - cmp r3,#8 + cmp BSTACK_1,#8 ble _mark_strict_record_selector_node_2 - ldr r12,[r7,#8] - add r3,r3,r12 - ldr r3,[r3,#-12] + ldr SCRATCH_REG,[ASTACK_1,#8] + add BSTACK_1,BSTACK_1,SCRATCH_REG + ldr BSTACK_1,[BSTACK_1,#-12] b _mark_strict_record_selector_node_3 _mark_strict_record_selector_node_2: - ldr r3,[r7,r3] + ldr BSTACK_1,[ASTACK_1,BSTACK_1] _mark_strict_record_selector_node_3: - str r3,[r6,#4] + str BSTACK_1,[ASTACK_0,#4] .ifdef PIC - ldrh r3,[r4,#6-4] + ldrh BSTACK_1,[BSTACK_0,#6-4] .else - ldrh r3,[r4,#6] + ldrh BSTACK_1,[BSTACK_0,#6] .endif - tst r3,r3 + tst BSTACK_1,BSTACK_1 beq _mark_strict_record_selector_node_5 - cmp r3,#8 + cmp BSTACK_1,#8 ble _mark_strict_record_selector_node_4 - ldr r7,[r7,#8] - sub r3,r3,#12 + ldr ASTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,#12 _mark_strict_record_selector_node_4: - ldr r3,[r7,r3] - str r3,[r6,#8] + ldr BSTACK_1,[ASTACK_1,BSTACK_1] + str BSTACK_1,[ASTACK_0,#8] _mark_strict_record_selector_node_5: .ifdef PIC - ldr r4,[r4,#-4-4] + ldr BSTACK_0,[BSTACK_0,#-4-4] .else - ldr r4,[r4,#-4] + ldr BSTACK_0,[BSTACK_0,#-4] .endif - str r4,[r6] + str BSTACK_0,[ASTACK_0] b _mark_next_node .thumb_func _mark_indirection_node: _mark_node3: - mov r6,r7 + mov ASTACK_0,ASTACK_1 b _mark_node .thumb_func _mark_next_node: - ldr r6,[sp],#4 - tst r6,r6 + ldr ASTACK_0,[sp],#4 + tst ASTACK_0,ASTACK_0 bne _mark_node - lao r12,end_vector,3 - ldr r8,[sp],#4 - ldo r12,r12,end_vector,3 - cmp r8,r12 + lao SCRATCH_REG,end_vector,3 + ldr ASTACK_2,[sp],#4 + ldo SCRATCH_REG,SCRATCH_REG,end_vector,3 + cmp ASTACK_2,SCRATCH_REG bne _mark_stack_nodes_ .thumb_func @@ -950,239 +949,239 @@ _end_mark_nodes: .thumb_func _mark_lazy_node: - ldr r8,[r4,#-4] - tst r8,r8 + ldr ASTACK_2,[BSTACK_0,#-4] + tst ASTACK_2,ASTACK_2 beq _mark_real_or_file - cmp r8,#1 + cmp ASTACK_2,#1 ble _mark_lazy_node_1 - cmp r8,#256 + cmp ASTACK_2,#256 bge _mark_closure_with_unboxed_arguments - add r8,r8,#1 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] + add ASTACK_2,ASTACK_2,#1 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - add r2,r2,r8 - add r7,r7,r8,lsl #2 - add r6,r6,r8,lsl #2 + add BSTACK_2,BSTACK_2,ASTACK_2 + add ASTACK_1,ASTACK_1,ASTACK_2,lsl #2 + add ASTACK_0,ASTACK_0,ASTACK_2,lsl #2 - cmp r7,#32*4 + cmp ASTACK_1,#32*4 bls fits_in_word_7 - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] fits_in_word_7: - sub r8,r8,#3 + sub ASTACK_2,ASTACK_2,#3 .thumb_func _push_lazy_args: - ldr r3,[r6,#-4]! - str r3,[sp,#-4]! - subs r8,r8,#1 + ldr BSTACK_1,[ASTACK_0,#-4]! + str BSTACK_1,[sp,#-4]! + subs ASTACK_2,ASTACK_2,#1 bge _push_lazy_args - sub r6,r6,#4 + sub ASTACK_0,ASTACK_0,#4 - cmp sp,r11 + cmp sp,ASTACK_3 bhs _mark_node2 b __mark_using_reversal .thumb_func _mark_closure_with_unboxed_arguments: - mov r4,r8 - and r8,r8,#255 - subs r8,r8,#1 + mov BSTACK_0,ASTACK_2 + and ASTACK_2,ASTACK_2,#255 + subs ASTACK_2,ASTACK_2,#1 beq _mark_real_or_file - lsr r4,r4,#8 - add r8,r8,#2 + lsr BSTACK_0,BSTACK_0,#8 + add ASTACK_2,ASTACK_2,#2 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] - add r2,r2,r8 - add r7,r7,r8,lsl #2 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add BSTACK_2,BSTACK_2,ASTACK_2 + add ASTACK_1,ASTACK_1,ASTACK_2,lsl #2 - sub r8,r8,r4 + sub ASTACK_2,ASTACK_2,BSTACK_0 - cmp r7,#32*4 + cmp ASTACK_1,#32*4 bls fits_in_word_7_ - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] fits_in_word_7_: - subs r8,r8,#2 + subs ASTACK_2,ASTACK_2,#2 blt _mark_next_node - add r12,r6,#8 - add r6,r12,r8,lsl #2 + add SCRATCH_REG,ASTACK_0,#8 + add ASTACK_0,SCRATCH_REG,ASTACK_2,lsl #2 bne _push_lazy_args .thumb_func _mark_closure_with_one_boxed_argument: - ldr r6,[r6,#-4] + ldr ASTACK_0,[ASTACK_0,#-4] b _mark_node _mark_hnf_0: - laol r12,INT+2,INT_o_2,7 - otoa r12,INT_o_2,7 - cmp r4,r12 + laol SCRATCH_REG,INT+2,INT_o_2,7 + otoa SCRATCH_REG,INT_o_2,7 + cmp BSTACK_0,SCRATCH_REG blo _mark_real_file_or_string - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - laol r12,CHAR+2,CHAR_o_2,3 - otoa r12,CHAR_o_2,3 - cmp r4,r12 + laol SCRATCH_REG,CHAR+2,CHAR_o_2,3 + otoa SCRATCH_REG,CHAR_o_2,3 + cmp BSTACK_0,SCRATCH_REG bhi _mark_normal_hnf_0 .thumb_func _mark_bool: - add r2,r2,#2 + add BSTACK_2,BSTACK_2,#2 - cmp r9,#0x40000000 + cmp ASTACK_PTR,#0x40000000 bls _mark_next_node - add r12,r10,#4 - ldr r9,[r12,r3,lsl #2] - orr r9,r9,#1 - str r9,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] b _mark_next_node _mark_normal_hnf_0: - add r2,r2,#1 + add BSTACK_2,BSTACK_2,#1 b _mark_next_node .thumb_func _mark_real_file_or_string: - laol r12,__STRING__+2,__STRING___o_2,8 - otoa r12,__STRING___o_2,8 - cmp r4,r12 + laol SCRATCH_REG,__STRING__+2,__STRING___o_2,8 + otoa SCRATCH_REG,__STRING___o_2,8 + cmp BSTACK_0,SCRATCH_REG bls _mark_string_or_array .thumb_func _mark_real_or_file: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] - add r2,r2,#3 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add BSTACK_2,BSTACK_2,#3 - cmp r9,#0x20000000 + cmp ASTACK_PTR,#0x20000000 bls _mark_next_node - add r12,r10,#4 - ldr r9,[r12,r3,lsl #2] - orr r9,r9,#1 - str r9,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] b _mark_next_node .thumb_func _mark_record: - mov r12,#258/2 - subs r8,r8,r12,lsl #1 + mov SCRATCH_REG,#258/2 + subs ASTACK_2,ASTACK_2,SCRATCH_REG,lsl #1 beq _mark_record_2 blt _mark_record_1 _mark_record_3: - add r2,r2,#3 + add BSTACK_2,BSTACK_2,#3 - cmp r9,#0x20000000 + cmp ASTACK_PTR,#0x20000000 bls fits_in_word_13 - add r12,r10,#4 - ldr r9,[r12,r3,lsl #2] - orr r9,r9,#1 - str r9,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] fits_in_word_13: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - ldrh r3,[r4,#-2+2] - sub r9,r7,r0 + ldrh BSTACK_1,[BSTACK_0,#-2+2] + sub ASTACK_PTR,ASTACK_1,BSTACK_4 - lsr r4,r9,#7 - and r9,r9,#31*4 + lsr BSTACK_0,ASTACK_PTR,#7 + and ASTACK_PTR,ASTACK_PTR,#31*4 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 - lsr r7,r9,#2 - mov r12,#1 - lsl r7,r12,r7 + lsr ASTACK_1,ASTACK_PTR,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 blo _mark_record_3_bb - ldr r12,[r10,r4,lsl #2] - tst r7,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_0,lsl #2] + tst ASTACK_1,SCRATCH_REG bne _mark_node2 - add r8,r8,#1 - ldr r12,[r10,r4,lsl #2] - orr r12,r12,r7 - str r12,[r10,r4,lsl #2] - add r2,r2,r8 - add r9,r9,r8,lsl #2 + add ASTACK_2,ASTACK_2,#1 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_0,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_0,lsl #2] + add BSTACK_2,BSTACK_2,ASTACK_2 + add ASTACK_PTR,ASTACK_PTR,ASTACK_2,lsl #2 - cmp r9,#32*4 + cmp ASTACK_PTR,#32*4 bls _push_record_arguments - add r12,r10,#4 - ldr r7,[r12,r4,lsl #2] - orr r7,r7,#1 - str r7,[r12,r4,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_0,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_0,lsl #2] .thumb_func _push_record_arguments: - ldr r7,[r6,#4] - mov r8,r3 - lsl r3,r3,#2 - add r7,r7,r3 - subs r8,r8,#1 + ldr ASTACK_1,[ASTACK_0,#4] + mov ASTACK_2,BSTACK_1 + lsl BSTACK_1,BSTACK_1,#2 + add ASTACK_1,ASTACK_1,BSTACK_1 + subs ASTACK_2,ASTACK_2,#1 bge _push_hnf_args b _mark_node2 _mark_record_3_bb: - ldr r12,[r10,r4,lsl #2] - tst r7,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_0,lsl #2] + tst ASTACK_1,SCRATCH_REG bne _mark_next_node - add r8,r8,#1 - ldr r12,[r10,r4,lsl #2] - orr r12,r12,r7 - str r12,[r10,r4,lsl #2] - add r2,r2,r8 - add r9,r9,r8,lsl #2 + add ASTACK_2,ASTACK_2,#1 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_0,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_0,lsl #2] + add BSTACK_2,BSTACK_2,ASTACK_2 + add ASTACK_PTR,ASTACK_PTR,ASTACK_2,lsl #2 - cmp r9,#32*4 + cmp ASTACK_PTR,#32*4 bls _mark_next_node - add r12,r10,#4 - ldr r7,[r12,r4,lsl #2] - orr r7,r7,#1 - str r7,[r12,r4,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_0,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_0,lsl #2] b _mark_next_node _mark_record_2: - cmp r9,#0x20000000 + cmp ASTACK_PTR,#0x20000000 bls fits_in_word_12 - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] fits_in_word_12: - add r2,r2,#3 + add BSTACK_2,BSTACK_2,#3 - ldrh r12,[r4,#-2+2] - cmp r12,#1 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#1 bhi _mark_record_2_c beq _mark_node2 b _mark_next_node _mark_record_1: - ldrh r12,[r4,#-2+2] - cmp r12,#0 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#0 bne _mark_hnf_1 b _mark_bool @@ -1193,331 +1192,331 @@ _mark_string_or_array: .thumb_func _mark_array: - ldr r8,[r6,#8] - cmp r8,#0 + ldr ASTACK_2,[ASTACK_0,#8] + cmp ASTACK_2,#0 beq _mark_lazy_array - ldrh r4,[r8,#-2] + ldrh BSTACK_0,[ASTACK_2,#-2] - cmp r4,#0 + cmp BSTACK_0,#0 beq _mark_strict_basic_array - ldrh r8,[r8,#-2+2] - cmp r8,#0 + ldrh ASTACK_2,[ASTACK_2,#-2+2] + cmp ASTACK_2,#0 beq _mark_b_record_array - cmp sp,r11 + cmp sp,ASTACK_3 blo _mark_array_using_reversal - sub r4,r4,#256 - cmp r4,r8 + sub BSTACK_0,BSTACK_0,#256 + cmp BSTACK_0,ASTACK_2 beq _mark_a_record_array .thumb_func _mark_ab_record_array: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] - ldr r8,[r6,#4] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + ldr ASTACK_2,[ASTACK_0,#4] - mul r4,r8,r4 - add r4,r4,#3 + mul BSTACK_0,ASTACK_2,BSTACK_0 + add BSTACK_0,BSTACK_0,#3 - add r2,r2,r4 - add r12,r6,#-4 - add r4,r12,r4,lsl #2 + add BSTACK_2,BSTACK_2,BSTACK_0 + add SCRATCH_REG,ASTACK_0,#-4 + add BSTACK_0,SCRATCH_REG,BSTACK_0,lsl #2 - sub r4,r4,r0 - lsr r4,r4,#7 + sub BSTACK_0,BSTACK_0,BSTACK_4 + lsr BSTACK_0,BSTACK_0,#7 - cmp r3,r4 + cmp BSTACK_1,BSTACK_0 bhs _end_set_ab_array_bits - add r3,r3,#1 - mov r8,#1 - cmp r3,r4 + add BSTACK_1,BSTACK_1,#1 + mov ASTACK_2,#1 + cmp BSTACK_1,BSTACK_0 bhs _last_ab_array_bits .thumb_func _mark_ab_array_lp: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] - add r3,r3,#1 - cmp r3,r4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add BSTACK_1,BSTACK_1,#1 + cmp BSTACK_1,BSTACK_0 blo _mark_ab_array_lp .thumb_func _last_ab_array_bits: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] .thumb_func _end_set_ab_array_bits: - ldr r4,[r6,#4] - ldr r7,[r6,#8] - ldrh r3,[r7,#-2+2] - ldrh r7,[r7,#-2] - lsl r3,r3,#2 - sub r7,r7,#256 - lsl r7,r7,#2 - str r3,[sp,#-4]! - str r7,[sp,#-4]! - add r8,r6,#12 - - lao r12,end_vector,4 - ldo r12,r12,end_vector,4 - str r12,[sp,#-4]! + ldr BSTACK_0,[ASTACK_0,#4] + ldr ASTACK_1,[ASTACK_0,#8] + ldrh BSTACK_1,[ASTACK_1,#-2+2] + ldrh ASTACK_1,[ASTACK_1,#-2] + lsl BSTACK_1,BSTACK_1,#2 + sub ASTACK_1,ASTACK_1,#256 + lsl ASTACK_1,ASTACK_1,#2 + str BSTACK_1,[sp,#-4]! + str ASTACK_1,[sp,#-4]! + add ASTACK_2,ASTACK_0,#12 + + lao SCRATCH_REG,end_vector,4 + ldo SCRATCH_REG,SCRATCH_REG,end_vector,4 + str SCRATCH_REG,[sp,#-4]! b _mark_ab_array_begin .thumb_func _mark_ab_array: - ldr r3,[sp,#8] - str r4,[sp,#-4]! - str r8,[sp,#-4]! - add r4,r8,r3 + ldr BSTACK_1,[sp,#8] + str BSTACK_0,[sp,#-4]! + str ASTACK_2,[sp,#-4]! + add BSTACK_0,ASTACK_2,BSTACK_1 - lao r12,end_vector,5 - sto r4,r12,end_vector,5 + lao SCRATCH_REG,end_vector,5 + sto BSTACK_0,SCRATCH_REG,end_vector,5 .align add lr,pc,#9 str lr,[sp,#-4]! bl _mark_stack_nodes - ldr r3,[sp,#4+8] - ldr r8,[sp],#4 - ldr r4,[sp],#4 - add r8,r8,r3 + ldr BSTACK_1,[sp,#4+8] + ldr ASTACK_2,[sp],#4 + ldr BSTACK_0,[sp],#4 + add ASTACK_2,ASTACK_2,BSTACK_1 .thumb_func _mark_ab_array_begin: - subs r4,r4,#1 + subs BSTACK_0,BSTACK_0,#1 bcs _mark_ab_array - ldr r6,[sp] - lao r12,end_vector,6 - sto r6,r12,end_vector,6 + ldr ASTACK_0,[sp] + lao SCRATCH_REG,end_vector,6 + sto ASTACK_0,SCRATCH_REG,end_vector,6 add sp,sp,#12 b _mark_next_node .thumb_func _mark_a_record_array: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] - ldr r8,[r6,#4] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + ldr ASTACK_2,[ASTACK_0,#4] - mul r4,r8,r4 - str r4,[sp,#-4]! + mul BSTACK_0,ASTACK_2,BSTACK_0 + str BSTACK_0,[sp,#-4]! - add r4,r4,#3 + add BSTACK_0,BSTACK_0,#3 - add r2,r2,r4 - add r12,r6,#-4 - add r4,r12,r4,lsl #2 + add BSTACK_2,BSTACK_2,BSTACK_0 + add SCRATCH_REG,ASTACK_0,#-4 + add BSTACK_0,SCRATCH_REG,BSTACK_0,lsl #2 - sub r4,r4,r0 - lsr r4,r4,#7 + sub BSTACK_0,BSTACK_0,BSTACK_4 + lsr BSTACK_0,BSTACK_0,#7 - cmp r3,r4 + cmp BSTACK_1,BSTACK_0 bhs _end_set_a_array_bits - add r3,r3,#1 - mov r8,#1 - cmp r3,r4 + add BSTACK_1,BSTACK_1,#1 + mov ASTACK_2,#1 + cmp BSTACK_1,BSTACK_0 bhs _last_a_array_bits .thumb_func _mark_a_array_lp: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] - add r3,r3,#1 - cmp r3,r4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add BSTACK_1,BSTACK_1,#1 + cmp BSTACK_1,BSTACK_0 blo _mark_a_array_lp .thumb_func _last_a_array_bits: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] .thumb_func _end_set_a_array_bits: - ldr r4,[sp],#4 - add r8,r6,#12 + ldr BSTACK_0,[sp],#4 + add ASTACK_2,ASTACK_0,#12 - lao r12,end_vector,7 - ldo r12,r12,end_vector,7 - str r12,[sp,#-4]! - add r12,r6,#12 - add r4,r12,r4,lsl #2 + lao SCRATCH_REG,end_vector,7 + ldo SCRATCH_REG,SCRATCH_REG,end_vector,7 + str SCRATCH_REG,[sp,#-4]! + add SCRATCH_REG,ASTACK_0,#12 + add BSTACK_0,SCRATCH_REG,BSTACK_0,lsl #2 - lao r12,end_vector,8 - sto r4,r12,end_vector,8 + lao SCRATCH_REG,end_vector,8 + sto BSTACK_0,SCRATCH_REG,end_vector,8 .align add lr,pc,#9 str lr,[sp,#-4]! bl _mark_stack_nodes - ldr r6,[sp],#4 - lao r12,end_vector,9 - sto r6,r12,end_vector,9 + ldr ASTACK_0,[sp],#4 + lao SCRATCH_REG,end_vector,9 + sto ASTACK_0,SCRATCH_REG,end_vector,9 b _mark_next_node .thumb_func _mark_lazy_array: - cmp sp,r11 + cmp sp,ASTACK_3 blo _mark_array_using_reversal - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] - ldr r4,[r6,#4] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + ldr BSTACK_0,[ASTACK_0,#4] - add r4,r4,#3 + add BSTACK_0,BSTACK_0,#3 - add r2,r2,r4 - add r12,r6,#-4 - add r4,r12,r4,lsl #2 + add BSTACK_2,BSTACK_2,BSTACK_0 + add SCRATCH_REG,ASTACK_0,#-4 + add BSTACK_0,SCRATCH_REG,BSTACK_0,lsl #2 - sub r4,r4,r0 - lsr r4,r4,#7 + sub BSTACK_0,BSTACK_0,BSTACK_4 + lsr BSTACK_0,BSTACK_0,#7 - cmp r3,r4 + cmp BSTACK_1,BSTACK_0 bhs _end_set_lazy_array_bits - add r3,r3,#1 - mov r8,#1 - cmp r3,r4 + add BSTACK_1,BSTACK_1,#1 + mov ASTACK_2,#1 + cmp BSTACK_1,BSTACK_0 bhs _last_lazy_array_bits .thumb_func _mark_lazy_array_lp: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] - add r3,r3,#1 - cmp r3,r4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add BSTACK_1,BSTACK_1,#1 + cmp BSTACK_1,BSTACK_0 blo _mark_lazy_array_lp .thumb_func _last_lazy_array_bits: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] .thumb_func _end_set_lazy_array_bits: - ldr r4,[r6,#4] - add r8,r6,#12 + ldr BSTACK_0,[ASTACK_0,#4] + add ASTACK_2,ASTACK_0,#12 - lao r12,end_vector,10 - ldo r12,r12,end_vector,10 - str r12,[sp,#-4]! - add r12,r6,#12 - add r4,r12,r4,lsl #2 + lao SCRATCH_REG,end_vector,10 + ldo SCRATCH_REG,SCRATCH_REG,end_vector,10 + str SCRATCH_REG,[sp,#-4]! + add SCRATCH_REG,ASTACK_0,#12 + add BSTACK_0,SCRATCH_REG,BSTACK_0,lsl #2 - lao r12,end_vector,11 - sto r4,r12,end_vector,11 + lao SCRATCH_REG,end_vector,11 + sto BSTACK_0,SCRATCH_REG,end_vector,11 .align add lr,pc,#9 str lr,[sp,#-4]! bl _mark_stack_nodes - ldr r6,[sp],#4 - lao r12,end_vector,12 - sto r6,r12,end_vector,12 + ldr ASTACK_0,[sp],#4 + lao SCRATCH_REG,end_vector,12 + sto ASTACK_0,SCRATCH_REG,end_vector,12 b _mark_next_node .thumb_func _mark_array_using_reversal: - mov r12,#0 - str r12,[sp,#-4]! - mov r9,#1 + mov SCRATCH_REG,#0 + str SCRATCH_REG,[sp,#-4]! + mov ASTACK_PTR,#1 b __mark_node .thumb_func _mark_strict_basic_array: - ldr r4,[r6,#4] - laol r12,INT+2,INT_o_2,8 - otoa r12,INT_o_2,8 - cmp r8,r12 + ldr BSTACK_0,[ASTACK_0,#4] + laol SCRATCH_REG,INT+2,INT_o_2,8 + otoa SCRATCH_REG,INT_o_2,8 + cmp ASTACK_2,SCRATCH_REG beq _mark_strict_int_array - laol r12,BOOL+2,BOOL_o_2,5 - otoa r12,BOOL_o_2,5 - cmp r8,r12 + laol SCRATCH_REG,BOOL+2,BOOL_o_2,5 + otoa SCRATCH_REG,BOOL_o_2,5 + cmp ASTACK_2,SCRATCH_REG beq _mark_strict_bool_array .thumb_func _mark_strict_real_array: - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 .thumb_func _mark_strict_int_array: - add r4,r4,#3 + add BSTACK_0,BSTACK_0,#3 b _mark_basic_array_ .thumb_func _mark_strict_bool_array: - add r4,r4,#12+3 - lsr r4,r4,#2 + add BSTACK_0,BSTACK_0,#12+3 + lsr BSTACK_0,BSTACK_0,#2 b _mark_basic_array_ .thumb_func _mark_b_record_array: - ldr r8,[r6,#4] - sub r4,r4,#256 - mul r4,r8,r4 - add r4,r4,#3 + ldr ASTACK_2,[ASTACK_0,#4] + sub BSTACK_0,BSTACK_0,#256 + mul BSTACK_0,ASTACK_2,BSTACK_0 + add BSTACK_0,BSTACK_0,#3 b _mark_basic_array_ .thumb_func _mark_string_: - ldr r4,[r6,#4] - add r4,r4,#8+3 - lsr r4,r4,#2 + ldr BSTACK_0,[ASTACK_0,#4] + add BSTACK_0,BSTACK_0,#8+3 + lsr BSTACK_0,BSTACK_0,#2 .thumb_func _mark_basic_array_: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r9 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - add r2,r2,r4 - add r12,r6,#-4 - add r4,r12,r4,lsl #2 + add BSTACK_2,BSTACK_2,BSTACK_0 + add SCRATCH_REG,ASTACK_0,#-4 + add BSTACK_0,SCRATCH_REG,BSTACK_0,lsl #2 - sub r4,r4,r0 - lsr r4,r4,#7 + sub BSTACK_0,BSTACK_0,BSTACK_4 + lsr BSTACK_0,BSTACK_0,#7 - cmp r3,r4 + cmp BSTACK_1,BSTACK_0 bhs _mark_next_node - add r3,r3,#1 - mov r8,#1 - cmp r3,r4 + add BSTACK_1,BSTACK_1,#1 + mov ASTACK_2,#1 + cmp BSTACK_1,BSTACK_0 bhs _last_string_bits .thumb_func _mark_string_lp: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] - add r3,r3,#1 - cmp r3,r4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add BSTACK_1,BSTACK_1,#1 + cmp BSTACK_1,BSTACK_0 blo _mark_string_lp .thumb_func _last_string_bits: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] b _mark_next_node .thumb_func __end_mark_using_reversal: - ldr r7,[sp],#4 - tst r7,r7 + ldr ASTACK_1,[sp],#4 + tst ASTACK_1,ASTACK_1 beq _mark_next_node - str r6,[r7] + str ASTACK_0,[ASTACK_1] b _mark_next_node .endif @@ -1546,779 +1545,779 @@ __end_mark_using_reversal: .thumb_func __mark_using_reversal: - str r6,[sp,#-4]! - mov r9,#1 - ldr r6,[r6] + str ASTACK_0,[sp,#-4]! + mov ASTACK_PTR,#1 + ldr ASTACK_0,[ASTACK_0] b __mark_node .thumb_func __mark_arguments: - ldr r4,[r6] - tst r4,#2 + ldr BSTACK_0,[ASTACK_0] + tst BSTACK_0,#2 beq __mark_lazy_node - ldrh r8,[r4,#-2] - tst r8,r8 + ldrh ASTACK_2,[BSTACK_0,#-2] + tst ASTACK_2,ASTACK_2 beq __mark_hnf_0 - add r6,r6,#4 + add ASTACK_0,ASTACK_0,#4 - cmp r8,#256 + cmp ASTACK_2,#256 bhs __mark__record - subs r8,r8,#2 + subs ASTACK_2,ASTACK_2,#2 beq __mark_hnf_2 blo __mark_hnf_1 __mark_hnf_3: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,#3 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,#3 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - cmp r7,#0x20000000 + cmp ASTACK_1,#0x20000000 bls fits__in__word__1 - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] fits__in__word__1: - ldr r12,[r6,#4] - sub r4,r12,r0 + ldr SCRATCH_REG,[ASTACK_0,#4] + sub BSTACK_0,SCRATCH_REG,BSTACK_4 - lsr r3,r4,#7 - and r4,r4,#31*4 + lsr BSTACK_1,BSTACK_0,#7 + and BSTACK_0,BSTACK_0,#31*4 - lsr r7,r4,#2 - mov r12,#1 - lsl r7,r12,r7 + lsr ASTACK_1,BSTACK_0,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 - ldr r12,[r10,r3,lsl #2] - tst r7,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_1,SCRATCH_REG bne __shared_argument_part .thumb_func __no_shared_argument_part: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - ldr r7,[r6,#4] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + ldr ASTACK_1,[ASTACK_0,#4] - add r8,r8,#1 - str r9,[r6,#4] + add ASTACK_2,ASTACK_2,#1 + str ASTACK_PTR,[ASTACK_0,#4] - add r2,r2,r8 - add r6,r6,#4 + add BSTACK_2,BSTACK_2,ASTACK_2 + add ASTACK_0,ASTACK_0,#4 - lsl r8,r8,#2 - ldr r12,[r7] - orr r12,r12,#1 - str r12,[r7] + lsl ASTACK_2,ASTACK_2,#2 + ldr SCRATCH_REG,[ASTACK_1] + orr SCRATCH_REG,SCRATCH_REG,#1 + str SCRATCH_REG,[ASTACK_1] - add r4,r4,r8 - add r7,r7,r8 + add BSTACK_0,BSTACK_0,ASTACK_2 + add ASTACK_1,ASTACK_1,ASTACK_2 - cmp r4,#32*4 + cmp BSTACK_0,#32*4 bls fits__in__word__2 - add r12,r10,#4 - ldr r9,[r12,r3,lsl #2] - orr r9,r9,#1 - str r9,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[SCRATCH_REG,BSTACK_1,lsl #2] fits__in__word__2: - ldr r8,[r7,#-4] - str r6,[r7,#-4] - add r9,r7,#-4 - mov r6,r8 + ldr ASTACK_2,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1,#-4] + add ASTACK_PTR,ASTACK_1,#-4 + mov ASTACK_0,ASTACK_2 b __mark_node __mark_hnf_1: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,#2 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - cmp r7,#0x40000000 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,#2 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + cmp ASTACK_1,#0x40000000 bls __shared_argument_part - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] .thumb_func __shared_argument_part: - ldr r8,[r6] - str r9,[r6] - add r9,r6,#2 - mov r6,r8 + ldr ASTACK_2,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0] + add ASTACK_PTR,ASTACK_0,#2 + mov ASTACK_0,ASTACK_2 b __mark_node __mark_no_selector_2: - ldr r3,[sp],#4 + ldr BSTACK_1,[sp],#4 __mark_no_selector_1: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,#3 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - cmp r7,#0x20000000 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,#3 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + cmp ASTACK_1,#0x20000000 bls __shared_argument_part - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] b __shared_argument_part __mark_lazy_node_1: beq __mark_no_selector_1 __mark_selector_node_1: - cmp r8,#-2 + cmp ASTACK_2,#-2 beq __mark_indirection_node - cmp r8,#-3 + cmp ASTACK_2,#-3 - str r3,[sp,#-4]! - ldr r8,[r6] - str r4,[sp,#-4]! + str BSTACK_1,[sp,#-4]! + ldr ASTACK_2,[ASTACK_0] + str BSTACK_0,[sp,#-4]! ble __mark_record_selector_node_1 - sub r4,r8,r0 - lsr r3,r4,#7 - and r4,r4,#31*4 - lsr r4,r4,#2 - mov r12,#1 - lsl r4,r12,r4 + sub BSTACK_0,ASTACK_2,BSTACK_4 + lsr BSTACK_1,BSTACK_0,#7 + and BSTACK_0,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#2 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 - ldr r12,[r10,r3,lsl #2] - tst r4,r12 - ldr r4,[sp],#4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst BSTACK_0,SCRATCH_REG + ldr BSTACK_0,[sp],#4 bne __mark_no_selector_2 - ldr r3,[r8] - tst r3,#2 + ldr BSTACK_1,[ASTACK_2] + tst BSTACK_1,#2 beq __mark_no_selector_2 - ldrh r12,[r3,#-2] - cmp r12,#2 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + cmp SCRATCH_REG,#2 bls __small_tuple_or_record __large_tuple_or_record: - ldr r8,[r8,#8] - sub r8,r8,r0 - lsr r3,r8,#7 - and r8,r8,#31*4 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - - ldr r12,[r10,r3,lsl #2] - tst r8,r12 + ldr ASTACK_2,[ASTACK_2,#8] + sub ASTACK_2,ASTACK_2,BSTACK_4 + lsr BSTACK_1,ASTACK_2,#7 + and ASTACK_2,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,SCRATCH_REG bne __mark_no_selector_2 .ifdef PIC - ldr r12,[r4,#-8] - add r4,r4,#-8+4 + ldr SCRATCH_REG,[BSTACK_0,#-8] + add BSTACK_0,BSTACK_0,#-8+4 .else - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] .endif - lao r8,e__system__nind,14 - ldr r7,[r6] - otoa r8,e__system__nind,14 - str r8,[r6,#-4] - mov r8,r6 + lao ASTACK_2,e__system__nind,14 + ldr ASTACK_1,[ASTACK_0] + otoa ASTACK_2,e__system__nind,14 + str ASTACK_2,[ASTACK_0,#-4] + mov ASTACK_2,ASTACK_0 - ldr r3,[sp],#4 + ldr BSTACK_1,[sp],#4 .ifdef PIC - ldrh r4,[r4,r12] + ldrh BSTACK_0,[BSTACK_0,SCRATCH_REG] .else - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 blt __mark_tuple_selector_node_1 - ldr r7,[r7,#8] + ldr ASTACK_1,[ASTACK_1,#8] beq __mark_tuple_selector_node_2 - sub r4,r4,#12 - ldr r6,[r7,r4] - str r6,[r8] + sub BSTACK_0,BSTACK_0,#12 + ldr ASTACK_0,[ASTACK_1,BSTACK_0] + str ASTACK_0,[ASTACK_2] b __mark_node __mark_tuple_selector_node_2: - ldr r6,[r7] - str r6,[r8] + ldr ASTACK_0,[ASTACK_1] + str ASTACK_0,[ASTACK_2] b __mark_node .thumb_func __small_tuple_or_record: .ifdef PIC - ldr r12,[r4,#-8] - add r4,r4,#-8+4 + ldr SCRATCH_REG,[BSTACK_0,#-8] + add BSTACK_0,BSTACK_0,#-8+4 .else - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] .endif - lao r8,e__system__nind,15 - ldr r7,[r6] - otoa r8,e__system__nind,15 - str r8,[r6,#-4] - mov r8,r6 + lao ASTACK_2,e__system__nind,15 + ldr ASTACK_1,[ASTACK_0] + otoa ASTACK_2,e__system__nind,15 + str ASTACK_2,[ASTACK_0,#-4] + mov ASTACK_2,ASTACK_0 - ldr r3,[sp],#4 + ldr BSTACK_1,[sp],#4 .ifdef PIC - ldrh r4,[r4,r12] + ldrh BSTACK_0,[BSTACK_0,SCRATCH_REG] .else - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif __mark_tuple_selector_node_1: - ldr r6,[r7,r4] - str r6,[r8] + ldr ASTACK_0,[ASTACK_1,BSTACK_0] + str ASTACK_0,[ASTACK_2] b __mark_node __mark_record_selector_node_1: beq __mark_strict_record_selector_node_1 - sub r4,r8,r0 - lsr r3,r4,#7 - and r4,r4,#31*4 - lsr r4,r4,#2 - mov r12,#1 - lsl r4,r12,r4 + sub BSTACK_0,ASTACK_2,BSTACK_4 + lsr BSTACK_1,BSTACK_0,#7 + and BSTACK_0,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#2 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 - ldr r12,[r10,r3,lsl #2] - tst r4,r12 - ldr r4,[sp],#4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst BSTACK_0,SCRATCH_REG + ldr BSTACK_0,[sp],#4 bne __mark_no_selector_2 - ldr r3,[r8] - tst r3,#2 + ldr BSTACK_1,[ASTACK_2] + tst BSTACK_1,#2 beq __mark_no_selector_2 - ldrh r12,[r3,#-2] - mov r3,#258/2 - cmp r12,r3,lsl #1 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + mov BSTACK_1,#258/2 + cmp SCRATCH_REG,BSTACK_1,lsl #1 bls __small_record - ldr r8,[r8,#8] - sub r8,r8,r0 - lsr r3,r8,#7 - and r8,r8,#31*4 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 + ldr ASTACK_2,[ASTACK_2,#8] + sub ASTACK_2,ASTACK_2,BSTACK_4 + lsr BSTACK_1,ASTACK_2,#7 + and ASTACK_2,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 - ldr r12,[r10,r3,lsl #2] - tst r8,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,SCRATCH_REG bne __mark_no_selector_2 .thumb_func __small_record: .ifdef PIC - ldr r12,[r4,#-8] - add r4,r4,#-8+4 + ldr SCRATCH_REG,[BSTACK_0,#-8] + add BSTACK_0,BSTACK_0,#-8+4 .else - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] .endif - lao r8,e__system__nind,16 - ldr r7,[r6] - otoa r8,e__system__nind,16 - str r8,[r6,#-4] - mov r8,r6 + lao ASTACK_2,e__system__nind,16 + ldr ASTACK_1,[ASTACK_0] + otoa ASTACK_2,e__system__nind,16 + str ASTACK_2,[ASTACK_0,#-4] + mov ASTACK_2,ASTACK_0 - ldr r3,[sp],#4 + ldr BSTACK_1,[sp],#4 .ifdef PIC - ldrh r4,[r4,r12] + ldrh BSTACK_0,[BSTACK_0,SCRATCH_REG] .else - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 ble __mark_record_selector_node_2 - ldr r7,[r7,#8] - sub r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + sub BSTACK_0,BSTACK_0,#12 __mark_record_selector_node_2: - ldr r6,[r7,r4] + ldr ASTACK_0,[ASTACK_1,BSTACK_0] - str r6,[r8] + str ASTACK_0,[ASTACK_2] b __mark_node __mark_strict_record_selector_node_1: - sub r4,r8,r0 - lsr r3,r4,#7 - and r4,r4,#31*4 - lsr r4,r4,#2 - mov r12,#1 - lsl r4,r12,r4 - - ldr r12,[r10,r3,lsl #2] - tst r4,r12 - ldr r4,[sp],#4 + sub BSTACK_0,ASTACK_2,BSTACK_4 + lsr BSTACK_1,BSTACK_0,#7 + and BSTACK_0,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#2 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst BSTACK_0,SCRATCH_REG + ldr BSTACK_0,[sp],#4 bne __mark_no_selector_2 - ldr r3,[r8] - tst r3,#2 + ldr BSTACK_1,[ASTACK_2] + tst BSTACK_1,#2 beq __mark_no_selector_2 - ldrh r12,[r3,#-2] - mov r3,#258/2 - cmp r12,r3,lsl #1 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + mov BSTACK_1,#258/2 + cmp SCRATCH_REG,BSTACK_1,lsl #1 ble __select_from_small_record - ldr r8,[r8,#8] - sub r8,r8,r0 - lsr r3,r8,#7 - and r8,r8,#31*4 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 + ldr ASTACK_2,[ASTACK_2,#8] + sub ASTACK_2,ASTACK_2,BSTACK_4 + lsr BSTACK_1,ASTACK_2,#7 + and ASTACK_2,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 - ldr r12,[r10,r3,lsl #2] - tst r8,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,SCRATCH_REG bne __mark_no_selector_2 .thumb_func __select_from_small_record: .ifdef PIC - ldr r4,[r4,#-8] - add r12,r4,#-8+4 + ldr BSTACK_0,[BSTACK_0,#-8] + add SCRATCH_REG,BSTACK_0,#-8+4 .else - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] .endif - ldr r7,[r6] - ldr r3,[sp],#4 - sub r6,r6,#4 + ldr ASTACK_1,[ASTACK_0] + ldr BSTACK_1,[sp],#4 + sub ASTACK_0,ASTACK_0,#4 .ifdef PIC - ldrh r3,[r4,r12]! + ldrh BSTACK_1,[BSTACK_0,SCRATCH_REG]! .else - ldrh r3,[r4,#4] + ldrh BSTACK_1,[BSTACK_0,#4] .endif - cmp r3,#8 + cmp BSTACK_1,#8 ble __mark_strict_record_selector_node_2 - ldr r12,[r7,#8] - add r3,r3,r12 - ldr r3,[r3,#-12] + ldr SCRATCH_REG,[ASTACK_1,#8] + add BSTACK_1,BSTACK_1,SCRATCH_REG + ldr BSTACK_1,[BSTACK_1,#-12] b __mark_strict_record_selector_node_3 __mark_strict_record_selector_node_2: - ldr r3,[r7,r3] + ldr BSTACK_1,[ASTACK_1,BSTACK_1] __mark_strict_record_selector_node_3: - str r3,[r6,#4] + str BSTACK_1,[ASTACK_0,#4] .ifdef PIC - ldrh r3,[r4,#6-4] + ldrh BSTACK_1,[BSTACK_0,#6-4] .else - ldrh r3,[r4,#6] + ldrh BSTACK_1,[BSTACK_0,#6] .endif - tst r3,r3 + tst BSTACK_1,BSTACK_1 beq __mark_strict_record_selector_node_5 - cmp r3,#8 + cmp BSTACK_1,#8 ble __mark_strict_record_selector_node_4 - ldr r7,[r7,#8] - sub r3,r3,#12 + ldr ASTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,#12 __mark_strict_record_selector_node_4: - ldr r3,[r7,r3] - str r3,[r6,#8] + ldr BSTACK_1,[ASTACK_1,BSTACK_1] + str BSTACK_1,[ASTACK_0,#8] __mark_strict_record_selector_node_5: .ifdef PIC - ldr r4,[r4,#-4-4] + ldr BSTACK_0,[BSTACK_0,#-4-4] .else - ldr r4,[r4,#-4] + ldr BSTACK_0,[BSTACK_0,#-4] .endif - str r4,[r6] + str BSTACK_0,[ASTACK_0] b __mark_node .thumb_func __mark_indirection_node: - ldr r6,[r6] + ldr ASTACK_0,[ASTACK_0] b __mark_node __mark_hnf_2: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,#3 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - cmp r7,#0x20000000 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,#3 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + cmp ASTACK_1,#0x20000000 bls fits__in__word__6 - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] fits__in__word__6: __mark_record_2_c: - ldr r4,[r6] - ldr r8,[r6,#4] - orr r4,r4,#2 - str r9,[r6,#4] - str r4,[r6] - add r9,r6,#4 - mov r6,r8 + ldr BSTACK_0,[ASTACK_0] + ldr ASTACK_2,[ASTACK_0,#4] + orr BSTACK_0,BSTACK_0,#2 + str ASTACK_PTR,[ASTACK_0,#4] + str BSTACK_0,[ASTACK_0] + add ASTACK_PTR,ASTACK_0,#4 + mov ASTACK_0,ASTACK_2 .thumb_func __mark_node: - sub r7,r6,r0 - cmp r7,r1 + sub ASTACK_1,ASTACK_0,BSTACK_4 + cmp ASTACK_1,BSTACK_3 bhs __mark_next_node - lsr r3,r7,#7 - and r7,r7,#31*4 - lsr r8,r7,#2 - mov r12,#1 - lsl r8,r12,r8 + lsr BSTACK_1,ASTACK_1,#7 + and ASTACK_1,ASTACK_1,#31*4 + lsr ASTACK_2,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 - ldr r12,[r10,r3,lsl #2] - tst r8,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,SCRATCH_REG beq __mark_arguments .thumb_func __mark_next_node: - tst r9,#3 + tst ASTACK_PTR,#3 bne __mark_parent - ldr r8,[r9,#-4] - ldr r7,[r9] - str r6,[r9] - str r7,[r9,#-4] - sub r9,r9,#4 + ldr ASTACK_2,[ASTACK_PTR,#-4] + ldr ASTACK_1,[ASTACK_PTR] + str ASTACK_0,[ASTACK_PTR] + str ASTACK_1,[ASTACK_PTR,#-4] + sub ASTACK_PTR,ASTACK_PTR,#4 - mov r6,r8 - and r8,r8,#3 - and r6,r6,#-4 - orr r9,r9,r8 + mov ASTACK_0,ASTACK_2 + and ASTACK_2,ASTACK_2,#3 + and ASTACK_0,ASTACK_0,#-4 + orr ASTACK_PTR,ASTACK_PTR,ASTACK_2 b __mark_node .thumb_func __mark_parent: - mov r3,r9 - bics r9,r9,#3 + mov BSTACK_1,ASTACK_PTR + bics ASTACK_PTR,ASTACK_PTR,#3 beq __end_mark_using_reversal - and r3,r3,#3 - ldr r8,[r9] - str r6,[r9] + and BSTACK_1,BSTACK_1,#3 + ldr ASTACK_2,[ASTACK_PTR] + str ASTACK_0,[ASTACK_PTR] - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 beq __argument_part_parent - add r6,r9,#-4 - mov r9,r8 + add ASTACK_0,ASTACK_PTR,#-4 + mov ASTACK_PTR,ASTACK_2 b __mark_next_node .thumb_func __argument_part_parent: - and r8,r8,#-4 - mov r7,r9 - ldr r6,[r8,#-4] - ldr r3,[r8] - str r3,[r8,#-4] - str r7,[r8] - add r9,r8,#2-4 + and ASTACK_2,ASTACK_2,#-4 + mov ASTACK_1,ASTACK_PTR + ldr ASTACK_0,[ASTACK_2,#-4] + ldr BSTACK_1,[ASTACK_2] + str BSTACK_1,[ASTACK_2,#-4] + str ASTACK_1,[ASTACK_2] + add ASTACK_PTR,ASTACK_2,#2-4 b __mark_node .thumb_func __mark_lazy_node: - ldr r8,[r4,#-4] - tst r8,r8 + ldr ASTACK_2,[BSTACK_0,#-4] + tst ASTACK_2,ASTACK_2 beq __mark_real_or_file - add r6,r6,#4 - cmp r8,#1 + add ASTACK_0,ASTACK_0,#4 + cmp ASTACK_2,#1 ble __mark_lazy_node_1 - cmp r8,#256 + cmp ASTACK_2,#256 bge __mark_closure_with_unboxed_arguments - add r8,r8,#1 - mov r4,r7 - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,r8 + add ASTACK_2,ASTACK_2,#1 + mov BSTACK_0,ASTACK_1 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,ASTACK_2 - add r4,r4,r8,lsl #2 - sub r8,r8,#2 + add BSTACK_0,BSTACK_0,ASTACK_2,lsl #2 + sub ASTACK_2,ASTACK_2,#2 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - cmp r4,#32*4 + cmp BSTACK_0,#32*4 bls fits__in__word__7 - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] fits__in__word__7: __mark_closure_with_unboxed_arguments__2: - add r7,r6,r8,lsl #2 - ldr r4,[r6] - orr r4,r4,#2 - str r4,[r6] - ldr r6,[r7] - str r9,[r7] - mov r9,r7 + add ASTACK_1,ASTACK_0,ASTACK_2,lsl #2 + ldr BSTACK_0,[ASTACK_0] + orr BSTACK_0,BSTACK_0,#2 + str BSTACK_0,[ASTACK_0] + ldr ASTACK_0,[ASTACK_1] + str ASTACK_PTR,[ASTACK_1] + mov ASTACK_PTR,ASTACK_1 b __mark_node .thumb_func __mark_closure_with_unboxed_arguments: - mov r4,r8 - and r8,r8,#255 + mov BSTACK_0,ASTACK_2 + and ASTACK_2,ASTACK_2,#255 - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 beq __mark_closure_1_with_unboxed_argument - add r8,r8,#2 + add ASTACK_2,ASTACK_2,#2 - lsr r4,r4,#8 - add r2,r2,r8 + lsr BSTACK_0,BSTACK_0,#8 + add BSTACK_2,BSTACK_2,ASTACK_2 - str r6,[sp,#-4]! - add r6,r7,r8,lsl #2 + str ASTACK_0,[sp,#-4]! + add ASTACK_0,ASTACK_1,ASTACK_2,lsl #2 - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - sub r8,r8,r4 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + sub ASTACK_2,ASTACK_2,BSTACK_0 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - cmp r6,#32*4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + cmp ASTACK_0,#32*4 bls fits__in_word_7_ - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] fits__in_word_7_: - ldr r6,[sp],#4 - subs r8,r8,#2 + ldr ASTACK_0,[sp],#4 + subs ASTACK_2,ASTACK_2,#2 bgt __mark_closure_with_unboxed_arguments__2 beq __shared_argument_part - sub r6,r6,#4 + sub ASTACK_0,ASTACK_0,#4 b __mark_next_node __mark_closure_1_with_unboxed_argument: - sub r6,r6,#4 + sub ASTACK_0,ASTACK_0,#4 b __mark_real_or_file __mark_hnf_0: - laol r12,INT+2,INT_o_2,9 - otoa r12,INT_o_2,9 - cmp r4,r12 + laol SCRATCH_REG,INT+2,INT_o_2,9 + otoa SCRATCH_REG,INT_o_2,9 + cmp BSTACK_0,SCRATCH_REG bne __no_int_3 - ldr r8,[r6,#4] - cmp r8,#33 + ldr ASTACK_2,[ASTACK_0,#4] + cmp ASTACK_2,#33 blo ____small_int .thumb_func __mark_bool_or_small_string: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,#2 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - cmp r7,#0x40000000 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,#2 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + cmp ASTACK_1,#0x40000000 bls __mark_next_node - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] b __mark_next_node .thumb_func ____small_int: - lao r6,small_integers,2 - otoa r6,small_integers,2 - add r6,r6,r8,lsl #3 + lao ASTACK_0,small_integers,2 + otoa ASTACK_0,small_integers,2 + add ASTACK_0,ASTACK_0,ASTACK_2,lsl #3 b __mark_next_node __no_int_3: blo __mark_real_file_or_string - laol r12,CHAR+2,CHAR_o_2,4 - otoa r12,CHAR_o_2,4 - cmp r4,r12 + laol SCRATCH_REG,CHAR+2,CHAR_o_2,4 + otoa SCRATCH_REG,CHAR_o_2,4 + cmp BSTACK_0,SCRATCH_REG bne __no_char_3 - ldrb r8,[r6,#4] - lao r6,static_characters,2 - otoa r6,static_characters,2 - add r6,r6,r8,lsl #3 + ldrb ASTACK_2,[ASTACK_0,#4] + lao ASTACK_0,static_characters,2 + otoa ASTACK_0,static_characters,2 + add ASTACK_0,ASTACK_0,ASTACK_2,lsl #3 b __mark_next_node __no_char_3: blo __mark_bool_or_small_string - add r6,r4,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 + add ASTACK_0,BSTACK_0,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 b __mark_next_node .thumb_func __mark_real_file_or_string: - laol r12,__STRING__+2,__STRING___o_2,9 - otoa r12,__STRING___o_2,9 - cmp r4,r12 + laol SCRATCH_REG,__STRING__+2,__STRING___o_2,9 + otoa SCRATCH_REG,__STRING___o_2,9 + cmp BSTACK_0,SCRATCH_REG bls __mark_string_or_array .thumb_func __mark_real_or_file: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,#3 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,#3 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - cmp r7,#0x20000000 + cmp ASTACK_1,#0x20000000 bls __mark_next_node - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] b __mark_next_node .thumb_func __mark__record: - mov r12,#258/2 - subs r8,r8,r12,lsl #1 + mov SCRATCH_REG,#258/2 + subs ASTACK_2,ASTACK_2,SCRATCH_REG,lsl #1 beq __mark_record_2 blt __mark_record_1 __mark_record_3: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,#3 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - cmp r7,#0x20000000 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,#3 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + cmp ASTACK_1,#0x20000000 bls fits__in__word__13 - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] fits__in__word__13: - ldrh r3,[r4,#-2+2] + ldrh BSTACK_1,[BSTACK_0,#-2+2] - ldr r7,[r6,#4] - sub r7,r7,r0 - mov r4,r7 - and r7,r7,#31*4 - lsr r4,r4,#7 + ldr ASTACK_1,[ASTACK_0,#4] + sub ASTACK_1,ASTACK_1,BSTACK_4 + mov BSTACK_0,ASTACK_1 + and ASTACK_1,ASTACK_1,#31*4 + lsr BSTACK_0,BSTACK_0,#7 - str r9,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! - lsr r9,r7,#2 - mov r12,#1 - lsl r9,r12,r9 + lsr ASTACK_PTR,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_PTR,SCRATCH_REG,ASTACK_PTR - ldr r12,[r10,r4,lsl #2] - tst r9,r12 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_0,lsl #2] + tst ASTACK_PTR,SCRATCH_REG bne __shared_record_argument_part - add r8,r8,#1 - ldr r12,[r10,r4,lsl #2] - orr r12,r12,r9 - str r12,[r10,r4,lsl #2] + add ASTACK_2,ASTACK_2,#1 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_0,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + str SCRATCH_REG,[HEAP_PTR,BSTACK_0,lsl #2] - add r7,r7,r8,lsl #2 - add r2,r2,r8 + add ASTACK_1,ASTACK_1,ASTACK_2,lsl #2 + add BSTACK_2,BSTACK_2,ASTACK_2 - ldr r9,[sp],#4 + ldr ASTACK_PTR,[sp],#4 - cmp r7,#32*4 + cmp ASTACK_1,#32*4 bls fits__in__word__14 - add r12,r10,#4 - ldr r7,[r12,r4,lsl #2] - orr r7,r7,#1 - str r7,[r12,r4,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_0,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_0,lsl #2] fits__in__word__14: - subs r3,r3,#1 - ldr r7,[r6,#4] + subs BSTACK_1,BSTACK_1,#1 + ldr ASTACK_1,[ASTACK_0,#4] blt __mark_record_3_bb beq __shared_argument_part - str r9,[r6,#4] - add r6,r6,#4 + str ASTACK_PTR,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#4 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 beq __mark_record_3_aab - add r9,r7,r3,lsl #2 - ldr r4,[r7] - orr r4,r4,#1 - ldr r8,[r9] - str r4,[r7] - str r6,[r9] - mov r6,r8 + add ASTACK_PTR,ASTACK_1,BSTACK_1,lsl #2 + ldr BSTACK_0,[ASTACK_1] + orr BSTACK_0,BSTACK_0,#1 + ldr ASTACK_2,[ASTACK_PTR] + str BSTACK_0,[ASTACK_1] + str ASTACK_0,[ASTACK_PTR] + mov ASTACK_0,ASTACK_2 b __mark_node __mark_record_3_bb: - sub r6,r6,#4 + sub ASTACK_0,ASTACK_0,#4 b __mark_next_node __mark_record_3_aab: - ldr r8,[r7] - str r6,[r7] - add r9,r7,#1 - mov r6,r8 + ldr ASTACK_2,[ASTACK_1] + str ASTACK_0,[ASTACK_1] + add ASTACK_PTR,ASTACK_1,#1 + mov ASTACK_0,ASTACK_2 b __mark_node .thumb_func __shared_record_argument_part: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - ldr r9,[sp],#4 + ldr ASTACK_PTR,[sp],#4 - tst r3,r3 + tst BSTACK_1,BSTACK_1 bne __shared_argument_part - sub r6,r6,#4 + sub ASTACK_0,ASTACK_0,#4 b __mark_next_node __mark_record_2: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,#3 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - cmp r7,#0x20000000 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,#3 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + cmp ASTACK_1,#0x20000000 bls fits__in__word_12 - add r12,r10,#4 - ldr r7,[r12,r3,lsl #2] - orr r7,r7,#1 - str r7,[r12,r3,lsl #2] + add SCRATCH_REG,HEAP_PTR,#4 + ldr ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] + orr ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[SCRATCH_REG,BSTACK_1,lsl #2] fits__in__word_12: - ldrh r12,[r4,#-2+2] - cmp r12,#1 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#1 bhi __mark_record_2_c beq __shared_argument_part - sub r6,r6,#4 + sub ASTACK_0,ASTACK_0,#4 b __mark_next_node __mark_record_1: - ldrh r12,[r4,#-2+2] - cmp r12,#0 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#0 bne __mark_hnf_1 - sub r6,r6,#4 + sub ASTACK_0,ASTACK_0,#4 b __mark_bool_or_small_string .thumb_func @@ -2327,242 +2326,242 @@ __mark_string_or_array: .thumb_func __mark_array: - ldr r8,[r6,#8] - cmp r8,#0 + ldr ASTACK_2,[ASTACK_0,#8] + cmp ASTACK_2,#0 beq __mark_lazy_array - ldrh r4,[r8,#-2] - cmp r4,#0 + ldrh BSTACK_0,[ASTACK_2,#-2] + cmp BSTACK_0,#0 beq __mark_strict_basic_array - ldrh r8,[r8,#-2+2] - tst r8,r8 + ldrh ASTACK_2,[ASTACK_2,#-2+2] + tst ASTACK_2,ASTACK_2 beq __mark_b_record_array - sub r4,r4,#256 - cmp r4,r8 + sub BSTACK_0,BSTACK_0,#256 + cmp BSTACK_0,ASTACK_2 beq __mark_a_record_array .thumb_func __mark__ab__record__array: - str r7,[sp,#-4]! - str r3,[sp,#-4]! - mov r3,r8 + str ASTACK_1,[sp,#-4]! + str BSTACK_1,[sp,#-4]! + mov BSTACK_1,ASTACK_2 - ldr r8,[r6,#4] - add r6,r6,#8 - str r6,[sp,#-4]! + ldr ASTACK_2,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 + str ASTACK_0,[sp,#-4]! - lsl r8,r8,#2 - mov r7,r4 - mul r7,r8,r7 + lsl ASTACK_2,ASTACK_2,#2 + mov ASTACK_1,BSTACK_0 + mul ASTACK_1,ASTACK_2,ASTACK_1 - sub r4,r4,r3 - add r6,r6,#4 - add r7,r7,r6 + sub BSTACK_0,BSTACK_0,BSTACK_1 + add ASTACK_0,ASTACK_0,#4 + add ASTACK_1,ASTACK_1,ASTACK_0 .align add lr,pc,#9 str lr,[sp,#-4]! bl reorder - ldr r6,[sp],#4 + ldr ASTACK_0,[sp],#4 - mov r12,r4 - mov r4,r3 - mov r3,r12 - ldr r8,[r6,#-4] - mul r4,r8,r4 - mul r3,r8,r3 - add r2,r2,r3 - add r3,r3,r4 + mov SCRATCH_REG,BSTACK_0 + mov BSTACK_0,BSTACK_1 + mov BSTACK_1,SCRATCH_REG + ldr ASTACK_2,[ASTACK_0,#-4] + mul BSTACK_0,ASTACK_2,BSTACK_0 + mul BSTACK_1,ASTACK_2,BSTACK_1 + add BSTACK_2,BSTACK_2,BSTACK_1 + add BSTACK_1,BSTACK_1,BSTACK_0 - lsl r3,r3,#2 - sub r8,r6,r0 - add r8,r8,r3 + lsl BSTACK_1,BSTACK_1,#2 + sub ASTACK_2,ASTACK_0,BSTACK_4 + add ASTACK_2,ASTACK_2,BSTACK_1 - ldr r3,[sp],#4 - ldr r7,[sp],#4 + ldr BSTACK_1,[sp],#4 + ldr ASTACK_1,[sp],#4 - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - add r7,r6,r4,lsl #2 + add ASTACK_1,ASTACK_0,BSTACK_0,lsl #2 b __mark_r_array .thumb_func __mark_a_record_array: - ldr r12,[r6,#4] - mul r4,r12,r4 - add r6,r6,#8 + ldr SCRATCH_REG,[ASTACK_0,#4] + mul BSTACK_0,SCRATCH_REG,BSTACK_0 + add ASTACK_0,ASTACK_0,#8 b __mark_lr_array .thumb_func __mark_lazy_array: - ldr r4,[r6,#4] - add r6,r6,#8 + ldr BSTACK_0,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 .thumb_func __mark_lr_array: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - add r7,r6,r4,lsl #2 - sub r8,r7,r0 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add ASTACK_1,ASTACK_0,BSTACK_0,lsl #2 + sub ASTACK_2,ASTACK_1,BSTACK_4 .thumb_func __mark_r_array: - lsr r8,r8,#7 + lsr ASTACK_2,ASTACK_2,#7 - cmp r3,r8 + cmp BSTACK_1,ASTACK_2 bhs __skip_mark_lazy_array_bits - add r3,r3,#1 + add BSTACK_1,BSTACK_1,#1 .thumb_func __mark_lazy_array_bits: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,#1 - str r12,[r10,r3,lsl #2] - add r3,r3,#1 - cmp r3,r8 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,#1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add BSTACK_1,BSTACK_1,#1 + cmp BSTACK_1,ASTACK_2 bls __mark_lazy_array_bits .thumb_func __skip_mark_lazy_array_bits: - add r2,r2,#3 - add r2,r2,r4 + add BSTACK_2,BSTACK_2,#3 + add BSTACK_2,BSTACK_2,BSTACK_0 - cmp r4,#1 + cmp BSTACK_0,#1 bls __mark_array_length_0_1 - ldr r8,[r7] - ldr r3,[r6] - str r3,[r7] - str r8,[r6] - - ldr r8,[r7,#-4] - sub r7,r7,#4 - lao r12,lazy_array_list,2 - ldo r3,r12,lazy_array_list,2 - add r8,r8,#2 - str r3,[r7] - str r8,[r6,#-4] - str r4,[r6,#-8] - sub r6,r6,#8 - lao r12,lazy_array_list,3 - sto r6,r12,lazy_array_list,3 - - ldr r6,[r7,#-4] - str r9,[r7,#-4] - add r9,r7,#-4 + ldr ASTACK_2,[ASTACK_1] + ldr BSTACK_1,[ASTACK_0] + str BSTACK_1,[ASTACK_1] + str ASTACK_2,[ASTACK_0] + + ldr ASTACK_2,[ASTACK_1,#-4] + sub ASTACK_1,ASTACK_1,#4 + lao SCRATCH_REG,lazy_array_list,2 + ldo BSTACK_1,SCRATCH_REG,lazy_array_list,2 + add ASTACK_2,ASTACK_2,#2 + str BSTACK_1,[ASTACK_1] + str ASTACK_2,[ASTACK_0,#-4] + str BSTACK_0,[ASTACK_0,#-8] + sub ASTACK_0,ASTACK_0,#8 + lao SCRATCH_REG,lazy_array_list,3 + sto ASTACK_0,SCRATCH_REG,lazy_array_list,3 + + ldr ASTACK_0,[ASTACK_1,#-4] + str ASTACK_PTR,[ASTACK_1,#-4] + add ASTACK_PTR,ASTACK_1,#-4 b __mark_node __mark_array_length_0_1: - add r6,r6,#-8 + add ASTACK_0,ASTACK_0,#-8 blo __mark_next_node - ldr r3,[r6,#12] - ldr r8,[r6,#8] - lao r12,lazy_array_list,4 - ldo r7,r12,lazy_array_list,4 - str r8,[r6,#12] - str r7,[r6,#8] - str r4,[r6] - lao r12,lazy_array_list,5 - sto r6,r12,lazy_array_list,5 - str r3,[r6,#4] - add r6,r6,#4 - - ldr r8,[r6] - str r9,[r6] - add r9,r6,#2 - mov r6,r8 + ldr BSTACK_1,[ASTACK_0,#12] + ldr ASTACK_2,[ASTACK_0,#8] + lao SCRATCH_REG,lazy_array_list,4 + ldo ASTACK_1,SCRATCH_REG,lazy_array_list,4 + str ASTACK_2,[ASTACK_0,#12] + str ASTACK_1,[ASTACK_0,#8] + str BSTACK_0,[ASTACK_0] + lao SCRATCH_REG,lazy_array_list,5 + sto ASTACK_0,SCRATCH_REG,lazy_array_list,5 + str BSTACK_1,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#4 + + ldr ASTACK_2,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0] + add ASTACK_PTR,ASTACK_0,#2 + mov ASTACK_0,ASTACK_2 b __mark_node .thumb_func __mark_b_record_array: - ldr r8,[r6,#4] - sub r4,r4,#256 - mul r4,r8,r4 - add r4,r4,#3 + ldr ASTACK_2,[ASTACK_0,#4] + sub BSTACK_0,BSTACK_0,#256 + mul BSTACK_0,ASTACK_2,BSTACK_0 + add BSTACK_0,BSTACK_0,#3 b __mark_basic_array .thumb_func __mark_strict_basic_array: - ldr r4,[r6,#4] - laol r12,INT+2,INT_o_2,10 - otoa r12,INT_o_2,10 - cmp r8,r12 + ldr BSTACK_0,[ASTACK_0,#4] + laol SCRATCH_REG,INT+2,INT_o_2,10 + otoa SCRATCH_REG,INT_o_2,10 + cmp ASTACK_2,SCRATCH_REG beq __mark__strict__int__array - laol r12,BOOL+2,BOOL_o_2,6 - otoa r12,BOOL_o_2,6 - cmp r8,r12 + laol SCRATCH_REG,BOOL+2,BOOL_o_2,6 + otoa SCRATCH_REG,BOOL_o_2,6 + cmp ASTACK_2,SCRATCH_REG beq __mark__strict__bool__array .thumb_func __mark__strict__real__array: - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 .thumb_func __mark__strict__int__array: - add r4,r4,#3 + add BSTACK_0,BSTACK_0,#3 b __mark_basic_array .thumb_func __mark__strict__bool__array: - add r4,r4,#12+3 - lsr r4,r4,#2 + add BSTACK_0,BSTACK_0,#12+3 + lsr BSTACK_0,BSTACK_0,#2 b __mark_basic_array .thumb_func __mark_string_: - ldr r4,[r6,#4] - add r4,r4,#8+3 - lsr r4,r4,#2 + ldr BSTACK_0,[ASTACK_0,#4] + add BSTACK_0,BSTACK_0,#8+3 + lsr BSTACK_0,BSTACK_0,#2 .thumb_func __mark_basic_array: - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - add r2,r2,r4 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + add BSTACK_2,BSTACK_2,BSTACK_0 - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r7 - str r12,[r10,r3,lsl #2] - add r12,r6,#-4 - add r4,r12,r4,lsl #2 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add SCRATCH_REG,ASTACK_0,#-4 + add BSTACK_0,SCRATCH_REG,BSTACK_0,lsl #2 - sub r4,r4,r0 - lsr r4,r4,#7 + sub BSTACK_0,BSTACK_0,BSTACK_4 + lsr BSTACK_0,BSTACK_0,#7 - cmp r3,r4 + cmp BSTACK_1,BSTACK_0 bhs __mark_next_node - add r3,r3,#1 - mov r8,#1 + add BSTACK_1,BSTACK_1,#1 + mov ASTACK_2,#1 - cmp r3,r4 + cmp BSTACK_1,BSTACK_0 bhs __last__string__bits .thumb_func __mark_string_lp: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] - add r3,r3,#1 - cmp r3,r4 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + add BSTACK_1,BSTACK_1,#1 + cmp BSTACK_1,BSTACK_0 blo __mark_string_lp .thumb_func __last__string__bits: - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r8 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] b __mark_next_node .ifdef PIC -- cgit v1.2.3