/JIT-Compiler-Koak

Epitech Bachelor final project

Primary LanguageOCaml

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
******************************************************************************
******************************************************************************
****************************************++++++********************************
************************************+++++...++++++****************************
*********************************++++++++.. ...+++++**************************
*******************************++++++++++..   ..+++++*************************
******************************++++++++++.     ..++++++************************
****************************+++++++++....      ..++++++***********************
**************************++++++++.......      .....++++**********************
*************************++++++++.   .            ... .++*********************
***********************++++++++...                     ++*********************
*********************+++++++++....                    .+++********************
******************+++..+++++....                      ..+++*******************
**************++++++. ..........                        +++*******************
***********++++++++..        ..                         .++*******************
*********++++++++++...                                 .++++******************
********++++++++++..                                   .++++******************
*******++++++.....                                    ..++++******************
*******+........                                     ...++++******************
*******+... ....                                     ...++++******************
*******+++++......                                    ..++++******************
*******++++++++++...                                   .++++******************
*********++++++++++...                                  ++++******************
**********+++++++++..        ..                        ..++*******************
*************++++++.. ..........                        +++*******************
******************+++...+++.....                      ..+++*******************
*********************+++++++++....                    ..++********************
***********************++++++++...                     +++********************
*************************+++++++..   .            ... .++*********************
**************************++++++++.......      ......+++**********************
****************************+++++++++....      ..++++++***********************
*****************************++++++++++..     ..++++++************************
*******************************++++++++++..  ...+++++*************************
*********************************++++++++.. ...+++++**************************
***********************************++++++....+++++****************************
***************************************++++++++*******************************
******************************************************************************
******************************************************************************
******************************************************************************
******************************************************************************