Кажется, что вы хотите получить сумму определенной длины массива, а не только четыре значения с плавающей запятой.
В этом случае ваш код будет работать, но он далек от оптимизации:
много-много конвейерных блокировок
ненужное 32-битное сложение за итерацию
Предполагается, что длина массива равнакратное 8 и по меньшей мере 16:
vldmia {q0-q1}, [pSrc]!
sub count, count, #8
loop:
pld [pSrc, #32]
vldmia {q3-q4}, [pSrc]!
subs count, count, #8
vadd.f32 q0, q0, q3
vadd.f32 q1, q1, q4
bgt loop
vadd.f32 q0, q0, q1
vpadd.f32 d0, d0, d1
vadd.f32 s0, s0, s1
- pld - будучи инструкцией ARM, а не NEON - имеет решающее значение для производительности.Это резко увеличивает частоту обращений к кешу.
Надеюсь, остальная часть приведенного выше кода не требует пояснений.
Вы заметите, что эта версия во много раз быстрее, чем ваша первоначальная.