#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
long double Cpart1(long double, long double, long double, long double,
                   long double);
long double Cpart2(long double, long double, long double, long double,
                   long double);
long double Cpart3(long double, long double, long double, long double,
                   long double);
long double Cpart4(long double, long double, long double, long double,
                   long double);
long double Cpart5(long double, long double, long double, long double,
                   long double);
long double Cpart6(long double, long double, long double, long double,
                   long double);
double C(double s, double s1, double s2, double t1, double t2) {
  long double sl = s, s1l = s1, s2l = s2, t1l = t1, t2l = t2, a;
  long double a1, a2, a3, a4, a5, a6;
  a1 = Cpart1(sl, s1l, s2l, t1l, t2l);
  a2 = Cpart2(sl, s1l, s2l, t1l, t2l);
  a3 = Cpart3(sl, s1l, s2l, t1l, t2l);
  a4 = Cpart4(sl, s1l, s2l, t1l, t2l);
  a5 = Cpart5(sl, s1l, s2l, t1l, t2l);
  a6 = Cpart6(sl, s1l, s2l, t1l, t2l);
  a = a1 + a2 + a3 + a4 + a5 + a6;
  return a;
}


x86 assembly (clang, -O0):
<C>:
push   %rbp
mov    %rsp,%rbp
sub    $0x150,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
fldl   -0x8(%rbp)
fstpt  -0x40(%rbp)
fldl   -0x10(%rbp)
fstpt  -0x50(%rbp)
fldl   -0x18(%rbp)
fstpt  -0x60(%rbp)
fldl   -0x20(%rbp)
fstpt  -0x70(%rbp)
fldl   -0x28(%rbp)
fstpt  -0x80(%rbp)
fldt   -0x40(%rbp)
fldt   -0x50(%rbp)
fldt   -0x60(%rbp)
fldt   -0x70(%rbp)
fldt   -0x80(%rbp)
mov    %rsp,%rax
fstpt  0x40(%rax)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1040 <Cpart1@plt>
fstpt  -0xa0(%rbp)
fldt   -0x40(%rbp)
fldt   -0x50(%rbp)
fldt   -0x60(%rbp)
fldt   -0x70(%rbp)
fldt   -0x80(%rbp)
mov    %rsp,%rax
fstpt  0x40(%rax)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1070 <Cpart2@plt>
fstpt  -0xb0(%rbp)
fldt   -0x40(%rbp)
fldt   -0x50(%rbp)
fldt   -0x60(%rbp)
fldt   -0x70(%rbp)
fldt   -0x80(%rbp)
mov    %rsp,%rax
fstpt  0x40(%rax)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1030 <Cpart3@plt>
fstpt  -0xc0(%rbp)
fldt   -0x40(%rbp)
fldt   -0x50(%rbp)
fldt   -0x60(%rbp)
fldt   -0x70(%rbp)
fldt   -0x80(%rbp)
mov    %rsp,%rax
fstpt  0x40(%rax)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1060 <Cpart4@plt>
fstpt  -0xd0(%rbp)
fldt   -0x40(%rbp)
fldt   -0x50(%rbp)
fldt   -0x60(%rbp)
fldt   -0x70(%rbp)
fldt   -0x80(%rbp)
mov    %rsp,%rax
fstpt  0x40(%rax)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1050 <Cpart5@plt>
fstpt  -0xe0(%rbp)
fldt   -0x40(%rbp)
fldt   -0x50(%rbp)
fldt   -0x60(%rbp)
fldt   -0x70(%rbp)
fldt   -0x80(%rbp)
mov    %rsp,%rax
fstpt  0x40(%rax)
fstpt  0x30(%rax)
fstpt  0x20(%rax)
fstpt  0x10(%rax)
fstpt  (%rax)
call   1080 <Cpart6@plt>
fstpt  -0xf0(%rbp)
fldt   -0xa0(%rbp)
fldt   -0xb0(%rbp)
faddp  %st,%st(1)
fldt   -0xc0(%rbp)
faddp  %st,%st(1)
fldt   -0xd0(%rbp)
faddp  %st,%st(1)
fldt   -0xe0(%rbp)
faddp  %st,%st(1)
fldt   -0xf0(%rbp)
faddp  %st,%st(1)
fstpt  -0x90(%rbp)
fldt   -0x90(%rbp)
fstpl  -0xf8(%rbp)
movsd  -0xf8(%rbp),%xmm0
ff
add    $0x150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<C>:
sub    $0x108,%rsp
movsd  %xmm0,0xc0(%rsp)
fldl   0xc0(%rsp)
fld    %st(0)
fstpt  0x8c(%rsp)
movsd  %xmm1,0xb8(%rsp)
fldl   0xb8(%rsp)
fld    %st(0)
fstpt  0x80(%rsp)
movsd  %xmm2,0xb0(%rsp)
fldl   0xb0(%rsp)
fld    %st(0)
fstpt  0x74(%rsp)
movsd  %xmm3,0xa8(%rsp)
fldl   0xa8(%rsp)
fld    %st(0)
fstpt  0x68(%rsp)
movsd  %xmm4,0xa0(%rsp)
fldl   0xa0(%rsp)
fld    %st(0)
fstpt  0x5c(%rsp)
fstpt  0x40(%rsp)
fstpt  0x30(%rsp)
fstpt  0x20(%rsp)
fstpt  0x10(%rsp)
fstpt  (%rsp)
call   1040 <Cpart1@plt>
fstpt  0xfc(%rsp)
fldt   0x5c(%rsp)
fstpt  0x40(%rsp)
fldt   0x68(%rsp)
fstpt  0x30(%rsp)
fldt   0x74(%rsp)
fstpt  0x20(%rsp)
fldt   0x80(%rsp)
fstpt  0x10(%rsp)
fldt   0x8c(%rsp)
fstpt  (%rsp)
call   1070 <Cpart2@plt>
fstpt  0xf0(%rsp)
fldt   0x5c(%rsp)
fstpt  0x40(%rsp)
fldt   0x68(%rsp)
fstpt  0x30(%rsp)
fldt   0x74(%rsp)
fstpt  0x20(%rsp)
fldt   0x80(%rsp)
fstpt  0x10(%rsp)
fldt   0x8c(%rsp)
fstpt  (%rsp)
call   1030 <Cpart3@plt>
fstpt  0xe4(%rsp)
fldt   0x5c(%rsp)
fstpt  0x40(%rsp)
fldt   0x68(%rsp)
fstpt  0x30(%rsp)
fldt   0x74(%rsp)
fstpt  0x20(%rsp)
fldt   0x80(%rsp)
fstpt  0x10(%rsp)
fldt   0x8c(%rsp)
fstpt  (%rsp)
call   1060 <Cpart4@plt>
fstpt  0xd8(%rsp)
fldt   0x5c(%rsp)
fstpt  0x40(%rsp)
fldt   0x68(%rsp)
fstpt  0x30(%rsp)
fldt   0x74(%rsp)
fstpt  0x20(%rsp)
fldt   0x80(%rsp)
fstpt  0x10(%rsp)
fldt   0x8c(%rsp)
fstpt  (%rsp)
call   1050 <Cpart5@plt>
fstpt  0xcc(%rsp)
fldt   0x5c(%rsp)
fstpt  0x40(%rsp)
fldt   0x68(%rsp)
fstpt  0x30(%rsp)
fldt   0x74(%rsp)
fstpt  0x20(%rsp)
fldt   0x80(%rsp)
fstpt  0x10(%rsp)
fldt   0x8c(%rsp)
fstpt  (%rsp)
call   1080 <Cpart6@plt>
fldt   0xfc(%rsp)
fldt   0xf0(%rsp)
faddp  %st,%st(1)
fldt   0xe4(%rsp)
faddp  %st,%st(1)
fldt   0xd8(%rsp)
faddp  %st,%st(1)
fldt   0xcc(%rsp)
faddp  %st,%st(1)
faddp  %st,%st(1)
fstpl  0x98(%rsp)
movsd  0x98(%rsp),%xmm0
add    $0x108,%rsp
ret

