ZERO_ARITY_DESCRIPTOR_OFFSET = -4 rmark_stack_nodes1: 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 ASTACK_PTR,ASTACK_PTR,#4 rmark_stack_nodes: 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 ASTACK_0,[ASTACK_PTR] sub BSTACK_0,ASTACK_0,ASTACK_3 cmp BSTACK_0,BSTACK_2 bcs rmark_next_stack_node 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 ASTACK_2,ASTACK_2,BSTACK_0 str ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] ands lr,ASTACK_0,#1 it eq ldreq BSTACK_0,[ASTACK_0] it ne ldrne BSTACK_0,[ASTACK_0,#-1] .align add lr,pc,#9 str lr,[sp,#-4]! bl rmark_stack_node 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 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 BSTACK_0,ASTACK_0,ASTACK_3 cmp BSTACK_0,BSTACK_2 bcs rmark_next_node b rmark_node_ rmark_hnf_2: add BSTACK_1,ASTACK_0,#4 ldr BSTACK_0,[ASTACK_0,#4] sub sp,sp,#8 mov ASTACK_PTR,ASTACK_0 ldr ASTACK_0,[ASTACK_0] str BSTACK_1,[sp,#4] str BSTACK_0,[sp] cmp sp,BSTACK_4 blo rmark_using_reversal rmark_node: sub BSTACK_0,ASTACK_0,ASTACK_3 cmp BSTACK_0,BSTACK_2 bcs rmark_next_node mov BSTACK_1,ASTACK_PTR rmark_node_: 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 ASTACK_2,ASTACK_2,BSTACK_0 str ASTACK_2,[HEAP_PTR,ASTACK_1,lsl #2] @ldr BSTACK_0,[ASTACK_0] ands lr,ASTACK_0,#1 it eq ldreq BSTACK_0,[ASTACK_0] it ne ldrne BSTACK_0,[ASTACK_0,#-1] rmark_arguments: cmp ASTACK_0,BSTACK_1 bhi rmark_no_reverse add ASTACK_2,ASTACK_PTR,#1 str BSTACK_0,[ASTACK_PTR] str ASTACK_2,[ASTACK_0] rmark_no_reverse: tst BSTACK_0,#2 beq rmark_lazy_node ldrh ASTACK_2,[BSTACK_0,#-2] tst ASTACK_2,ASTACK_2 beq rmark_hnf_0 add ASTACK_0,ASTACK_0,#4 cmp ASTACK_2,#256 bhs rmark_record subs ASTACK_2,ASTACK_2,#2 beq rmark_hnf_2 bcc rmark_hnf_1 rmark_hnf_3: ldr ASTACK_1,[ASTACK_0,#4] rmark_hnf_3_: cmp sp,BSTACK_4 blo rmark_using_reversal_ sub BSTACK_0,ASTACK_1,ASTACK_3 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 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 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 BSTACK_1,[ASTACK_1] subs sp,sp,#8 str ASTACK_1,[sp,#4] subs ASTACK_1,ASTACK_1,#4 str BSTACK_1,[sp] subs ASTACK_2,ASTACK_2,#1 bgt rmark_push_hnf_args ldr ASTACK_0,[ASTACK_1] cmp ASTACK_1,ASTACK_PTR bhi rmark_no_reverse_argument_pointer add ASTACK_2,ASTACK_PTR,#3 str ASTACK_0,[ASTACK_PTR] str ASTACK_2,[ASTACK_1] sub BSTACK_0,ASTACK_0,ASTACK_3 cmp BSTACK_0,BSTACK_2 bcs rmark_next_node mov BSTACK_1,ASTACK_1 b rmark_node_ rmark_no_reverse_argument_pointer: mov ASTACK_PTR,ASTACK_1 b rmark_node rmark_shared_argument_part: cmp ASTACK_1,ASTACK_0 bhi rmark_hnf_1 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 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 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 ASTACK_2,ASTACK_2,#1 beq rmark_record_3_aab b rmark_hnf_3_ rmark_record_3_bb: subs ASTACK_0,ASTACK_0,#4 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_next_node add BSTACK_0,BSTACK_0,BSTACK_0 bne rmark_bit_in_same_word1 add ASTACK_2,ASTACK_2,#1 mov BSTACK_0,#1 rmark_bit_in_same_word1: ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] tst BSTACK_0,SCRATCH_REG beq rmark_not_yet_linked_bb sub BSTACK_0,ASTACK_0,ASTACK_3 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 SCRATCH_REG,SCRATCH_REG,BSTACK_0 str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] 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 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 BSTACK_0,BSTACK_0,BSTACK_0 bne rmark_bit_in_same_word2 add ASTACK_2,ASTACK_2,#1 mov BSTACK_0,#1 rmark_bit_in_same_word2: ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] tst BSTACK_0,SCRATCH_REG beq rmark_not_yet_linked_ab 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] rmark_not_yet_linked_ab: orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] 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,BSTACK_4 blo rmark_using_reversal_ 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] tst BSTACK_0,SCRATCH_REG bne rmark_shared_argument_part 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 ASTACK_0,[sp,#4] add ASTACK_PTR,ASTACK_0,#4 ldr ASTACK_0,[ASTACK_0] str ASTACK_0,[sp] ldr ASTACK_0,[ASTACK_1] cmp ASTACK_1,ASTACK_PTR bhi rmark_no_reverse_argument_pointer add ASTACK_2,ASTACK_PTR,#3 str ASTACK_0,[ASTACK_PTR] str ASTACK_2,[ASTACK_1] sub BSTACK_0,ASTACK_0,ASTACK_3 cmp BSTACK_0,BSTACK_2 bcs rmark_next_node mov BSTACK_1,ASTACK_1 b rmark_node_ rmark_record_2: 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 SCRATCH_REG,[BSTACK_0,#-2+2] cmp SCRATCH_REG,#0 bne rmark_hnf_1 b rmark_next_node rmark_lazy_node_1: @ selectors: bne rmark_selector_node_1 rmark_hnf_1: mov ASTACK_PTR,ASTACK_0 ldr ASTACK_0,[ASTACK_0] b rmark_node @ selectors rmark_indirection_node: 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 BSTACK_0,[ASTACK_1] b rmark_node_d1 rmark_selector_node_1: cmp ASTACK_2,#(-2)-1 beq rmark_indirection_node ldr ASTACK_1,[ASTACK_0] mov BSTACK_3,BSTACK_1 sub BSTACK_1,ASTACK_1,ASTACK_3 lsr BSTACK_1,BSTACK_1,#2 cmp ASTACK_2,#(-3)-1 ble rmark_record_selector_node_1 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 BSTACK_1,[ASTACK_1] tst BSTACK_1,#2 beq rmark_hnf_1 ldrh SCRATCH_REG,[BSTACK_1,#-2] cmp SCRATCH_REG,#2 bls rmark_small_tuple_or_record rmark_large_tuple_or_record: 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 SCRATCH_REG,ASTACK_0,#-4 sub BSTACK_1,SCRATCH_REG,ASTACK_3 str ASTACK_0,[sp,#-4]! .ifdef PIC add SCRATCH_REG,BSTACK_0,#-8+4 .endif ldr BSTACK_0,[BSTACK_0,#-8] and ASTACK_0,BSTACK_1,#31*4 lsr BSTACK_1,BSTACK_1,#7 lsr ASTACK_0,ASTACK_0,#2 .ifdef PIC ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .endif 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 BSTACK_0,[BSTACK_0,#4] .endif mov BSTACK_1,BSTACK_3 cmp BSTACK_0,#8 blt rmark_tuple_or_record_selector_node_2 ldr ASTACK_1,[ASTACK_1,#8] beq rmark_tuple_selector_node_2 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 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 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 BSTACK_1,[ASTACK_1] tst BSTACK_1,#2 beq rmark_hnf_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 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 rmark_small_tuple_or_record: add SCRATCH_REG,ASTACK_0,#-4 sub BSTACK_1,SCRATCH_REG,ASTACK_3 str ASTACK_0,[sp,#-4]! .ifdef PIC add SCRATCH_REG,BSTACK_0,#-8+4 .endif ldr BSTACK_0,[BSTACK_0,#-8] and ASTACK_0,BSTACK_1,#31*4 lsr BSTACK_1,BSTACK_1,#7 lsr ASTACK_0,ASTACK_0,#2 .ifdef PIC ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .endif 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 BSTACK_0,[BSTACK_0,#4] .endif mov BSTACK_1,BSTACK_3 cmp BSTACK_0,#8 ble rmark_tuple_or_record_selector_node_2 ldr ASTACK_1,[ASTACK_1,#8] subs BSTACK_0,BSTACK_0,#12 rmark_tuple_or_record_selector_node_2: 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 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 BSTACK_1,[ASTACK_1] tst BSTACK_1,#2 beq rmark_hnf_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 BSTACK_1,[ASTACK_1,#8] sub BSTACK_1,BSTACK_1,ASTACK_3 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 BSTACK_1,[BSTACK_0,#-8] .ifdef PIC add SCRATCH_REG,BSTACK_0,#-8+4 .endif subs ASTACK_0,ASTACK_0,#4 cmp ASTACK_0,BSTACK_3 bhi rmark_selector_pointer_not_reversed .ifdef PIC ldrh BSTACK_0,[BSTACK_1,SCRATCH_REG]! .else ldrh BSTACK_0,[BSTACK_1,#4] .endif cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_2 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 BSTACK_0,[ASTACK_1,BSTACK_0] rmark_strict_record_selector_node_3: str BSTACK_0,[ASTACK_0,#4] .ifdef PIC ldrh BSTACK_0,[BSTACK_1,#6-4] .else ldrh BSTACK_0,[BSTACK_1,#6] .endif tst BSTACK_0,BSTACK_0 beq rmark_strict_record_selector_node_5 cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_4 ldr ASTACK_1,[ASTACK_1,#8] sub BSTACK_0,BSTACK_0,#12 rmark_strict_record_selector_node_4: ldr BSTACK_0,[ASTACK_1,BSTACK_0] str BSTACK_0,[ASTACK_0,#8] rmark_strict_record_selector_node_5: .ifdef PIC ldr BSTACK_0,[BSTACK_1,#-4-4] .else ldr BSTACK_0,[BSTACK_1,#-4] .endif 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 BSTACK_0,[BSTACK_1,SCRATCH_REG]! .else ldrh BSTACK_0,[BSTACK_1,#4] .endif cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_6 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 BSTACK_0,[ASTACK_1,BSTACK_0] rmark_strict_record_selector_node_7: str BSTACK_0,[ASTACK_0,#4] .ifdef PIC ldrh BSTACK_0,[BSTACK_1,#6-4] .else ldrh BSTACK_0,[BSTACK_1,#6] .endif tst BSTACK_0,BSTACK_0 beq rmark_strict_record_selector_node_9 cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_8 ldr ASTACK_1,[ASTACK_1,#8] subs BSTACK_0,BSTACK_0,#12 rmark_strict_record_selector_node_8: ldr BSTACK_0,[ASTACK_1,BSTACK_0] str BSTACK_0,[ASTACK_0,#8] rmark_strict_record_selector_node_9: .ifdef PIC ldr BSTACK_0,[BSTACK_1,#-4-4] .else ldr BSTACK_0,[BSTACK_1,#-4] .endif str BSTACK_0,[ASTACK_0] b rmark_next_node rmark_reverse_and_mark_next_node: cmp ASTACK_0,BSTACK_1 bhi rmark_next_node 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 ASTACK_0,[sp] ldr ASTACK_PTR,[sp,#4] add sp,sp,#8 cmp ASTACK_0,#1 bhi rmark_node rmark_next_node_: end_rmark_nodes: ldr pc,[sp],#4 rmark_lazy_node: ldr ASTACK_2,[BSTACK_0,#-5] cmp ASTACK_2,#0 beq rmark_next_node add ASTACK_0,ASTACK_0,#4 subs ASTACK_2,ASTACK_2,#1 ble rmark_lazy_node_1 cmp ASTACK_2,#255 bge rmark_closure_with_unboxed_arguments rmark_closure_with_unboxed_arguments_: add ASTACK_0,ASTACK_0,ASTACK_2,lsl #2 rmark_push_lazy_args: ldr BSTACK_1,[ASTACK_0] sub sp,sp,#8 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 ASTACK_PTR,ASTACK_0 ldr ASTACK_0,[ASTACK_0] cmp sp,BSTACK_4 bhs rmark_node b rmark_using_reversal rmark_closure_with_unboxed_arguments: @ (a_size+b_size)+(b_size<<8) @ addl $1,a2 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 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 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 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] 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 BSTACK_0,[ASTACK_0] b rmark_next_node rmark_int_3: ldr ASTACK_2,[ASTACK_0,#4] cmp ASTACK_2,#33 bcs rmark_next_node 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 BSTACK_0,[ASTACK_0] b rmark_next_node rmark_char_3: ldrb ASTACK_1,[ASTACK_0,#4] 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 ASTACK_1,[ASTACK_PTR] 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 BSTACK_0,[ASTACK_0] b rmark_next_node rmark_no_normal_hnf_0: 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 BSTACK_0,[ASTACK_0,#8] tst BSTACK_0,BSTACK_0 beq rmark_lazy_array ldrh ASTACK_1,[BSTACK_0,#-3+2] tst ASTACK_1,ASTACK_1 beq rmark_b_array ldrh BSTACK_0,[BSTACK_0,#-3] tst BSTACK_0,BSTACK_0 beq rmark_b_array cmp sp,BSTACK_4 blo rmark_array_using_reversal 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 ASTACK_1,[ASTACK_0,#4] add ASTACK_0,ASTACK_0,#8 str ASTACK_0,[sp,#-4]! mul ASTACK_1,BSTACK_0,ASTACK_1 lsl ASTACK_1,ASTACK_1,#2 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 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 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 BSTACK_0,[ASTACK_0,#4] add ASTACK_0,ASTACK_0,#8 cmp BSTACK_1,#2 blo rmark_lr_array mul BSTACK_0,BSTACK_1,BSTACK_0 b rmark_lr_array rmark_lazy_array: cmp sp,BSTACK_4 blo rmark_array_using_reversal ldr BSTACK_0,[ASTACK_0,#4] add ASTACK_0,ASTACK_0,#8 rmark_lr_array: 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 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 ASTACK_0,ASTACK_PTR bhi rmark_next_array_node 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 ASTACK_PTR,ASTACK_PTR,#4 ldr SCRATCH_REG,[sp] cmp ASTACK_PTR,SCRATCH_REG beq end_rmark_array_node rmark_array_nodes: ldr ASTACK_0,[ASTACK_PTR] sub BSTACK_0,ASTACK_0,ASTACK_3 cmp BSTACK_0,BSTACK_2 bcs rmark_next_array_node 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 ASTACK_2,ASTACK_2,BSTACK_0 str ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] ldr BSTACK_0,[ASTACK_0] .align add lr,pc,#9 str lr,[sp,#-4]! bl rmark_array_node add ASTACK_PTR,ASTACK_PTR,#4 ldr SCRATCH_REG,[sp] cmp ASTACK_PTR,SCRATCH_REG bne rmark_array_nodes end_rmark_array_node: add sp,sp,#4 b rmark_next_node rmark_array_node: sub sp,sp,#8 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 ASTACK_0,ASTACK_0,#-8 blo rmark_next_node 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 lto end_vector,16 lto end_vector,17 lto e__system__nind,17 lto e__system__nind,18 lto e__system__nind,19 ltol INT+2,INT_o_2,11 ltol CHAR+2,CHAR_o_2,6 lto small_integers,3 lto static_characters,3 ltol __ARRAY__+2,__ARRAY___o_2,17 .endif .ltorg