В riscv-spec-2.2 он предоставляет следующую таблицу истинности поведения стека обратных адресов (RAS):
rd rs1 rs1=rd RAS action
!link !link - none
!link link - pop
link !link - push
link link 0 push and pop
link link 1 push
Я запутался в "случай push и pop", где riscv-spec-2.2 говорит, что он используется для поддержки сопрограмм:
Когда два разных регистра ссылок (x1 и x5) задаются как rs1 и rd, тогдаRAS одновременно выдвигается и выталкивается для поддержки сопрограмм "
Я также обнаружил, что в таблице рассылки riscv обсуждается таблица истинности RAS, но она не объясняет, почему" push and pop "для RAS может помочь сопрограммам (но упоминалось, что у Alpha также есть такой тип подсказок для сопрограмм):
https://groups.google.com/a/groups.riscv.org/d/msg/isa-dev/uZUTszCtgAA/f3jDhbjEAAAJ
В моем понимании толчок" и pop"RAS заменит верхнюю запись RAS. Следовательно, при возврате программного обеспечения из сопрограммы произойдет неправильный прогноз, поскольку был заменен правильный адрес возврата (в начале верхней записи RAS).кажется, не имеет никакой пользы для выполнения1023 * push и pop"сравнить с простым" push".
Почему RISCV выбирает" push and pop"RAS для сопрограмм?