long double hypergl(a, b, x)
long double a, b, x;
{
  long double asum, psum, acanc, pcanc, temp;
  temp = b - a;
  if (fabsl(temp) < 0.001L * fabsl(a))
    return (expl(x) * hypergl(temp, b, -x));
  psum = hy1f1pl(a, b, x, &pcanc);
  if (pcanc < 1.0e-15L)
    goto done;
  asum = hy1f1al(a, b, x, &acanc);
  if (acanc < pcanc) {
    pcanc = acanc;
    psum = asum;
  }
done:
  if (pcanc > 1.0e-12L)
    mtherr("hypergl", 6);
  return (psum);
}


x86 assembly (clang, -O0):
<hypergl>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
fldt   0x30(%rbp)
fldt   0x20(%rbp)
fldt   0x10(%rbp)
fstpt  -0x20(%rbp)
fstpt  -0x30(%rbp)
fstpt  -0x40(%rbp)
fldt   -0x30(%rbp)
fldt   -0x20(%rbp)
fsubrp %st,%st(1)
fstpt  -0x90(%rbp)
fldt   -0x90(%rbp)
fabs
fldt   -0x20(%rbp)
fabs
fldt   0xe72(%rip)
fmulp  %st,%st(1)
fucomip %st(1),%st
fstp   %st(0)
jbe    11e0 <hypergl+0x90>
jmp    119f <hypergl+0x4f>
fldt   -0x40(%rbp)
mov    %rsp,%rax
fstpt  (%rax)
call   1050 <expl@plt>
fstpt  -0xa4(%rbp)
fldt   -0x90(%rbp)
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
fchs
mov    %rsp,%rax
fstpt  0x20(%rax)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1030 <hypergl@plt>
fldt   -0xa4(%rbp)
fmulp  %st,%st(1)
fstpt  -0x10(%rbp)
jmp    12b2 <hypergl+0x162>
fldt   -0x20(%rbp)
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
mov    %rsp,%rax
fstpt  0x20(%rax)
fstpt  0x10(%rax)
fstpt  (%rax)
xor    %eax,%eax
lea    -0x80(%rbp),%rdi
call   1060 <hy1f1pl@plt>
mov    %eax,-0x94(%rbp)
fildl  -0x94(%rbp)
fstpt  -0x60(%rbp)
fldt   -0x80(%rbp)
fldt   0xdf9(%rip)
fucomip %st(1),%st
fstp   %st(0)
jbe    122b <hypergl+0xdb>
jmp    1226 <hypergl+0xd6>
jmp    127f <hypergl+0x12f>
fldt   -0x20(%rbp)
fldt   -0x30(%rbp)
fldt   -0x40(%rbp)
mov    %rsp,%rax
fstpt  0x20(%rax)
fstpt  0x10(%rax)
fstpt  (%rax)
xor    %eax,%eax
lea    -0x70(%rbp),%rdi
call   1040 <hy1f1al@plt>
mov    %eax,-0x98(%rbp)
fildl  -0x98(%rbp)
fstpt  -0x50(%rbp)
fldt   -0x70(%rbp)
fldt   -0x80(%rbp)
fucomip %st(1),%st
fstp   %st(0)
jbe    127a <hypergl+0x12a>
jmp    126e <hypergl+0x11e>
fldt   -0x70(%rbp)
fstpt  -0x80(%rbp)
fldt   -0x50(%rbp)
fstpt  -0x60(%rbp)
jmp    127f <hypergl+0x12f>
fldt   -0x80(%rbp)
fldt   0xd98(%rip)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jbe    12ac <hypergl+0x15c>
jmp    1299 <hypergl+0x149>
lea    0xd90(%rip),%rdi
mov    $0x6,%esi
mov    $0x0,%al
call   1070 <mtherr@plt>
fldt   -0x60(%rbp)
fstpt  -0x10(%rbp)
fldt   -0x10(%rbp)
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<hypergl>:
push   %rbx
sub    $0x90,%rsp
fldt   0xc0(%rsp)
fldt   0xb0(%rsp)
fldt   0xa0(%rsp)
fld    %st(1)
fsub   %st(1),%st
fld    %st(0)
fabs
fld    %st(2)
fabs
fldt   0xe81(%rip)
fmulp  %st,%st(1)
fucomip %st(1),%st
fstp   %st(0)
fld    %st(2)
fstpt  0x38(%rsp)
fld    %st(3)
fstpt  0x54(%rsp)
jbe    11d2 <hypergl+0x82>
fstp   %st(2)
fstp   %st(0)
fxch   %st(1)
fstpt  (%rsp)
fstpt  0x74(%rsp)
call   1050 <expl@plt>
fstpt  0x48(%rsp)
fldt   0x54(%rsp)
fchs
fstpt  0x20(%rsp)
fldt   0x38(%rsp)
fstpt  0x10(%rsp)
fldt   0x74(%rsp)
fstpt  (%rsp)
call   1030 <hypergl@plt>
fldt   0x48(%rsp)
fmulp  %st,%st(1)
jmp    127b <hypergl+0x12b>
fstp   %st(0)
fxch   %st(2)
fstpt  0x20(%rsp)
fstpt  0x10(%rsp)
fld    %st(0)
fstpt  0x48(%rsp)
fstpt  (%rsp)
lea    0x60(%rsp),%rdi
xor    %eax,%eax
call   1060 <hy1f1pl@plt>
mov    %eax,%ebx
fldt   0x60(%rsp)
fldt   0xe11(%rip)
fucomip %st(1),%st
ja     1246 <hypergl+0xf6>
fstp   %st(0)
fldt   0x54(%rsp)
fstpt  0x20(%rsp)
fldt   0x38(%rsp)
fstpt  0x10(%rsp)
fldt   0x48(%rsp)
fstpt  (%rsp)
lea    0x80(%rsp),%rdi
xor    %eax,%eax
call   1040 <hy1f1al@plt>
fldt   0x80(%rsp)
fldt   0x60(%rsp)
fucomi %st(1),%st
fxch   %st(1)
jbe    1248 <hypergl+0xf8>
fstp   %st(1)
fld    %st(0)
fstpt  0x60(%rsp)
mov    %eax,%ebx
fldz
fstp   %st(0)
mov    %ebx,0x44(%rsp)
fildl  0x44(%rsp)
fldt   0xdc8(%rip)
fxch   %st(2)
fucomip %st(2),%st
fstp   %st(1)
jbe    127b <hypergl+0x12b>
lea    0xdc9(%rip),%rdi
mov    $0x6,%esi
xor    %eax,%eax
fstpt  0x38(%rsp)
call   1070 <mtherr@plt>
fldt   0x38(%rsp)
add    $0x90,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@.str = [8 x i8] c"hypergl\00"
define x86_fp80 @hypergl(x86_fp80 %0, x86_fp80 %1, x86_fp80 %2) {
%4 = alloca x86_fp80
%5 = alloca x86_fp80
%6 = alloca x86_fp80
%7 = alloca x86_fp80
%8 = alloca x86_fp80
%9 = alloca x86_fp80
%10 = alloca x86_fp80
%11 = alloca x86_fp80
%12 = alloca x86_fp80
store x86_fp80 %0, x86_fp80* %5
store x86_fp80 %1, x86_fp80* %6
store x86_fp80 %2, x86_fp80* %7
%13 = load x86_fp80, x86_fp80* %6
%14 = load x86_fp80, x86_fp80* %5
%15 = fsub x86_fp80 %13, %14
store x86_fp80 %15, x86_fp80* %12
%16 = load x86_fp80, x86_fp80* %12
%17 = call x86_fp80 @llvm.fabs.f80(x86_fp80 %16)
%18 = load x86_fp80, x86_fp80* %5
%19 = call x86_fp80 @llvm.fabs.f80(x86_fp80 %18)
%20 = fmul x86_fp80 0xK3FF583126E978D4FDF3B, %19
%21 = fcmp olt x86_fp80 %17, %20
br i1 %21, label %22, label %31
22: ; preds = %3
%23 = load x86_fp80, x86_fp80* %7
%24 = call x86_fp80 @expl(x86_fp80 %23)
%25 = load x86_fp80, x86_fp80* %12
%26 = load x86_fp80, x86_fp80* %6
%27 = load x86_fp80, x86_fp80* %7
%28 = fneg x86_fp80 %27
%29 = call x86_fp80 @hypergl(x86_fp80 %25, x86_fp80 %26, x86_fp80 %28)
%30 = fmul x86_fp80 %24, %29
store x86_fp80 %30, x86_fp80* %4
br label %60
31: ; preds = %3
%32 = load x86_fp80, x86_fp80* %5
%33 = load x86_fp80, x86_fp80* %6
%34 = load x86_fp80, x86_fp80* %7
%35 = call i32 (x86_fp80, x86_fp80, x86_fp80, x86_fp80*, ...) bitcast (i32 (...)* @hy1f1pl to i32 (x86_fp80, x86_fp80, x86_fp80, x86_fp80*, ...)*)(x86_fp80 %32, x86_fp80 %33, x86_fp80 %34, x86_fp80* %11)
%36 = sitofp i32 %35 to x86_fp80
store x86_fp80 %36, x86_fp80* %9
%37 = load x86_fp80, x86_fp80* %11
%38 = fcmp olt x86_fp80 %37, 0xK3FCD901D7CF73AB0ACD9
br i1 %38, label %39, label %40
39: ; preds = %31
br label %53
40: ; preds = %31
%41 = load x86_fp80, x86_fp80* %5
%42 = load x86_fp80, x86_fp80* %6
%43 = load x86_fp80, x86_fp80* %7
%44 = call i32 (x86_fp80, x86_fp80, x86_fp80, x86_fp80*, ...) bitcast (i32 (...)* @hy1f1al to i32 (x86_fp80, x86_fp80, x86_fp80, x86_fp80*, ...)*)(x86_fp80 %41, x86_fp80 %42, x86_fp80 %43, x86_fp80* %10)
%45 = sitofp i32 %44 to x86_fp80
store x86_fp80 %45, x86_fp80* %8
%46 = load x86_fp80, x86_fp80* %10
%47 = load x86_fp80, x86_fp80* %11
%48 = fcmp olt x86_fp80 %46, %47
br i1 %48, label %49, label %52
49: ; preds = %40
%50 = load x86_fp80, x86_fp80* %10
store x86_fp80 %50, x86_fp80* %11
%51 = load x86_fp80, x86_fp80* %8
store x86_fp80 %51, x86_fp80* %9
br label %52
52: ; preds = %49, %40
br label %53
53: ; preds = %52, %39
%54 = load x86_fp80, x86_fp80* %11
%55 = fcmp ogt x86_fp80 %54, 0xK3FD78CBCCC096F5088CC
br i1 %55, label %56, label %58
56: ; preds = %53
%57 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @mtherr to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i32 6)
br label %58
58: ; preds = %56, %53
%59 = load x86_fp80, x86_fp80* %9
store x86_fp80 %59, x86_fp80* %4
br label %60
60: ; preds = %58, %22
%61 = load x86_fp80, x86_fp80* %4
ret x86_fp80 %61
}

