JIT Compiler (arm backend) of Tony
 
程式碼測試流程:
sudo apt-get install lua5.2 lua-bitop
cd jit-construct && make
 
目前使用32位元電腦,皆無法執行x64指令集,打算改寫過整個x64的compiler以及JIT compiler成32-bit來玩玩看
x86 ISA reference  (from University of Virginia Computer Science)
 
 

x-64 compiler & ARM compiler

目前可以看到這兩個版本的實作其實都非常簡單,對照interpreter的實作其實很好理解程式碼的內容,比較有趣的地方可以參照這兩個 compiler 的 epilogue 其實都沒有加上 printf 
的 label 但是實際上再組譯的時候,gcc會幫你做動態連結變成 printf@GLIBC (後面位址也還沒填進去),表示在執行的時候會去找glibc作連結,也可以下 --static 來告訴 gcc 做靜態連結,此時printf的位址就會被填入,原來一般的compiler這麼強大
 

JIT Optimization

未做最佳化:
progs/awib.b             GOOD
133.4ms
progs/mandelbrot.b       GOOD
3668.0ms
progs/hanoi.b            GOOD
9749.1ms
 
把連續的 '+', '-', '<', '>' 合併過後得到的結果:
progs/awib.b             GOOD
76.4ms
progs/mandelbrot.b       GOOD
1324.0ms
progs/hanoi.b            GOOD
5307.1ms
 
再把 [-] pattern 改為歸零後的結果:
progs/awib.b             GOOD
67.9ms
progs/mandelbrot.b       GOOD
1292.1ms
progs/hanoi.b            GOOD
139.4ms
 
 
 
我用了簡單的lexical analyzer來分析,並初步驗證結果
progs/awib.b             GOOD
78.1ms
progs/mandelbrot.b       GOOD
1384.8ms
progs/hanoi.b            GOOD
5581.2ms
Lex & YACC is extremely powerful, maybe I should write some notes about it.
  • 一直嘗試要把語法分析用的yacc加進來偵測multiply語句,但是一直失敗
  • 目前打算先測試compiler來使用看看,觀察效能的提升