Как переместить однословные данные между векторами ARMv7 NEON

assembly arm neon armv7

114 просмотра

2 ответа

Я пытаюсь разработать ассемблерный код, используя ARMv7 NEON векторизацию. В какой-то момент мне нужно скопировать 32-битное значение (одно слово) из одного вектора NEON в другой, что-то вроде mov dm[0], dn[1]. Когда я проверил руководство, я не смог найти ни одной операции movили vmovоперации, которая могла бы выполнять эту логику, так как они должны иметь регистры ARM rв источнике или в месте назначения. Любая идея или альтернативы?

Автор: A23149577 Источник Размещён: 24.07.2019 02:39

Ответы (2)


2 плюса

Если ты хочешь:

1) mov d0 [0], d1 [0]

vext d0, d0, d1, #4
vrev64.32 d0, d0

2) mov d0 [0], d1 [1]

vtrn.32 d1, d0

3) mov d0 [1], d1 [0]

vtrn.32 d0, d1

4) mov d0 [1], d1 [1]

vext d0, d1, d0, #4
vrev64.32 d0, d0

Обратите внимание, что это d1повреждается в случае 2) и 3). Чтобы избежать этого, вы должны скопировать d1во временный реестр d2и использовать его вместо этого.

Автор: Jake 'Alquimista' LEE Размещён: 25.05.2018 08:43

1 плюс

В 32-битном режиме (ARMv7 и более ранних, а не ARMv8) каждый регистр Q имеет псевдоним 2 dрегистра / 4 sрегистра. например q1есть d2..3и также s4..7. Вы можете скопировать их отдельно.

Я не уверен, есть ли штраф за слияние за написание sрегистра, а затем за чтение содержащего qрегистра на любых ARM uarches.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s03s02.html имеет карту регистров: только q0..q7 имеют sпсевдонимы -register . В q8..q15 есть только dкомпоненты регистра. (т. е. всего 32 sрегистра, 32 dрегистра и 16 qрегистров, поэтому d16..31их подкомпоненты не имеют отдельно адресуемой части, а q8..15только 64-битные элементы dword выставляются отдельно).

Если нет лучшего способа сделать это, то оставьте векторы, которые вам нужны, чтобы нарезать их кубиками в младших 8 qрегистрах.


ARMv8 (AArch64) ввел инструкции, которые могут индексировать в векторные регистры, потому что s3это низкое слово q3: перекрытие / упаковка изменены.

AArch32 против 64 SIMD регистров

Автор: Peter Cordes Размещён: 24.05.2018 04:12
Вопросы из категории :
32x32