14template <std::
floating_po
int T>
23inline float sqrt(
float x) {
24 __m128 input = _mm_set_ss(x);
25 __m128 result = _mm_sqrt_ss(input);
26 return _mm_cvtss_f32(result);
30inline double sqrt(
double x) {
31 __m128d input = _mm_set_sd(x);
32 __m128d result = _mm_sqrt_sd(input, input);
33 return _mm_cvtsd_f64(result);
36#elif defined(__aarch64__) && defined(__GNUC__)
39inline float sqrt(
float x) {
41 __asm__(
"fsqrt %s0, %s1" :
"=w"(result) :
"w"(x));
46inline double sqrt(
double x) {
48 __asm__(
"fsqrt %d0, %d1" :
"=w"(result) :
"w"(x));