SIMD векторизация atan2 с использованием сборки ARM NEON
Я хочу рассчитать величину и угол 4 точки, используя неоновые инструкции SIMD и кронштейн в сборе. В большинстве языков есть встроенная библиотека, в моем случае C ++, которая вычисляет угол (atan2), но только для одной пары переменных с плавающей точкой (x и y). Я хотел бы использовать SIMD инструкции, которые имеют дело с q регистрами, чтобы вычислить atan2 для вектора из 4 значений.
Требуется, чтобы точность не была высокой, скорость важнее.
У меня уже есть несколько инструкций по сборке, которые вычисляют величину 4 регистров с плавающей запятой, с приемлемой точностью для моего приложения. q1 содержит 4 значения «x» (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-инструкций?