大約兩個多星期沒做JIT了,經過之前些其他代碼消遣,現在還是繼續做下去的好。目前的成果是完成了匯編數據結構、完成了匯編到機器碼的轉換器、知道了成員對齊、調用轉換的約定、知道如何實現異常處理以及完成了中間指令的數據結構和檢查。現在需要做的事中間指令到匯編的轉換程序。
為了盡快看到結果(因為優化并不是JIT第一版的重點),完成一個C簡化版編譯器,現在采取的策略如下:
1、不優化,將每一條中間指令都轉換到幾條匯編指令,而忽略中間指令之間的關系。
2、將變量進行4字節對齊。因為x86要求參數要4字節對齊,那么變量也對其的話,將會簡化很多事情。譬如說將一個8字節的函數結果(EDX:EAX)寫進一個變量就很容易了。
3、如果出現大于8個字節的函數結果,那么在函數啟動的時候將EAX存進EBX。因為最簡單的指令生成方法是不需要動用EBX的。
4、函數開始的時候保存所有寄存器,結束的時候恢復,不計算實際用了多少寄存器。
用了這么多層數據結構將JIT要命的部分分離開了。以后即使上面有很多個語言,我重寫中間指令到匯編指令的代碼也是完全沒有影響的,實現了各個部分單獨變化的目標。
posted on 2009-04-10 23:30
陳梓瀚(vczh) 閱讀(1920)
評論(1) 編輯 收藏 引用 所屬分類:
JIT