float *bbuzz(float amp, float si, float hn, double *f, float *phs, float *a,
             long alen) {
  register int i, j, k;
  float q, d, h2n, h2np1;
  float *fp = a;
  h2n = hn + hn;
  h2np1 = h2n + 1.;
  for (i = 0; i < alen; i++) {
    j = *phs;
    k = (j + 1) % 1024;
    q = (int)((*phs - (float)j) * h2np1) / h2np1;
    d = *(f + j);
    d += (*(f + k) - d) * q;
    if (!d)
      *fp++ = amp;
    else {
      k = (long)(h2np1 * *phs) % 1024;
      *fp++ = amp * (*(f + k) / d - 1.) / h2n;
    }
    *phs += si;
    while (*phs >= 1024.)
      *phs -= 1024.;
  }
  return (a);
}


x86 assembly (clang, -O0):
<bbuzz>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x58(%rbp)
movss  -0xc(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xeb5(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movl   $0x0,-0x34(%rbp)
movslq -0x34(%rbp),%rax
cmp    -0x30(%rbp),%rax
jge    1317 <bbuzz+0x217>
mov    -0x20(%rbp),%rax
cvttss2si (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    $0x400,%ecx
cltd
idiv   %ecx
mov    %edx,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
cvtsi2ssl -0x38(%rbp),%xmm1
subss  %xmm1,%xmm0
mulss  -0x4c(%rbp),%xmm0
cvttss2si %xmm0,%eax
cvtsi2ss %eax,%xmm0
divss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movss  -0x44(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
subsd  %xmm1,%xmm0
movss  -0x40(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movss  -0x44(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    1238 <bbuzz+0x138>
jp     1238 <bbuzz+0x138>
movss  -0x4(%rbp),%xmm0
mov    -0x58(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x58(%rbp)
movss  %xmm0,(%rax)
jmp    12b0 <bbuzz+0x1b0>
movss  -0x4c(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mulss  (%rax),%xmm0
cvttss2si %xmm0,%rax
mov    $0x400,%ecx
cqto
idiv   %rcx
mov    %edx,%eax
mov    %eax,-0x3c(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movss  -0x44(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
divsd  %xmm2,%xmm1
movsd  0xd7c(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movss  -0x48(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x58(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x58(%rbp)
movss  %xmm0,(%rax)
movss  -0x8(%rbp),%xmm0
mov    -0x20(%rbp),%rax
addss  (%rax),%xmm0
movss  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd33(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1304 <bbuzz+0x204>
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd15(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax)
jmp    12c1 <bbuzz+0x1c1>
jmp    1309 <bbuzz+0x209>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    115f <bbuzz+0x5f>
mov    -0x28(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<bbuzz>:
push   %rbx
mov    %rdx,%rax
test   %rcx,%rcx
jle    124f <bbuzz+0x14f>
addss  %xmm2,%xmm2
cvtss2sd %xmm2,%xmm10
addss  0xee2(%rip),%xmm2
cvtss2sd %xmm0,%xmm11
movss  (%rsi),%xmm5
xor    %r9d,%r9d
xorps  %xmm9,%xmm9
movabs $0x1ffffffffffffc00,%r8
ff ff 1f
movsd  0xecf(%rip),%xmm8
movss  0xebb(%rip),%xmm7
movss  0xeb6(%rip),%xmm12
mov    %rax,%r10
jmp    1175 <bbuzz+0x75>
nopw   0x0(%rax,%rax,1)
add    $0x4,%r10
movss  %xmm5,(%rsi)
add    $0x1,%r9
cmp    %rcx,%r9
je     124f <bbuzz+0x14f>
cvttss2si %xmm5,%edx
lea    0x1(%rdx),%r11d
lea    0x400(%rdx),%ebx
test   %r11d,%r11d
cmovns %r11d,%ebx
and    $0xfffffc00,%ebx
neg    %ebx
add    %edx,%ebx
add    $0x1,%ebx
cvttps2dq %xmm5,%xmm3
cvtdq2ps %xmm3,%xmm3
movaps %xmm5,%xmm4
subss  %xmm3,%xmm4
mulss  %xmm2,%xmm4
cvttps2dq %xmm4,%xmm3
cvtdq2ps %xmm3,%xmm3
movslq %edx,%rdx
movsd  (%rdi,%rdx,8),%xmm4
cvtsd2ss %xmm4,%xmm4
divss  %xmm2,%xmm3
movslq %ebx,%rdx
movsd  (%rdi,%rdx,8),%xmm6
cvtss2sd %xmm4,%xmm4
subsd  %xmm4,%xmm6
cvtss2sd %xmm3,%xmm3
mulsd  %xmm6,%xmm3
addsd  %xmm4,%xmm3
cvtsd2ss %xmm3,%xmm3
ucomiss %xmm9,%xmm3
movaps %xmm0,%xmm4
jne    11eb <bbuzz+0xeb>
jnp    1228 <bbuzz+0x128>
mulss  %xmm2,%xmm5
cvttss2si %xmm5,%rdx
lea    0x3ff(%rdx),%rbx
test   %rdx,%rdx
cmovns %rdx,%rbx
and    %r8,%rbx
sub    %rbx,%rdx
movsd  (%rdi,%rdx,8),%xmm4
cvtss2sd %xmm3,%xmm3
divsd  %xmm3,%xmm4
addsd  %xmm8,%xmm4
mulsd  %xmm11,%xmm4
divsd  %xmm10,%xmm4
cvtsd2ss %xmm4,%xmm4
movss  %xmm4,(%r10)
movss  (%rsi),%xmm5
addss  %xmm1,%xmm5
ucomiss %xmm7,%xmm5
jb     1160 <bbuzz+0x60>
xchg   %ax,%ax
addss  %xmm12,%xmm5
ucomiss %xmm7,%xmm5
jae    1240 <bbuzz+0x140>
jmp    1160 <bbuzz+0x60>
pop    %rbx
ret

LLVM IR (-O0):
define float* @bbuzz(float %0, float %1, float %2, double* %3, float* %4, float* %5, i64 %6) {
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca double*
%12 = alloca float*
%13 = alloca float*
%14 = alloca i64
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float*
store float %0, float* %8
store float %1, float* %9
store float %2, float* %10
store double* %3, double** %11
store float* %4, float** %12
store float* %5, float** %13
store i64 %6, i64* %14
%23 = load float*, float** %13
store float* %23, float** %22
%24 = load float, float* %10
%25 = load float, float* %10
%26 = fadd float %24, %25
store float %26, float* %20
%27 = load float, float* %20
%28 = fpext float %27 to double
%29 = fadd double %28, 1.000000e+00
%30 = fptrunc double %29 to float
store float %30, float* %21
store i32 0, i32* %15
br label %31
31: ; preds = %123, %7
%32 = load i32, i32* %15
%33 = sext i32 %32 to i64
%34 = load i64, i64* %14
%35 = icmp slt i64 %33, %34
br i1 %35, label %36, label %126
36: ; preds = %31
%37 = load float*, float** %12
%38 = load float, float* %37
%39 = fptosi float %38 to i32
store i32 %39, i32* %16
%40 = load i32, i32* %16
%41 = add nsw i32 %40, 1
%42 = srem i32 %41, 1024
store i32 %42, i32* %17
%43 = load float*, float** %12
%44 = load float, float* %43
%45 = load i32, i32* %16
%46 = sitofp i32 %45 to float
%47 = fsub float %44, %46
%48 = load float, float* %21
%49 = fmul float %47, %48
%50 = fptosi float %49 to i32
%51 = sitofp i32 %50 to float
%52 = load float, float* %21
%53 = fdiv float %51, %52
store float %53, float* %18
%54 = load double*, double** %11
%55 = load i32, i32* %16
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds double, double* %54, i64 %56
%58 = load double, double* %57
%59 = fptrunc double %58 to float
store float %59, float* %19
%60 = load double*, double** %11
%61 = load i32, i32* %17
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds double, double* %60, i64 %62
%64 = load double, double* %63
%65 = load float, float* %19
%66 = fpext float %65 to double
%67 = fsub double %64, %66
%68 = load float, float* %18
%69 = fpext float %68 to double
%70 = load float, float* %19
%71 = fpext float %70 to double
%72 = call double @llvm.fmuladd.f64(double %67, double %69, double %71)
%73 = fptrunc double %72 to float
store float %73, float* %19
%74 = load float, float* %19
%75 = fcmp une float %74, 0.000000e+00
br i1 %75, label %80, label %76
76: ; preds = %36
%77 = load float, float* %8
%78 = load float*, float** %22
%79 = getelementptr inbounds float, float* %78, i32 1
store float* %79, float** %22
store float %77, float* %78
br label %106
80: ; preds = %36
%81 = load float, float* %21
%82 = load float*, float** %12
%83 = load float, float* %82
%84 = fmul float %81, %83
%85 = fptosi float %84 to i64
%86 = srem i64 %85, 1024
%87 = trunc i64 %86 to i32
store i32 %87, i32* %17
%88 = load float, float* %8
%89 = fpext float %88 to double
%90 = load double*, double** %11
%91 = load i32, i32* %17
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds double, double* %90, i64 %92
%94 = load double, double* %93
%95 = load float, float* %19
%96 = fpext float %95 to double
%97 = fdiv double %94, %96
%98 = fsub double %97, 1.000000e+00
%99 = fmul double %89, %98
%100 = load float, float* %20
%101 = fpext float %100 to double
%102 = fdiv double %99, %101
%103 = fptrunc double %102 to float
%104 = load float*, float** %22
%105 = getelementptr inbounds float, float* %104, i32 1
store float* %105, float** %22
store float %103, float* %104
br label %106
106: ; preds = %80, %76
%107 = load float, float* %9
%108 = load float*, float** %12
%109 = load float, float* %108
%110 = fadd float %109, %107
store float %110, float* %108
br label %111
111: ; preds = %116, %106
%112 = load float*, float** %12
%113 = load float, float* %112
%114 = fpext float %113 to double
%115 = fcmp oge double %114, 1.024000e+03
br i1 %115, label %116, label %122
116: ; preds = %111
%117 = load float*, float** %12
%118 = load float, float* %117
%119 = fpext float %118 to double
%120 = fsub double %119, 1.024000e+03
%121 = fptrunc double %120 to float
store float %121, float* %117
br label %111
122: ; preds = %111
br label %123
123: ; preds = %122
%124 = load i32, i32* %15
%125 = add nsw i32 %124, 1
store i32 %125, i32* %15
br label %31
126: ; preds = %31
%127 = load float*, float** %13
ret float* %127
}

LLVM IR (-O2):
define float* @bbuzz(float %0, float %1, float %2, double* nocapture %3, float* nocapture %4, float* returned writeonly %5, i64 %6) {
%8 = fadd float %2, %2
%9 = fpext float %8 to double
%10 = fadd float %8, 1.000000e+00
%11 = icmp sgt i64 %6, 0
br i1 %11, label %12, label %67
12: ; preds = %7
%13 = fpext float %0 to double
%14 = load float, float* %4
br label %15
15: ; preds = %12, %63
%16 = phi float [ %14, %12 ], [ %64, %63 ]
%17 = phi i64 [ 0, %12 ], [ %65, %63 ]
%18 = phi float* [ %5, %12 ], [ %55, %63 ]
%19 = fptosi float %16 to i32
%20 = add nsw i32 %19, 1
%21 = srem i32 %20, 1024
%22 = sitofp i32 %19 to float
%23 = fsub float %16, %22
%24 = fmul float %10, %23
%25 = fptosi float %24 to i32
%26 = sitofp i32 %25 to float
%27 = fdiv float %26, %10
%28 = sext i32 %19 to i64
%29 = getelementptr inbounds double, double* %3, i64 %28
%30 = load double, double* %29
%31 = fptrunc double %30 to float
%32 = sext i32 %21 to i64
%33 = getelementptr inbounds double, double* %3, i64 %32
%34 = load double, double* %33
%35 = fpext float %31 to double
%36 = fsub double %34, %35
%37 = fpext float %27 to double
%38 = tail call double @llvm.fmuladd.f64(double %36, double %37, double %35)
%39 = fptrunc double %38 to float
%40 = fcmp une float %39, 0.000000e+00
br i1 %40, label %41, label %53
41: ; preds = %15
%42 = fmul float %10, %16
%43 = fptosi float %42 to i64
%44 = srem i64 %43, 1024
%45 = getelementptr inbounds double, double* %3, i64 %44
%46 = load double, double* %45
%47 = fpext float %39 to double
%48 = fdiv double %46, %47
%49 = fadd double %48, -1.000000e+00
%50 = fmul double %49, %13
%51 = fdiv double %50, %9
%52 = fptrunc double %51 to float
br label %53
53: ; preds = %15, %41
%54 = phi float [ %52, %41 ], [ %0, %15 ]
%55 = getelementptr inbounds float, float* %18, i64 1
store float %54, float* %18
%56 = load float, float* %4
%57 = fadd float %56, %1
%58 = fcmp ult float %57, 1.024000e+03
br i1 %58, label %63, label %59
59: ; preds = %53, %59
%60 = phi float [ %61, %59 ], [ %57, %53 ]
%61 = fadd float %60, -1.024000e+03
%62 = fcmp ult float %61, 1.024000e+03
br i1 %62, label %63, label %59
63: ; preds = %59, %53
%64 = phi float [ %57, %53 ], [ %61, %59 ]
store float %64, float* %4
%65 = add nuw nsw i64 %17, 1
%66 = icmp eq i64 %65, %6
br i1 %66, label %67, label %15
67: ; preds = %63, %7
ret float* %5
}