mntmn 4f85691fef make the GUI kinda work on ARM hosted; readme update преди 6 години
..
legacy 5395a2c794 directory cleanup преди 9 години
os 4f85691fef make the GUI kinda work on ARM hosted; readme update преди 6 години
tests 2595d92211 fix broken nested parameter passing in functions; fix various demos преди 6 години
README.md 906ac43063 cleanup stage 1 for standalone sledge build преди 9 години
alloc.c d17b52de7c refactored signature/type system; support nested structs; refactor gfx lib to use surface and font structures; various fixes преди 9 години
alloc.h dcd180bc0f first working struct implementation преди 9 години
boot-os.l 7a05af33ab don't executed failed jitted code преди 6 години
build_arm.sh cc4b125491 build_arm.sh and some minor cleanup преди 6 години
build_arm_console.sh cc4b125491 build_arm.sh and some minor cleanup преди 6 години
build_win32.sh 129d568e4d first completely working x86 jit and working win32 compile target преди 9 години
build_x64.sh 02809f1beb build with -Wall without warnings; fix SDL scaling; finalize struct syntax; fix (let) related crash преди 9 години
build_x86.sh 567d5c69e4 sdl back in x86; simplify repl/editor spawn funcs преди 9 години
compiler_arm_hosted.c 4f85691fef make the GUI kinda work on ARM hosted; readme update преди 6 години
compiler_m68k.c 7a8db6744d working amiga demo преди 9 години
compiler_new.c 2595d92211 fix broken nested parameter passing in functions; fix various demos преди 6 години
compiler_new.h d17b52de7c refactored signature/type system; support nested structs; refactor gfx lib to use surface and font structures; various fixes преди 9 години
compiler_x64_hosted.c b1fa2aa5be Merge branch 'master' of https://github.com/mntmn/interim преди 9 години
compiler_x86.c 31e9af59d1 fixed x86 instructions; improved wm with clipping and focus follows mouse преди 9 години
jit_arm_raw.c 8d5c8de190 fix arm/rpi2 build преди 9 години
jit_m68k.c fe0907c1f7 fix x64 hosted stack alignment преди 9 години
jit_x64.c d17b52de7c refactored signature/type system; support nested structs; refactor gfx lib to use surface and font structures; various fixes преди 9 години
jit_x86.c 31e9af59d1 fixed x86 instructions; improved wm with clipping and focus follows mouse преди 9 години
minilisp.h dcd180bc0f first working struct implementation преди 9 години
reader.c 02809f1beb build with -Wall without warnings; fix SDL scaling; finalize struct syntax; fix (let) related crash преди 9 години
reader.h 18b31b47a7 move stack; cleanup; new mmu init; performance boost; stable on-screen REPL :3 преди 9 години
sledge.c 093ea1f0d8 Print final newline before exit преди 8 години
stream.c d17b52de7c refactored signature/type system; support nested structs; refactor gfx lib to use surface and font structures; various fixes преди 9 години
stream.h 3601120260 i386 tests преди 9 години
strmap.c 2eef008a16 merge and finalize mac os x fixes преди 9 години
strmap.h 906ac43063 cleanup stage 1 for standalone sledge build преди 9 години
unifont.bin 32524f7b0f fix string writer bug; fix editor exit crash; more compact font file; various fixes преди 9 години
unifont.png 5395a2c794 directory cleanup преди 9 години
utf8.c 906ac43063 cleanup stage 1 for standalone sledge build преди 9 години
utf8.h 906ac43063 cleanup stage 1 for standalone sledge build преди 9 години
writer.c 9eb4ab8d9a fix a bit of arm hosted stuff преди 6 години
writer.h 906ac43063 cleanup stage 1 for standalone sledge build преди 9 години

README.md

mnt sledge

sledge JIT-compiles a minimal subset of LISP to a minimal subset of x64 or armv5 machine code.

dependencies

  • gcc (for building and for x64 JIT. not required for ARM JIT.)
  • optionally SDL or SDL2 for windowed framebuffer.

building (x64)

  1. Build using ./build.sh

building (rpi/ARM)

  1. Build using ./build_rpi.sh

usage

./sledge

sledge> (def my-function (fn a b (* a (+ a b))))

JIT ---------------------
push %rdi
jmp f1_0x7f6a0144ca98
f0_0x7f6a0144ca98:
push %rdi
movq %r12, %rdi
mov (%rdi), %rdi
movq %r13, %rsi
mov (%rsi), %rsi
addq %rsi, %rdi
movq %rdi, %rsi
pop %rdi
movq %r12, %rdi
mov (%rdi), %rdi
imulq %rsi, %rdi
mov $0x406f02, %rax
callq *%rax # alloc_int
ret
f1_0x7f6a0144ca98:
mov $0x7f6a0144ca98, %rax
movq %rax, %rsi
pop %rdi
movq %rax, %rsi
mov $0x7f6a0144c750, %rdi
mov $0x401b21, %rax
callq *%rax # insert_global_symbol
ret
-------------------------

sledge> (my-function 35 36)

JIT ---------------------
mov $0x7f6a0144cb28, %r12
mov $0x7f6a0144cb58, %r13
mov $0x7f6a16a8b003, %rax
callq *%rax # lambda
ret
-------------------------

2485