Вопросы

Использование сохраненных регистров в основной функции на ассемблере RISC-V

Предположим, что следующая простая основная функция написана на языке RISC-V Assembly:

.globl main
main:
     addi s3,zero,10 #Should this register (s3) be saved before using?

Поскольку s3 — это сохраненный регистр, следует соблюдать соглашения о вызове процедур, и, следовательно, этот регистр должен быть помещен в стек перед его использованием. Однако, глядя на исходный файл, можно увидеть, что никакая другая процедура не использовала этот регистр, и сохранение регистра в стеке кажется излишним.

Мой вопрос: следует ли сохранять регистры этих типов каждый раз перед каждым использованием, даже если это означает написание дополнительного (избыточного) кода только для соблюдения соглашений о вызовах? Можно ли иногда игнорировать эти соглашения для повышения производительности?

В приведенном выше примере следует ли сохранять регистр, потому что неизвестно, использовал ли главный вызывающий регистр s3?

Да, их нужно сохранять каждый раз, даже если для этого потребуется больше кода. Да, вызывающий main (например, код инициализации libc) может использовать s3 для своих собственных целей.   —  person zach    schedule 11.06.2021

Читать:
Вывод подсетей Azure со ссылками на присоединенную виртуальную сеть, таблицу маршрутизации и NSG.

Похожие записи

Ошибка сборки Anaconda Python Conda, ошибка WindowsError не может найти файл

admin

Лучший способ объединить переменные в наборе данных панели в R?

admin

Переименование файла Git. История доступна в cmd-строке, но не в интерфейсе github?

admin

libiconv-2_.dll отсутствует

admin

Не удается подключиться к базе данных MySQL из Monodevelop в Linux Mint

admin

Ключевые слова Intellisense для Python в Robot Framework не работают в VS Code

admin