以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/10/20/040000より取得しました。


Snipersim 8.1をRISC-V対応でビルドさせる方法試行 (5. build-riscv.shへのデコーダ生成統合)

前回の記事では、riscv-opcodesを使ってRISC-Vデコーダを自動生成する方法について試行した。

しかし、毎回以下のような長いコマンドを手動で実行するのは面倒なので、 build-riscv.sh に統合してしまおう。

cat riscv/riscv-opcodes-latest/extensions/rv_i \
    riscv/riscv-opcodes-latest/extensions/rv64_i \
    riscv/riscv-opcodes-latest/extensions/rv_m \
    riscv/riscv-opcodes-latest/extensions/rv64_m \
    riscv/riscv-opcodes-latest/extensions/rv_a \
    riscv/riscv-opcodes-latest/extensions/rv64_a \
    riscv/riscv-opcodes-latest/extensions/rv_f \
    riscv/riscv-opcodes-latest/extensions/rv64_f \
    riscv/riscv-opcodes-latest/extensions/rv_d \
    riscv/riscv-opcodes-latest/extensions/rv64_d \
    riscv/riscv-opcodes-latest/extensions/rv_c \
    riscv/riscv-opcodes-latest/extensions/rv64_c \
    riscv/riscv-opcodes-latest/extensions/rv64_zba \
    riscv/riscv-opcodes-latest/extensions/rv64_zbb \
    riscv/riscv-opcodes-latest/extensions/rv64_zbs \
    riscv/riscv-opcodes-latest/extensions/rv_v | \
python3 riscv/scripts/generate_riscv_decoder.py \
    riscv/riscv-opcodes-latest/arg_lut.csv \
    /dev/stdin > \
    decoder_lib/riscv_decoder_generated.h

build-riscv.sh への統合

SniperSimのRISC-Vビルドスクリプトriscv/build-riscv.shは、以下のような構成になっている:

セクション1: 前提条件セットアップ
  1a) Sniper Pin設定
  1b) riscv-tools
  1c) rv8 simulator
  1d) Speckle

セクション2: コンパイル
  2a) Sniper
  2b) riscv-tools
  2c) rv8
  2d) Speckle

セクション3-4: SIFTトレース生成と実行

build-riscv.shのセクション2の先頭に、デコーダ生成処理を追加した:

### 2) Compiling Binaries

# 2a) Generate RISC-V Decoder Header
echo "Generating RISC-V Decoder Header..."
cd $SNIPER_ROOT
if [ -f riscv/scripts/generate_riscv_decoder.py ] && [ -f riscv/riscv-opcodes-latest/arg_lut.csv ]; then
    echo "  Generating decoder_lib/riscv_decoder_generated.h..."
    cat riscv/riscv-opcodes-latest/extensions/rv_i \
        riscv/riscv-opcodes-latest/extensions/rv64_i \
        riscv/riscv-opcodes-latest/extensions/rv_m \
        riscv/riscv-opcodes-latest/extensions/rv64_m \
        riscv/riscv-opcodes-latest/extensions/rv_a \
        riscv/riscv-opcodes-latest/extensions/rv64_a \
        riscv/riscv-opcodes-latest/extensions/rv_f \
        riscv/riscv-opcodes-latest/extensions/rv64_f \
        riscv/riscv-opcodes-latest/extensions/rv_d \
        riscv/riscv-opcodes-latest/extensions/rv64_d \
        riscv/riscv-opcodes-latest/extensions/rv_c \
        riscv/riscv-opcodes-latest/extensions/rv64_c \
        riscv/riscv-opcodes-latest/extensions/rv64_zba \
        riscv/riscv-opcodes-latest/extensions/rv64_zbb \
        riscv/riscv-opcodes-latest/extensions/rv64_zbs \
        riscv/riscv-opcodes-latest/extensions/rv_v | \
    python3 riscv/scripts/generate_riscv_decoder.py \
        riscv/riscv-opcodes-latest/arg_lut.csv \
        /dev/stdin > \
        decoder_lib/riscv_decoder_generated.h
    
    if [ $? -eq 0 ]; then
        INST_COUNT=$(grep -c "rv_op_" decoder_lib/riscv_decoder_generated.h | head -1)
        echo "  ✓ Generated decoder with ~${INST_COUNT} instructions"
    else
        echo "  ✗ Decoder generation failed!"
        exit 1
    fi
else
    echo "  Warning: Decoder generation skipped (missing files)"
fi
echo "####################################################################################"

# 2b) Sniper
echo "Compiling Sniper..."
cd $SNIPER_ROOT
make # TODO: Parallel builds currently broken

デコーダ生成部分だけを単独でテストした結果:

=== 生成結果 ===
7584 decoder_lib/riscv_decoder_generated.h

575個の命令が定義されました

7,584行のヘッダーファイルに、575個のRISC-V命令(I/M/A/F/D/C/Zba/Zbb/Zbs/V拡張)が正しく定義されている。




以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/10/20/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14