.file "run.c" .text .align 0 .global reset_datastack .def reset_datastack; .scl 2; .type 32; .endef reset_datastack: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L3 @ lr needed for prologue ldr r2, [r3, #0] ldr r1, [r2, #24] ldr r3, [r1, #0] sub r5, r3, #4 mov pc, lr .L4: .align 0 .L3: .word stack_chain .align 0 .global reset_retainstack .def reset_retainstack; .scl 2; .type 32; .endef reset_retainstack: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L7 @ lr needed for prologue ldr r2, [r3, #0] ldr r1, [r2, #28] ldr r3, [r1, #0] sub r6, r3, #4 mov pc, lr .L8: .align 0 .L7: .word stack_chain .align 0 .global save_stacks .def save_stacks; .scl 2; .type 32; .endef save_stacks: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L11 @ lr needed for prologue ldr r2, [r3, #0] str r6, [r2, #12] str r5, [r2, #8] mov pc, lr .L12: .align 0 .L11: .word stack_chain .align 0 .global init_stacks .def init_stacks; .scl 2; .type 32; .endef init_stacks: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L15 ldr r2, .L15+4 str r0, [r3, #0] ldr r3, .L15+8 str r1, [r2, #0] mov r1, #0 @ lr needed for prologue str r1, [r3, #0] mov pc, lr .L16: .align 0 .L15: .word ds_size .word rs_size .word stack_chain .align 0 .global enable_word_profiling .def enable_word_profiling; .scl 2; .type 32; .endef enable_word_profiling: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L21 ldr r2, [r0, #32] @ lr needed for prologue cmp r2, r3 ldreq r3, .L21+4 streq r3, [r0, #32] mov pc, lr .L22: .align 0 .L21: .word docol .word docol_profiling .align 0 .global disable_word_profiling .def disable_word_profiling; .scl 2; .type 32; .endef disable_word_profiling: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L27 ldr r2, [r0, #32] @ lr needed for prologue cmp r2, r3 ldreq r3, .L27+4 streq r3, [r0, #32] mov pc, lr .L28: .align 0 .L27: .word docol_profiling .word docol .align 0 .global primitive_3drop .def primitive_3drop; .scl 2; .type 32; .endef primitive_3drop: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 str lr, [sp, #-4]! mov r0, r1 bl save_callstack_top sub r5, r5, #12 ldr pc, [sp], #4 .align 0 .global primitive_2drop .def primitive_2drop; .scl 2; .type 32; .endef primitive_2drop: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 str lr, [sp, #-4]! mov r0, r1 bl save_callstack_top sub r5, r5, #8 ldr pc, [sp], #4 .align 0 .global primitive_millis .def primitive_millis; .scl 2; .type 32; .endef primitive_millis: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 str lr, [sp, #-4]! mov r0, r1 bl save_callstack_top bl current_millis ldr lr, [sp], #4 b box_unsigned_8 .align 0 .global array_to_stack .def array_to_stack; .scl 2; .type 32; .endef array_to_stack: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r7, lr} ldr r4, [r0, #4] mov r7, r1 mov r4, r4, lsr #3 mov r4, r4, asl #2 add r1, r0, #8 mov r2, r4 mov r0, r7 bl memcpy add r4, r4, r7 sub r0, r4, #4 ldmfd sp!, {r4, r7, pc} .align 0 .global unnest_stacks .def unnest_stacks; .scl 2; .type 32; .endef unnest_stacks: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, lr} ldr r4, .L39 ldr r3, [r4, #0] ldr r0, [r3, #24] bl dealloc_segment ldr r3, [r4, #0] ldr r0, [r3, #28] bl dealloc_segment ldr r0, [r4, #0] ldr r1, .L39+4 ldr r2, [r0, #36] ldr r5, [r0, #16] ldr r6, [r0, #20] str r2, [r1, #8] ldr r3, [r0, #32] str r3, [r1, #4] ldr r2, [r0, #40] ldr r1, [r0, #44] ldr r3, .L39+8 str r1, [r4, #0] str r2, [r3, #0] ldmfd sp!, {r4, lr} b free .L40: .align 0 .L39: .word stack_chain .word userenv .word extra_roots .align 0 .global primitive_drop .def primitive_drop; .scl 2; .type 32; .endef primitive_drop: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 str lr, [sp, #-4]! mov r0, r1 bl save_callstack_top sub r5, r5, #4 ldr pc, [sp], #4 .align 0 .global primitive_swapd .def primitive_swapd; .scl 2; .type 32; .endef primitive_swapd: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r1, [r5, #-4] ldr r2, [r5, #-8] stmdb r5, {r1, r2} @ phole stm ldr pc, [sp], #4 .align 0 .global primitive_swap .def primitive_swap; .scl 2; .type 32; .endef primitive_swap: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r1, [r5, #0] ldr r2, [r5, #-4] stmda r5, {r1, r2} @ phole stm ldr pc, [sp], #4 .align 0 .global primitive__rot .def primitive__rot; .scl 2; .type 32; .endef primitive__rot: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r0, [r5, #0] ldmdb r5, {r1, r2} @ phole ldm stmda r5, {r0, r1, r2} @ phole stm ldr pc, [sp], #4 .align 0 .global primitive_rot .def primitive_rot; .scl 2; .type 32; .endef primitive_rot: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r0, [r5, #0] ldr r2, [r5, #-8] ldr r1, [r5, #-4] stmda r5, {r0, r2} @ phole stm str r1, [r5, #-8] ldr pc, [sp], #4 .align 0 .global primitive_3dup .def primitive_3dup; .scl 2; .type 32; .endef primitive_3dup: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldmda r5, {r0, r1, r2} @ phole ldm mov r3, r5 add r5, r5, #12 str r2, [r3, #12] stmdb r5, {r0, r1} @ phole stm ldr pc, [sp], #4 .align 0 .global primitive_2dup .def primitive_2dup; .scl 2; .type 32; .endef primitive_2dup: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r0, [r5, #0] ldr r2, [r5, #-4] add r1, r5, #8 mov r5, r1 str r2, [r5, #-4] str r0, [r5, #0] ldr pc, [sp], #4 .align 0 .global primitive_sleep .def primitive_sleep; .scl 2; .type 32; .endef primitive_sleep: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r3, r5 ldr r0, [r3], #-4 mov r5, r3 bl to_cell ldr lr, [sp], #4 b sleep_millis .align 0 .global primitive_exit .def primitive_exit; .scl 2; .type 32; .endef primitive_exit: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r3, r5 ldr r0, [r3], #-4 mov r5, r3 bl to_fixnum bl exit .align 0 .global primitive_to_r .def primitive_to_r; .scl 2; .type 32; .endef primitive_to_r: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r3, r5 ldr r1, [r3], #-4 add r2, r6, #4 mov r6, r2 mov r5, r3 str r1, [r6, #0] ldr pc, [sp], #4 .align 0 .global primitive_eq .def primitive_eq; .scl 2; .type 32; .endef primitive_eq: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r0, r5 ldr r1, [r5, #-4] ldr r2, [r0], #-4 mov r3, #7 cmp r2, r1 ldreq r3, .L66 mov r5, r0 ldreq r3, [r3, #0] str r3, [r0, #0] ldr pc, [sp], #4 .L67: .align 0 .L66: .word T .align 0 .global primitive_getenv .def primitive_getenv; .scl 2; .type 32; .endef primitive_getenv: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r3, [r5, #0] ldr r2, .L70 mov r3, r3, asr #3 ldr r1, [r2, r3, asl #2] str r1, [r5, #0] ldr pc, [sp], #4 .L71: .align 0 .L70: .word userenv .align 0 .global primitive_2nip .def primitive_2nip; .scl 2; .type 32; .endef primitive_2nip: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 str lr, [sp, #-4]! mov r0, r1 bl save_callstack_top ldr r2, [r5, #0] mov r3, r5 sub r5, r5, #8 str r2, [r3, #-8] ldr pc, [sp], #4 .align 0 .global primitive_nip .def primitive_nip; .scl 2; .type 32; .endef primitive_nip: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r2, r5 ldr r1, [r2], #-4 str r1, [r5, #-4] mov r5, r2 ldr pc, [sp], #4 .align 0 .global primitive_os_env .def primitive_os_env; .scl 2; .type 32; .endef primitive_os_env: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 str lr, [sp, #-4]! mov r0, r1 bl save_callstack_top bl unbox_char_string bl getenv add r3, r5, #4 cmp r0, #0 moveq r5, r3 moveq r3, #7 streq r3, [r5, #0] ldreq pc, [sp], #4 ldr lr, [sp], #4 b box_char_string .align 0 .global stack_to_array .def stack_to_array; .scl 2; .type 32; .endef stack_to_array: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r7, r8, lr} mov r8, r0 rsb r1, r8, r1 adds r7, r1, #4 mov r0, #8 mov r1, r7, asr #2 mov r3, #0 bmi .L85 bl allot_array_internal mov r1, r8 mov r4, r0 mov r2, r7 add r0, r0, #8 bl memcpy bic r4, r4, #7 add r3, r5, #4 mov r5, r3 orr r4, r4, #3 str r4, [r5, #0] mov r3, #1 .L85: mov r0, r3 ldmfd sp!, {r4, r7, r8, pc} .align 0 .global primitive_from_r .def primitive_from_r; .scl 2; .type 32; .endef primitive_from_r: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r3, r6 ldr r1, [r3], #-4 add r2, r5, #4 mov r5, r2 mov r6, r3 str r1, [r5, #0] ldr pc, [sp], #4 .align 0 .global primitive_pick .def primitive_pick; .scl 2; .type 32; .endef primitive_pick: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 str lr, [sp, #-4]! mov r0, r1 bl save_callstack_top ldr r2, [r5, #-8] mov r3, r5 add r5, r5, #4 str r2, [r3, #4] ldr pc, [sp], #4 .align 0 .global primitive_over .def primitive_over; .scl 2; .type 32; .endef primitive_over: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 str lr, [sp, #-4]! mov r0, r1 bl save_callstack_top ldr r2, [r5, #-4] mov r3, r5 add r5, r5, #4 str r2, [r3, #4] ldr pc, [sp], #4 .align 0 .global primitive_tuck .def primitive_tuck; .scl 2; .type 32; .endef primitive_tuck: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r0, [r5, #0] ldr r2, [r5, #-4] add r1, r5, #4 mov r3, r5 mov r5, r1 stmda r3, {r0, r2} @ phole stm str r0, [r5, #0] ldr pc, [sp], #4 .align 0 .global primitive_dupd .def primitive_dupd; .scl 2; .type 32; .endef primitive_dupd: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r0, [r5, #0] ldr r2, [r5, #-4] add r1, r5, #4 mov r3, r5 mov r5, r1 str r2, [r3, #0] str r0, [r5, #0] ldr pc, [sp], #4 .align 0 .global primitive_dup .def primitive_dup; .scl 2; .type 32; .endef primitive_dup: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r2, r5 ldr r1, [r2], #4 str r1, [r5, #4] mov r5, r2 ldr pc, [sp], #4 .align 0 .global primitive_set_slot .def primitive_set_slot; .scl 2; .type 32; .endef primitive_set_slot: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r0, r5 ldr r1, [r0], #-4 ldr ip, [r5, #-4] ldr lr, [r0, #-4] mov r1, r1, asr #3 bic r3, ip, #7 ldr r2, .L101 str lr, [r3, r1, asl #2] ldr r1, [r2, #0] sub lr, r0, #4 ldrb r3, [r1, ip, lsr #6] @ zero_extendqisi2 mov r5, r0 mvn r3, r3, asl #26 mvn r3, r3, lsr #26 mov r5, lr sub r5, lr, #4 strb r3, [r1, ip, lsr #6] ldr pc, [sp], #4 .L102: .align 0 .L101: .word cards_offset .align 0 .global primitive_slot .def primitive_slot; .scl 2; .type 32; .endef primitive_slot: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r1, r5 ldr r2, [r1], #-4 ldr r3, [r5, #-4] mov r2, r2, asr #3 bic r3, r3, #7 ldr ip, [r3, r2, asl #2] mov r0, r5 mov r5, r1 sub r5, r1, #4 mov r5, r1 str ip, [r0, #-4] ldr pc, [sp], #4 .align 0 .global primitive_setenv .def primitive_setenv; .scl 2; .type 32; .endef primitive_setenv: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top mov r1, r5 ldr r3, [r1], #-4 ldr r0, [r5, #-4] ldr r2, .L107 mov r3, r3, asr #3 mov r5, r1 sub r5, r1, #4 str r0, [r2, r3, asl #2] ldr pc, [sp], #4 .L108: .align 0 .L107: .word userenv .align 0 .global primitive_class_hash .def primitive_class_hash; .scl 2; .type 32; .endef primitive_class_hash: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r3, [r5, #0] and r2, r3, #7 cmp r2, #2 bic r0, r3, #7 beq .L116 cmp r2, #3 bic r3, r3, #7 ldreq r3, [r3, #0] mov r0, r2, asl #3 streq r3, [r5, #0] strne r0, [r5, #0] ldr pc, [sp], #4 .L116: ldr r3, [r0, #8] bic r3, r3, #7 ldr r2, [r3, #4] str r2, [r5, #0] ldr pc, [sp], #4 .align 0 .global primitive_tag .def primitive_tag; .scl 2; .type 32; .endef primitive_tag: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 str lr, [sp, #-4]! mov r0, r1 bl save_callstack_top ldr r3, [r5, #0] and r3, r3, #7 mov r3, r3, asl #3 str r3, [r5, #0] ldr pc, [sp], #4 .align 0 .global nest_stacks .def nest_stacks; .scl 2; .type 32; .endef nest_stacks: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, lr} mov r0, #48 bl safe_malloc mov r4, r0 ldr r0, .L121 str r5, [r4, #16] str r6, [r4, #20] ldr r3, [r0, #8] mvn r2, #0 str r3, [r4, #36] ldr r1, [r0, #4] ldr r3, .L121+4 str r1, [r4, #32] str r2, [r4, #0] str r2, [r4, #4] ldr r0, [r3, #0] bl alloc_segment ldr r3, .L121+8 str r0, [r4, #24] ldr r0, [r3, #0] bl alloc_segment ldr r3, .L121+12 ldr ip, [r4, #24] ldr r2, [r3, #0] ldr r1, .L121+16 str r2, [r4, #40] ldr lr, [ip, #0] ldr r2, [r0, #0] ldr r3, [r1, #0] sub r5, lr, #4 sub r6, r2, #4 str r3, [r4, #44] str r0, [r4, #28] str r4, [r1, #0] ldmfd sp!, {r4, pc} .L122: .align 0 .L121: .word userenv .word ds_size .word rs_size .word extra_roots .word stack_chain .align 0 .global fix_stacks .def fix_stacks; .scl 2; .type 32; .endef fix_stacks: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 ldr r2, .L131 add r3, r5, #4 ldr r2, [r2, #0] stmfd sp!, {r4, lr} ldr r0, [r2, #24] add r4, r6, #256 ldr ip, [r0, #0] add lr, r5, #256 cmp r3, ip add r1, r6, #4 bcc .L124 ldr r3, [r0, #8] cmp lr, r3 bcs .L124 .L126: ldr r2, [r2, #28] ldr r0, [r2, #0] cmp r1, r0 bcc .L127 ldr r3, [r2, #8] cmp r4, r3 ldmccfd sp!, {r4, pc} .L127: sub r6, r0, #4 ldmfd sp!, {r4, pc} .L124: sub r5, ip, #4 b .L126 .L132: .align 0 .L131: .word stack_chain .align 0 .global primitive_type .def primitive_type; .scl 2; .type 32; .endef primitive_type: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 str lr, [sp, #-4]! bl save_callstack_top ldr r3, [r5, #0] bic r1, r3, #7 and r3, r3, #7 cmp r3, #3 ldreq r3, [r1, #0] moveq r3, r3, lsr #3 mov r3, r3, asl #3 str r3, [r5, #0] ldr pc, [sp], #4 .align 0 .global default_word_xt .def default_word_xt; .scl 2; .type 32; .endef default_word_xt: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 ldr r3, .L154 ldr r0, [r0, #16] ldr r2, [r3, #0] str lr, [sp, #-4]! cmp r0, r2 ldreq r0, .L154+4 ldreq pc, [sp], #4 and r1, r0, #7 cmp r1, #3 biceq r3, r0, #7 ldreq r2, [r3, #0] movne r2, r1 moveq r2, r2, lsr #3 cmp r2, #14 beq .L153 cmp r1, #3 biceq r3, r0, #7 ldreq r2, [r3, #0] moveq r1, r2, lsr #3 cmp r1, #0 ldrne r0, .L154+8 ldrne pc, [sp], #4 bl to_fixnum ldr r3, .L154+12 ldr r0, [r3, r0, asl #2] ldr pc, [sp], #4 .L153: ldr r3, .L154+16 ldr r2, .L154+20 ldrb r1, [r3, #0] @ zero_extendqisi2 ldr r3, .L154+24 cmp r1, #0 moveq r0, r2 movne r0, r3 ldr pc, [sp], #4 .L155: .align 0 .L154: .word T .word dosym .word undefined .word primitives .word profiling .word docol .word docol_profiling .align 0 .global primitive_profiling .def primitive_profiling; .scl 2; .type 32; .endef primitive_profiling: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r7, r8, lr} mov r0, r1 bl save_callstack_top mov r3, r5 ldr r0, [r3], #-4 ldr r4, .L175 mov r5, r3 bl to_boolean strb r0, [r4, #0] bl begin_scan ldr r8, .L175+4 ldr r7, .L175+8 .L173: bl next_object cmp r0, #7 bic r2, r0, #7 and r3, r0, #7 beq .L174 .L158: cmp r3, #3 ldreq r3, [r2, #0] moveq r3, r3, lsr #3 cmp r3, #17 bne .L173 ldrb r3, [r4, #0] @ zero_extendqisi2 bic r2, r0, #7 cmp r3, #0 bic r0, r0, #7 beq .L162 ldr r3, [r2, #32] cmp r3, r8 streq r7, [r2, #32] bl next_object cmp r0, #7 bic r2, r0, #7 and r3, r0, #7 bne .L158 .L174: ldr r3, .L175+12 mov r2, #0 strb r2, [r3, #0] ldmfd sp!, {r4, r7, r8, pc} .L162: ldr r3, [r0, #32] cmp r3, r7 streq r8, [r0, #32] b .L173 .L176: .align 0 .L175: .word profiling .word docol .word docol_profiling .word gc_off .align 0 .global primitive_set_retainstack .def primitive_set_retainstack; .scl 2; .type 32; .endef primitive_set_retainstack: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 stmfd sp!, {r4, r7, lr} bl save_callstack_top mov r3, r5 ldr r1, [r3], #-4 mov r0, #8 and r2, r1, #7 cmp r2, #3 bic r4, r1, #7 mov r5, r3 ldreq r3, [r4, #0] moveq r2, r3, lsr #3 cmp r2, #8 blne type_error .L181: ldr r3, .L184 ldr r7, [r4, #4] ldr r2, [r3, #0] add r1, r4, #8 ldr r0, [r2, #28] mov r7, r7, lsr #3 ldr r4, [r0, #0] mov r7, r7, asl #2 mov r0, r4 mov r2, r7 bl memcpy add r4, r4, r7 sub r6, r4, #4 ldmfd sp!, {r4, r7, pc} .L185: .align 0 .L184: .word stack_chain .align 0 .global primitive_set_datastack .def primitive_set_datastack; .scl 2; .type 32; .endef primitive_set_datastack: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 mov r0, r1 stmfd sp!, {r4, r7, lr} bl save_callstack_top mov r3, r5 ldr r1, [r3], #-4 mov r0, #8 and r2, r1, #7 cmp r2, #3 bic r4, r1, #7 mov r5, r3 ldreq r3, [r4, #0] moveq r2, r3, lsr #3 cmp r2, #8 blne type_error .L190: ldr r3, .L193 ldr r7, [r4, #4] ldr r2, [r3, #0] add r1, r4, #8 ldr r0, [r2, #24] mov r7, r7, lsr #3 ldr r4, [r0, #0] mov r7, r7, asl #2 mov r0, r4 mov r2, r7 bl memcpy add r4, r4, r7 sub r5, r4, #4 ldmfd sp!, {r4, r7, pc} .L194: .align 0 .L193: .word stack_chain .align 0 .global primitive_retainstack .def primitive_retainstack; .scl 2; .type 32; .endef primitive_retainstack: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r7, r8, lr} mov r0, r1 bl save_callstack_top ldr ip, .L200 mov r1, #7 ldr lr, [ip, #0] mov r0, #8 ldr r4, [lr, #28] mov r2, r1 ldr r8, [r4, #0] mov r3, #0 rsb ip, r8, r6 adds r7, ip, #4 bmi .L196 mov r1, r7, asr #2 bl allot_array_internal mov r1, r8 mov r4, r0 mov r2, r7 add r0, r0, #8 bl memcpy bic r4, r4, #7 add r3, r5, #4 mov r5, r3 orr r4, r4, #3 str r4, [r5, #0] ldmfd sp!, {r4, r7, r8, pc} .L196: mov r0, #13 ldmfd sp!, {r4, r7, r8, lr} b general_error .L201: .align 0 .L200: .word stack_chain .align 0 .global primitive_datastack .def primitive_datastack; .scl 2; .type 32; .endef primitive_datastack: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 stmfd sp!, {r4, r7, r8, lr} mov r0, r1 bl save_callstack_top ldr ip, .L207 mov r1, #7 ldr lr, [ip, #0] mov r0, #8 ldr r4, [lr, #24] mov r2, r1 ldr r8, [r4, #0] mov r3, #0 rsb ip, r8, r5 adds r7, ip, #4 bmi .L203 mov r1, r7, asr #2 bl allot_array_internal mov r1, r8 mov r4, r0 mov r2, r7 add r0, r0, #8 bl memcpy bic r4, r4, #7 add r3, r5, #4 mov r5, r3 orr r4, r4, #3 str r4, [r5, #0] ldmfd sp!, {r4, r7, r8, pc} .L203: mov r0, #11 ldmfd sp!, {r4, r7, r8, lr} b general_error .L208: .align 0 .L207: .word stack_chain .comm errno, 4 @ 4 .comm profiling, 4 @ 1 .comm userenv, 160 @ 160 .comm T, 4 @ 4 .comm stack_chain, 4 @ 4 .comm ds_size, 4 @ 4 .comm rs_size, 4 @ 4 .comm signal_number, 4 @ 4 .comm signal_fault_addr, 4 @ 4 .comm signal_callstack_top, 4 @ 4 .comm secure_gc, 4 @ 1 .comm data_heap, 4 @ 4 .comm cards_offset, 4 @ 4 .comm newspace, 4 @ 4 .comm nursery, 4 @ 4 .comm gc_time, 8 @ 8 .comm minor_collections, 4 @ 4 .comm cards_scanned, 4 @ 4 .comm performing_gc, 4 @ 1 .comm collecting_gen, 4 @ 4 .comm collecting_code, 4 @ 1 .comm collecting_aging_again, 4 @ 1 .comm last_code_heap_scan, 4 @ 4 .comm growing_data_heap, 4 @ 1 .comm old_data_heap, 4 @ 4 .comm gc_jmp, 44 @ 44 .comm heap_scan_ptr, 4 @ 4 .comm gc_off, 4 @ 1 .comm extra_roots_region, 4 @ 4 .comm extra_roots, 4 @ 4 .comm bignum_zero, 4 @ 4 .comm bignum_pos_one, 4 @ 4 .comm bignum_neg_one, 4 @ 4 .comm code_heap, 8 @ 8 .comm data_relocation_base, 4 @ 4 .comm code_relocation_base, 4 @ 4 .comm posix_argc, 4 @ 4 .comm posix_argv, 4 @ 4 .def memcpy; .scl 2; .type 32; .endef .def type_error; .scl 2; .type 32; .endef .def safe_malloc; .scl 2; .type 32; .endef .def alloc_segment; .scl 2; .type 32; .endef .def dealloc_segment; .scl 2; .type 32; .endef .def free; .scl 2; .type 32; .endef .def allot_array_internal; .scl 2; .type 32; .endef .def general_error; .scl 2; .type 32; .endef .def memcpy; .scl 2; .type 32; .endef .def dosym; .scl 2; .type 32; .endef .def undefined; .scl 2; .type 32; .endef .def exit; .scl 2; .type 32; .endef .def to_fixnum; .scl 2; .type 32; .endef .def unbox_char_string; .scl 2; .type 32; .endef .def getenv; .scl 2; .type 32; .endef .def box_char_string; .scl 2; .type 32; .endef .def box_unsigned_8; .scl 2; .type 32; .endef .def current_millis; .scl 2; .type 32; .endef .def sleep_millis; .scl 2; .type 32; .endef .def to_cell; .scl 2; .type 32; .endef .def docol_profiling; .scl 2; .type 32; .endef .def docol; .scl 2; .type 32; .endef .def save_callstack_top; .scl 2; .type 32; .endef .def to_boolean; .scl 2; .type 32; .endef .def begin_scan; .scl 2; .type 32; .endef .def next_object; .scl 2; .type 32; .endef .section .drectve .ascii " -export:nursery,data" .ascii " -export:cards_offset,data" .ascii " -export:stack_chain,data" .ascii " -export:userenv,data" .ascii " -export:profiling,data" .ascii " -export:nest_stacks" .ascii " -export:unnest_stacks" .ascii " -export:save_stacks"