float AURAE_sqrtf(float number) {
  long i;
  float x2, y;
  const float threehalfs = 1.5F;
  x2 = number * 0.5F;
  y = number;
  i = *(long *)&y;
  i = 0x5f375a86 - ((i) >> 1);
  i = i & 0x7FFFFFFF;
  y = *(float *)&i;
  y = y * (threehalfs - (x2 * y * y));
  y = y * (threehalfs - (x2 * y * y));
  y = y * (threehalfs - (x2 * y * y));
  y = 1.0f / y;
  return y;
}


x86 assembly (clang, -O0):
<AURAE_sqrtf>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  0xef3(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xeea(%rip),%xmm0
mulss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rcx
sar    $0x1,%rcx
mov    $0x5f375a86,%eax
sub    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
and    $0x7fffffff,%rax
mov    %rax,-0x10(%rbp)
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
movss  -0x14(%rbp),%xmm1
mulss  -0x18(%rbp),%xmm1
movss  -0x18(%rbp),%xmm2
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm1
movss  0xe71(%rip),%xmm2
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
movss  -0x14(%rbp),%xmm1
mulss  -0x18(%rbp),%xmm1
movss  -0x18(%rbp),%xmm2
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm1
movss  0xe37(%rip),%xmm2
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
movss  -0x14(%rbp),%xmm1
mulss  -0x18(%rbp),%xmm1
movss  -0x18(%rbp),%xmm2
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm1
movss  0xdfd(%rip),%xmm2
addss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  0xde4(%rip),%xmm0
divss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<AURAE_sqrtf>:
ret

LLVM IR (-O0):
define float @AURAE_sqrtf(float %0) {
%2 = alloca float
%3 = alloca i64
%4 = alloca float
%5 = alloca float
%6 = alloca float
store float %0, float* %2
store float 1.500000e+00, float* %6
%7 = load float, float* %2
%8 = fmul float %7, 5.000000e-01
store float %8, float* %4
%9 = load float, float* %2
store float %9, float* %5
%10 = bitcast float* %5 to i64*
%11 = load i64, i64* %10
store i64 %11, i64* %3
%12 = load i64, i64* %3
%13 = ashr i64 %12, 1
%14 = sub nsw i64 1597463174, %13
store i64 %14, i64* %3
%15 = load i64, i64* %3
%16 = and i64 %15, 2147483647
store i64 %16, i64* %3
%17 = bitcast i64* %3 to float*
%18 = load float, float* %17
store float %18, float* %5
%19 = load float, float* %5
%20 = load float, float* %4
%21 = load float, float* %5
%22 = fmul float %20, %21
%23 = load float, float* %5
%24 = fneg float %22
%25 = call float @llvm.fmuladd.f32(float %24, float %23, float 1.500000e+00)
%26 = fmul float %19, %25
store float %26, float* %5
%27 = load float, float* %5
%28 = load float, float* %4
%29 = load float, float* %5
%30 = fmul float %28, %29
%31 = load float, float* %5
%32 = fneg float %30
%33 = call float @llvm.fmuladd.f32(float %32, float %31, float 1.500000e+00)
%34 = fmul float %27, %33
store float %34, float* %5
%35 = load float, float* %5
%36 = load float, float* %4
%37 = load float, float* %5
%38 = fmul float %36, %37
%39 = load float, float* %5
%40 = fneg float %38
%41 = call float @llvm.fmuladd.f32(float %40, float %39, float 1.500000e+00)
%42 = fmul float %35, %41
store float %42, float* %5
%43 = load float, float* %5
%44 = fdiv float 1.000000e+00, %43
store float %44, float* %5
%45 = load float, float* %5
ret float %45
}

LLVM IR (-O2):
define float @AURAE_sqrtf(float %0) {
ret float poison
}