ZERO_ARITY_DESCRIPTOR_OFFSET = -4 NO_BIT_INSTRUCTIONS = 1 rmark_using_reversal: str ASTACK_PTR,[sp,#-4]! str ASTACK_PTR,[sp,#-4]! mov ASTACK_PTR,#1 b rmarkr_node rmark_using_reversal_: 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 ASTACK_0,[ASTACK_PTR] str BSTACK_0,[ASTACK_0] rmark_no_undo_reverse_1: mov ASTACK_PTR,#1 b rmarkr_arguments rmark_array_using_reversal: str BSTACK_1,[sp,#-4]! str ASTACK_PTR,[sp,#-4]! cmp ASTACK_0,BSTACK_1 bhi rmark_no_undo_reverse_2 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 ASTACK_PTR,#1 b rmarkr_arguments rmarkr_hnf_2: 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 BSTACK_0,ASTACK_0,ASTACK_3 cmp BSTACK_0,BSTACK_2 bhs rmarkr_next_node_after_static 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 ASTACK_2,ASTACK_2,BSTACK_0 str ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] rmarkr_arguments: ldr BSTACK_0,[ASTACK_0] tst BSTACK_0,#2 beq rmarkr_lazy_node ldrh ASTACK_2,[BSTACK_0,#-2] tst ASTACK_2,ASTACK_2 beq rmarkr_hnf_0 add ASTACK_0,ASTACK_0,#4 cmp ASTACK_2,#256 bhs rmarkr_record subs ASTACK_2,ASTACK_2,#2 beq rmarkr_hnf_2 blo rmarkr_hnf_1 rmarkr_hnf_3: ldr ASTACK_1,[ASTACK_0,#4] 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 rmarkr_shared_argument_part orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] rmarkr_no_shared_argument_part: 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 ASTACK_1,ASTACK_0 bhi rmarkr_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 rmarkr_hnf_1 rmarkr_record: 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 ASTACK_2,[BSTACK_0,#-2+2] subs ASTACK_2,ASTACK_2,#1 blo rmarkr_record_3_bb beq rmarkr_record_3_ab subs ASTACK_2,ASTACK_2,#1 beq rmarkr_record_3_aab b rmarkr_hnf_3 rmarkr_record_3_bb: ldr ASTACK_1,[ASTACK_0,#8-4] 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 rmarkr_next_node add BSTACK_0,BSTACK_0,BSTACK_0 bne rmarkr_bit_in_same_word1 add ASTACK_2,ASTACK_2,#1 mov BSTACK_0,#1 rmarkr_bit_in_same_word1: ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] tst BSTACK_0,SCRATCH_REG beq rmarkr_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] rmarkr_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 rmarkr_next_node rmarkr_record_3_ab: ldr ASTACK_1,[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 rmarkr_hnf_1 add BSTACK_0,BSTACK_0,BSTACK_0 bne rmarkr_bit_in_same_word2 add ASTACK_2,ASTACK_2,#1 mov BSTACK_0,#1 rmarkr_bit_in_same_word2: ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] tst BSTACK_0,SCRATCH_REG beq rmarkr_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] rmarkr_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 rmarkr_hnf_1 rmarkr_record_3_aab: ldr ASTACK_1,[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] tst BSTACK_0,SCRATCH_REG bne rmarkr_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] 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 SCRATCH_REG,[BSTACK_0,#-2+2] cmp SCRATCH_REG,#1 bhi rmarkr_hnf_2 beq rmarkr_hnf_1 subs ASTACK_0,ASTACK_0,#4 b rmarkr_next_node rmarkr_record_1: ldrh SCRATCH_REG,[BSTACK_0,#-2+2] cmp SCRATCH_REG,#0 bne rmarkr_hnf_1 subs ASTACK_0,ASTACK_0,#4 b rmarkr_next_node rmarkr_lazy_node_1: @ selectors: bne rmarkr_selector_node_1 rmarkr_hnf_1: ldr ASTACK_2,[ASTACK_0] str ASTACK_PTR,[ASTACK_0] add ASTACK_PTR,ASTACK_0,#2 mov ASTACK_0,ASTACK_2 b rmarkr_node @ selectors rmarkr_indirection_node: 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 ASTACK_2,#(-2)-1 beq rmarkr_indirection_node ldr ASTACK_1,[ASTACK_0] sub BSTACK_1,ASTACK_1,ASTACK_3 lsr BSTACK_1,BSTACK_1,#2 cmp ASTACK_2,#(-3)-1 ble rmarkr_record_selector_node_1 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 BSTACK_1,[ASTACK_1] tst BSTACK_1,#2 beq rmarkr_hnf_1 ldrh SCRATCH_REG,[BSTACK_1,#-2] cmp SCRATCH_REG,#2 bls rmarkr_small_tuple_or_record rmarkr_large_tuple_or_record: 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 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 cmp BSTACK_0,#8 blt rmarkr_tuple_or_record_selector_node_2 ldr ASTACK_1,[ASTACK_1,#8] beq rmarkr_tuple_selector_node_2 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 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 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 BSTACK_1,[ASTACK_1] tst BSTACK_1,#2 beq rmarkr_hnf_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 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 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 cmp BSTACK_0,#8 ble rmarkr_tuple_or_record_selector_node_2 ldr ASTACK_1,[ASTACK_1,#8] sub BSTACK_0,BSTACK_0,#12 rmarkr_tuple_or_record_selector_node_2: 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 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 BSTACK_1,[ASTACK_1] tst BSTACK_1,#2 beq rmarkr_hnf_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 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 SCRATCH_REG,[BSTACK_0,#-8] add BSTACK_0,BSTACK_0,#-8+4 .else ldr BSTACK_0,[BSTACK_0,#-8] .endif sub ASTACK_0,ASTACK_0,#4 .ifdef PIC ldrh BSTACK_1,[BSTACK_0,SCRATCH_REG]! .else ldrh BSTACK_1,[BSTACK_0,#4] .endif cmp BSTACK_1,#8 ble rmarkr_strict_record_selector_node_2 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 BSTACK_1,[ASTACK_1,BSTACK_1] rmarkr_strict_record_selector_node_3: str BSTACK_1,[ASTACK_0,#4] .ifdef PIC ldrh BSTACK_1,[BSTACK_0,#6-4] .else ldrh BSTACK_1,[BSTACK_0,#6] .endif tst BSTACK_1,BSTACK_1 beq rmarkr_strict_record_selector_node_5 cmp BSTACK_1,#8 ble rmarkr_strict_record_selector_node_4 ldr ASTACK_1,[ASTACK_1,#8] subs BSTACK_1,BSTACK_1,#12 rmarkr_strict_record_selector_node_4: ldr BSTACK_1,[ASTACK_1,BSTACK_1] str BSTACK_1,[ASTACK_0,#8] rmarkr_strict_record_selector_node_5: .ifdef PIC ldr BSTACK_0,[BSTACK_0,#-4-4] .else ldr BSTACK_0,[BSTACK_0,#-4] .endif str BSTACK_0,[ASTACK_0] b rmarkr_next_node @ a2,d1: free rmarkr_next_node: tst ASTACK_PTR,#3 bne rmarkr_parent ldr ASTACK_2,[ASTACK_PTR,#-4] mov BSTACK_1,#3 and BSTACK_1,BSTACK_1,ASTACK_2 subs ASTACK_PTR,ASTACK_PTR,#4 cmp BSTACK_1,#3 beq rmarkr_argument_part_cycle1 ldr ASTACK_1,[ASTACK_PTR,#4] str ASTACK_1,[ASTACK_PTR] rmarkr_c_argument_part_cycle1: cmp ASTACK_0,ASTACK_PTR bhi rmarkr_no_reverse_1 ldr ASTACK_1,[ASTACK_0] add BSTACK_0,ASTACK_PTR,#4+1 str ASTACK_1,[ASTACK_PTR,#4] str BSTACK_0,[ASTACK_0] 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 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 ASTACK_2,[BSTACK_0,#-4] tst ASTACK_2,ASTACK_2 beq rmarkr_next_node add ASTACK_0,ASTACK_0,#4 subs ASTACK_2,ASTACK_2,#1 ble rmarkr_lazy_node_1 cmp ASTACK_2,#255 bge rmarkr_closure_with_unboxed_arguments rmarkr_closure_with_unboxed_arguments_: 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 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 ASTACK_0,ASTACK_0,#4 b rmarkr_next_node rmarkr_hnf_0: 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 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 BSTACK_1,ASTACK_0,ASTACK_3 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 ASTACK_0,BSTACK_0,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 b rmarkr_next_node_after_static rmarkr_int_3: ldr ASTACK_2,[ASTACK_0,#4] cmp ASTACK_2,#33 bhs rmarkr_next_node sub BSTACK_1,ASTACK_0,ASTACK_3 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 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 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 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 BSTACK_0,[ASTACK_0,#8] cmp BSTACK_0,#0 beq rmarkr_lazy_array ldrh BSTACK_1,[BSTACK_0,#-2+2] cmp BSTACK_1,#0 beq rmarkr_b_array ldrh BSTACK_0,[BSTACK_0,#-2] cmp BSTACK_0,#0 beq rmarkr_b_array subs BSTACK_0,BSTACK_0,#256 cmp BSTACK_1,BSTACK_0 beq rmarkr_a_record_array rmarkr_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 rmarkr_lr_array rmarkr_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 rmarkr_next_node rmarkr_a_record_array: ldr BSTACK_0,[ASTACK_0,#4] add ASTACK_0,ASTACK_0,#8 cmp BSTACK_1,#2 blo rmarkr_lr_array mul BSTACK_0,BSTACK_1,BSTACK_0 b rmarkr_lr_array rmarkr_lazy_array: ldr BSTACK_0,[ASTACK_0,#4] add ASTACK_0,ASTACK_0,#8 rmarkr_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 rmarkr_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] 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 ASTACK_0,ASTACK_0,#-8 blo rmarkr_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 rmarkr_hnf_1 @ a2: free rmarkr_parent: and BSTACK_1,ASTACK_PTR,#3 bics ASTACK_PTR,ASTACK_PTR,#3 beq end_rmarkr subs BSTACK_1,BSTACK_1,#1 beq rmarkr_argument_part_parent ldr ASTACK_2,[ASTACK_PTR] cmp ASTACK_0,ASTACK_PTR bhi rmarkr_no_reverse_2 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 ASTACK_0,[ASTACK_PTR] add ASTACK_0,ASTACK_PTR,#-4 mov ASTACK_PTR,ASTACK_2 b rmarkr_next_node rmarkr_argument_part_parent: ldr ASTACK_2,[ASTACK_PTR] mov ASTACK_1,ASTACK_PTR mov ASTACK_PTR,ASTACK_0 mov ASTACK_0,ASTACK_1 rmarkr_skip_upward_pointers: mov BSTACK_0,ASTACK_2 and BSTACK_0,BSTACK_0,#3 cmp BSTACK_0,#3 bne rmarkr_no_upward_pointer add ASTACK_1,ASTACK_2,#-3 ldr ASTACK_2,[ASTACK_2,#-3] b rmarkr_skip_upward_pointers rmarkr_no_upward_pointer: cmp ASTACK_PTR,ASTACK_0 bhi rmarkr_no_reverse_3 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 ASTACK_PTR,[ASTACK_1] add ASTACK_PTR,ASTACK_2,#-4 and ASTACK_PTR,ASTACK_PTR,#-4 mov ASTACK_1,ASTACK_PTR mov BSTACK_1,#3 ldr ASTACK_2,[ASTACK_PTR] and BSTACK_1,BSTACK_1,ASTACK_2 ldr BSTACK_0,[ASTACK_1,#4] orr ASTACK_PTR,ASTACK_PTR,BSTACK_1 str BSTACK_0,[ASTACK_1] cmp ASTACK_0,ASTACK_1 bhi rmarkr_no_reverse_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 ASTACK_0,[ASTACK_1,#4] mov ASTACK_0,ASTACK_2 and ASTACK_0,ASTACK_0,#-4 b rmarkr_node rmarkr_argument_part_cycle1: ldr BSTACK_0,[ASTACK_PTR,#4] str ASTACK_1,[sp,#-4]! rmarkr_skip_pointer_list1: 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 BSTACK_0,[ASTACK_1] ldr ASTACK_1,[sp],#4 b rmarkr_c_argument_part_cycle1 rmarkr_next_node_after_static: tst ASTACK_PTR,#3 bne rmarkr_parent_after_static ldr ASTACK_2,[ASTACK_PTR,#-4] mov BSTACK_1,#3 and BSTACK_1,BSTACK_1,ASTACK_2 subs ASTACK_PTR,ASTACK_PTR,#4 cmp BSTACK_1,#3 beq rmarkr_argument_part_cycle2 ldr BSTACK_0,[ASTACK_PTR,#4] str BSTACK_0,[ASTACK_PTR] rmarkr_c_argument_part_cycle2: 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 BSTACK_1,ASTACK_PTR,#3 ands ASTACK_PTR,ASTACK_PTR,#-4 beq end_rmarkr_after_static subs BSTACK_1,BSTACK_1,#1 beq rmarkr_argument_part_parent_after_static 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 ASTACK_2,[ASTACK_PTR] mov ASTACK_1,ASTACK_PTR mov ASTACK_PTR,ASTACK_0 mov ASTACK_0,ASTACK_1 @ movl (a1),a2 rmarkr_skip_upward_pointers_2: 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 ASTACK_1,ASTACK_2,#-3 ldr ASTACK_2,[ASTACK_2,#-3] b rmarkr_skip_upward_pointers_2 rmarkr_argument_part_cycle2: ldr BSTACK_0,[ASTACK_PTR,#4] str ASTACK_1,[sp,#-4]! rmarkr_skip_pointer_list2: 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 BSTACK_0,[ASTACK_1] ldr ASTACK_1,[sp],#4 b rmarkr_c_argument_part_cycle2 end_rmarkr_after_static: ldr ASTACK_PTR,[sp] add sp,sp,#8 str ASTACK_0,[ASTACK_PTR] b rmarkr_next_stack_node end_rmarkr: ldr ASTACK_PTR,[sp],#4 ldr BSTACK_1,[sp],#4 cmp ASTACK_0,BSTACK_1 bhi rmark_no_reverse_4 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 ASTACK_0,[ASTACK_PTR] rmarkr_next_stack_node: cmp sp,BSTACK_4 bhs rmark_next_node ldr ASTACK_0,[sp] ldr ASTACK_PTR,[sp,#4] add sp,sp,#8 cmp ASTACK_0,#1 bhi rmark_using_reversal b rmark_next_node_ .ifdef PIC ltol __ARRAY__+2,__ARRAY___o_2,18 lto e__system__nind,20 lto e__system__nind,21 lto e__system__nind,22 ltol INT+2,INT_o_2,12 ltol CHAR+2,CHAR_o_2,7 lto small_integers,4 lto static_characters,4 ltol __ARRAY__+2,__ARRAY___o_2,19 .endif .ltorg