Изменение всех LDUR на ADD и LD
Рассмотрим изменение в одноконтурном нетрубопроводном процессоре, который выполняет следующие инструкции: LDUR
, STUR
, R-type
а также CBZ
, Рассмотрим модификацию, которая заменяет LDUR
инструкции с парой новых инструкций следующим образом:
Оригинальный код:
LDUR X1, X2, #100 /* X1=mem[X2+100] */
Новый код:
ADD X4, x2, #100 /* X4=X2+100 */
LD X1, X4 /* X1=mem[X4] */
Меня спрашивают о возможных преимуществах и недостатках. Я вижу недостаток в превращении одной инструкции в 2 на не конвейерном процессоре. Я не могу найти какие-либо возможные преимущества.
Кто-нибудь знает о возможных преимуществах такого подхода?
1 ответ
Единственное, что приходит мне в голову - это смещения, но у меня есть интуитивное чувство, что может быть что-то скрытое, поскольку вопрос задается академическим человеком. Тем не мение:
LDUR
Возможное смещение находится в диапазоне от -256 до 255. ADD
с другой стороны, имеет больший диапазон смещения от 0 до 4095, что позволяет реализовать функцию для работы с большими статическими смещениями.
Doc:
Справочное руководство по архитектуре ARM ARMv8, для профиля архитектуры ARMv8-A
Ссылка:
ADD
: C6.2.4 (страница C6-698)LDUR
: C6.2.155 (страница C6-978)