#assembly #arm
#сборка #arm
Вопрос:
Быстрый и, возможно, глупый вопрос, но, тем не менее, он здесь. Запись в регистр сразу после чтения из него может вызвать опасность, если мы попытаемся выполнить запись в регистр до того, как его значение может быть извлечено предыдущей инструкцией. Вызывает ли следующая инструкция опасность на чипе ARM:
add r3, r0, r3
что по сути таково r3 = r0
?
Будет ли это представлять опасность для NEON? Пример:
vadd.32 q3, q0, q3
Комментарии:
1.Быстрое прочтение главы 16 Cortex-A8 TRM PDF позволяет предположить, что — если другие чипы ARM похожи — они оба должны завершиться за один цикл, но вы можете столкнуться с двойной проблемой (но для ответа на нее требуется контекст).
2. Способ проверить это — создать две примерные программы, которые пытаются
add r3, r0, r3
иadd r1, r0, r3
внутри цикла измеряют время выполнения. После многих итераций сравните времена: если они равны, опасности нет.
Ответ №1:
Опасности ВОЙНЫ нет.
Регистр назначения не нужен до того, как появятся исходные регистры; требование, чтобы r3
он был доступен для чтения в качестве входных данных, по крайней мере, так же сильно, как и требование, чтобы он был доступен для записи. Короче говоря, нет причин избегать этой конструкции.
Ответ №2:
Нет остановок, обновляющих один из операндов. Опасность ВОЙНЫ на самом деле довольно необычна, потому что записи обычно происходят позже в конвейере, чем чтение.