JIT-Compiler-Koak
Epitech Bachelor final project
Program compiling custom language Koak into X86 assembly.
Done in two weeks as a bachelor final project, would deserve lot of rewriting.
- Take a file written in Koak, a custom syntax similar to Kaleidoscope language.
- Write on standard output llvm pseudo assembly.
- Outputs a binary compiled in x86.
- has inference type.
Installation
-
install ocaml
-
install llvm>=3.9
-
install llvm binding for ocaml with:
opam install ctypes ctypes-foreign llvm
-
compile with:
make
File example
extern putchar(c:char):void;
def printdensity(d)
if d > 8 then
putchar(d)
else
putchar(42);
printdensity(10);
Pseudo assembly output
declare void @putchar(i8 %c)
define void @printdensity(i8 %d) {
entry:
%cmptmp = icmp ult i8 8, %d
%booltmp = sext i1 %cmptmp to i8
%ifcond = icmp ult i8 0, %booltmp
br i1 %ifcond, label %then, label %else
then: ; preds = %entry
call void @putchar(i8 %d)
br label %ifcont
else: ; preds = %entry
call void @putchar(i8 42)
br label %ifcont
ifcont: ; preds = %else, %then
%phi = phi i8 [ 0, %then ], [ 0, %else ]
ret void
}
define i32 @main() {
entry:
call void @printdensity(i8 10)
ret i32 0
}
Mandelset.koak
./koak code/mandelset.koak
./a.out
******************************************************************************
******************************************************************************
****************************************++++++********************************
************************************+++++...++++++****************************
*********************************++++++++.. ...+++++**************************
*******************************++++++++++.. ..+++++*************************
******************************++++++++++. ..++++++************************
****************************+++++++++.... ..++++++***********************
**************************++++++++....... .....++++**********************
*************************++++++++. . ... .++*********************
***********************++++++++... ++*********************
*********************+++++++++.... .+++********************
******************+++..+++++.... ..+++*******************
**************++++++. .......... +++*******************
***********++++++++.. .. .++*******************
*********++++++++++... .++++******************
********++++++++++.. .++++******************
*******++++++..... ..++++******************
*******+........ ...++++******************
*******+... .... ...++++******************
*******+++++...... ..++++******************
*******++++++++++... .++++******************
*********++++++++++... ++++******************
**********+++++++++.. .. ..++*******************
*************++++++.. .......... +++*******************
******************+++...+++..... ..+++*******************
*********************+++++++++.... ..++********************
***********************++++++++... +++********************
*************************+++++++.. . ... .++*********************
**************************++++++++....... ......+++**********************
****************************+++++++++.... ..++++++***********************
*****************************++++++++++.. ..++++++************************
*******************************++++++++++.. ...+++++*************************
*********************************++++++++.. ...+++++**************************
***********************************++++++....+++++****************************
***************************************++++++++*******************************
******************************************************************************
******************************************************************************
******************************************************************************
******************************************************************************