LLVM IR (-O0):
define double @C(double %0, double %1, double %2, double %3, double %4) {
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca x86_fp80
%12 = alloca x86_fp80
%13 = alloca x86_fp80
%14 = alloca x86_fp80
%15 = alloca x86_fp80
%16 = alloca x86_fp80
%17 = alloca x86_fp80
%18 = alloca x86_fp80
%19 = alloca x86_fp80
%20 = alloca x86_fp80
%21 = alloca x86_fp80
%22 = alloca x86_fp80
store double %0, double* %6
store double %1, double* %7
store double %2, double* %8
store double %3, double* %9
store double %4, double* %10
%23 = load double, double* %6
%24 = fpext double %23 to x86_fp80
store x86_fp80 %24, x86_fp80* %11
%25 = load double, double* %7
%26 = fpext double %25 to x86_fp80
store x86_fp80 %26, x86_fp80* %12
%27 = load double, double* %8
%28 = fpext double %27 to x86_fp80
store x86_fp80 %28, x86_fp80* %13
%29 = load double, double* %9
%30 = fpext double %29 to x86_fp80
store x86_fp80 %30, x86_fp80* %14
%31 = load double, double* %10
%32 = fpext double %31 to x86_fp80
store x86_fp80 %32, x86_fp80* %15
%33 = load x86_fp80, x86_fp80* %11
%34 = load x86_fp80, x86_fp80* %12
%35 = load x86_fp80, x86_fp80* %13
%36 = load x86_fp80, x86_fp80* %14
%37 = load x86_fp80, x86_fp80* %15
%38 = call x86_fp80 @Cpart1(x86_fp80 %33, x86_fp80 %34, x86_fp80 %35, x86_fp80 %36, x86_fp80 %37)
store x86_fp80 %38, x86_fp80* %17
%39 = load x86_fp80, x86_fp80* %11
%40 = load x86_fp80, x86_fp80* %12
%41 = load x86_fp80, x86_fp80* %13
%42 = load x86_fp80, x86_fp80* %14
%43 = load x86_fp80, x86_fp80* %15
%44 = call x86_fp80 @Cpart2(x86_fp80 %39, x86_fp80 %40, x86_fp80 %41, x86_fp80 %42, x86_fp80 %43)
store x86_fp80 %44, x86_fp80* %18
%45 = load x86_fp80, x86_fp80* %11
%46 = load x86_fp80, x86_fp80* %12
%47 = load x86_fp80, x86_fp80* %13
%48 = load x86_fp80, x86_fp80* %14
%49 = load x86_fp80, x86_fp80* %15
%50 = call x86_fp80 @Cpart3(x86_fp80 %45, x86_fp80 %46, x86_fp80 %47, x86_fp80 %48, x86_fp80 %49)
store x86_fp80 %50, x86_fp80* %19
%51 = load x86_fp80, x86_fp80* %11
%52 = load x86_fp80, x86_fp80* %12
%53 = load x86_fp80, x86_fp80* %13
%54 = load x86_fp80, x86_fp80* %14
%55 = load x86_fp80, x86_fp80* %15
%56 = call x86_fp80 @Cpart4(x86_fp80 %51, x86_fp80 %52, x86_fp80 %53, x86_fp80 %54, x86_fp80 %55)
store x86_fp80 %56, x86_fp80* %20
%57 = load x86_fp80, x86_fp80* %11
%58 = load x86_fp80, x86_fp80* %12
%59 = load x86_fp80, x86_fp80* %13
%60 = load x86_fp80, x86_fp80* %14
%61 = load x86_fp80, x86_fp80* %15
%62 = call x86_fp80 @Cpart5(x86_fp80 %57, x86_fp80 %58, x86_fp80 %59, x86_fp80 %60, x86_fp80 %61)
store x86_fp80 %62, x86_fp80* %21
%63 = load x86_fp80, x86_fp80* %11
%64 = load x86_fp80, x86_fp80* %12
%65 = load x86_fp80, x86_fp80* %13
%66 = load x86_fp80, x86_fp80* %14
%67 = load x86_fp80, x86_fp80* %15
%68 = call x86_fp80 @Cpart6(x86_fp80 %63, x86_fp80 %64, x86_fp80 %65, x86_fp80 %66, x86_fp80 %67)
store x86_fp80 %68, x86_fp80* %22
%69 = load x86_fp80, x86_fp80* %17
%70 = load x86_fp80, x86_fp80* %18
%71 = fadd x86_fp80 %69, %70
%72 = load x86_fp80, x86_fp80* %19
%73 = fadd x86_fp80 %71, %72
%74 = load x86_fp80, x86_fp80* %20
%75 = fadd x86_fp80 %73, %74
%76 = load x86_fp80, x86_fp80* %21
%77 = fadd x86_fp80 %75, %76
%78 = load x86_fp80, x86_fp80* %22
%79 = fadd x86_fp80 %77, %78
store x86_fp80 %79, x86_fp80* %16
%80 = load x86_fp80, x86_fp80* %16
%81 = fptrunc x86_fp80 %80 to double
ret double %81
}

