Некоторые определения, чтобы четко ответить ...
NEON имеет 32 регистра, шириной 64 бит (двойной вид в виде 16 регистров, ширина 128 бит).
Блок NEON может просматривать тот же регистр банк как:
- шестнадцать 128-битный квадраслово регистров, Q0-Q15
- тридцать два 64-разрядных двойных регистры, D0-D31 ,
uint16x8_t
представляет собой тип, который требует 128-битного хранения, таким образом, она должна быть в quadword
регистре.
ARM NEON Intrinsics имеет определение под названием vector array data type
в ARM® C Language Extensions:
... для использования в нагрузке и торговых операциях, в операциях табличных и как тип результата операции, верните пару векторов.
vzip инструкция
... чередует элементы двух векторов.
vzip Dd, Dm
и имеет intrinsic как
uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
из них мы можем заключить, что uint8x8x2_t на самом деле список из двух случайных пронумерованных регистров двойных, потому что инструкции vzip Безразлично у нас нет требования по порядку входных регистров.
Теперь ответ ...
uint8x8x2_t
может содержать непоследовательные два dualword регистров, а uint16x8_t
это структура данных, состоящую из двух последовательных регистров dualword, который первые из них имеет даже индекс (D0-D31 -> Q0 -Q15).
Из-за этого вы не можете отличить vector array data type
с двумя регистрами двойного слова в регистр квадрациклов ... легко.
Компилятор может быть достаточно умным, чтобы помочь вам, или вы можете просто принудительно преобразовать, однако я бы проверил полученную сборку на правильность, а также на производительность.
Просто обнаружил в руководстве, uint8x8x2_t называется «Вектор массив типа данных». Но до сих пор не знаю, как конвертировать. –
Можете ли вы опубликовать небольшой фрагмент, чтобы продемонстрировать свой вопрос? – auselen