Как добавить пользовательскую инструкцию в кросс-компилятор RISCV? - PullRequest
0 голосов
/ 01 ноября 2019

Я клонировал riscv-tools (https://github.com/riscv/riscv-tools) и riscv-gnu-toolchain (https://github.com/riscv/riscv-gnu-toolchain)) и смог получить Spike, pk и кросс-компилятор (riscv64-unknown-elf-gcc)чтобы работать. Я хочу расширить это и иметь возможность добавлять пользовательские инструкции и нашел этот учебник: https://nitish2112.github.io/post/adding-instruction-riscv/, но он немного устарел. Текущее хранилище RISCV GNU Toolchain не имеет директории riscv-binutils-gdb, но делаету меня есть каталог riscv-binutils и каталог riscv-gdb, поэтому я попытался использовать файлы в этих каталогах вместо добавления инструкции.

После того, как я добавил код операции в riscv-tools / riscv-opcodes / opcodes и вфайлы в riscv-gnu-toolchian / riscv- {binutils, gcb} и собрал его, выполнив следующее:

sudo ./configure --prefix=/home/me/riscv64
sudo make newlib -j $(nproc)
sudo make linux -j $(nproc)
export PATH="$PATH:/home/me/riscv64/bin"
export RISCV="/home/me/riscv64"

Затем я протестировал его, запустив

riscv64-unknown-elf-gcc -o mod mod.c

с тем жеФайл mod.c в учебнике, за исключением того, что я добавил точку с запятой после вставки asm, чтобы заставить его передать компилятор. Затем я получаю следующую ошибку от ассемблера:

mod.c:7: Error: unrecognized opcode `mod a5,a5,a4'

Есть ли что-то, что я делаюнеправильно? Спасибо за вашу помощь и время.

1 Ответ

0 голосов
/ 08 ноября 2019

Похоже, что этот учебник действительно устарел. К счастью, кодовая база RISC-V упростила добавление новой инструкции. Инструкции в https://github.com/riscv/riscv-isa-sim очень полезны:

Для добавления инструкции в симулятор требуется два шага:

  1. Опишите функциональное поведение инструкции вфайл riscv / insns / .h. Изучите другие инструкции в этом каталоге в качестве отправной точки.

  2. Добавьте маску кода операции и кода операции в riscv / opcodes.h. Либо добавьте его в пакет riscv-opcodes, и он сделает это за вас:

    $ cd ../riscv-opcodes $ vi opcodes // добавьте строку для новой инструкции $ make install

  3. Перестройка симулятора.

Репозиторий riscv-opcodes вызывается кросс-компиляторной кодовой цепью, ассемблером, а такжесимулятор, поэтому он должен работать, чтобы просто восстановить их. Чтобы добавить его к кросс-компилятору и, что более важно, кросс-компилятор на самом деле выдает эту инструкцию (в данном случае mod) будет на много порядков сложнее, поэтому блог использовал встроенную сборку.

...