Try   HackMD

rv32emu 加速規劃

參考 ria-jit

IR 格式

{ instruction name, rs1, rs2, rd, h1, h2, imm}
*  mnem : mnem
 *  rs1, rs2, rd :
 *      rs1_h1 means, that rs1 of the instruction
 *      has to be the same as in the instruction at
 *      the position stored in h1. (block_cache[pattern_start + h1]).
 *      rs2, rd work the same. all are also available with h2.
 *
 *      Example:
 *      pattern_element jsjfbefjb[] = {
 *          {.....},
 *          {.....},
 *          {ADDI, rd_h1, DONT_CARE, rs1_h2, 1, 0, 1, 32}
 *      };
 *
 *      In this example, rs1 of the 3rd instruction has to be
 *      the same register as rd of the second instruction,
 *      and rd has to be the same register as rs1 of the first instruction.
 *      The immediate has to be 32.
 *
 *      NOTE: not all options are implemented for every field yet
 *            (to avoid unnecessary comparisons in matcher).
 *            Do so in the switch-case under the corresponding comments (e.g. "rs1 match") in optimize.c
 *
 *  h1, h2 : helper variables
 *
 *  imm : immediate
 *

Parse elf file 並將 elf file 中的指令轉成上述 IR 格式,一個 IR block 存有一串指令轉換後的 IR,IR block 的邊界為 branch 指令、jump 指令﹑label 或程式結束。這些 IR block 會存在 block cache 中,key 值為 block 中第一個指令的 pc

更改部分

  1. 在 function elf_load 中將指令轉為 IR,原本會將指令和資料寫入 memory,改動後只寫入資料。
  2. 原本 JIT 流程如果找不到 block 會進行 fetch_and_record 指令,現在改成直接到 block cache 找對應的 IR block。
  3. 將 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 格式可以檢查暫存器的相依性
    1. AUIPC + ADDI -> 指令合成一個 funciton
    2. AUIPC + LW -> 指令合成一個 funciton
    3. LUI + ALU 指令 -> 指令合成一個 funciton
    4. ALU 指令 + branch 指令 -> 指令合成一個 funciton
    5. LW + ALU 指令 + branch 指令 -> 指令合成一個 funciton
    6. SLLI + SRLI -> 指令合成一個 funciton(改成用 and mask)
      ...待補