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_rmark.s | 1145 ++++++++++++++++++++++++------------------------- 1 file changed, 572 insertions(+), 573 deletions(-) (limited to 'thumb2compact_rmark.s') diff --git a/thumb2compact_rmark.s b/thumb2compact_rmark.s index 8680086..ab0ab1b 100644 --- a/thumb2compact_rmark.s +++ b/thumb2compact_rmark.s @@ -1,359 +1,358 @@ - ZERO_ARITY_DESCRIPTOR_OFFSET = -4 rmark_stack_nodes1: - ldr r3,[r6] - add r4,r9,#1 - str r3,[r9] - str r4,[r6] + ldr BSTACK_1,[ASTACK_0] + add BSTACK_0,ASTACK_PTR,#1 + str BSTACK_1,[ASTACK_PTR] + str BSTACK_0,[ASTACK_0] rmark_next_stack_node: - add r9,r9,#4 + add ASTACK_PTR,ASTACK_PTR,#4 rmark_stack_nodes: - lao r12,end_vector,16 - ldo r12,r12,end_vector,16 - cmp r9,r12 + lao SCRATCH_REG,end_vector,16 + ldo SCRATCH_REG,SCRATCH_REG,end_vector,16 + cmp ASTACK_PTR,SCRATCH_REG beq end_rmark_nodes rmark_more_stack_nodes: - ldr r6,[r9] + ldr ASTACK_0,[ASTACK_PTR] - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_stack_node - 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 rmark_stack_nodes1 - 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] - ands lr,r6,#1 + ands lr,ASTACK_0,#1 it eq - ldreq r4,[r6] + ldreq BSTACK_0,[ASTACK_0] it ne - ldrne r4,[r6,#-1] + ldrne BSTACK_0,[ASTACK_0,#-1] .align add lr,pc,#9 str lr,[sp,#-4]! bl rmark_stack_node - add r9,r9,#4 - lao r12,end_vector,17 - ldo r12,r12,end_vector,17 - cmp r9,r12 + add ASTACK_PTR,ASTACK_PTR,#4 + lao SCRATCH_REG,end_vector,17 + ldo SCRATCH_REG,SCRATCH_REG,end_vector,17 + cmp ASTACK_PTR,SCRATCH_REG bne rmark_more_stack_nodes ldr pc,[sp],#4 rmark_stack_node: subs sp,sp,#8 - str r4,[r9] - add r8,r9,#1 - str r9,[sp,#4] - mov r3,#-1 - mov r12,#0 - str r12,[sp] - str r8,[r6] + str BSTACK_0,[ASTACK_PTR] + add ASTACK_2,ASTACK_PTR,#1 + str ASTACK_PTR,[sp,#4] + mov BSTACK_1,#-1 + mov SCRATCH_REG,#0 + str SCRATCH_REG,[sp] + str ASTACK_2,[ASTACK_0] b rmark_no_reverse rmark_node_d1: - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_node b rmark_node_ rmark_hnf_2: - add r3,r6,#4 - ldr r4,[r6,#4] + add BSTACK_1,ASTACK_0,#4 + ldr BSTACK_0,[ASTACK_0,#4] sub sp,sp,#8 - mov r9,r6 - ldr r6,[r6] + mov ASTACK_PTR,ASTACK_0 + ldr ASTACK_0,[ASTACK_0] - str r3,[sp,#4] - str r4,[sp] + str BSTACK_1,[sp,#4] + str BSTACK_0,[sp] - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_using_reversal rmark_node: - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_node - mov r3,r9 + mov BSTACK_1,ASTACK_PTR rmark_node_: - lsr r7,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - ldr r8,[r10,r7,lsl #2] - mov r12,#1 - lsl r4,r12,r4 - tst r8,r4 + lsr ASTACK_1,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + ldr ASTACK_2,[HEAP_PTR,ASTACK_1,lsl #2] + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + tst ASTACK_2,BSTACK_0 bne rmark_reverse_and_mark_next_node - orr r8,r8,r4 - str r8,[r10,r7,lsl #2] + orr ASTACK_2,ASTACK_2,BSTACK_0 + str ASTACK_2,[HEAP_PTR,ASTACK_1,lsl #2] - ldr r4,[r6] + ldr BSTACK_0,[ASTACK_0] rmark_arguments: - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bhi rmark_no_reverse - add r8,r9,#1 - str r4,[r9] - str r8,[r6] + add ASTACK_2,ASTACK_PTR,#1 + str BSTACK_0,[ASTACK_PTR] + str ASTACK_2,[ASTACK_0] rmark_no_reverse: - tst r4,#2 + tst BSTACK_0,#2 beq rmark_lazy_node - ldrh r8,[r4,#-2] - tst r8,r8 + ldrh ASTACK_2,[BSTACK_0,#-2] + tst ASTACK_2,ASTACK_2 beq rmark_hnf_0 - add r6,r6,#4 + add ASTACK_0,ASTACK_0,#4 - cmp r8,#256 + cmp ASTACK_2,#256 bhs rmark_record - subs r8,r8,#2 + subs ASTACK_2,ASTACK_2,#2 beq rmark_hnf_2 bcc rmark_hnf_1 rmark_hnf_3: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] rmark_hnf_3_: - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_using_reversal_ - 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 rmark_shared_argument_part - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r4 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] rmark_no_shared_argument_part: subs sp,sp,#8 - str r6,[sp,#4] - add r9,r6,#4 - ldr r6,[r6] - add r7,r7,r8,lsl #2 - str r6,[sp] + str ASTACK_0,[sp,#4] + add ASTACK_PTR,ASTACK_0,#4 + ldr ASTACK_0,[ASTACK_0] + add ASTACK_1,ASTACK_1,ASTACK_2,lsl #2 + str ASTACK_0,[sp] rmark_push_hnf_args: - ldr r3,[r7] + ldr BSTACK_1,[ASTACK_1] subs sp,sp,#8 - str r7,[sp,#4] - subs r7,r7,#4 - str r3,[sp] + str ASTACK_1,[sp,#4] + subs ASTACK_1,ASTACK_1,#4 + str BSTACK_1,[sp] - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 bgt rmark_push_hnf_args - ldr r6,[r7] + ldr ASTACK_0,[ASTACK_1] - cmp r7,r9 + cmp ASTACK_1,ASTACK_PTR bhi rmark_no_reverse_argument_pointer - add r8,r9,#3 - str r6,[r9] - str r8,[r7] + add ASTACK_2,ASTACK_PTR,#3 + str ASTACK_0,[ASTACK_PTR] + str ASTACK_2,[ASTACK_1] - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_node - mov r3,r7 + mov BSTACK_1,ASTACK_1 b rmark_node_ rmark_no_reverse_argument_pointer: - mov r9,r7 + mov ASTACK_PTR,ASTACK_1 b rmark_node rmark_shared_argument_part: - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 bhi rmark_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 rmark_hnf_1 rmark_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 rmark_record_2 blo rmark_record_1 rmark_record_3: - ldrh r8,[r4,#-2+2] - ldr r7,[r6,#4] - subs r8,r8,#1 + ldrh ASTACK_2,[BSTACK_0,#-2+2] + ldr ASTACK_1,[ASTACK_0,#4] + subs ASTACK_2,ASTACK_2,#1 blo rmark_record_3_bb beq rmark_record_3_ab - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 beq rmark_record_3_aab b rmark_hnf_3_ rmark_record_3_bb: - subs r6,r6,#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 rmark_next_node - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 bne rmark_bit_in_same_word1 - add r8,r8,#1 - mov r4,#1 + add ASTACK_2,ASTACK_2,#1 + mov BSTACK_0,#1 rmark_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 rmark_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] rmark_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 rmark_next_node rmark_record_3_ab: - sub r4,r7,r11 - - 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] - - cmp r7,r6 + sub BSTACK_0,ASTACK_1,ASTACK_3 + + 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 ASTACK_1,ASTACK_0 bhi rmark_hnf_1 - adds r4,r4,r4 + adds BSTACK_0,BSTACK_0,BSTACK_0 bne rmark_bit_in_same_word2 - add r8,r8,#1 - mov r4,#1 + add ASTACK_2,ASTACK_2,#1 + mov BSTACK_0,#1 rmark_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 rmark_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 + 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 r12,[r10,r8,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] rmark_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 rmark_hnf_1 rmark_record_3_aab: - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_using_reversal_ - 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 rmark_shared_argument_part - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + 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] subs sp,sp,#8 - str r6,[sp,#4] - add r9,r6,#4 - ldr r6,[r6] - str r6,[sp] + str ASTACK_0,[sp,#4] + add ASTACK_PTR,ASTACK_0,#4 + ldr ASTACK_0,[ASTACK_0] + str ASTACK_0,[sp] - ldr r6,[r7] + ldr ASTACK_0,[ASTACK_1] - cmp r7,r9 + cmp ASTACK_1,ASTACK_PTR bhi rmark_no_reverse_argument_pointer - add r8,r9,#3 - str r6,[r9] - str r8,[r7] + add ASTACK_2,ASTACK_PTR,#3 + str ASTACK_0,[ASTACK_PTR] + str ASTACK_2,[ASTACK_1] - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_node - mov r3,r7 + mov BSTACK_1,ASTACK_1 b rmark_node_ rmark_record_2: - ldrh r12,[r4,#-2+2] - cmp r12,#1 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#1 bhi rmark_hnf_2 beq rmark_hnf_1 b rmark_next_node rmark_record_1: - ldrh r12,[r4,#-2+2] - cmp r12,#0 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#0 bne rmark_hnf_1 b rmark_next_node @@ -362,339 +361,339 @@ rmark_lazy_node_1: bne rmark_selector_node_1 rmark_hnf_1: - mov r9,r6 - ldr r6,[r6] + mov ASTACK_PTR,ASTACK_0 + ldr ASTACK_0,[ASTACK_0] b rmark_node @ selectors rmark_indirection_node: - subs r6,r6,#4 - sub r7,r6,r11 - - and r8,r7,#31*4 - lsr r7,r7,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - ldr r12,[r10,r7,lsl #2] - bic r12,r12,r8 - str r12,[r10,r7,lsl #2] - - mov r7,r6 - cmp r6,r3 - ldr r6,[r6,#4] - str r6,[r9] + subs ASTACK_0,ASTACK_0,#4 + sub ASTACK_1,ASTACK_0,ASTACK_3 + + and ASTACK_2,ASTACK_1,#31*4 + lsr ASTACK_1,ASTACK_1,#7 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + + mov ASTACK_1,ASTACK_0 + cmp ASTACK_0,BSTACK_1 + ldr ASTACK_0,[ASTACK_0,#4] + str ASTACK_0,[ASTACK_PTR] bhi rmark_node_d1 - str r4,[r7] + str BSTACK_0,[ASTACK_1] b rmark_node_d1 rmark_selector_node_1: - cmp r8,#(-2)-1 + cmp ASTACK_2,#(-2)-1 beq rmark_indirection_node - ldr r7,[r6] - mov r1,r3 + ldr ASTACK_1,[ASTACK_0] + mov BSTACK_3,BSTACK_1 - 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 rmark_record_selector_node_1 - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmark_hnf_1 - ldrh r12,[r3,#-2] - cmp r12,#2 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + cmp SCRATCH_REG,#2 bls rmark_small_tuple_or_record rmark_large_tuple_or_record: - ldr r3,[r7,#8] - sub r3,r3,r11 - lsr r3,r3,#2 - - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_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 - mov r3,r1 + mov BSTACK_1,BSTACK_3 - cmp r4,#8 + cmp BSTACK_0,#8 blt rmark_tuple_or_record_selector_node_2 - ldr r7,[r7,#8] + ldr ASTACK_1,[ASTACK_1,#8] beq rmark_tuple_selector_node_2 - add r6,r4,#-12 - ldr r6,[r7,r6] - ldr r7,[sp],#4 - str r6,[r9] - lao r12,e__system__nind,17 - otoa r12,e__system__nind,17 - str r12,[r7,#-4] - str r6,[r7] + add ASTACK_0,BSTACK_0,#-12 + ldr ASTACK_0,[ASTACK_1,ASTACK_0] + ldr ASTACK_1,[sp],#4 + str ASTACK_0,[ASTACK_PTR] + lao SCRATCH_REG,e__system__nind,17 + otoa SCRATCH_REG,e__system__nind,17 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmark_node_d1 rmark_tuple_selector_node_2: - ldr r6,[r7] - ldr r7,[sp],#4 - str r6,[r9] - lao r12,e__system__nind,18 - otoa r12,e__system__nind,18 - str r12,[r7,#-4] - str r6,[r7] + ldr ASTACK_0,[ASTACK_1] + ldr ASTACK_1,[sp],#4 + str ASTACK_0,[ASTACK_PTR] + lao SCRATCH_REG,e__system__nind,18 + otoa SCRATCH_REG,e__system__nind,18 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmark_node_d1 rmark_record_selector_node_1: beq rmark_strict_record_selector_node_1 - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmark_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 rmark_small_tuple_or_record - ldr r3,[r7,#8] - sub r3,r3,r11 - lsr r3,r3,#2 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 rmark_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 - mov r3,r1 + mov BSTACK_1,BSTACK_3 - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_tuple_or_record_selector_node_2 - ldr r7,[r7,#8] - subs r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + subs BSTACK_0,BSTACK_0,#12 rmark_tuple_or_record_selector_node_2: - ldr r6,[r7,r4] - ldr r7,[sp],#4 - str r6,[r9] - lao r12,e__system__nind,19 - otoa r12,e__system__nind,19 - str r12,[r7,#-4] - str r6,[r7] + ldr ASTACK_0,[ASTACK_1,BSTACK_0] + ldr ASTACK_1,[sp],#4 + str ASTACK_0,[ASTACK_PTR] + lao SCRATCH_REG,e__system__nind,19 + otoa SCRATCH_REG,e__system__nind,19 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmark_node_d1 rmark_strict_record_selector_node_1: - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmark_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 rmark_select_from_small_record - ldr r3,[r7,#8] - sub r3,r3,r11 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 - and r8,r3,#31*4 - lsr r3,r3,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 rmark_select_from_small_record: - ldr r3,[r4,#-8] + ldr BSTACK_1,[BSTACK_0,#-8] .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - subs r6,r6,#4 + subs ASTACK_0,ASTACK_0,#4 - cmp r6,r1 + cmp ASTACK_0,BSTACK_3 bhi rmark_selector_pointer_not_reversed .ifdef PIC - ldrh r4,[r3,r12]! + ldrh BSTACK_0,[BSTACK_1,SCRATCH_REG]! .else - ldrh r4,[r3,#4] + ldrh BSTACK_0,[BSTACK_1,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_2 - ldr r12,[r7,#8] - add r4,r4,r12 - ldr r4,[r4,#-12] + ldr SCRATCH_REG,[ASTACK_1,#8] + add BSTACK_0,BSTACK_0,SCRATCH_REG + ldr BSTACK_0,[BSTACK_0,#-12] b rmark_strict_record_selector_node_3 rmark_strict_record_selector_node_2: - ldr r4,[r7,r4] + ldr BSTACK_0,[ASTACK_1,BSTACK_0] rmark_strict_record_selector_node_3: - str r4,[r6,#4] + str BSTACK_0,[ASTACK_0,#4] .ifdef PIC - ldrh r4,[r3,#6-4] + ldrh BSTACK_0,[BSTACK_1,#6-4] .else - ldrh r4,[r3,#6] + ldrh BSTACK_0,[BSTACK_1,#6] .endif - tst r4,r4 + tst BSTACK_0,BSTACK_0 beq rmark_strict_record_selector_node_5 - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_4 - ldr r7,[r7,#8] - sub r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + sub BSTACK_0,BSTACK_0,#12 rmark_strict_record_selector_node_4: - ldr r4,[r7,r4] - str r4,[r6,#8] + ldr BSTACK_0,[ASTACK_1,BSTACK_0] + str BSTACK_0,[ASTACK_0,#8] rmark_strict_record_selector_node_5: .ifdef PIC - ldr r4,[r3,#-4-4] + ldr BSTACK_0,[BSTACK_1,#-4-4] .else - ldr r4,[r3,#-4] + ldr BSTACK_0,[BSTACK_1,#-4] .endif - add r9,r9,#1 - str r9,[r6] - str r4,[r9,#-1] + add ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[ASTACK_0] + str BSTACK_0,[ASTACK_PTR,#-1] b rmark_next_node rmark_selector_pointer_not_reversed: .ifdef PIC - ldrh r4,[r3,r12]! + ldrh BSTACK_0,[BSTACK_1,SCRATCH_REG]! .else - ldrh r4,[r3,#4] + ldrh BSTACK_0,[BSTACK_1,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_6 - ldr r12,[r7,#8] - add r4,r4,r12 - ldr r4,[r4,#-12] + ldr SCRATCH_REG,[ASTACK_1,#8] + add BSTACK_0,BSTACK_0,SCRATCH_REG + ldr BSTACK_0,[BSTACK_0,#-12] b rmark_strict_record_selector_node_7 rmark_strict_record_selector_node_6: - ldr r4,[r7,r4] + ldr BSTACK_0,[ASTACK_1,BSTACK_0] rmark_strict_record_selector_node_7: - str r4,[r6,#4] + str BSTACK_0,[ASTACK_0,#4] .ifdef PIC - ldrh r4,[r3,#6-4] + ldrh BSTACK_0,[BSTACK_1,#6-4] .else - ldrh r4,[r3,#6] + ldrh BSTACK_0,[BSTACK_1,#6] .endif - tst r4,r4 + tst BSTACK_0,BSTACK_0 beq rmark_strict_record_selector_node_9 - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_8 - ldr r7,[r7,#8] - subs r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + subs BSTACK_0,BSTACK_0,#12 rmark_strict_record_selector_node_8: - ldr r4,[r7,r4] - str r4,[r6,#8] + ldr BSTACK_0,[ASTACK_1,BSTACK_0] + str BSTACK_0,[ASTACK_0,#8] rmark_strict_record_selector_node_9: .ifdef PIC - ldr r4,[r3,#-4-4] + ldr BSTACK_0,[BSTACK_1,#-4-4] .else - ldr r4,[r3,#-4] + ldr BSTACK_0,[BSTACK_1,#-4] .endif - str r4,[r6] + str BSTACK_0,[ASTACK_0] b rmark_next_node rmark_reverse_and_mark_next_node: - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bhi rmark_next_node - ldr r4,[r6] - str r4,[r9] - add r9,r9,#1 - str r9,[r6] + ldr BSTACK_0,[ASTACK_0] + str BSTACK_0,[ASTACK_PTR] + add ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[ASTACK_0] @ a2,d1: free 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_node rmark_next_node_: @@ -702,33 +701,33 @@ end_rmark_nodes: ldr pc,[sp],#4 rmark_lazy_node: - ldr r8,[r4,#-5] - cmp r8,#0 + ldr ASTACK_2,[BSTACK_0,#-5] + cmp ASTACK_2,#0 beq rmark_next_node - add r6,r6,#4 + add ASTACK_0,ASTACK_0,#4 - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 ble rmark_lazy_node_1 - cmp r8,#255 + cmp ASTACK_2,#255 bge rmark_closure_with_unboxed_arguments rmark_closure_with_unboxed_arguments_: - add r6,r6,r8,lsl #2 + add ASTACK_0,ASTACK_0,ASTACK_2,lsl #2 rmark_push_lazy_args: - ldr r3,[r6] + ldr BSTACK_1,[ASTACK_0] sub sp,sp,#8 - str r6,[sp,#4] - sub r6,r6,#4 - str r3,[sp] - subs r8,r8,#1 + str ASTACK_0,[sp,#4] + sub ASTACK_0,ASTACK_0,#4 + str BSTACK_1,[sp] + subs ASTACK_2,ASTACK_2,#1 bgt rmark_push_lazy_args - mov r9,r6 - ldr r6,[r6] - cmp sp,r0 + mov ASTACK_PTR,ASTACK_0 + ldr ASTACK_0,[ASTACK_0] + cmp sp,BSTACK_4 bhs rmark_node b rmark_using_reversal @@ -736,247 +735,247 @@ rmark_push_lazy_args: rmark_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 rmark_closure_with_unboxed_arguments_ beq rmark_hnf_1 b rmark_next_node rmark_hnf_0: - laol r12,INT+2,INT_o_2,11 - otoa r12,INT_o_2,11 - cmp r4,r12 + laol SCRATCH_REG,INT+2,INT_o_2,11 + otoa SCRATCH_REG,INT_o_2,11 + cmp BSTACK_0,SCRATCH_REG beq rmark_int_3 - laol r12,CHAR+2,CHAR_o_2,6 - otoa r12,CHAR_o_2,6 - cmp r4,r12 + laol SCRATCH_REG,CHAR+2,CHAR_o_2,6 + otoa SCRATCH_REG,CHAR_o_2,6 + cmp BSTACK_0,SCRATCH_REG beq rmark_char_3 blo rmark_no_normal_hnf_0 - sub r8,r6,r11 + sub ASTACK_2,ASTACK_0,ASTACK_3 - and r7,r8,#31*4 - lsr r8,r8,#7 - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - ldr r12,[r10,r8,lsl #2] - bic r12,r12,r7 - str r12,[r10,r8,lsl #2] + and ASTACK_1,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#7 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - add r7,r4,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 - str r7,[r9] - cmp r6,r3 + add ASTACK_1,BSTACK_0,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 + str ASTACK_1,[ASTACK_PTR] + cmp ASTACK_0,BSTACK_1 bhi rmark_next_node - str r4,[r6] + str BSTACK_0,[ASTACK_0] b rmark_next_node rmark_int_3: - ldr r8,[r6,#4] - cmp r8,#33 + ldr ASTACK_2,[ASTACK_0,#4] + cmp ASTACK_2,#33 bcs rmark_next_node - lao r12,small_integers,3 - otoa r12,small_integers,3 - add r7,r12,r8,lsl #3 - str r7,[r9] - sub r8,r6,r11 - - and r7,r8,#31*4 - lsr r8,r8,#7 - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - ldr r12,[r10,r8,lsl #2] - bic r12,r12,r7 - str r12,[r10,r8,lsl #2] - - cmp r6,r3 + lao SCRATCH_REG,small_integers,3 + otoa SCRATCH_REG,small_integers,3 + add ASTACK_1,SCRATCH_REG,ASTACK_2,lsl #3 + str ASTACK_1,[ASTACK_PTR] + sub ASTACK_2,ASTACK_0,ASTACK_3 + + and ASTACK_1,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#7 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + + cmp ASTACK_0,BSTACK_1 bhi rmark_next_node - str r4,[r6] + str BSTACK_0,[ASTACK_0] b rmark_next_node rmark_char_3: - ldrb r7,[r6,#4] + ldrb ASTACK_1,[ASTACK_0,#4] - lao r12,static_characters,3 - otoa r12,static_characters,3 - add r7,r12,r7,lsl #3 - sub r8,r6,r11 + lao SCRATCH_REG,static_characters,3 + otoa SCRATCH_REG,static_characters,3 + add ASTACK_1,SCRATCH_REG,ASTACK_1,lsl #3 + sub ASTACK_2,ASTACK_0,ASTACK_3 - str r7,[r9] + str ASTACK_1,[ASTACK_PTR] - and r7,r8,#31*4 - lsr r8,r8,#7 - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - ldr r12,[r10,r8,lsl #2] - bic r12,r12,r7 - str r12,[r10,r8,lsl #2] + and ASTACK_1,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#7 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bhi rmark_next_node - str r4,[r6] + str BSTACK_0,[ASTACK_0] b rmark_next_node rmark_no_normal_hnf_0: - laol r12,__ARRAY__+2,__ARRAY___o_2,17 - otoa r12,__ARRAY___o_2,17 - cmp r4,r12 + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,17 + otoa SCRATCH_REG,__ARRAY___o_2,17 + cmp BSTACK_0,SCRATCH_REG bne rmark_next_node - ldr r4,[r6,#8] - tst r4,r4 + ldr BSTACK_0,[ASTACK_0,#8] + tst BSTACK_0,BSTACK_0 beq rmark_lazy_array - ldrh r7,[r4,#-3+2] - tst r7,r7 + ldrh ASTACK_1,[BSTACK_0,#-3+2] + tst ASTACK_1,ASTACK_1 beq rmark_b_array - ldrh r4,[r4,#-3] - tst r4,r4 + ldrh BSTACK_0,[BSTACK_0,#-3] + tst BSTACK_0,BSTACK_0 beq rmark_b_array - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_array_using_reversal - subs r4,r4,#256 - cmp r7,r4 - mov r3,r7 + subs BSTACK_0,BSTACK_0,#256 + cmp ASTACK_1,BSTACK_0 + mov BSTACK_1,ASTACK_1 beq rmark_a_record_array rmark_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 rmark_lr_array rmark_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 rmark_next_node rmark_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 rmark_lr_array - mul r4,r3,r4 + mul BSTACK_0,BSTACK_1,BSTACK_0 b rmark_lr_array rmark_lazy_array: - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_array_using_reversal - ldr r4,[r6,#4] - add r6,r6,#8 + ldr BSTACK_0,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 rmark_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 rmark_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]! - ldr r3,[r7,#-4]! - str r3,[r6] - str r4,[r7] - str r6,[sp,#-4]! - mov r9,r7 + 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]! + ldr BSTACK_1,[ASTACK_1,#-4]! + str BSTACK_1,[ASTACK_0] + str BSTACK_0,[ASTACK_1] + str ASTACK_0,[sp,#-4]! + mov ASTACK_PTR,ASTACK_1 b rmark_array_nodes rmark_array_nodes1: - cmp r6,r9 + cmp ASTACK_0,ASTACK_PTR bhi rmark_next_array_node - ldr r3,[r6] - add r4,r9,#1 - str r3,[r9] - str r4,[r6] + ldr BSTACK_1,[ASTACK_0] + add BSTACK_0,ASTACK_PTR,#1 + str BSTACK_1,[ASTACK_PTR] + str BSTACK_0,[ASTACK_0] rmark_next_array_node: - add r9,r9,#4 - ldr r12,[sp] - cmp r9,r12 + add ASTACK_PTR,ASTACK_PTR,#4 + ldr SCRATCH_REG,[sp] + cmp ASTACK_PTR,SCRATCH_REG beq end_rmark_array_node rmark_array_nodes: - ldr r6,[r9] + ldr ASTACK_0,[ASTACK_PTR] - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_array_node - 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 rmark_array_nodes1 - 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] - ldr r4,[r6] + ldr BSTACK_0,[ASTACK_0] .align add lr,pc,#9 str lr,[sp,#-4]! bl rmark_array_node - add r9,r9,#4 - ldr r12,[sp] - cmp r9,r12 + add ASTACK_PTR,ASTACK_PTR,#4 + ldr SCRATCH_REG,[sp] + cmp ASTACK_PTR,SCRATCH_REG bne rmark_array_nodes end_rmark_array_node: @@ -985,23 +984,23 @@ end_rmark_array_node: rmark_array_node: sub sp,sp,#8 - str r9,[sp,#4] - mov r3,r9 - mov r12,#1 - str r12,[sp] + str ASTACK_PTR,[sp,#4] + mov BSTACK_1,ASTACK_PTR + mov SCRATCH_REG,#1 + str SCRATCH_REG,[sp] b rmark_arguments rmark_array_length_0_1: - add r6,r6,#-8 + add ASTACK_0,ASTACK_0,#-8 blo rmark_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 rmark_hnf_1 .ifdef PIC -- cgit v1.2.3