Вызовет ли это опасность ВОЙНЫ?

#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:

Нет остановок, обновляющих один из операндов. Опасность ВОЙНЫ на самом деле довольно необычна, потому что записи обычно происходят позже в конвейере, чем чтение.