Почему RV64 ввел новые коды операций для 32-битных операций вместо 64-битных

Проходя через спецификацию RISC-V, я заметил, что 64-битная версия отличается от 32-битной тем, что она

  1. Расширить регистры до 64 бит
  2. Изменены инструкции, действующие на весь 64-битный диапазон.
  3. Добавлена ​​новая инструкция для выполнения 32-битных операций

Это делает код RV32 несовместимым с RV64. Однако, если бы 64-битная версия была бы реализована с использованием:

  1. Расширить регистры до 64 бит
  2. переименовывать ADD/SUB/SHL/.. в ADDW/SUBW/SHLW/.. и оставьте их работоспособными только на 32 битах со знаком расширения.
  3. Добавить новые инструкции ADD/SUB/SHL/.. или же ADDD/SUBD/SHLD/.. действовать на полную 64 бит

Это позволило бы программам RV32 работать и на RV64. Для реализации ЦП значение efford останется прежним, поскольку в обоих случаях должны быть реализованы 64-битная и 32-битная инструкция, и в отличие от спецификации будут заменены только коды операций для 64-битной и 32-битной версии. (За исключением, может быть, для инструкции умножения.)

Так почему же RISC-V решил добавить новые коды операций для 32-битных операций вместо 64-битных операций в RV64?

1 ответ

RV64 и RV32 вполне совместимы. Если программа не полагается на неявную 32-битную арифметику по модулю и все адреса вписываются в 32-битную, машинный код может быть таким же. Однако очень просто добавить полный пользовательский режим RV32 к процессору RV64.

64-битный суперсет RV32 будет слишком сложным. Недостаточно места для кода операции для AUIPC, JAL, LOAD, STORE и BRANCH. Хуже с дополнительными расширениями.

Несколько 32-битных инструкций в RV64 в основном предназначены для программ, использующих 32-битную арифметику по модулю. Это очень распространенная проблема. Хотя быстрый и переносимый код должен их избегать.

Другие вопросы по тегам