rv32emu 加速規劃
參考 ria-jit
IR
格式
Parse elf file 並將 elf file 中的指令轉成上述 IR 格式,一個 IR block 存有一串指令轉換後的 IR,IR block 的邊界為 branch 指令、jump 指令﹑label 或程式結束。這些 IR block 會存在 block cache 中,key 值為 block 中第一個指令的 pc
。
更改部分
- 在 function
elf_load
中將指令轉為 IR,原本會將指令和資料寫入 memory,改動後只寫入資料。
- 原本 JIT 流程如果找不到 block 會進行
fetch_and_record
指令,現在改成直接到 block cache 找對應的 IR block。
- 將 instruction to C code 改寫成 IR to C code
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
圖為原始 JIT 實作與加入 IR 後的比較
預期加速部分
fetch_and_record
指令改成直接到 block cache 找對應的 IR block。
- IR 轉成 C code 時可以 package 多個指令,因為這個 IR 格式可以檢查暫存器的相依性
- AUIPC + ADDI -> 指令合成一個 funciton
- AUIPC + LW -> 指令合成一個 funciton
- LUI + ALU 指令 -> 指令合成一個 funciton
- ALU 指令 + branch 指令 -> 指令合成一個 funciton
- LW + ALU 指令 + branch 指令 -> 指令合成一個 funciton
- SLLI + SRLI -> 指令合成一個 funciton(改成用 and mask)
...待補