contributed by <judy66jo
>, <JonSyuGithub
>
只有八個運算字元,可做數學運算、迴圈,以下為分別對應的 C code
++ptr
--ptr
++*ptr
--*ptr
putchar(*ptr)
*ptr = getchar()
while(*ptr) {
}
A Dynamic Assembler for code generation engines.
Interpreter
Compiler
JIT
dasm_State
中jitcode
,透過dasm_link
與 dasm_encode
將 dasm_State
轉換成可執行的機器碼 block,並回傳jitcode
回傳的函式指標,也就是前面讀入的 brainf*ck 程式(已經轉為當前架構的機器碼)記錄未優化前時間
$ make bench-jit-x86
Executing Brainf*ck benchmark suite. Be patient.
progs/awib.b GOOD 98.3ms
progs/mandelbrot.b GOOD 2948.4ms
progs/hanoi.b GOOD 6291.6ms
$ make bench-jit-x64
Executing Brainf*ck benchmark suite. Be patient.
progs/awib.b GOOD 64.8ms
progs/mandelbrot.b GOOD 2969.5ms
progs/hanoi.b GOOD 6236.9ms
Contraction
將連續的 inc(+ , >) 或 dec(- , <) 合併成 add 或 sub
progs/awib.b GOOD 46.7ms
progs/mandelbrot.b GOOD 1032.8ms
progs/hanoi.b GOOD 3387.9ms
Clear loops & Copy loops & Multiplication loops
Scan loops
A09: jit-compiler
https://hackpad.com/2015q3-Homework-4B-5I46HyqOCGJ#:h=Jit-construct
https://embedded2015.hackpad.com/-Homework4-B-h5FfVE6RTeu
https://mimihalo.hackpad.com/HW4–2r8xNuU8gdf
sysprog21
Team23