SIMD векторизация atan2 с использованием сборки ARM NEON

Я хочу рассчитать величину и угол 4 точки, используя неоновые инструкции SIMD и кронштейн в сборе. В большинстве языков есть встроенная библиотека, в моем случае C ++, которая вычисляет угол (atan2), но только для одной пары переменных с плавающей точкой (x и y). Я хотел бы использовать SIMD инструкции, которые имеют дело с q регистрами, чтобы вычислить atan2 для вектора из 4 значений.

Требуется, чтобы точность не была высокой, скорость важнее.

У меня уже есть несколько инструкций по сборке, которые вычисляют величину 4 регистров с плавающей запятой, с приемлемой точностью для моего приложения. q1 содержит 4 "х" значения (x1, x2, x3, x4). q2 содержит 4 "y" значения (y1, y2, y3, y4). q7 содержит величину 4 результатов (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 

Какой самый быстрый способ вычисления приблизительного значения atan2 для двух векторов с использованием SIMD-инструкций?

Ответы на вопрос(1)

Ваш ответ на вопрос