.file "run.c" .text .globl _reset_datastack .def _reset_datastack; .scl 2; .type 32; .endef _reset_datastack: pushl %ebp movl %esp, %ebp movl _stack_chain, %eax movl 24(%eax), %eax movl (%eax), %esi subl $4, %esi popl %ebp ret .globl _reset_retainstack .def _reset_retainstack; .scl 2; .type 32; .endef _reset_retainstack: pushl %ebp movl %esp, %ebp movl _stack_chain, %eax movl 28(%eax), %eax movl (%eax), %edi subl $4, %edi popl %ebp ret .globl _fix_stacks .def _fix_stacks; .scl 2; .type 32; .endef _fix_stacks: pushl %ebp movl %esp, %ebp leal 4(%esi), %eax movl _stack_chain, %edx movl 24(%edx), %edx cmpl (%edx), %eax jb L5 leal 256(%esi), %eax movl _stack_chain, %edx movl 24(%edx), %edx cmpl 8(%edx), %eax jae L5 jmp L4 L5: call _reset_datastack L4: leal 4(%edi), %eax movl _stack_chain, %edx movl 28(%edx), %edx cmpl (%edx), %eax jb L7 leal 256(%edi), %eax movl _stack_chain, %edx movl 28(%edx), %edx cmpl 8(%edx), %eax jae L7 jmp L3 L7: call _reset_retainstack L3: popl %ebp ret .globl _save_stacks .def _save_stacks; .scl 2; .type 32; .endef _save_stacks: pushl %ebp movl %esp, %ebp cmpl $0, _stack_chain je L8 movl _stack_chain, %eax movl %esi, 8(%eax) movl _stack_chain, %eax movl %edi, 12(%eax) L8: popl %ebp ret .globl _nest_stacks .def _nest_stacks; .scl 2; .type 32; .endef _nest_stacks: pushl %ebp movl %esp, %ebp pushl %ebx subl $20, %esp movl $44, (%esp) call _safe_malloc movl %eax, -8(%ebp) movl -8(%ebp), %eax movl $-1, 4(%eax) movl -8(%ebp), %eax movl $-1, (%eax) movl -8(%ebp), %eax movl %esi, 16(%eax) movl -8(%ebp), %eax movl %edi, 20(%eax) movl -8(%ebp), %edx movl _userenv+8, %eax movl %eax, 36(%edx) movl -8(%ebp), %edx movl _userenv+4, %eax movl %eax, 32(%edx) movl -8(%ebp), %ebx movl _ds_size, %eax movl %eax, (%esp) call _alloc_segment movl %eax, 24(%ebx) movl -8(%ebp), %ebx movl _rs_size, %eax movl %eax, (%esp) call _alloc_segment movl %eax, 28(%ebx) movl -8(%ebp), %edx movl _stack_chain, %eax movl %eax, 40(%edx) movl -8(%ebp), %eax movl %eax, _stack_chain call _reset_datastack call _reset_retainstack addl $20, %esp popl %ebx popl %ebp ret .globl _unnest_stacks .def _unnest_stacks; .scl 2; .type 32; .endef _unnest_stacks: pushl %ebp movl %esp, %ebp subl $8, %esp movl _stack_chain, %eax movl 24(%eax), %eax movl %eax, (%esp) call _dealloc_segment movl _stack_chain, %eax movl 28(%eax), %eax movl %eax, (%esp) call _dealloc_segment movl _stack_chain, %eax movl 16(%eax), %esi movl _stack_chain, %eax movl 20(%eax), %edi movl _stack_chain, %eax movl 36(%eax), %eax movl %eax, _userenv+8 movl _stack_chain, %eax movl 32(%eax), %eax movl %eax, _userenv+4 movl _stack_chain, %eax movl %eax, -4(%ebp) movl -4(%ebp), %eax movl 40(%eax), %eax movl %eax, _stack_chain movl -4(%ebp), %eax movl %eax, (%esp) call _free leave ret .globl _init_stacks .def _init_stacks; .scl 2; .type 32; .endef _init_stacks: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax movl %eax, _ds_size movl 12(%ebp), %eax movl %eax, _rs_size movl $0, _stack_chain popl %ebp ret .globl _primitive_drop .def _primitive_drop; .scl 2; .type 32; .endef _primitive_drop: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_drop_impl leave ret .def _primitive_drop_impl; .scl 3; .type 32; .endef _primitive_drop_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpop leave ret .def _dpop; .scl 3; .type 32; .endef _dpop: pushl %ebp movl %esp, %ebp subl $8, %esp movl %esi, (%esp) call _get movl %eax, -4(%ebp) subl $4, %esi movl -4(%ebp), %eax leave ret .def _get; .scl 3; .type 32; .endef _get: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax movl (%eax), %eax popl %ebp ret .globl _primitive_2drop .def _primitive_2drop; .scl 2; .type 32; .endef _primitive_2drop: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_2drop_impl leave ret .def _primitive_2drop_impl; .scl 3; .type 32; .endef _primitive_2drop_impl: pushl %ebp movl %esp, %ebp subl $8, %esi popl %ebp ret .globl _primitive_3drop .def _primitive_3drop; .scl 2; .type 32; .endef _primitive_3drop: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_3drop_impl leave ret .def _primitive_3drop_impl; .scl 3; .type 32; .endef _primitive_3drop_impl: pushl %ebp movl %esp, %ebp subl $12, %esi popl %ebp ret .globl _primitive_dup .def _primitive_dup; .scl 2; .type 32; .endef _primitive_dup: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_dup_impl leave ret .def _primitive_dup_impl; .scl 3; .type 32; .endef _primitive_dup_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpeek movl %eax, (%esp) call _dpush leave ret .def _dpush; .scl 3; .type 32; .endef _dpush: pushl %ebp movl %esp, %ebp subl $8, %esp addl $4, %esi movl 8(%ebp), %eax movl %eax, 4(%esp) movl %esi, (%esp) call _put leave ret .def _put; .scl 3; .type 32; .endef _put: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax movl %eax, (%edx) popl %ebp ret .def _dpeek; .scl 3; .type 32; .endef _dpeek: pushl %ebp movl %esp, %ebp subl $4, %esp movl %esi, (%esp) call _get leave ret .globl _primitive_2dup .def _primitive_2dup; .scl 2; .type 32; .endef _primitive_2dup: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_2dup_impl leave ret .def _primitive_2dup_impl; .scl 3; .type 32; .endef _primitive_2dup_impl: pushl %ebp movl %esp, %ebp subl $16, %esp call _dpeek movl %eax, -4(%ebp) leal -4(%esi), %eax movl %eax, (%esp) call _get movl %eax, -8(%ebp) addl $8, %esi movl -8(%ebp), %eax movl %eax, 4(%esp) leal -4(%esi), %eax movl %eax, (%esp) call _put movl -4(%ebp), %eax movl %eax, 4(%esp) movl %esi, (%esp) call _put leave ret .globl _primitive_3dup .def _primitive_3dup; .scl 2; .type 32; .endef _primitive_3dup: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_3dup_impl leave ret .def _primitive_3dup_impl; .scl 3; .type 32; .endef _primitive_3dup_impl: pushl %ebp movl %esp, %ebp subl $20, %esp call _dpeek movl %eax, -4(%ebp) leal -4(%esi), %eax movl %eax, (%esp) call _get movl %eax, -8(%ebp) leal -8(%esi), %eax movl %eax, (%esp) call _get movl %eax, -12(%ebp) addl $12, %esi movl -4(%ebp), %eax movl %eax, 4(%esp) movl %esi, (%esp) call _put movl -8(%ebp), %eax movl %eax, 4(%esp) leal -4(%esi), %eax movl %eax, (%esp) call _put movl -12(%ebp), %eax movl %eax, 4(%esp) leal -8(%esi), %eax movl %eax, (%esp) call _put leave ret .globl _primitive_rot .def _primitive_rot; .scl 2; .type 32; .endef _primitive_rot: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_rot_impl leave ret .def _primitive_rot_impl; .scl 3; .type 32; .endef _primitive_rot_impl: pushl %ebp movl %esp, %ebp subl $20, %esp call _dpeek movl %eax, -4(%ebp) leal -4(%esi), %eax movl %eax, (%esp) call _get movl %eax, -8(%ebp) leal -8(%esi), %eax movl %eax, (%esp) call _get movl %eax, -12(%ebp) movl -12(%ebp), %eax movl %eax, 4(%esp) movl %esi, (%esp) call _put movl -4(%ebp), %eax movl %eax, 4(%esp) leal -4(%esi), %eax movl %eax, (%esp) call _put movl -8(%ebp), %eax movl %eax, 4(%esp) leal -8(%esi), %eax movl %eax, (%esp) call _put leave ret .globl _primitive__rot .def _primitive__rot; .scl 2; .type 32; .endef _primitive__rot: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive__rot_impl leave ret .def _primitive__rot_impl; .scl 3; .type 32; .endef _primitive__rot_impl: pushl %ebp movl %esp, %ebp subl $20, %esp call _dpeek movl %eax, -4(%ebp) leal -4(%esi), %eax movl %eax, (%esp) call _get movl %eax, -8(%ebp) leal -8(%esi), %eax movl %eax, (%esp) call _get movl %eax, -12(%ebp) movl -8(%ebp), %eax movl %eax, 4(%esp) movl %esi, (%esp) call _put movl -12(%ebp), %eax movl %eax, 4(%esp) leal -4(%esi), %eax movl %eax, (%esp) call _put movl -4(%ebp), %eax movl %eax, 4(%esp) leal -8(%esi), %eax movl %eax, (%esp) call _put leave ret .globl _primitive_dupd .def _primitive_dupd; .scl 2; .type 32; .endef _primitive_dupd: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_dupd_impl leave ret .def _primitive_dupd_impl; .scl 3; .type 32; .endef _primitive_dupd_impl: pushl %ebp movl %esp, %ebp subl $24, %esp call _dpeek movl %eax, -4(%ebp) leal -4(%esi), %eax movl %eax, (%esp) call _get movl %eax, -8(%ebp) movl -8(%ebp), %eax movl %eax, 4(%esp) movl %esi, (%esp) call _put movl -8(%ebp), %eax movl %eax, 4(%esp) leal -4(%esi), %eax movl %eax, (%esp) call _put movl -4(%ebp), %eax movl %eax, (%esp) call _dpush leave ret .globl _primitive_swapd .def _primitive_swapd; .scl 2; .type 32; .endef _primitive_swapd: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_swapd_impl leave ret .def _primitive_swapd_impl; .scl 3; .type 32; .endef _primitive_swapd_impl: pushl %ebp movl %esp, %ebp subl $16, %esp leal -4(%esi), %eax movl %eax, (%esp) call _get movl %eax, -4(%ebp) leal -8(%esi), %eax movl %eax, (%esp) call _get movl %eax, -8(%ebp) movl -8(%ebp), %eax movl %eax, 4(%esp) leal -4(%esi), %eax movl %eax, (%esp) call _put movl -4(%ebp), %eax movl %eax, 4(%esp) leal -8(%esi), %eax movl %eax, (%esp) call _put leave ret .globl _primitive_nip .def _primitive_nip; .scl 2; .type 32; .endef _primitive_nip: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_nip_impl leave ret .def _primitive_nip_impl; .scl 3; .type 32; .endef _primitive_nip_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpop movl %eax, -4(%ebp) movl -4(%ebp), %eax movl %eax, (%esp) call _drepl leave ret .def _drepl; .scl 3; .type 32; .endef _drepl: pushl %ebp movl %esp, %ebp subl $8, %esp movl 8(%ebp), %eax movl %eax, 4(%esp) movl %esi, (%esp) call _put leave ret .globl _primitive_2nip .def _primitive_2nip; .scl 2; .type 32; .endef _primitive_2nip: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_2nip_impl leave ret .def _primitive_2nip_impl; .scl 3; .type 32; .endef _primitive_2nip_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpeek movl %eax, -4(%ebp) subl $8, %esi movl -4(%ebp), %eax movl %eax, (%esp) call _drepl leave ret .globl _primitive_tuck .def _primitive_tuck; .scl 2; .type 32; .endef _primitive_tuck: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_tuck_impl leave ret .def _primitive_tuck_impl; .scl 3; .type 32; .endef _primitive_tuck_impl: pushl %ebp movl %esp, %ebp subl $24, %esp call _dpeek movl %eax, -4(%ebp) leal -4(%esi), %eax movl %eax, (%esp) call _get movl %eax, -8(%ebp) movl -8(%ebp), %eax movl %eax, 4(%esp) movl %esi, (%esp) call _put movl -4(%ebp), %eax movl %eax, 4(%esp) leal -4(%esi), %eax movl %eax, (%esp) call _put movl -4(%ebp), %eax movl %eax, (%esp) call _dpush leave ret .globl _primitive_over .def _primitive_over; .scl 2; .type 32; .endef _primitive_over: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_over_impl leave ret .def _primitive_over_impl; .scl 3; .type 32; .endef _primitive_over_impl: pushl %ebp movl %esp, %ebp subl $8, %esp leal -4(%esi), %eax movl %eax, (%esp) call _get movl %eax, (%esp) call _dpush leave ret .globl _primitive_pick .def _primitive_pick; .scl 2; .type 32; .endef _primitive_pick: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_pick_impl leave ret .def _primitive_pick_impl; .scl 3; .type 32; .endef _primitive_pick_impl: pushl %ebp movl %esp, %ebp subl $8, %esp leal -8(%esi), %eax movl %eax, (%esp) call _get movl %eax, (%esp) call _dpush leave ret .globl _primitive_swap .def _primitive_swap; .scl 2; .type 32; .endef _primitive_swap: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_swap_impl leave ret .def _primitive_swap_impl; .scl 3; .type 32; .endef _primitive_swap_impl: pushl %ebp movl %esp, %ebp subl $16, %esp call _dpeek movl %eax, -4(%ebp) leal -4(%esi), %eax movl %eax, (%esp) call _get movl %eax, -8(%ebp) movl -8(%ebp), %eax movl %eax, 4(%esp) movl %esi, (%esp) call _put movl -4(%ebp), %eax movl %eax, 4(%esp) leal -4(%esi), %eax movl %eax, (%esp) call _put leave ret .globl _primitive_to_r .def _primitive_to_r; .scl 2; .type 32; .endef _primitive_to_r: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_to_r_impl leave ret .def _primitive_to_r_impl; .scl 3; .type 32; .endef _primitive_to_r_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpop movl %eax, (%esp) call _rpush leave ret .def _rpush; .scl 3; .type 32; .endef _rpush: pushl %ebp movl %esp, %ebp subl $8, %esp addl $4, %edi movl 8(%ebp), %eax movl %eax, 4(%esp) movl %edi, (%esp) call _put leave ret .globl _primitive_from_r .def _primitive_from_r; .scl 2; .type 32; .endef _primitive_from_r: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_from_r_impl leave ret .def _primitive_from_r_impl; .scl 3; .type 32; .endef _primitive_from_r_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _rpop movl %eax, (%esp) call _dpush leave ret .def _rpop; .scl 3; .type 32; .endef _rpop: pushl %ebp movl %esp, %ebp subl $8, %esp movl %edi, (%esp) call _get movl %eax, -4(%ebp) subl $4, %edi movl -4(%ebp), %eax leave ret .globl _stack_to_array .def _stack_to_array; .scl 2; .type 32; .endef _stack_to_array: pushl %ebp movl %esp, %ebp subl $40, %esp movl 8(%ebp), %edx movl 12(%ebp), %eax subl %edx, %eax addl $4, %eax movl %eax, -4(%ebp) cmpl $0, -4(%ebp) jns L58 movl $0, -12(%ebp) jmp L57 L58: movl -4(%ebp), %eax movl %eax, -16(%ebp) cmpl $0, -16(%ebp) jns L60 addl $3, -16(%ebp) L60: movl -16(%ebp), %eax sarl $2, %eax movl %eax, 4(%esp) movl $8, (%esp) call _allot_array_internal movl %eax, -8(%ebp) movl -4(%ebp), %eax movl %eax, 8(%esp) movl 8(%ebp), %eax movl %eax, 4(%esp) movl -8(%ebp), %eax addl $8, %eax movl %eax, (%esp) call _memcpy movl -8(%ebp), %eax movl %eax, (%esp) call _tag_object movl %eax, (%esp) call _dpush movl $1, -12(%ebp) L57: movl -12(%ebp), %eax leave ret .def _tag_object; .scl 3; .type 32; .endef _tag_object: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax andl $-8, %eax orl $3, %eax popl %ebp ret .globl _primitive_datastack .def _primitive_datastack; .scl 2; .type 32; .endef _primitive_datastack: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_datastack_impl leave ret .def _primitive_datastack_impl; .scl 3; .type 32; .endef _primitive_datastack_impl: pushl %ebp movl %esp, %ebp subl $24, %esp movl %esi, 4(%esp) movl _stack_chain, %eax movl 24(%eax), %eax movl (%eax), %eax movl %eax, (%esp) call _stack_to_array testb %al, %al jne L63 movl $0, 12(%esp) movl $7, 8(%esp) movl $7, 4(%esp) movl $11, (%esp) call _general_error L63: leave ret .globl _primitive_retainstack .def _primitive_retainstack; .scl 2; .type 32; .endef _primitive_retainstack: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_retainstack_impl leave ret .def _primitive_retainstack_impl; .scl 3; .type 32; .endef _primitive_retainstack_impl: pushl %ebp movl %esp, %ebp subl $24, %esp movl %edi, 4(%esp) movl _stack_chain, %eax movl 28(%eax), %eax movl (%eax), %eax movl %eax, (%esp) call _stack_to_array testb %al, %al jne L66 movl $0, 12(%esp) movl $7, 8(%esp) movl $7, 4(%esp) movl $13, (%esp) call _general_error L66: leave ret .globl _array_to_stack .def _array_to_stack; .scl 2; .type 32; .endef _array_to_stack: pushl %ebp movl %esp, %ebp subl $24, %esp movl 8(%ebp), %eax movl %eax, (%esp) call _array_capacity sall $2, %eax movl %eax, -4(%ebp) movl -4(%ebp), %eax movl %eax, 8(%esp) movl 8(%ebp), %eax addl $8, %eax movl %eax, 4(%esp) movl 12(%ebp), %eax movl %eax, (%esp) call _memcpy movl -4(%ebp), %eax addl 12(%ebp), %eax subl $4, %eax leave ret .def _array_capacity; .scl 3; .type 32; .endef _array_capacity: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax movl 4(%eax), %eax shrl $3, %eax popl %ebp ret .globl _primitive_set_datastack .def _primitive_set_datastack; .scl 2; .type 32; .endef _primitive_set_datastack: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_set_datastack_impl leave ret .def _primitive_set_datastack_impl; .scl 3; .type 32; .endef _primitive_set_datastack_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpop movl %eax, (%esp) call _untag_array movl %eax, %edx movl _stack_chain, %eax movl 24(%eax), %eax movl (%eax), %eax movl %eax, 4(%esp) movl %edx, (%esp) call _array_to_stack movl %eax, %esi leave ret .def _untag_array; .scl 3; .type 32; .endef _untag_array: pushl %ebp movl %esp, %ebp subl $8, %esp movl 8(%ebp), %eax movl %eax, 4(%esp) movl $8, (%esp) call _type_check movl 8(%ebp), %eax movl %eax, (%esp) call _untag_object leave ret .def _untag_object; .scl 3; .type 32; .endef _untag_object: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax andl $-8, %eax popl %ebp ret .def _type_check; .scl 3; .type 32; .endef _type_check: pushl %ebp movl %esp, %ebp subl $8, %esp movl 12(%ebp), %eax movl %eax, (%esp) call _type_of cmpl 8(%ebp), %eax je L74 movl 12(%ebp), %eax movl %eax, 4(%esp) movl 8(%ebp), %eax movl %eax, (%esp) call _type_error L74: leave ret .def _type_of; .scl 3; .type 32; .endef _type_of: pushl %ebp movl %esp, %ebp subl $24, %esp movl 8(%ebp), %eax andl $7, %eax movl %eax, -4(%ebp) cmpl $3, -4(%ebp) jne L77 movl 8(%ebp), %eax movl %eax, (%esp) call _object_type movl %eax, -8(%ebp) jmp L76 L77: movl -4(%ebp), %eax movl %eax, -8(%ebp) L76: movl -8(%ebp), %eax leave ret .def _object_type; .scl 3; .type 32; .endef _object_type: pushl %ebp movl %esp, %ebp subl $8, %esp movl 8(%ebp), %eax andl $-8, %eax movl %eax, (%esp) call _get movl %eax, (%esp) call _untag_header leave ret .def _untag_header; .scl 3; .type 32; .endef _untag_header: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax shrl $3, %eax popl %ebp ret .globl _primitive_set_retainstack .def _primitive_set_retainstack; .scl 2; .type 32; .endef _primitive_set_retainstack: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_set_retainstack_impl leave ret .def _primitive_set_retainstack_impl; .scl 3; .type 32; .endef _primitive_set_retainstack_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpop movl %eax, (%esp) call _untag_array movl %eax, %edx movl _stack_chain, %eax movl 28(%eax), %eax movl (%eax), %eax movl %eax, 4(%esp) movl %edx, (%esp) call _array_to_stack movl %eax, %edi leave ret .globl _primitive_getenv .def _primitive_getenv; .scl 2; .type 32; .endef _primitive_getenv: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_getenv_impl leave ret .def _primitive_getenv_impl; .scl 3; .type 32; .endef _primitive_getenv_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpeek movl %eax, (%esp) call _untag_fixnum_fast movl %eax, -4(%ebp) movl -4(%ebp), %eax movl _userenv(,%eax,4), %eax movl %eax, (%esp) call _drepl leave ret .def _untag_fixnum_fast; .scl 3; .type 32; .endef _untag_fixnum_fast: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax sarl $3, %eax popl %ebp ret .globl _primitive_setenv .def _primitive_setenv; .scl 2; .type 32; .endef _primitive_setenv: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_setenv_impl leave ret .def _primitive_setenv_impl; .scl 3; .type 32; .endef _primitive_setenv_impl: pushl %ebp movl %esp, %ebp subl $24, %esp call _dpop movl %eax, (%esp) call _untag_fixnum_fast movl %eax, -4(%ebp) call _dpop movl %eax, -8(%ebp) movl -4(%ebp), %edx movl -8(%ebp), %eax movl %eax, _userenv(,%edx,4) leave ret .globl _primitive_exit .def _primitive_exit; .scl 2; .type 32; .endef _primitive_exit: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_exit_impl leave ret .def _primitive_exit_impl; .scl 3; .type 32; .endef _primitive_exit_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpop movl %eax, (%esp) call _to_fixnum movl %eax, (%esp) call _exit .globl _primitive_os_env .def _primitive_os_env; .scl 2; .type 32; .endef _primitive_os_env: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_os_env_impl leave ret .def _primitive_os_env_impl; .scl 3; .type 32; .endef _primitive_os_env_impl: pushl %ebp movl %esp, %ebp subl $24, %esp call _unbox_char_string movl %eax, -4(%ebp) movl -4(%ebp), %eax movl %eax, (%esp) call _getenv movl %eax, -8(%ebp) cmpl $0, -8(%ebp) jne L92 movl $7, (%esp) call _dpush jmp L91 L92: movl -8(%ebp), %eax movl %eax, (%esp) call _box_char_string L91: leave ret .globl _primitive_eq .def _primitive_eq; .scl 2; .type 32; .endef _primitive_eq: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_eq_impl leave ret .def _primitive_eq_impl; .scl 3; .type 32; .endef _primitive_eq_impl: pushl %ebp movl %esp, %ebp subl $24, %esp call _dpop movl %eax, -4(%ebp) call _dpeek movl %eax, -8(%ebp) movl -4(%ebp), %eax cmpl -8(%ebp), %eax jne L96 movl _T, %eax movl %eax, -12(%ebp) jmp L97 L96: movl $7, -12(%ebp) L97: movl -12(%ebp), %eax movl %eax, (%esp) call _drepl leave ret .globl _primitive_millis .def _primitive_millis; .scl 2; .type 32; .endef _primitive_millis: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_millis_impl leave ret .def _primitive_millis_impl; .scl 3; .type 32; .endef _primitive_millis_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _current_millis movl %eax, (%esp) movl %edx, 4(%esp) call _box_unsigned_8 leave ret .globl _primitive_sleep .def _primitive_sleep; .scl 2; .type 32; .endef _primitive_sleep: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_sleep_impl leave ret .def _primitive_sleep_impl; .scl 3; .type 32; .endef _primitive_sleep_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpop movl %eax, (%esp) call _to_cell movl %eax, (%esp) call _sleep_millis leave ret .globl _primitive_tag .def _primitive_tag; .scl 2; .type 32; .endef _primitive_tag: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_tag_impl leave ret .def _primitive_tag_impl; .scl 3; .type 32; .endef _primitive_tag_impl: pushl %ebp movl %esp, %ebp subl $8, %esp call _dpeek andl $7, %eax movl %eax, (%esp) call _tag_fixnum movl %eax, (%esp) call _drepl leave ret .def _tag_fixnum; .scl 3; .type 32; .endef _tag_fixnum: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax sall $3, %eax andl $-8, %eax popl %ebp ret .globl _primitive_slot .def _primitive_slot; .scl 2; .type 32; .endef _primitive_slot: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_slot_impl leave ret .def _primitive_slot_impl; .scl 3; .type 32; .endef _primitive_slot_impl: pushl %ebp movl %esp, %ebp subl $24, %esp call _dpop movl %eax, (%esp) call _untag_fixnum_fast movl %eax, -4(%ebp) call _dpop movl %eax, -8(%ebp) movl -8(%ebp), %edx andl $-8, %edx movl -4(%ebp), %eax sall $2, %eax leal (%edx,%eax), %eax movl %eax, (%esp) call _get movl %eax, (%esp) call _dpush leave ret .globl _primitive_set_slot .def _primitive_set_slot; .scl 2; .type 32; .endef _primitive_set_slot: pushl %ebp movl %esp, %ebp subl $8, %esp movl %eax, -4(%ebp) movl %edx, -8(%ebp) movl -8(%ebp), %eax call _save_callstack_top call _primitive_set_slot_impl leave ret .def _primitive_set_slot_impl; .scl 3; .type 32; .endef _primitive_set_slot_impl: pushl %ebp movl %esp, %ebp subl $24, %esp call _dpop movl %eax, (%esp) call _untag_fixnum_fast movl %eax, -4(%ebp) call _dpop movl %eax, -8(%ebp) call _dpop movl %eax, -12(%ebp) movl -12(%ebp), %eax movl %eax, 8(%esp) movl -4(%ebp), %eax movl %eax, 4(%esp) movl -8(%ebp), %eax movl %eax, (%esp) call _set_slot leave ret .def _set_slot; .scl 3; .type 32; .endef _set_slot: pushl %ebp movl %esp, %ebp subl $8, %esp movl 16(%ebp), %eax movl %eax, 4(%esp) movl 8(%ebp), %edx andl $-8, %edx movl 12(%ebp), %eax sall $2, %eax leal (%edx,%eax), %eax movl %eax, (%esp) call _put movl 8(%ebp), %eax movl %eax, (%esp) call _write_barrier leave ret .def _write_barrier; .scl 3; .type 32; .endef _write_barrier: pushl %ebp movl %esp, %ebp subl $4, %esp movl 8(%ebp), %eax shrl $6, %eax addl _cards_offset, %eax movl %eax, -4(%ebp) movl -4(%ebp), %edx movl -4(%ebp), %eax movzbl (%eax), %eax orb $-64, %al movb %al, (%edx) leave ret .comm _console_open, 16 # 1 .comm _userenv, 256 # 256 .comm _T, 16 # 4 .comm _stack_chain, 16 # 4 .comm _ds_size, 16 # 4 .comm _rs_size, 16 # 4 .comm _stage2, 16 # 1 .comm _profiling_p, 16 # 1 .comm _signal_number, 16 # 4 .comm _signal_fault_addr, 16 # 4 .comm _signal_callstack_top, 16 # 4 .comm _secure_gc, 16 # 1 .comm _data_heap, 16 # 4 .comm _cards_offset, 16 # 4 .comm _newspace, 16 # 4 .comm _nursery, 16 # 4 .comm _gc_time, 16 # 8 .comm _nursery_collections, 16 # 4 .comm _aging_collections, 16 # 4 .comm _cards_scanned, 16 # 4 .comm _performing_gc, 16 # 1 .comm _collecting_gen, 16 # 4 .comm _collecting_aging_again, 16 # 1 .comm _last_code_heap_scan, 16 # 4 .comm _growing_data_heap, 16 # 1 .comm _old_data_heap, 16 # 4 .comm _gc_jmp, 208 # 208 .comm _heap_scan_ptr, 16 # 4 .comm _gc_off, 16 # 1 .comm _gc_locals_region, 16 # 4 .comm _gc_locals, 16 # 4 .comm _extra_roots_region, 16 # 4 .comm _extra_roots, 16 # 4 .comm _bignum_zero, 16 # 4 .comm _bignum_pos_one, 16 # 4 .comm _bignum_neg_one, 16 # 4 .comm _code_heap, 16 # 8 .comm _data_relocation_base, 16 # 4 .comm _code_relocation_base, 16 # 4 .comm _posix_argc, 16 # 4 .comm _posix_argv, 16 # 4 .def _sleep_millis; .scl 3; .type 32; .endef .def _current_millis; .scl 3; .type 32; .endef .def _getenv; .scl 3; .type 32; .endef .def _exit; .scl 3; .type 32; .endef .def _general_error; .scl 3; .type 32; .endef .def _memcpy; .scl 3; .type 32; .endef .def _allot_array_internal; .scl 3; .type 32; .endef .def _save_callstack_top; .scl 3; .type 32; .endef .def _free; .scl 3; .type 32; .endef .def _dealloc_segment; .scl 3; .type 32; .endef .def _alloc_segment; .scl 3; .type 32; .endef .def _safe_malloc; .scl 3; .type 32; .endef .def _type_error; .scl 3; .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:unnest_stacks" .ascii " -export:nest_stacks" .ascii " -export:save_stacks"