mntmn 7348d5286e some work on GTN 8 years ago
..
legacy 5395a2c794 directory cleanup 8 years ago
os 7348d5286e some work on GTN 8 years ago
tests 7348d5286e some work on GTN 8 years ago
README.md 906ac43063 cleanup stage 1 for standalone sledge build 9 years ago
alloc.c 7348d5286e some work on GTN 8 years ago
alloc.h 3c14dfa1fc working stack-passed args impl; working gtn 8 years ago
build_rpi.sh 3a1fa2124e raw tty keyboard device 8 years ago
build_x64.sh a119388545 directory read in posixfs; terminal polishing; bitops tests 8 years ago
compiler_arm_hosted.c 88a2590b49 sledge file input support 8 years ago
compiler_new.c 7348d5286e some work on GTN 8 years ago
compiler_new.h 46b1c33aa2 eval tracing WIP 8 years ago
compiler_x64_hosted.c 29c4c1079f stabilization of editor; x64 fixes; some cleanup 8 years ago
jit_arm_raw.c c316487f41 hardening of some builtins 8 years ago
jit_x64.c c316487f41 hardening of some builtins 8 years ago
minilisp.h 4171a92937 fixed fatfs crashes, stable editor, bugfixes 8 years ago
mksprite.sh 6db8a181bf mario experiments 8 years ago
reader.c bfcc7b8b0a el cheapo type inference for let 8 years ago
reader.h 18b31b47a7 move stack; cleanup; new mmu init; performance boost; stable on-screen REPL :3 9 years ago
sledge.c 95d5c838ec net/tcp fs test, irc client, general niceness 8 years ago
stream.c 3a1fa2124e raw tty keyboard device 8 years ago
stream.h 906ac43063 cleanup stage 1 for standalone sledge build 9 years ago
strmap.c 906ac43063 cleanup stage 1 for standalone sledge build 9 years ago
strmap.h 906ac43063 cleanup stage 1 for standalone sledge build 9 years ago
unifont.bin 32524f7b0f fix string writer bug; fix editor exit crash; more compact font file; various fixes 8 years ago
unifont.png 5395a2c794 directory cleanup 8 years ago
utf8.c 906ac43063 cleanup stage 1 for standalone sledge build 9 years ago
utf8.h 906ac43063 cleanup stage 1 for standalone sledge build 9 years ago
writer.c 4171a92937 fixed fatfs crashes, stable editor, bugfixes 8 years ago
writer.h 906ac43063 cleanup stage 1 for standalone sledge build 9 years ago

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