Какова цель использования $ 0 в качестве пункта назначения в MIPS - PullRequest
0 голосов
/ 14 ноября 2018

Когда я изучал условия для обнаружения опасностей при пересылке, я нашел это предложение очень запутанным.

'В случае, если инструкция в конвейере имеет $ 0 в качестве пункта назначения (например,, sll $0, $1, 2), мы хотим избежать перенаправления его, возможно, ненулевого значения результата. '

Я думал, что регистр $ 0 не может быть записан в другое значение, поэтому его значение всегда равно 0. Тогда каково значениеиспользование sll $0, $1, 2, сдвиг влево значения в $ 1 на 2 и сохранение его в $ 0, что нельзя изменить?Так как же привязка $ 0 к месту назначения может быть связана с необходимостью переадресации?

1 Ответ

0 голосов
/ 14 ноября 2018

«необходимость пересылки» указывает на то, что вы не понимаете пересылку.Это оптимизация.В этом нет необходимости.

Оптимизация не должна влиять на семантику.Сохранение значения в $0 и последующее чтение значения $0 должны возвращать 0 в соответствии с обычной семантикой, не ранее сохраненное значение.Тем не менее, пересылка перенаправит сохраненное значение.

Теперь возникает вопрос, почему $0 может использоваться в качестве места хранения.Это просто логика RISC наличия ортогональных наборов команд.На архитектурах, отличных от MIPS, это несколько более полезно, поскольку эти операции с отбрасываемыми значениями все еще могут устанавливать флаги.

...