AK: Add vector variants of sqrt and rsqrt

This commit is contained in:
Hendiadyoin1 2022-04-01 13:47:06 +02:00 committed by Andreas Kling
parent b1db1e4e4f
commit 5ba5a6615d

View file

@ -6,7 +6,11 @@
#pragma once
#ifndef __SSE__
# include <AK/Math.h>
#endif
#include <AK/SIMD.h>
#include <AK/SIMDExtras.h>
#include <math.h>
// Functions returning vectors or accepting vector arguments have different calling conventions
@ -59,6 +63,34 @@ ALWAYS_INLINE static f32x4 exp(f32x4 v)
};
}
ALWAYS_INLINE static f32x4 sqrt(f32x4 v)
{
#ifdef __SSE__
return __builtin_ia32_sqrtps(v);
#else
return f32x4 {
AK::sqrt(v[0]),
AK::sqrt(v[1]),
AK::sqrt(v[2]),
AK::sqrt(v[3]),
};
#endif
}
ALWAYS_INLINE static f32x4 rsqrt(f32x4 v)
{
#ifdef __SSE__
return __builtin_ia32_rsqrtps(v);
#else
return f32x4 {
1.f / AK::sqrt(v[0]),
1.f / AK::sqrt(v[1]),
1.f / AK::sqrt(v[2]),
1.f / AK::sqrt(v[3]),
};
#endif
}
}
#pragma GCC diagnostic pop