diff --git a/vm/data_gc.h b/vm/data_gc.h index 0adcf0ca39..d3b8b6e39e 100755 --- a/vm/data_gc.h +++ b/vm/data_gc.h @@ -315,8 +315,6 @@ INLINE void* allot_object(CELL type, CELL a) { CELL *object; - /* If the object is bigger than the nursery, allocate it in - tenured space */ if(nursery->size - ALLOT_BUFFER_ZONE > a) { /* If there is insufficient room, collect the nursery */ @@ -325,6 +323,8 @@ INLINE void* allot_object(CELL type, CELL a) object = allot_zone(nursery,a); } + /* If the object is bigger than the nursery, allocate it in + tenured space */ else { F_ZONE *tenured = &data_heap->generations[TENURED]; diff --git a/vm/errors.s b/vm/errors.s deleted file mode 100644 index d6b3bdb6e5..0000000000 --- a/vm/errors.s +++ /dev/null @@ -1,687 +0,0 @@ - .file "errors.c" - .section .rdata,"dr" -LC0: - .ascii "fatal_error: %s %lx\12\0" - .text -.globl _fatal_error - .def _fatal_error; .scl 2; .type 32; .endef -_fatal_error: - pushl %ebp - movl %esp, %ebp - subl $24, %esp - call ___getreent - movl %eax, %edx - movl 12(%ebp), %eax - movl %eax, 12(%esp) - movl 8(%ebp), %eax - movl %eax, 8(%esp) - movl $LC0, 4(%esp) - movl 12(%edx), %eax - movl %eax, (%esp) - call _fprintf - movl $1, (%esp) - call _exit - .section .rdata,"dr" - .align 4 -LC1: - .ascii "You have triggered a bug in Factor. Please report.\12\0" -LC2: - .ascii "critical_error: %s %lx\12\0" - .text -.globl _critical_error - .def _critical_error; .scl 2; .type 32; .endef -_critical_error: - pushl %ebp - movl %esp, %ebp - subl $24, %esp - call ___getreent - movl $LC1, 4(%esp) - movl 12(%eax), %eax - movl %eax, (%esp) - call _fprintf - call ___getreent - movl %eax, %edx - movl 12(%ebp), %eax - movl %eax, 12(%esp) - movl 8(%ebp), %eax - movl %eax, 8(%esp) - movl $LC2, 4(%esp) - movl 12(%edx), %eax - movl %eax, (%esp) - call _fprintf - call _factorbug - leave - ret - .section .rdata,"dr" -LC3: - .ascii "early_error: \0" -LC4: - .ascii "\12\0" - .text -.globl _throw_error - .def _throw_error; .scl 2; .type 32; .endef -_throw_error: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - cmpl $7, _userenv+20 - je L4 - movb $0, _gc_off - movl _gc_locals_region, %eax - movl (%eax), %eax - subl $4, %eax - movl %eax, _gc_locals - movl _extra_roots_region, %eax - movl (%eax), %eax - subl $4, %eax - movl %eax, _extra_roots - call _fix_stacks - movl 8(%ebp), %eax - movl %eax, (%esp) - call _dpush - cmpl $0, 12(%ebp) - je L5 - movl _stack_chain, %eax - movl 4(%eax), %eax - movl %eax, 4(%esp) - movl 12(%ebp), %eax - movl %eax, (%esp) - call _fix_callstack_top - movl %eax, 12(%ebp) - jmp L6 -L5: - movl _stack_chain, %eax - movl (%eax), %eax - movl %eax, 12(%ebp) -L6: - movl 12(%ebp), %edx - movl _userenv+20, %eax - call _throw_impl - jmp L3 -L4: - call ___getreent - movl $LC1, 4(%esp) - movl 12(%eax), %eax - movl %eax, (%esp) - call _fprintf - call ___getreent - movl $LC3, 4(%esp) - movl 12(%eax), %eax - movl %eax, (%esp) - call _fprintf - movl 8(%ebp), %eax - movl %eax, (%esp) - call _print_obj - call ___getreent - movl $LC4, 4(%esp) - movl 12(%eax), %eax - movl %eax, (%esp) - call _fprintf - call _factorbug -L3: - 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 -.globl _general_error - .def _general_error; .scl 2; .type 32; .endef -_general_error: - pushl %ebp - movl %esp, %ebp - subl $24, %esp - movl 8(%ebp), %eax - movl %eax, (%esp) - call _tag_fixnum - movl %eax, %edx - movl 16(%ebp), %eax - movl %eax, 12(%esp) - movl 12(%ebp), %eax - movl %eax, 8(%esp) - movl %edx, 4(%esp) - movl _userenv+24, %eax - movl %eax, (%esp) - call _allot_array_4 - movl %eax, %edx - movl 20(%ebp), %eax - movl %eax, 4(%esp) - movl %edx, (%esp) - call _throw_error - 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 _type_error - .def _type_error; .scl 2; .type 32; .endef -_type_error: - pushl %ebp - movl %esp, %ebp - subl $24, %esp - movl 8(%ebp), %eax - movl %eax, (%esp) - call _tag_fixnum - movl %eax, %edx - movl $0, 12(%esp) - movl 12(%ebp), %eax - movl %eax, 8(%esp) - movl %edx, 4(%esp) - movl $3, (%esp) - call _general_error - leave - ret -.globl _not_implemented_error - .def _not_implemented_error; .scl 2; .type 32; .endef -_not_implemented_error: - pushl %ebp - movl %esp, %ebp - subl $24, %esp - movl $0, 12(%esp) - movl $7, 8(%esp) - movl $7, 4(%esp) - movl $2, (%esp) - call _general_error - leave - ret -.globl _in_page - .def _in_page; .scl 2; .type 32; .endef -_in_page: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - call _getpagesize - movl %eax, -4(%ebp) - movl 16(%ebp), %edx - leal 12(%ebp), %eax - addl %edx, (%eax) - movl 20(%ebp), %eax - movl %eax, %edx - imull -4(%ebp), %edx - leal 12(%ebp), %eax - addl %edx, (%eax) - movb $0, -5(%ebp) - movl 8(%ebp), %eax - cmpl 12(%ebp), %eax - jb L15 - movl -4(%ebp), %eax - addl 12(%ebp), %eax - cmpl 8(%ebp), %eax - jb L15 - movb $1, -5(%ebp) -L15: - movzbl -5(%ebp), %eax - leave - ret - .section .rdata,"dr" - .align 4 -LC5: - .ascii "allot_object() missed GC check\0" -LC6: - .ascii "gc locals underflow\0" -LC7: - .ascii "gc locals overflow\0" -LC8: - .ascii "extra roots underflow\0" -LC9: - .ascii "extra roots overflow\0" - .text -.globl _memory_protection_error - .def _memory_protection_error; .scl 2; .type 32; .endef -_memory_protection_error: - pushl %ebp - movl %esp, %ebp - subl $24, %esp - movl $-1, 12(%esp) - movl $0, 8(%esp) - movl _stack_chain, %eax - movl 24(%eax), %eax - movl (%eax), %eax - movl %eax, 4(%esp) - movl 8(%ebp), %eax - movl %eax, (%esp) - call _in_page - testb %al, %al - je L17 - movl 12(%ebp), %eax - movl %eax, 12(%esp) - movl $7, 8(%esp) - movl $7, 4(%esp) - movl $11, (%esp) - call _general_error - jmp L16 -L17: - movl $0, 12(%esp) - movl _ds_size, %eax - movl %eax, 8(%esp) - movl _stack_chain, %eax - movl 24(%eax), %eax - movl (%eax), %eax - movl %eax, 4(%esp) - movl 8(%ebp), %eax - movl %eax, (%esp) - call _in_page - testb %al, %al - je L19 - movl 12(%ebp), %eax - movl %eax, 12(%esp) - movl $7, 8(%esp) - movl $7, 4(%esp) - movl $12, (%esp) - call _general_error - jmp L16 -L19: - movl $-1, 12(%esp) - movl $0, 8(%esp) - movl _stack_chain, %eax - movl 28(%eax), %eax - movl (%eax), %eax - movl %eax, 4(%esp) - movl 8(%ebp), %eax - movl %eax, (%esp) - call _in_page - testb %al, %al - je L21 - movl 12(%ebp), %eax - movl %eax, 12(%esp) - movl $7, 8(%esp) - movl $7, 4(%esp) - movl $13, (%esp) - call _general_error - jmp L16 -L21: - movl $0, 12(%esp) - movl _rs_size, %eax - movl %eax, 8(%esp) - movl _stack_chain, %eax - movl 28(%eax), %eax - movl (%eax), %eax - movl %eax, 4(%esp) - movl 8(%ebp), %eax - movl %eax, (%esp) - call _in_page - testb %al, %al - je L23 - movl 12(%ebp), %eax - movl %eax, 12(%esp) - movl $7, 8(%esp) - movl $7, 4(%esp) - movl $14, (%esp) - call _general_error - jmp L16 -L23: - movl $0, 12(%esp) - movl $0, 8(%esp) - movl _nursery, %eax - movl 12(%eax), %eax - movl %eax, 4(%esp) - movl 8(%ebp), %eax - movl %eax, (%esp) - call _in_page - testb %al, %al - je L25 - movl $0, 4(%esp) - movl $LC5, (%esp) - call _critical_error - jmp L16 -L25: - movl $-1, 12(%esp) - movl $0, 8(%esp) - movl _gc_locals_region, %eax - movl (%eax), %eax - movl %eax, 4(%esp) - movl 8(%ebp), %eax - movl %eax, (%esp) - call _in_page - testb %al, %al - je L27 - movl $0, 4(%esp) - movl $LC6, (%esp) - call _critical_error - jmp L16 -L27: - movl $0, 12(%esp) - movl $0, 8(%esp) - movl _gc_locals_region, %eax - movl 8(%eax), %eax - movl %eax, 4(%esp) - movl 8(%ebp), %eax - movl %eax, (%esp) - call _in_page - testb %al, %al - je L29 - movl $0, 4(%esp) - movl $LC7, (%esp) - call _critical_error - jmp L16 -L29: - movl $-1, 12(%esp) - movl $0, 8(%esp) - movl _extra_roots_region, %eax - movl (%eax), %eax - movl %eax, 4(%esp) - movl 8(%ebp), %eax - movl %eax, (%esp) - call _in_page - testb %al, %al - je L31 - movl $0, 4(%esp) - movl $LC8, (%esp) - call _critical_error - jmp L16 -L31: - movl $0, 12(%esp) - movl $0, 8(%esp) - movl _extra_roots_region, %eax - movl 8(%eax), %eax - movl %eax, 4(%esp) - movl 8(%ebp), %eax - movl %eax, (%esp) - call _in_page - testb %al, %al - je L33 - movl $0, 4(%esp) - movl $LC9, (%esp) - call _critical_error - jmp L16 -L33: - movl 8(%ebp), %eax - movl %eax, (%esp) - call _allot_cell - movl %eax, %edx - movl 12(%ebp), %eax - movl %eax, 12(%esp) - movl $7, 8(%esp) - movl %edx, 4(%esp) - movl $15, (%esp) - call _general_error -L16: - leave - ret - .def _allot_cell; .scl 3; .type 32; .endef -_allot_cell: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - cmpl $268435455, 8(%ebp) - jbe L36 - movl 8(%ebp), %eax - movl %eax, (%esp) - call _cell_to_bignum - movl %eax, (%esp) - call _tag_bignum - movl %eax, -4(%ebp) - jmp L35 -L36: - movl 8(%ebp), %eax - movl %eax, (%esp) - call _tag_fixnum - movl %eax, -4(%ebp) -L35: - movl -4(%ebp), %eax - leave - ret - .def _tag_bignum; .scl 3; .type 32; .endef -_tag_bignum: - pushl %ebp - movl %esp, %ebp - movl 8(%ebp), %eax - andl $-8, %eax - orl $1, %eax - popl %ebp - ret -.globl _signal_error - .def _signal_error; .scl 2; .type 32; .endef -_signal_error: - pushl %ebp - movl %esp, %ebp - subl $24, %esp - movl 8(%ebp), %eax - movl %eax, (%esp) - call _tag_fixnum - movl %eax, %edx - movl 12(%ebp), %eax - movl %eax, 12(%esp) - movl $7, 8(%esp) - movl %edx, 4(%esp) - movl $5, (%esp) - call _general_error - leave - ret -.globl _divide_by_zero_error - .def _divide_by_zero_error; .scl 2; .type 32; .endef -_divide_by_zero_error: - pushl %ebp - movl %esp, %ebp - subl $24, %esp - movl 8(%ebp), %eax - movl %eax, 12(%esp) - movl $7, 8(%esp) - movl $7, 4(%esp) - movl $4, (%esp) - call _general_error - leave - ret -.globl _memory_signal_handler_impl - .def _memory_signal_handler_impl; .scl 2; .type 32; .endef -_memory_signal_handler_impl: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - movl _signal_callstack_top, %eax - movl %eax, 4(%esp) - movl _signal_fault_addr, %eax - movl %eax, (%esp) - call _memory_protection_error - leave - ret -.globl _divide_by_zero_signal_handler_impl - .def _divide_by_zero_signal_handler_impl; .scl 2; .type 32; .endef -_divide_by_zero_signal_handler_impl: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - movl _signal_callstack_top, %eax - movl %eax, (%esp) - call _divide_by_zero_error - leave - ret -.globl _misc_signal_handler_impl - .def _misc_signal_handler_impl; .scl 2; .type 32; .endef -_misc_signal_handler_impl: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - movl _signal_callstack_top, %eax - movl %eax, 4(%esp) - movl _signal_number, %eax - movl %eax, (%esp) - call _signal_error - leave - ret -.globl _primitive_throw - .def _primitive_throw; .scl 2; .type 32; .endef -_primitive_throw: - 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_throw_impl - leave - ret - .def _primitive_throw_impl; .scl 3; .type 32; .endef -_primitive_throw_impl: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - call _dpop - call _dpop - movl %eax, %ecx - movl _stack_chain, %eax - movl (%eax), %edx - movl %ecx, %eax - call _throw_impl - 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_call_clear - .def _primitive_call_clear; .scl 2; .type 32; .endef -_primitive_call_clear: - 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_call_clear_impl - leave - ret - .def _primitive_call_clear_impl; .scl 3; .type 32; .endef -_primitive_call_clear_impl: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - call _dpop - movl _stack_chain, %edx - movl 4(%edx), %edx - call _throw_impl - leave - ret -.globl _primitive_unimplemented2 - .def _primitive_unimplemented2; .scl 2; .type 32; .endef -_primitive_unimplemented2: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - movl %eax, -4(%ebp) - movl %edx, -8(%ebp) - call _not_implemented_error - leave - ret -.globl _primitive_unimplemented - .def _primitive_unimplemented; .scl 2; .type 32; .endef -_primitive_unimplemented: - 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_unimplemented_impl - leave - ret - .def _primitive_unimplemented_impl; .scl 3; .type 32; .endef -_primitive_unimplemented_impl: - pushl %ebp - movl %esp, %ebp - subl $8, %esp - call _not_implemented_error - 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 _save_callstack_top; .scl 3; .type 32; .endef - .def _getpagesize; .scl 3; .type 32; .endef - .def _allot_array_4; .scl 3; .type 32; .endef - .def _print_obj; .scl 3; .type 32; .endef - .def _throw_impl; .scl 3; .type 32; .endef - .def _fix_callstack_top; .scl 3; .type 32; .endef - .def _fix_stacks; .scl 3; .type 32; .endef - .def _factorbug; .scl 3; .type 32; .endef - .def _exit; .scl 3; .type 32; .endef - .def ___getreent; .scl 3; .type 32; .endef - .def _fprintf; .scl 3; .type 32; .endef - .def _critical_error; .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" diff --git a/vm/run.s b/vm/run.s deleted file mode 100644 index 78b2adac84..0000000000 --- a/vm/run.s +++ /dev/null @@ -1,1511 +0,0 @@ - .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"