double inf_QrombDriver(funk, aa, bb, error) double (*funk)(), aa, bb, error;
{
  int l;
  double f[64 + 1], del, a, b, x;
  double inf_QrombSlave();
  b = 1.0 / aa;
  a = 1.0 / bb;
  del = (b - a) / 64;
  for (l = 0; l <= 64; l += 2) {
    x = a + l * del;
    f[l] = ((*funk)(1.0 / (x)) / ((x) * (x)));
  }
  return inf_QrombSlave(funk, f, a, b, error);
}


x86 assembly (clang, -O0):
<inf_QrombDriver>:
push   %rbp
mov    %rsp,%rbp
sub    $0x250,%rsp
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  0xed2(%rip),%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x248(%rbp)
ff
movsd  0xebd(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x240(%rbp)
ff
movsd  -0x248(%rbp),%xmm0
ff
subsd  -0x240(%rbp),%xmm0
ff
movsd  0xe90(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x238(%rbp)
ff
movl   $0x0,-0x24(%rbp)
cmpl   $0x40,-0x24(%rbp)
jg     11f9 <inf_QrombDriver+0xe9>
movsd  -0x240(%rbp),%xmm1
ff
cvtsi2sdl -0x24(%rbp),%xmm0
movsd  -0x238(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x250(%rbp)
ff
mov    -0x8(%rbp),%rcx
movsd  0xe4a(%rip),%xmm0
divsd  -0x250(%rbp),%xmm0
ff
mov    $0x1,%al
call   *%rcx
movsd  -0x250(%rbp),%xmm1
ff
mulsd  -0x250(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movslq -0x24(%rbp),%rax
movsd  %xmm0,-0x230(%rbp,%rax,8)
ff ff
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    1183 <inf_QrombDriver+0x73>
mov    -0x8(%rbp),%rdi
lea    -0x230(%rbp),%rsi
movsd  -0x240(%rbp),%xmm0
ff
movsd  -0x248(%rbp),%xmm1
ff
movsd  -0x20(%rbp),%xmm2
mov    $0x3,%al
call   1030 <inf_QrombSlave@plt>
add    $0x250,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<inf_QrombDriver>:
push   %r14
push   %rbx
sub    $0x238,%rsp
movsd  %xmm2,0x18(%rsp)
mov    %rdi,%r14
movsd  0xed5(%rip),%xmm3
movapd %xmm3,%xmm2
divsd  %xmm0,%xmm2
movapd %xmm3,%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm2,0x10(%rsp)
movsd  %xmm0,0x8(%rsp)
subsd  %xmm0,%xmm2
mulsd  0xeb5(%rip),%xmm2
movsd  %xmm2,0x20(%rsp)
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
mulsd  0x20(%rsp),%xmm1
addsd  0x8(%rsp),%xmm1
movsd  %xmm1,0x28(%rsp)
movsd  0xe7f(%rip),%xmm0
divsd  %xmm1,%xmm0
mov    $0x1,%al
call   *%r14
movsd  0x28(%rsp),%xmm1
mulsd  %xmm1,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x30(%rsp,%rbx,8)
lea    0x2(%rbx),%rax
cmp    $0x3f,%rbx
mov    %rax,%rbx
jb     1160 <inf_QrombDriver+0x50>
lea    0x30(%rsp),%rsi
mov    %r14,%rdi
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
mov    $0x3,%al
call   1030 <inf_QrombSlave@plt>
add    $0x238,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define double @inf_QrombDriver(double (...)* %0, double %1, double %2, double %3) {
%5 = alloca double (...)*
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca i32
%10 = alloca [65 x double]
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
store double (...)* %0, double (...)** %5
store double %1, double* %6
store double %2, double* %7
store double %3, double* %8
%15 = load double, double* %6
%16 = fdiv double 1.000000e+00, %15
store double %16, double* %13
%17 = load double, double* %7
%18 = fdiv double 1.000000e+00, %17
store double %18, double* %12
%19 = load double, double* %13
%20 = load double, double* %12
%21 = fsub double %19, %20
%22 = fdiv double %21, 6.400000e+01
store double %22, double* %11
store i32 0, i32* %9
br label %23
23: ; preds = %44, %4
%24 = load i32, i32* %9
%25 = icmp sle i32 %24, 64
br i1 %25, label %26, label %47
26: ; preds = %23
%27 = load double, double* %12
%28 = load i32, i32* %9
%29 = sitofp i32 %28 to double
%30 = load double, double* %11
%31 = call double @llvm.fmuladd.f64(double %29, double %30, double %27)
store double %31, double* %14
%32 = load double (...)*, double (...)** %5
%33 = load double, double* %14
%34 = fdiv double 1.000000e+00, %33
%35 = bitcast double (...)* %32 to double (double, ...)*
%36 = call double (double, ...) %35(double %34)
%37 = load double, double* %14
%38 = load double, double* %14
%39 = fmul double %37, %38
%40 = fdiv double %36, %39
%41 = load i32, i32* %9
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds [65 x double], [65 x double]* %10, i64 0, i64 %42
store double %40, double* %43
br label %44
44: ; preds = %26
%45 = load i32, i32* %9
%46 = add nsw i32 %45, 2
store i32 %46, i32* %9
br label %23
47: ; preds = %23
%48 = load double (...)*, double (...)** %5
%49 = getelementptr inbounds [65 x double], [65 x double]* %10, i64 0, i64 0
%50 = load double, double* %12
%51 = load double, double* %13
%52 = load double, double* %8
%53 = call double (double (...)*, double*, double, double, double, ...) bitcast (double (...)* @inf_QrombSlave to double (double (...)*, double*, double, double, double, ...)*)(double (...)* %48, double* %49, double %50, double %51, double %52)
ret double %53
}

LLVM IR (-O2):
define double @inf_QrombDriver(double (...)* %0, double %1, double %2, double %3) {
%5 = alloca [65 x double]
%6 = bitcast [65 x double]* %5 to i8*
%7 = fdiv double 1.000000e+00, %1
%8 = fdiv double 1.000000e+00, %2
%9 = fsub double %7, %8
%10 = fmul double %9, 1.562500e-02
%11 = bitcast double (...)* %0 to double (double, ...)*
br label %12
12: ; preds = %4, %12
%13 = phi i64 [ 0, %4 ], [ %22, %12 ]
%14 = trunc i64 %13 to i32
%15 = sitofp i32 %14 to double
%16 = tail call double @llvm.fmuladd.f64(double %15, double %10, double %8)
%17 = fdiv double 1.000000e+00, %16
%18 = tail call double (double, ...) %11(double %17)
%19 = fmul double %16, %16
%20 = fdiv double %18, %19
%21 = getelementptr inbounds [65 x double], [65 x double]* %5, i64 0, i64 %13
store double %20, double* %21
%22 = add nuw nsw i64 %13, 2
%23 = icmp ult i64 %13, 63
br i1 %23, label %12, label %24
24: ; preds = %12
%25 = getelementptr inbounds [65 x double], [65 x double]* %5, i64 0, i64 0
%26 = call double (double (...)*, double*, double, double, double, ...) bitcast (double (...)* @inf_QrombSlave to double (double (...)*, double*, double, double, double, ...)*)(double (...)* %0, double* %25, double %8, double %7, double %3)
ret double %26
}