SIMD vectorize atan2 usando o assembly ARM NEON

Eu quero calcular a magnitude e o ângulo de 4 pontos usando instruções de néon SIMD e montagem do braço. Existe uma biblioteca embutida na maioria das linguagens, C ++ no meu caso, que calcula o ângulo (atan2), mas apenas para um par de variáveis ​​de ponto flutuante (x e y). Eu gostaria de explorar as instruções SIMD que lidam com registros q, a fim de calcular atan2 para um vetor de 4 valores.

A precisão é necessária para não ser alta, a velocidade é mais importante.

Eu já tenho algumas instruções de montagem que calculam a magnitude de 4 registradores de ponto flutuante, com precisão aceitável para minha aplicação. q1 contém 4 "x" valores (x1, x2, x3, x4). q2 contém 4 "y" valores (y1, y2, y3, y4). q7 contém a magnitude dos 4 resultados (x1 ^ 2 + y1 ^ 2, x2 ^ 2 + y2 ^ 2, x3 ^ 2 + y3 ^ 2, x4 ^ 2 + y4 ^ 2).

vmul.f32 q7, q1, q1  
vmla.f32 q7, q2, q2    
vrecpe.f32  q7, q7   
vrsqrte.f32 q7, q7 

Qual é o caminho mais rápido para calcular um atan2 aproximado para dois vetores usando instruções SIMD?

questionAnswers(1)

yourAnswerToTheQuestion