Ассамблея заменяет константу значением регистра

Я не специалист по сборке, так что это может быть просто.

Если у меня есть инструкция, которая ожидает постоянного значения в качестве параметра, например, так:

VQSHRN.U32 d0,q0,#16

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

В случае, если это имеет значение, я пишу сборку ARMv7 и вставляю ее в код c ++. Благодарю.

1

Решение

Как @Michael указал, VQRSHL это подходящая команда сдвига по регистру здесь — к счастью, право оказывается отрицательным слева. Я бы использовал VDUP превратить r0 сначала в соответствующий вектор значений сдвига, и VQMOVN потом для сужения. Все они доступны в качестве встроенных компонентов, чтобы помочь избежать неприятностей, связанных со встроенной сборкой, что-то вроде этого:

vshift = vdupq_n_s32(-shift);
result = vqmovn_u32(vqrshlq_u32(data, vshift));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]