LLVM IR (-O2):
@.str = [8 x i8] c"hypergl\00"
define x86_fp80 @hypergl(x86_fp80 %0, x86_fp80 %1, x86_fp80 %2) {
%4 = alloca x86_fp80
%5 = alloca x86_fp80
%6 = bitcast x86_fp80* %4 to i8*
%7 = bitcast x86_fp80* %5 to i8*
%8 = fsub x86_fp80 %1, %0
%9 = tail call x86_fp80 @llvm.fabs.f80(x86_fp80 %8)
%10 = tail call x86_fp80 @llvm.fabs.f80(x86_fp80 %0)
%11 = fmul x86_fp80 %10, 0xK3FF583126E978D4FDF3B
%12 = fcmp olt x86_fp80 %9, %11
br i1 %12, label %13, label %18
13: ; preds = %3
%14 = tail call x86_fp80 @expl(x86_fp80 %2)
%15 = fneg x86_fp80 %2
%16 = tail call x86_fp80 @hypergl(x86_fp80 %8, x86_fp80 %1, x86_fp80 %15)
%17 = fmul x86_fp80 %14, %16
br label %35
18: ; preds = %3
%19 = call i32 (x86_fp80, x86_fp80, x86_fp80, x86_fp80*, ...) bitcast (i32 (...)* @hy1f1pl to i32 (x86_fp80, x86_fp80, x86_fp80, x86_fp80*, ...)*)(x86_fp80 %0, x86_fp80 %1, x86_fp80 %2, x86_fp80* %5)
%20 = load x86_fp80, x86_fp80* %5
%21 = fcmp olt x86_fp80 %20, 0xK3FCD901D7CF73AB0ACD9
br i1 %21, label %28, label %22
22: ; preds = %18
%23 = call i32 (x86_fp80, x86_fp80, x86_fp80, x86_fp80*, ...) bitcast (i32 (...)* @hy1f1al to i32 (x86_fp80, x86_fp80, x86_fp80, x86_fp80*, ...)*)(x86_fp80 %0, x86_fp80 %1, x86_fp80 %2, x86_fp80* %4)
%24 = load x86_fp80, x86_fp80* %4
%25 = load x86_fp80, x86_fp80* %5
%26 = fcmp olt x86_fp80 %24, %25
br i1 %26, label %27, label %28
27: ; preds = %22
store x86_fp80 %24, x86_fp80* %5
br label %28
28: ; preds = %22, %27, %18
%29 = phi x86_fp80 [ %25, %22 ], [ %24, %27 ], [ %20, %18 ]
%30 = phi i32 [ %19, %22 ], [ %23, %27 ], [ %19, %18 ]
%31 = sitofp i32 %30 to x86_fp80
%32 = fcmp ogt x86_fp80 %29, 0xK3FD78CBCCC096F5088CC
br i1 %32, label %33, label %35
33: ; preds = %28
%34 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @mtherr to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i32 6)
br label %35
35: ; preds = %28, %33, %13
%36 = phi x86_fp80 [ %17, %13 ], [ %31, %33 ], [ %31, %28 ]
ret x86_fp80 %36
}