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_rmarkr.s | 1233 ++++++++++++++++++++++++------------------------ 1 file changed, 616 insertions(+), 617 deletions(-) (limited to 'thumb2compact_rmarkr.s') diff --git a/thumb2compact_rmarkr.s b/thumb2compact_rmarkr.s index d684e3f..3256ca1 100644 --- a/thumb2compact_rmarkr.s +++ b/thumb2compact_rmarkr.s @@ -1,275 +1,274 @@ - ZERO_ARITY_DESCRIPTOR_OFFSET = -4 NO_BIT_INSTRUCTIONS = 1 rmark_using_reversal: - str r9,[sp,#-4]! - str r9,[sp,#-4]! - mov r9,#1 + str ASTACK_PTR,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! + mov ASTACK_PTR,#1 b rmarkr_node rmark_using_reversal_: - subs r6,r6,#4 - str r3,[sp,#-4]! - str r9,[sp,#-4]! - cmp r6,r3 + subs ASTACK_0,ASTACK_0,#4 + str BSTACK_1,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! + cmp ASTACK_0,BSTACK_1 bhi rmark_no_undo_reverse_1 - str r6,[r9] - str r4,[r6] + str ASTACK_0,[ASTACK_PTR] + str BSTACK_0,[ASTACK_0] rmark_no_undo_reverse_1: - mov r9,#1 + mov ASTACK_PTR,#1 b rmarkr_arguments rmark_array_using_reversal: - str r3,[sp,#-4]! - str r9,[sp,#-4]! - cmp r6,r3 + str BSTACK_1,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! + cmp ASTACK_0,BSTACK_1 bhi rmark_no_undo_reverse_2 - str r6,[r9] - laol r12,__ARRAY__+2,__ARRAY___o_2,18 - otoa r12,__ARRAY___o_2,18 - str r12,[r6] + str ASTACK_0,[ASTACK_PTR] + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,18 + otoa SCRATCH_REG,__ARRAY___o_2,18 + str SCRATCH_REG,[ASTACK_0] rmark_no_undo_reverse_2: - mov r9,#1 + mov ASTACK_PTR,#1 b rmarkr_arguments rmarkr_hnf_2: - ldr r12,[r6] - orr r12,r12,#2 - str r12,[r6] - ldr r8,[r6,#4] - str r9,[r6,#4] - add r9,r6,#4 - mov r6,r8 + ldr SCRATCH_REG,[ASTACK_0] + orr SCRATCH_REG,SCRATCH_REG,#2 + str SCRATCH_REG,[ASTACK_0] + ldr ASTACK_2,[ASTACK_0,#4] + str ASTACK_PTR,[ASTACK_0,#4] + add ASTACK_PTR,ASTACK_0,#4 + mov ASTACK_0,ASTACK_2 rmarkr_node: - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bhs rmarkr_next_node_after_static - lsr r3,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r8,[r10,r3,lsl #2] - tst r8,r4 + lsr BSTACK_1,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,BSTACK_0 bne rmarkr_next_node - orr r8,r8,r4 - str r8,[r10,r3,lsl #2] + orr ASTACK_2,ASTACK_2,BSTACK_0 + str ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] rmarkr_arguments: - ldr r4,[r6] - tst r4,#2 + ldr BSTACK_0,[ASTACK_0] + tst BSTACK_0,#2 beq rmarkr_lazy_node - ldrh r8,[r4,#-2] - tst r8,r8 + ldrh ASTACK_2,[BSTACK_0,#-2] + tst ASTACK_2,ASTACK_2 beq rmarkr_hnf_0 - add r6,r6,#4 + add ASTACK_0,ASTACK_0,#4 - cmp r8,#256 + cmp ASTACK_2,#256 bhs rmarkr_record - subs r8,r8,#2 + subs ASTACK_2,ASTACK_2,#2 beq rmarkr_hnf_2 blo rmarkr_hnf_1 rmarkr_hnf_3: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r3,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r3,lsl #2] - tst r4,r12 + lsr BSTACK_1,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + 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 bne rmarkr_shared_argument_part - orr r12,r12,r4 - str r12,[r10,r3,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] rmarkr_no_shared_argument_part: - ldr r12,[r6] - orr r12,r12,#2 - str r12,[r6] - str r9,[r6,#4] - add r6,r6,#4 - - ldr r12,[r7] - orr r12,r12,#1 - str r12,[r7] - add r7,r7,r8,lsl #2 - - ldr r8,[r7] - str r6,[r7] - mov r9,r7 - mov r6,r8 + ldr SCRATCH_REG,[ASTACK_0] + orr SCRATCH_REG,SCRATCH_REG,#2 + str SCRATCH_REG,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#4 + + ldr SCRATCH_REG,[ASTACK_1] + orr SCRATCH_REG,SCRATCH_REG,#1 + str SCRATCH_REG,[ASTACK_1] + add ASTACK_1,ASTACK_1,ASTACK_2,lsl #2 + + ldr ASTACK_2,[ASTACK_1] + str ASTACK_0,[ASTACK_1] + mov ASTACK_PTR,ASTACK_1 + mov ASTACK_0,ASTACK_2 b rmarkr_node rmarkr_shared_argument_part: - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 bhi rmarkr_hnf_1 - ldr r3,[r7] - add r4,r6,#4+2+1 - str r4,[r7] - str r3,[r6,#4] + ldr BSTACK_1,[ASTACK_1] + add BSTACK_0,ASTACK_0,#4+2+1 + str BSTACK_0,[ASTACK_1] + str BSTACK_1,[ASTACK_0,#4] b rmarkr_hnf_1 rmarkr_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 rmarkr_record_2 blo rmarkr_record_1 rmarkr_record_3: - ldrh r8,[r4,#-2+2] - subs r8,r8,#1 + ldrh ASTACK_2,[BSTACK_0,#-2+2] + subs ASTACK_2,ASTACK_2,#1 blo rmarkr_record_3_bb beq rmarkr_record_3_ab - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 beq rmarkr_record_3_aab b rmarkr_hnf_3 rmarkr_record_3_bb: - ldr r7,[r6,#8-4] - subs r6,r6,#4 + ldr ASTACK_1,[ASTACK_0,#8-4] + subs ASTACK_0,ASTACK_0,#4 - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 bhi rmarkr_next_node - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 bne rmarkr_bit_in_same_word1 - add r8,r8,#1 - mov r4,#1 + add ASTACK_2,ASTACK_2,#1 + mov BSTACK_0,#1 rmarkr_bit_in_same_word1: - ldr r12,[r10,r8,lsl #2] - tst r4,r12 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + tst BSTACK_0,SCRATCH_REG beq rmarkr_not_yet_linked_bb - sub r4,r6,r11 + sub BSTACK_0,ASTACK_0,ASTACK_3 - add r4,r4,#2*4 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] + add BSTACK_0,BSTACK_0,#2*4 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] rmarkr_not_yet_linked_bb: - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - ldr r8,[r7] - add r4,r6,#8+2+1 - str r8,[r6,#8] - str r4,[r7] + ldr ASTACK_2,[ASTACK_1] + add BSTACK_0,ASTACK_0,#8+2+1 + str ASTACK_2,[ASTACK_0,#8] + str BSTACK_0,[ASTACK_1] b rmarkr_next_node rmarkr_record_3_ab: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 bhi rmarkr_hnf_1 - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 bne rmarkr_bit_in_same_word2 - add r8,r8,#1 - mov r4,#1 + add ASTACK_2,ASTACK_2,#1 + mov BSTACK_0,#1 rmarkr_bit_in_same_word2: - ldr r12,[r10,r8,lsl #2] - tst r4,r12 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + tst BSTACK_0,SCRATCH_REG beq rmarkr_not_yet_linked_ab - sub r4,r6,r11 + sub BSTACK_0,ASTACK_0,ASTACK_3 - add r4,r4,#4 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] + add BSTACK_0,BSTACK_0,#4 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] rmarkr_not_yet_linked_ab: - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - ldr r8,[r7] - add r4,r6,#4+2+1 - str r8,[r6,#4] - str r4,[r7] + ldr ASTACK_2,[ASTACK_1] + add BSTACK_0,ASTACK_0,#4+2+1 + str ASTACK_2,[ASTACK_0,#4] + str BSTACK_0,[ASTACK_1] b rmarkr_hnf_1 rmarkr_record_3_aab: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - tst r4,r12 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + tst BSTACK_0,SCRATCH_REG bne rmarkr_shared_argument_part - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] - - ldr r12,[r6] - add r12,r12,#2 - str r12,[r6] - str r9,[r6,#4] - add r6,r6,#4 - - ldr r9,[r7] - str r6,[r7] - mov r6,r9 - add r9,r7,#1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + + ldr SCRATCH_REG,[ASTACK_0] + add SCRATCH_REG,SCRATCH_REG,#2 + str SCRATCH_REG,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#4 + + ldr ASTACK_PTR,[ASTACK_1] + str ASTACK_0,[ASTACK_1] + mov ASTACK_0,ASTACK_PTR + add ASTACK_PTR,ASTACK_1,#1 b rmarkr_node rmarkr_record_2: - ldrh r12,[r4,#-2+2] - cmp r12,#1 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#1 bhi rmarkr_hnf_2 beq rmarkr_hnf_1 - subs r6,r6,#4 + subs ASTACK_0,ASTACK_0,#4 b rmarkr_next_node rmarkr_record_1: - ldrh r12,[r4,#-2+2] - cmp r12,#0 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#0 bne rmarkr_hnf_1 - subs r6,r6,#4 + subs ASTACK_0,ASTACK_0,#4 b rmarkr_next_node rmarkr_lazy_node_1: @@ -277,757 +276,757 @@ rmarkr_lazy_node_1: bne rmarkr_selector_node_1 rmarkr_hnf_1: - ldr r8,[r6] - str r9,[r6] + ldr ASTACK_2,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0] - add r9,r6,#2 - mov r6,r8 + add ASTACK_PTR,ASTACK_0,#2 + mov ASTACK_0,ASTACK_2 b rmarkr_node @ selectors rmarkr_indirection_node: - add r12,r6,#-4 - sub r3,r12,r11 - - and r4,r3,#31*4 - lsr r3,r3,#7 - lsr r12,r4,#2 - mov r4,#1 - lsl r4,r4,r12 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r4 - str r12,[r10,r3,lsl #2] - - ldr r6,[r6] + add SCRATCH_REG,ASTACK_0,#-4 + sub BSTACK_1,SCRATCH_REG,ASTACK_3 + + and BSTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr SCRATCH_REG,BSTACK_0,#2 + mov BSTACK_0,#1 + lsl BSTACK_0,BSTACK_0,SCRATCH_REG + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + + ldr ASTACK_0,[ASTACK_0] b rmarkr_node rmarkr_selector_node_1: - cmp r8,#(-2)-1 + cmp ASTACK_2,#(-2)-1 beq rmarkr_indirection_node - ldr r7,[r6] + ldr ASTACK_1,[ASTACK_0] - sub r3,r7,r11 - lsr r3,r3,#2 + sub BSTACK_1,ASTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 - cmp r8,#(-3)-1 + cmp ASTACK_2,#(-3)-1 ble rmarkr_record_selector_node_1 - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmarkr_hnf_1 - ldrh r12,[r3,#-2] - cmp r12,#2 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + cmp SCRATCH_REG,#2 bls rmarkr_small_tuple_or_record rmarkr_large_tuple_or_record: - ldr r3,[r7,#8] - sub r3,r3,r11 - lsr r3,r3,#2 - - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 - add r12,r6,#-4 - sub r3,r12,r11 + add SCRATCH_REG,ASTACK_0,#-4 + sub BSTACK_1,SCRATCH_REG,ASTACK_3 - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r6,r6,#2 + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr ASTACK_0,ASTACK_0,#2 .ifdef PIC - ldrh r4,[r12,r4] + ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .endif - mov r12,#1 - lsl r6,r12,r6 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + mov SCRATCH_REG,#1 + lsl ASTACK_0,SCRATCH_REG,ASTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] .ifndef PIC - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 blt rmarkr_tuple_or_record_selector_node_2 - ldr r7,[r7,#8] + ldr ASTACK_1,[ASTACK_1,#8] beq rmarkr_tuple_selector_node_2 - add r12,r4,#-12 - ldr r6,[r7,r12] - ldr r7,[sp],#4 - lao r12,e__system__nind,20 - otoa r12,e__system__nind,20 - str r12,[r7,#-4] - str r6,[r7] + add SCRATCH_REG,BSTACK_0,#-12 + ldr ASTACK_0,[ASTACK_1,SCRATCH_REG] + ldr ASTACK_1,[sp],#4 + lao SCRATCH_REG,e__system__nind,20 + otoa SCRATCH_REG,e__system__nind,20 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmarkr_node rmarkr_tuple_selector_node_2: - ldr r6,[r7] - ldr r7,[sp],#4 - lao r12,e__system__nind,21 - otoa r12,e__system__nind,21 - str r12,[r7,#-4] - str r6,[r7] + ldr ASTACK_0,[ASTACK_1] + ldr ASTACK_1,[sp],#4 + lao SCRATCH_REG,e__system__nind,21 + otoa SCRATCH_REG,e__system__nind,21 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmarkr_node rmarkr_record_selector_node_1: beq rmarkr_strict_record_selector_node_1 - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmarkr_hnf_1 - 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 rmarkr_small_tuple_or_record - ldr r3,[r7,#8] - sub r3,r3,r11 - lsr r3,r3,#2 - - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 rmarkr_small_tuple_or_record: - add r12,r6,#-4 - sub r3,r12,r11 + add SCRATCH_REG,ASTACK_0,#-4 + sub BSTACK_1,SCRATCH_REG,ASTACK_3 - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r6,r6,#2 + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr ASTACK_0,ASTACK_0,#2 .ifdef PIC - ldrh r4,[r12,r4] + ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .endif - mov r12,#1 - lsl r6,r12,r6 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + mov SCRATCH_REG,#1 + lsl ASTACK_0,SCRATCH_REG,ASTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] .ifndef PIC - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 ble rmarkr_tuple_or_record_selector_node_2 - ldr r7,[r7,#8] - sub r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + sub BSTACK_0,BSTACK_0,#12 rmarkr_tuple_or_record_selector_node_2: - ldr r6,[r7,r4] - ldr r7,[sp],#4 - lao r12,e__system__nind,22 - otoa r12,e__system__nind,22 - str r12,[r7,#-4] - str r6,[r7] + ldr ASTACK_0,[ASTACK_1,BSTACK_0] + ldr ASTACK_1,[sp],#4 + lao SCRATCH_REG,e__system__nind,22 + otoa SCRATCH_REG,e__system__nind,22 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmarkr_node rmarkr_strict_record_selector_node_1: - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmarkr_hnf_1 - 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 rmarkr_select_from_small_record - ldr r3,[r7,#8] - sub r3,r3,r11 - - str r4,[sp,#-4]! - and r4,r3,#31*4 - lsr r3,r3,#7 - lsr r4,r4,#2 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr BSTACK_0,BSTACK_0,#2 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 rmarkr_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 rmarkr_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 rmarkr_strict_record_selector_node_3 rmarkr_strict_record_selector_node_2: - ldr r3,[r7,r3] + ldr BSTACK_1,[ASTACK_1,BSTACK_1] rmarkr_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 rmarkr_strict_record_selector_node_5 - cmp r3,#8 + cmp BSTACK_1,#8 ble rmarkr_strict_record_selector_node_4 - ldr r7,[r7,#8] - subs r3,r3,#12 + ldr ASTACK_1,[ASTACK_1,#8] + subs BSTACK_1,BSTACK_1,#12 rmarkr_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] rmarkr_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 rmarkr_next_node @ a2,d1: free rmarkr_next_node: - tst r9,#3 + tst ASTACK_PTR,#3 bne rmarkr_parent - ldr r8,[r9,#-4] - mov r3,#3 + ldr ASTACK_2,[ASTACK_PTR,#-4] + mov BSTACK_1,#3 - and r3,r3,r8 - subs r9,r9,#4 + and BSTACK_1,BSTACK_1,ASTACK_2 + subs ASTACK_PTR,ASTACK_PTR,#4 - cmp r3,#3 + cmp BSTACK_1,#3 beq rmarkr_argument_part_cycle1 - ldr r7,[r9,#4] - str r7,[r9] + ldr ASTACK_1,[ASTACK_PTR,#4] + str ASTACK_1,[ASTACK_PTR] rmarkr_c_argument_part_cycle1: - cmp r6,r9 + cmp ASTACK_0,ASTACK_PTR bhi rmarkr_no_reverse_1 - ldr r7,[r6] - add r4,r9,#4+1 - str r7,[r9,#4] - str r4,[r6] + ldr ASTACK_1,[ASTACK_0] + add BSTACK_0,ASTACK_PTR,#4+1 + str ASTACK_1,[ASTACK_PTR,#4] + str BSTACK_0,[ASTACK_0] - orr r9,r9,r3 - mov r6,r8 - eor r6,r6,r3 + orr ASTACK_PTR,ASTACK_PTR,BSTACK_1 + mov ASTACK_0,ASTACK_2 + eor ASTACK_0,ASTACK_0,BSTACK_1 b rmarkr_node rmarkr_no_reverse_1: - str r6,[r9,#4] - mov r6,r8 - orr r9,r9,r3 - eor r6,r6,r3 + str ASTACK_0,[ASTACK_PTR,#4] + mov ASTACK_0,ASTACK_2 + orr ASTACK_PTR,ASTACK_PTR,BSTACK_1 + eor ASTACK_0,ASTACK_0,BSTACK_1 b rmarkr_node rmarkr_lazy_node: - ldr r8,[r4,#-4] - tst r8,r8 + ldr ASTACK_2,[BSTACK_0,#-4] + tst ASTACK_2,ASTACK_2 beq rmarkr_next_node - add r6,r6,#4 + add ASTACK_0,ASTACK_0,#4 - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 ble rmarkr_lazy_node_1 - cmp r8,#255 + cmp ASTACK_2,#255 bge rmarkr_closure_with_unboxed_arguments rmarkr_closure_with_unboxed_arguments_: - ldr r12,[r6] - orr r12,r12,#2 - str r12,[r6] - add r6,r6,r8,lsl #2 - - ldr r8,[r6] - str r9,[r6] - mov r9,r6 - mov r6,r8 + ldr SCRATCH_REG,[ASTACK_0] + orr SCRATCH_REG,SCRATCH_REG,#2 + str SCRATCH_REG,[ASTACK_0] + add ASTACK_0,ASTACK_0,ASTACK_2,lsl #2 + + ldr ASTACK_2,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0] + mov ASTACK_PTR,ASTACK_0 + mov ASTACK_0,ASTACK_2 b rmarkr_node rmarkr_closure_with_unboxed_arguments: @ (a_size+b_size)+(b_size<<8) @ addl $1,a2 - mov r4,r8 - and r8,r8,#255 - lsr r4,r4,#8 - subs r8,r8,r4 + mov BSTACK_0,ASTACK_2 + and ASTACK_2,ASTACK_2,#255 + lsr BSTACK_0,BSTACK_0,#8 + subs ASTACK_2,ASTACK_2,BSTACK_0 @ subl $1,a2 bgt rmarkr_closure_with_unboxed_arguments_ beq rmarkr_hnf_1 - subs r6,r6,#4 + subs ASTACK_0,ASTACK_0,#4 b rmarkr_next_node rmarkr_hnf_0: - laol r12,INT+2,INT_o_2,12 - otoa r12,INT_o_2,12 - cmp r4,r12 + laol SCRATCH_REG,INT+2,INT_o_2,12 + otoa SCRATCH_REG,INT_o_2,12 + cmp BSTACK_0,SCRATCH_REG beq rmarkr_int_3 - laol r12,CHAR+2,CHAR_o_2,7 - otoa r12,CHAR_o_2,7 - cmp r4,r12 + laol SCRATCH_REG,CHAR+2,CHAR_o_2,7 + otoa SCRATCH_REG,CHAR_o_2,7 + cmp BSTACK_0,SCRATCH_REG beq rmarkr_char_3 blo rmarkr_no_normal_hnf_0 - sub r3,r6,r11 + sub BSTACK_1,ASTACK_0,ASTACK_3 - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r12,r6,#2 - mov r6,#1 - lsl r6,r6,r12 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr SCRATCH_REG,ASTACK_0,#2 + mov ASTACK_0,#1 + lsl ASTACK_0,ASTACK_0,SCRATCH_REG + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - add r6,r4,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 + add ASTACK_0,BSTACK_0,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 b rmarkr_next_node_after_static rmarkr_int_3: - ldr r8,[r6,#4] - cmp r8,#33 + ldr ASTACK_2,[ASTACK_0,#4] + cmp ASTACK_2,#33 bhs rmarkr_next_node - sub r3,r6,r11 + sub BSTACK_1,ASTACK_0,ASTACK_3 - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r12,r6,#2 - mov r6,#1 - lsl r6,r6,r12 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr SCRATCH_REG,ASTACK_0,#2 + mov ASTACK_0,#1 + lsl ASTACK_0,ASTACK_0,SCRATCH_REG + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - lao r12,small_integers,4 - otoa r12,small_integers,4 - add r6,r12,r8,lsl #3 + lao SCRATCH_REG,small_integers,4 + otoa SCRATCH_REG,small_integers,4 + add ASTACK_0,SCRATCH_REG,ASTACK_2,lsl #3 b rmarkr_next_node_after_static rmarkr_char_3: - ldrb r4,[r6,#4] - sub r3,r6,r11 - - and r8,r3,#31*4 - lsr r3,r3,#7 - lsr r12,r8,#2 - mov r8,#1 - lsl r8,r8,r12 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r8 - str r12,[r10,r3,lsl #2] - - lao r12,static_characters,4 - otoa r12,static_characters,4 - add r6,r12,r4,lsl #3 + ldrb BSTACK_0,[ASTACK_0,#4] + sub BSTACK_1,ASTACK_0,ASTACK_3 + + and ASTACK_2,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr SCRATCH_REG,ASTACK_2,#2 + mov ASTACK_2,#1 + lsl ASTACK_2,ASTACK_2,SCRATCH_REG + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + + lao SCRATCH_REG,static_characters,4 + otoa SCRATCH_REG,static_characters,4 + add ASTACK_0,SCRATCH_REG,BSTACK_0,lsl #3 b rmarkr_next_node_after_static rmarkr_no_normal_hnf_0: - laol r12,__ARRAY__+2,__ARRAY___o_2,19 - otoa r12,__ARRAY___o_2,19 - cmp r4,r12 + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,19 + otoa SCRATCH_REG,__ARRAY___o_2,19 + cmp BSTACK_0,SCRATCH_REG bne rmarkr_next_node - ldr r4,[r6,#8] - cmp r4,#0 + ldr BSTACK_0,[ASTACK_0,#8] + cmp BSTACK_0,#0 beq rmarkr_lazy_array - ldrh r3,[r4,#-2+2] - cmp r3,#0 + ldrh BSTACK_1,[BSTACK_0,#-2+2] + cmp BSTACK_1,#0 beq rmarkr_b_array - ldrh r4,[r4,#-2] - cmp r4,#0 + ldrh BSTACK_0,[BSTACK_0,#-2] + cmp BSTACK_0,#0 beq rmarkr_b_array - subs r4,r4,#256 - cmp r3,r4 + subs BSTACK_0,BSTACK_0,#256 + cmp BSTACK_1,BSTACK_0 beq rmarkr_a_record_array rmarkr_ab_record_array: - ldr r7,[r6,#4] - add r6,r6,#8 - str r6,[sp,#-4]! + ldr ASTACK_1,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 + str ASTACK_0,[sp,#-4]! - mul r7,r4,r7 - lsl r7,r7,#2 + mul ASTACK_1,BSTACK_0,ASTACK_1 + lsl ASTACK_1,ASTACK_1,#2 - subs r4,r4,r3 - add r6,r6,#4 - add r7,r7,r6 + subs 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 - mov r4,r3 - ldr r12,[r6,#-4] - mul r4,r12,r4 + ldr ASTACK_0,[sp],#4 + mov BSTACK_0,BSTACK_1 + ldr SCRATCH_REG,[ASTACK_0,#-4] + mul BSTACK_0,SCRATCH_REG,BSTACK_0 b rmarkr_lr_array rmarkr_b_array: - sub r4,r6,r11 - - add r4,r4,#4 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + sub BSTACK_0,ASTACK_0,ASTACK_3 + + add BSTACK_0,BSTACK_0,#4 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] b rmarkr_next_node rmarkr_a_record_array: - ldr r4,[r6,#4] - add r6,r6,#8 - cmp r3,#2 + ldr BSTACK_0,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 + cmp BSTACK_1,#2 blo rmarkr_lr_array - mul r4,r3,r4 + mul BSTACK_0,BSTACK_1,BSTACK_0 b rmarkr_lr_array rmarkr_lazy_array: - ldr r4,[r6,#4] - add r6,r6,#8 + ldr BSTACK_0,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 rmarkr_lr_array: - sub r3,r6,r11 - lsr r3,r3,#2 - add r3,r3,r4 - - lsr r7,r3,#5 - and r3,r3,#31 - mov r12,#1 - lsl r3,r12,r3 - ldr r12,[r10,r7,lsl #2] - orr r12,r12,r3 - str r12,[r10,r7,lsl #2] - - cmp r4,#1 + sub BSTACK_1,ASTACK_0,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + add BSTACK_1,BSTACK_1,BSTACK_0 + + lsr ASTACK_1,BSTACK_1,#5 + and BSTACK_1,BSTACK_1,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_1,SCRATCH_REG,BSTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_1 + str SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + + cmp BSTACK_0,#1 bls rmarkr_array_length_0_1 - mov r7,r6 - add r6,r6,r4,lsl #2 - - ldr r4,[r6] - ldr r3,[r7] - str r4,[r7] - str r3,[r6] - - ldr r4,[r6,#-4] - subs r6,r6,#4 - add r4,r4,#2 - ldr r3,[r7,#-4] - subs r7,r7,#4 - str r3,[r6] - str r4,[r7] - - ldr r4,[r6,#-4] - subs r6,r6,#4 - str r9,[r6] - mov r9,r6 - mov r6,r4 + mov ASTACK_1,ASTACK_0 + add ASTACK_0,ASTACK_0,BSTACK_0,lsl #2 + + ldr BSTACK_0,[ASTACK_0] + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + str BSTACK_1,[ASTACK_0] + + ldr BSTACK_0,[ASTACK_0,#-4] + subs ASTACK_0,ASTACK_0,#4 + add BSTACK_0,BSTACK_0,#2 + ldr BSTACK_1,[ASTACK_1,#-4] + subs ASTACK_1,ASTACK_1,#4 + str BSTACK_1,[ASTACK_0] + str BSTACK_0,[ASTACK_1] + + ldr BSTACK_0,[ASTACK_0,#-4] + subs ASTACK_0,ASTACK_0,#4 + str ASTACK_PTR,[ASTACK_0] + mov ASTACK_PTR,ASTACK_0 + mov ASTACK_0,BSTACK_0 b rmarkr_node rmarkr_array_length_0_1: - add r6,r6,#-8 + add ASTACK_0,ASTACK_0,#-8 blo rmarkr_next_node - ldr r3,[r6,#12] - ldr r8,[r6,#8] - str r8,[r6,#12] - ldr r8,[r6,#4] - str r8,[r6,#8] - str r3,[r6,#4] - add r6,r6,#4 + ldr BSTACK_1,[ASTACK_0,#12] + ldr ASTACK_2,[ASTACK_0,#8] + str ASTACK_2,[ASTACK_0,#12] + ldr ASTACK_2,[ASTACK_0,#4] + str ASTACK_2,[ASTACK_0,#8] + str BSTACK_1,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#4 b rmarkr_hnf_1 @ a2: free rmarkr_parent: - and r3,r9,#3 + and BSTACK_1,ASTACK_PTR,#3 - bics r9,r9,#3 + bics ASTACK_PTR,ASTACK_PTR,#3 beq end_rmarkr - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 beq rmarkr_argument_part_parent - ldr r8,[r9] + ldr ASTACK_2,[ASTACK_PTR] - cmp r6,r9 + cmp ASTACK_0,ASTACK_PTR bhi rmarkr_no_reverse_2 - mov r7,r6 - add r4,r9,#1 - ldr r6,[r7] - str r4,[r7] + mov ASTACK_1,ASTACK_0 + add BSTACK_0,ASTACK_PTR,#1 + ldr ASTACK_0,[ASTACK_1] + str BSTACK_0,[ASTACK_1] rmarkr_no_reverse_2: - str r6,[r9] - add r6,r9,#-4 - mov r9,r8 + str ASTACK_0,[ASTACK_PTR] + add ASTACK_0,ASTACK_PTR,#-4 + mov ASTACK_PTR,ASTACK_2 b rmarkr_next_node rmarkr_argument_part_parent: - ldr r8,[r9] + ldr ASTACK_2,[ASTACK_PTR] - mov r7,r9 - mov r9,r6 - mov r6,r7 + mov ASTACK_1,ASTACK_PTR + mov ASTACK_PTR,ASTACK_0 + mov ASTACK_0,ASTACK_1 rmarkr_skip_upward_pointers: - mov r4,r8 - and r4,r4,#3 - cmp r4,#3 + mov BSTACK_0,ASTACK_2 + and BSTACK_0,BSTACK_0,#3 + cmp BSTACK_0,#3 bne rmarkr_no_upward_pointer - add r7,r8,#-3 - ldr r8,[r8,#-3] + add ASTACK_1,ASTACK_2,#-3 + ldr ASTACK_2,[ASTACK_2,#-3] b rmarkr_skip_upward_pointers rmarkr_no_upward_pointer: - cmp r9,r6 + cmp ASTACK_PTR,ASTACK_0 bhi rmarkr_no_reverse_3 - mov r3,r9 - ldr r9,[r9] - add r4,r6,#1 - str r4,[r3] + mov BSTACK_1,ASTACK_PTR + ldr ASTACK_PTR,[ASTACK_PTR] + add BSTACK_0,ASTACK_0,#1 + str BSTACK_0,[BSTACK_1] rmarkr_no_reverse_3: - str r9,[r7] - add r9,r8,#-4 + str ASTACK_PTR,[ASTACK_1] + add ASTACK_PTR,ASTACK_2,#-4 - and r9,r9,#-4 + and ASTACK_PTR,ASTACK_PTR,#-4 - mov r7,r9 - mov r3,#3 + mov ASTACK_1,ASTACK_PTR + mov BSTACK_1,#3 - ldr r8,[r9] + ldr ASTACK_2,[ASTACK_PTR] - and r3,r3,r8 - ldr r4,[r7,#4] + and BSTACK_1,BSTACK_1,ASTACK_2 + ldr BSTACK_0,[ASTACK_1,#4] - orr r9,r9,r3 - str r4,[r7] + orr ASTACK_PTR,ASTACK_PTR,BSTACK_1 + str BSTACK_0,[ASTACK_1] - cmp r6,r7 + cmp ASTACK_0,ASTACK_1 bhi rmarkr_no_reverse_4 - ldr r4,[r6] - str r4,[r7,#4] - add r4,r7,#4+2+1 - str r4,[r6] - mov r6,r8 - and r6,r6,#-4 + ldr BSTACK_0,[ASTACK_0] + str BSTACK_0,[ASTACK_1,#4] + add BSTACK_0,ASTACK_1,#4+2+1 + str BSTACK_0,[ASTACK_0] + mov ASTACK_0,ASTACK_2 + and ASTACK_0,ASTACK_0,#-4 b rmarkr_node rmarkr_no_reverse_4: - str r6,[r7,#4] - mov r6,r8 - and r6,r6,#-4 + str ASTACK_0,[ASTACK_1,#4] + mov ASTACK_0,ASTACK_2 + and ASTACK_0,ASTACK_0,#-4 b rmarkr_node rmarkr_argument_part_cycle1: - ldr r4,[r9,#4] - str r7,[sp,#-4]! + ldr BSTACK_0,[ASTACK_PTR,#4] + str ASTACK_1,[sp,#-4]! rmarkr_skip_pointer_list1: - mov r7,r8 - and r7,r7,#-4 - ldr r8,[r7] - mov r3,#3 - and r3,r3,r8 - cmp r3,#3 + mov ASTACK_1,ASTACK_2 + and ASTACK_1,ASTACK_1,#-4 + ldr ASTACK_2,[ASTACK_1] + mov BSTACK_1,#3 + and BSTACK_1,BSTACK_1,ASTACK_2 + cmp BSTACK_1,#3 beq rmarkr_skip_pointer_list1 - str r4,[r7] - ldr r7,[sp],#4 + str BSTACK_0,[ASTACK_1] + ldr ASTACK_1,[sp],#4 b rmarkr_c_argument_part_cycle1 rmarkr_next_node_after_static: - tst r9,#3 + tst ASTACK_PTR,#3 bne rmarkr_parent_after_static - ldr r8,[r9,#-4] - mov r3,#3 + ldr ASTACK_2,[ASTACK_PTR,#-4] + mov BSTACK_1,#3 - and r3,r3,r8 - subs r9,r9,#4 + and BSTACK_1,BSTACK_1,ASTACK_2 + subs ASTACK_PTR,ASTACK_PTR,#4 - cmp r3,#3 + cmp BSTACK_1,#3 beq rmarkr_argument_part_cycle2 - ldr r4,[r9,#4] - str r4,[r9] + ldr BSTACK_0,[ASTACK_PTR,#4] + str BSTACK_0,[ASTACK_PTR] rmarkr_c_argument_part_cycle2: - str r6,[r9,#4] - mov r6,r8 - orr r9,r9,r3 - eor r6,r6,r3 + str ASTACK_0,[ASTACK_PTR,#4] + mov ASTACK_0,ASTACK_2 + orr ASTACK_PTR,ASTACK_PTR,BSTACK_1 + eor ASTACK_0,ASTACK_0,BSTACK_1 b rmarkr_node rmarkr_parent_after_static: - and r3,r9,#3 + and BSTACK_1,ASTACK_PTR,#3 - ands r9,r9,#-4 + ands ASTACK_PTR,ASTACK_PTR,#-4 beq end_rmarkr_after_static - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 beq rmarkr_argument_part_parent_after_static - ldr r8,[r9] - str r6,[r9] - add r6,r9,#-4 - mov r9,r8 + ldr ASTACK_2,[ASTACK_PTR] + str ASTACK_0,[ASTACK_PTR] + add ASTACK_0,ASTACK_PTR,#-4 + mov ASTACK_PTR,ASTACK_2 b rmarkr_next_node rmarkr_argument_part_parent_after_static: - ldr r8,[r9] + ldr ASTACK_2,[ASTACK_PTR] - mov r7,r9 - mov r9,r6 - mov r6,r7 + mov ASTACK_1,ASTACK_PTR + mov ASTACK_PTR,ASTACK_0 + mov ASTACK_0,ASTACK_1 @ movl (a1),a2 rmarkr_skip_upward_pointers_2: - mov r4,r8 - and r4,r4,#3 - cmp r4,#3 + mov BSTACK_0,ASTACK_2 + and BSTACK_0,BSTACK_0,#3 + cmp BSTACK_0,#3 bne rmarkr_no_reverse_3 @ movl a2,a1 @ andl $-4,a1 @ movl (a1),a2 - add r7,r8,#-3 - ldr r8,[r8,#-3] + add ASTACK_1,ASTACK_2,#-3 + ldr ASTACK_2,[ASTACK_2,#-3] b rmarkr_skip_upward_pointers_2 rmarkr_argument_part_cycle2: - ldr r4,[r9,#4] - str r7,[sp,#-4]! + ldr BSTACK_0,[ASTACK_PTR,#4] + str ASTACK_1,[sp,#-4]! rmarkr_skip_pointer_list2: - mov r7,r8 - and r7,r7,#-4 - ldr r8,[r7] - mov r3,#3 - and r3,r3,r8 - cmp r3,#3 + mov ASTACK_1,ASTACK_2 + and ASTACK_1,ASTACK_1,#-4 + ldr ASTACK_2,[ASTACK_1] + mov BSTACK_1,#3 + and BSTACK_1,BSTACK_1,ASTACK_2 + cmp BSTACK_1,#3 beq rmarkr_skip_pointer_list2 - str r4,[r7] - ldr r7,[sp],#4 + str BSTACK_0,[ASTACK_1] + ldr ASTACK_1,[sp],#4 b rmarkr_c_argument_part_cycle2 end_rmarkr_after_static: - ldr r9,[sp] + ldr ASTACK_PTR,[sp] add sp,sp,#8 - str r6,[r9] + str ASTACK_0,[ASTACK_PTR] b rmarkr_next_stack_node end_rmarkr: - ldr r9,[sp],#4 - ldr r3,[sp],#4 + ldr ASTACK_PTR,[sp],#4 + ldr BSTACK_1,[sp],#4 - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bhi rmark_no_reverse_4 - mov r7,r6 - add r4,r9,#1 - ldr r6,[r6] - str r4,[r7] + mov ASTACK_1,ASTACK_0 + add BSTACK_0,ASTACK_PTR,#1 + ldr ASTACK_0,[ASTACK_0] + str BSTACK_0,[ASTACK_1] rmark_no_reverse_4: - str r6,[r9] + str ASTACK_0,[ASTACK_PTR] rmarkr_next_stack_node: - cmp sp,r0 + cmp sp,BSTACK_4 bhs rmark_next_node - ldr r6,[sp] - ldr r9,[sp,#4] + ldr ASTACK_0,[sp] + ldr ASTACK_PTR,[sp,#4] add sp,sp,#8 - cmp r6,#1 + cmp ASTACK_0,#1 bhi rmark_using_reversal b rmark_next_node_ -- cgit v1.2.3