LLVM IR (-O2):
define double @C(double %0, double %1, double %2, double %3, double %4) {
%6 = fpext double %0 to x86_fp80
%7 = fpext double %1 to x86_fp80
%8 = fpext double %2 to x86_fp80
%9 = fpext double %3 to x86_fp80
%10 = fpext double %4 to x86_fp80
%11 = tail call x86_fp80 @Cpart1(x86_fp80 %6, x86_fp80 %7, x86_fp80 %8, x86_fp80 %9, x86_fp80 %10)
%12 = tail call x86_fp80 @Cpart2(x86_fp80 %6, x86_fp80 %7, x86_fp80 %8, x86_fp80 %9, x86_fp80 %10)
%13 = tail call x86_fp80 @Cpart3(x86_fp80 %6, x86_fp80 %7, x86_fp80 %8, x86_fp80 %9, x86_fp80 %10)
%14 = tail call x86_fp80 @Cpart4(x86_fp80 %6, x86_fp80 %7, x86_fp80 %8, x86_fp80 %9, x86_fp80 %10)
%15 = tail call x86_fp80 @Cpart5(x86_fp80 %6, x86_fp80 %7, x86_fp80 %8, x86_fp80 %9, x86_fp80 %10)
%16 = tail call x86_fp80 @Cpart6(x86_fp80 %6, x86_fp80 %7, x86_fp80 %8, x86_fp80 %9, x86_fp80 %10)
%17 = fadd x86_fp80 %11, %12
%18 = fadd x86_fp80 %17, %13
%19 = fadd x86_fp80 %18, %14
%20 = fadd x86_fp80 %19, %15
%21 = fadd x86_fp80 %20, %16
%22 = fptrunc x86_fp80 %21 to double
ret double %22
}