Я не в состоянии разобрать разницу между vld4_f32
и vld4q_f32
в инструкциях ARM NEON.
Путаница началась, когда я поднял свои уровни кодирования и начал смотреть на инструкции по сборке, а не на менее информативную природу.
Причина, по которой мне нужно использовать vld4 вариантную инструкцию, заключается в том, что я хотел бы захватить 4 float32_t
с каждой 4-й позиции из мой большой массив.
![alt text](https://i.stack.imgur.com/k2wKu.png)
Встроенные компоненты vld4_f32
и соответствующие инструкции по сборке выглядят следующим образом ( По этой ссылке )
float32x2x4_t vld4_f32 (const float32_t *)
Form of expected instruction(s): vld4.32 {d0, d1, d2, d3}, [r0]
Встроенная vld4q_f32
и соответствующие инструкции по сборке выглядят так:
float32x4x4_t vld4q_f32 (const float32_t *)
Form of expected instruction(s): vld4.32 {d0, d1, d2, d3}, [r0]
Ну, на уровне встроенных я вижу разницу в типе возврата , но если я посмотрю на инструкцию по сборке и количество регистров, они оба будут выглядеть одинаково. Как компилятор или ассемблер узнает разницу между ними?
Может кто-нибудь прояснить подробнее об этом, а также объяснить, как мне добиться загрузки 4 float32_t значений, которые расположены в каждой 4-й ячейке памяти в один регистр?