Проблемы совместимости с 32/64-разрядной версией RISC-V

Предположим, вы берете программу RV32 и пытаетесь запустить ее в 64-битной системе. Какие проблемы совместимости могут возникнуть?

Насколько я понимаю, кодировка инструкций такая же, и на RISC-V (как и в других современных архитектурах RISC, хотя и в отличие от x86) операции ALU автоматически работают с любым размером слова, поэтому, если вы добавите содержимое пары регистров, вы получите 32-битное или 64-битное дополнение, в зависимости от ситуации. Загрузка и сохранение, конечно, работают с явно указанным размером, потому что они зависят от того, сколько байтов было выделено в памяти.

Одна теоретически возможная проблема совместимости может возникнуть, если код зависит от отбрасываемых битов старше 32, например прибавьте 2 ^ 31 к себе и сравните результат с нулем.

Другая, более практическая проблема может возникнуть, если операционная система предоставляет адреса памяти за пределами первых 4 гигабайт, которые будут искажены, когда код хранит адреса в 32-битных переменных.

Есть ли еще какие-то проблемы, которые мне не хватает?


person rwallace    schedule 28.03.2019    source источник


Ответы (1)


Вы правы в отношении обеих возможных проблем совместимости.

Кроме того, некоторые регистры управления и состояния (а именно: cycleh, instreth, timeh) не нужны в RV64I и поэтому не существуют. Любой код, который пытается получить к ним доступ, должен вызывать ошибку.

Однако есть инструкции использовать только младшие 32 бита для операций ALU. Что потенциально можно изменить, заменив код операции и funct3 в двоичном файле.

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

Ссылки Спецификация RISC-V v2.2:

  • Глава 4 спецификации RISC-V Spec. v2.2 описывает различия между RV32I и RV64I.
  • Глава 2.8 описывает регистры управления и состояния.
  • В таблице 19.3 перечислены все CSR в стандарте.
person TheThirdOne    schedule 29.03.2019