double call_double26(double (*f)(double, double, double, double, double, double,
                                 double, double, double, double, double, double,
                                 double, double, double, double, double, double,
                                 double, double, double, double, double, double,
                                 double, double)) {
  return f(3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14,
           3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14,
           3.14, 3.14, 3.14, 3.14);
}


x86 assembly (clang, -O0):
<call_double26>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %rdi,-0x8(%rbp)
movsd  0xee8(%rip),%xmm8
movaps %xmm8,%xmm0
movaps %xmm8,%xmm1
movaps %xmm8,%xmm2
movaps %xmm8,%xmm3
movaps %xmm8,%xmm4
movaps %xmm8,%xmm5
movaps %xmm8,%xmm6
movaps %xmm8,%xmm7
movsd  %xmm8,(%rsp)
movsd  %xmm8,0x8(%rsp)
movsd  %xmm8,0x10(%rsp)
movsd  %xmm8,0x18(%rsp)
movsd  %xmm8,0x20(%rsp)
movsd  %xmm8,0x28(%rsp)
movsd  %xmm8,0x30(%rsp)
movsd  %xmm8,0x38(%rsp)
movsd  %xmm8,0x40(%rsp)
movsd  %xmm8,0x48(%rsp)
movsd  %xmm8,0x50(%rsp)
movsd  %xmm8,0x58(%rsp)
movsd  %xmm8,0x60(%rsp)
movsd  %xmm8,0x68(%rsp)
movsd  %xmm8,0x70(%rsp)
movsd  %xmm8,0x78(%rsp)
movsd  %xmm8,0x80(%rsp)
movsd  %xmm8,0x88(%rsp)
call   *-0x8(%rbp)
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<call_double26>:
push   %rax
movabs $0x40091eb851eb851f,%rax
1e 09 40
movsd  0xeed(%rip),%xmm0
movaps %xmm0,%xmm1
movaps %xmm0,%xmm2
movaps %xmm0,%xmm3
movaps %xmm0,%xmm4
movaps %xmm0,%xmm5
movaps %xmm0,%xmm6
movaps %xmm0,%xmm7
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
push   %rax
call   *%rdi
add    $0x90,%rsp
pop    %rax
ret

LLVM IR (-O0):
define double @call_double26(double (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)* %0) {
%2 = alloca double (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)*
store double (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)* %0, double (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)** %2
%3 = load double (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)*, double (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)** %2
%4 = call double %3(double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00)
ret double %4
}

LLVM IR (-O2):
define double @call_double26(double (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)* nocapture %0) {
%2 = tail call double %0(double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00, double 3.140000e+00)
ret double %2
}