#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 */
int floor(int const);
int /*<<< orphan*/ memset(void *, int /*<<< orphan*/, int const);
void interp4_table1_real_per_adj(
    double *r_ck, double *i_ck, const int K1, const int K2, const int K3,
    const int K4, const double *r_h1, const double *r_h2, const double *r_h3,
    const double *r_h4, const int J1, const int J2, const int J3, const int J4,
    const int L1, const int L2, const int L3, const int L4, const double *p_tm,
    const int M, const double *r_fm, const double *i_fm) {
  int mm;
  {
    const int ncenter1 = floor(J1 * L1 / 2.);
    r_h1 += ncenter1;
  }
  {
    const int ncenter2 = floor(J2 * L2 / 2.);
    r_h2 += ncenter2;
  }
  {
    const int ncenter3 = floor(J3 * L3 / 2.);
    r_h3 += ncenter3;
  }
  {
    const int ncenter4 = floor(J4 * L4 / 2.);
    r_h4 += ncenter4;
  }
  (void)memset((void *)r_ck, 0, K1 * K2 * K3 * K4 * sizeof(*r_ck));
  (void)memset((void *)i_ck, 0, K1 * K2 * K3 * K4 * sizeof(*i_ck));
  for (mm = 0; mm < M; mm++) {
    int jj1, jj2, jj3, jj4;
    const double t4 = p_tm[3 * M];
    const double t3 = p_tm[2 * M];
    const double t2 = p_tm[M];
    const double t1 = *p_tm++;
    const double fmr = *r_fm++;
    const double fmi = *i_fm++;
    const int koff1 = 1 + floor(t1 - J1 / 2.);
    const int koff2 = 1 + floor(t2 - J2 / 2.);
    const int koff3 = 1 + floor(t3 - J3 / 2.);
    int k4 = 1 + floor(t4 - J4 / 2.);
    for (jj4 = 0; jj4 < J4; jj4++, k4++) {
      const double p4 = (t4 - k4) * L4;
      const int n4 = floor(p4);
      const double alf4 = p4 - n4;
      register const double *ph4 = r_h4 + n4;
      double coef4r = (1 - alf4) * *ph4 + alf4 * *(ph4 + 1);
      const int wrap4 = floor(k4 / (double)K4);
      const int k4mod = k4 - K4 * wrap4;
      const long k4Idx = k4mod * K3 * K2 * K1;
      const double v4r = coef4r * fmr;
      const double v4i = coef4r * fmi;
      int k3 = koff3;
      for (jj3 = 0; jj3 < J3; jj3++, k3++) {
        const double p3 = (t3 - k3) * L3;
        const int n3 = floor(p3);
        const double alf3 = p3 - n3;
        register const double *ph3 = r_h3 + n3;
        double coef3r = (1 - alf3) * *ph3 + alf3 * *(ph3 + 1);
        const int wrap3 = floor(k3 / (double)K3);
        const int k3mod = k3 - K3 * wrap3;
        const long k3Idx = k3mod * K2 * K1;
        const double v3r = coef3r * v4r;
        const double v3i = coef3r * v4i;
        int k2 = koff2;
        for (jj2 = 0; jj2 < J2; jj2++, k2++) {
          const double p2 = (t2 - k2) * L2;
          const int n2 = floor(p2);
          const double alf2 = p2 - n2;
          register const double *ph2 = r_h2 + n2;
          double coef2r = (1 - alf2) * *ph2 + alf2 * *(ph2 + 1);
          const int wrap2 = floor(k2 / (double)K2);
          const int k2mod = k2 - K2 * wrap2;
          const long k2Idx = k2mod * K1;
          const double v2r = coef2r * v3r;
          const double v2i = coef2r * v3i;
          int k1 = koff1;
          for (jj1 = 0; jj1 < J1; jj1++, k1++) {
            const double p1 = (t1 - k1) * L1;
            const int n1 = floor(p1);
            const double alf1 = p1 - n1;
            register const double *ph1 = r_h1 + n1;
            register double coef1r = (1 - alf1) * *ph1 + alf1 * *(ph1 + 1);
            const int wrap1 = floor(k1 / (double)K1);
            const int k1mod = k1 - K1 * wrap1;
            const long kk = k4Idx + k3Idx + k2Idx + k1mod;
            r_ck[kk] += coef1r * v2r;
            i_ck[kk] += coef1r * v2i;
          }
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<interp4_table1_real_per_adj>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1b0,%rsp
mov    0x88(%rbp),%rax
mov    0x80(%rbp),%rax
mov    0x78(%rbp),%eax
mov    0x70(%rbp),%rax
mov    0x68(%rbp),%eax
mov    0x60(%rbp),%eax
mov    0x58(%rbp),%eax
mov    0x50(%rbp),%eax
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9d,-0x20(%rbp)
mov    0x30(%rbp),%eax
imul   0x50(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xe6f(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%ecx
mov    0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x10(%rbp)
mov    0x38(%rbp),%eax
imul   0x58(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xe37(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    0x18(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x18(%rbp)
mov    0x40(%rbp),%eax
imul   0x60(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xdff(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%ecx
mov    0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x20(%rbp)
mov    0x48(%rbp),%eax
imul   0x68(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xdc7(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%ecx
mov    0x28(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,0x28(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x14(%rbp),%eax
imul   -0x18(%rbp),%eax
imul   -0x1c(%rbp),%eax
imul   -0x20(%rbp),%eax
cltq
shl    $0x3,%rax
mov    %eax,%edx
xor    %esi,%esi
call   1030 <memset@plt>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%eax
imul   -0x18(%rbp),%eax
imul   -0x1c(%rbp),%eax
imul   -0x20(%rbp),%eax
cltq
shl    $0x3,%rax
mov    %eax,%edx
xor    %esi,%esi
call   1030 <memset@plt>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    0x78(%rbp),%eax
jge    19c4 <interp4_table1_real_per_adj+0x8a4>
mov    0x70(%rbp),%rax
imul   $0x3,0x78(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x70(%rbp),%rax
mov    0x78(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x70(%rbp),%rax
movslq 0x78(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,0x70(%rbp)
movsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    0x80(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,0x80(%rbp)
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x88(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,0x88(%rbp)
movsd  (%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
cvtsi2sdl 0x30(%rbp),%xmm1
movsd  0xca7(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
movsd  -0x60(%rbp),%xmm0
cvtsi2sdl 0x38(%rbp),%xmm1
movsd  0xc7e(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
movsd  -0x58(%rbp),%xmm0
cvtsi2sdl 0x40(%rbp),%xmm1
movsd  0xc55(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
movsd  -0x50(%rbp),%xmm0
cvtsi2sdl 0x48(%rbp),%xmm1
movsd  0xc29(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    0x48(%rbp),%eax
jge    19b1 <interp4_table1_real_per_adj+0x891>
movsd  -0x50(%rbp),%xmm0
cvtsi2sdl -0x88(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
cvtsi2sdl 0x68(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
cvttsd2si -0x90(%rbp),%edi
ff
call   1040 <floor@plt>
mov    %eax,-0x94(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
cvtsi2sdl -0x94(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x28(%rbp),%rax
movslq -0x94(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xa8(%rbp)
movsd  0xb92(%rip),%xmm0
subsd  -0xa0(%rbp),%xmm0
ff
mov    -0xa8(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mov    -0xa8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
cvtsi2sdl -0x88(%rbp),%xmm0
ff
cvtsi2sdl -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,-0xb4(%rbp)
mov    -0x88(%rbp),%eax
mov    -0x20(%rbp),%ecx
imul   -0xb4(%rbp),%ecx
sub    %ecx,%eax
mov    %eax,-0xb8(%rbp)
mov    -0xb8(%rbp),%eax
imul   -0x1c(%rbp),%eax
imul   -0x18(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0xc0(%rbp)
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x84(%rbp),%eax
mov    %eax,-0xd4(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    198f <interp4_table1_real_per_adj+0x86f>
movsd  -0x58(%rbp),%xmm0
cvtsi2sdl -0xd4(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
cvtsi2sdl 0x60(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
cvttsd2si -0xe0(%rbp),%edi
ff
call   1040 <floor@plt>
mov    %eax,-0xe4(%rbp)
movsd  -0xe0(%rbp),%xmm0
ff
cvtsi2sdl -0xe4(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    0x20(%rbp),%rax
movslq -0xe4(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xf8(%rbp)
movsd  0xa4d(%rip),%xmm0
subsd  -0xf0(%rbp),%xmm0
ff
mov    -0xf8(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mov    -0xf8(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
cvtsi2sdl -0xd4(%rbp),%xmm0
ff
cvtsi2sdl -0x1c(%rbp),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,-0x104(%rbp)
mov    -0xd4(%rbp),%eax
mov    -0x1c(%rbp),%ecx
imul   -0x104(%rbp),%ecx
sub    %ecx,%eax
mov    %eax,-0x108(%rbp)
mov    -0x108(%rbp),%eax
imul   -0x18(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x110(%rbp)
movsd  -0x100(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
mov    -0x80(%rbp),%eax
mov    %eax,-0x124(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x38(%rbp),%eax
jge    196d <interp4_table1_real_per_adj+0x84d>
movsd  -0x60(%rbp),%xmm0
cvtsi2sdl -0x124(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
cvtsi2sdl 0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
cvttsd2si -0x130(%rbp),%edi
ff
call   1040 <floor@plt>
mov    %eax,-0x134(%rbp)
movsd  -0x130(%rbp),%xmm0
ff
cvtsi2sdl -0x134(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    0x18(%rbp),%rax
movslq -0x134(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x148(%rbp)
movsd  0x909(%rip),%xmm0
subsd  -0x140(%rbp),%xmm0
ff
mov    -0x148(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x140(%rbp),%xmm1
ff
mov    -0x148(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
cvtsi2sdl -0x124(%rbp),%xmm0
ff
cvtsi2sdl -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,-0x154(%rbp)
mov    -0x124(%rbp),%eax
mov    -0x18(%rbp),%ecx
imul   -0x154(%rbp),%ecx
sub    %ecx,%eax
mov    %eax,-0x158(%rbp)
mov    -0x158(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x160(%rbp)
movsd  -0x150(%rbp),%xmm0
ff
mulsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
mulsd  -0x120(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
mov    -0x7c(%rbp),%eax
mov    %eax,-0x174(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x30(%rbp),%eax
jge    194b <interp4_table1_real_per_adj+0x82b>
movsd  -0x68(%rbp),%xmm0
cvtsi2sdl -0x174(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
cvtsi2sdl 0x50(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
cvttsd2si -0x180(%rbp),%edi
ff
call   1040 <floor@plt>
mov    %eax,-0x184(%rbp)
movsd  -0x180(%rbp),%xmm0
ff
cvtsi2sdl -0x184(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
mov    0x10(%rbp),%rax
movslq -0x184(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x198(%rbp)
movsd  0x7c9(%rip),%xmm0
subsd  -0x190(%rbp),%xmm0
ff
mov    -0x198(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x190(%rbp),%xmm1
ff
mov    -0x198(%rbp),%rax
mulsd  0x8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
cvtsi2sdl -0x174(%rbp),%xmm0
ff
cvtsi2sdl -0x14(%rbp),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,-0x1a4(%rbp)
mov    -0x174(%rbp),%eax
mov    -0x14(%rbp),%ecx
imul   -0x1a4(%rbp),%ecx
sub    %ecx,%eax
mov    %eax,-0x1a8(%rbp)
mov    -0xc0(%rbp),%rax
add    -0x110(%rbp),%rax
add    -0x160(%rbp),%rax
movslq -0x1a8(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x1b0(%rbp)
movsd  -0x1a0(%rbp),%xmm0
ff
movsd  -0x168(%rbp),%xmm2
ff
mov    -0x8(%rbp),%rax
mov    -0x1b0(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x1a0(%rbp),%xmm0
ff
movsd  -0x170(%rbp),%xmm2
ff
mov    -0x10(%rbp),%rax
mov    -0x1b0(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x174(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x174(%rbp)
jmp    17c1 <interp4_table1_real_per_adj+0x6a1>
jmp    1950 <interp4_table1_real_per_adj+0x830>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x124(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x124(%rbp)
jmp    1681 <interp4_table1_real_per_adj+0x561>
jmp    1972 <interp4_table1_real_per_adj+0x852>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0xd4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd4(%rbp)
jmp    153d <interp4_table1_real_per_adj+0x41d>
jmp    1994 <interp4_table1_real_per_adj+0x874>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x88(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
jmp    13f8 <interp4_table1_real_per_adj+0x2d8>
jmp    19b6 <interp4_table1_real_per_adj+0x896>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12a9 <interp4_table1_real_per_adj+0x189>
add    $0x1b0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<interp4_table1_real_per_adj>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x198,%rsp
mov    %r9d,%r12d
mov    %r8d,%r14d
mov    %ecx,%ebx
mov    %edx,%ebp
mov    %rsi,0x98(%rsp)
mov    %rdi,%r13
mov    0x218(%rsp),%r15d
mov    0x210(%rsp),%eax
imul   0x1f0(%rsp),%eax
cvtsi2sd %eax,%xmm0
mulsd  0xe97(%rip),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %r15d,%ecx
imul   0x1f8(%rsp),%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mov    %eax,0x8(%rsp)
mulsd  0xe70(%rip),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    0x220(%rsp),%ecx
imul   0x200(%rsp),%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mov    %eax,0x10(%rsp)
mulsd  0xe45(%rip),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    0x228(%rsp),%ecx
imul   0x208(%rsp),%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mov    %eax,0x18(%rsp)
mulsd  0xe1a(%rip),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,0x40(%rsp)
mov    %ebx,0x38(%rsp)
mov    %ebp,%r15d
imul   %ebp,%ebx
mov    %r14d,0x2c(%rsp)
mov    %r12d,0x20(%rsp)
imul   %r12d,%r14d
mov    %ebx,0x6c(%rsp)
imul   %ebx,%r14d
shl    $0x3,%r14d
xor    %ebx,%ebx
mov    %r13,0x158(%rsp)
mov    %r13,%rdi
xor    %esi,%esi
mov    %r14d,%edx
call   1030 <memset@plt>
mov    0x98(%rsp),%rdi
xor    %esi,%esi
mov    %r14d,%edx
call   1030 <memset@plt>
mov    0x238(%rsp),%eax
test   %eax,%eax
jle    1a02 <interp4_table1_real_per_adj+0x8e2>
mov    0x248(%rsp),%rsi
mov    0x240(%rsp),%rdi
mov    0x230(%rsp),%rbp
movslq 0x8(%rsp),%r12
shl    $0x3,%r12
add    0x1d0(%rsp),%r12
movslq 0x10(%rsp),%rax
shl    $0x3,%rax
add    0x1d8(%rsp),%rax
mov    %rax,0x180(%rsp)
movslq 0x18(%rsp),%rax
shl    $0x3,%rax
add    0x1e0(%rsp),%rax
mov    %rax,0x150(%rsp)
movslq 0x40(%rsp),%rax
shl    $0x3,%rax
add    0x1e8(%rsp),%rax
mov    %rax,0x128(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl 0x228(%rsp),%xmm0
movsd  %xmm0,0x120(%rsp)
mov    0x238(%rsp),%eax
mov    %rax,%rcx
lea    (%rax,%rax,2),%eax
cltq
mov    %rax,0xe0(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl 0x220(%rsp),%xmm0
movsd  %xmm0,0x148(%rsp)
lea    (%rcx,%rcx,1),%eax
cltq
mov    %rax,0xd8(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl 0x1f0(%rsp),%xmm0
cvtsi2sdl 0x218(%rsp),%xmm1
movsd  %xmm1,0x178(%rsp)
mov    %ecx,%eax
mov    %rax,0xc8(%rsp)
movsd  0xcbf(%rip),%xmm2
mulsd  %xmm2,%xmm0
movsd  %xmm0,0xd0(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl 0x1f8(%rsp),%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,0xc0(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl 0x200(%rsp),%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,0xb8(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl 0x208(%rsp),%xmm0
xorps  %xmm1,%xmm1
cvtsi2sdl 0x20(%rsp),%xmm1
movsd  %xmm1,0x118(%rsp)
mov    0x2c(%rsp),%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  %xmm1,0x140(%rsp)
mov    0x38(%rsp),%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
movsd  %xmm1,0x170(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sdl 0x210(%rsp),%xmm1
movsd  %xmm1,0xa8(%rsp)
mov    %r15d,%edx
xorps  %xmm1,%xmm1
cvtsi2sd %r15d,%xmm1
movsd  %xmm1,0x188(%rsp)
mulsd  %xmm2,%xmm0
movsd  %xmm0,0xb0(%rsp)
imul   %ecx,%eax
imul   %r15d,%eax
mov    %eax,0x5c(%rsp)
jmp    144a <interp4_table1_real_per_adj+0x32a>
nopl   0x0(%rax)
mov    0xe8(%rsp),%rbp
add    $0x8,%rbp
mov    0xf0(%rsp),%rdi
add    $0x8,%rdi
mov    0xf8(%rsp),%rsi
add    $0x8,%rsi
mov    0x58(%rsp),%ebx
add    $0x1,%ebx
mov    0x238(%rsp),%eax
cmp    %eax,%ebx
je     1a02 <interp4_table1_real_per_adj+0x8e2>
mov    %ebx,0x58(%rsp)
mov    0xe0(%rsp),%rax
movsd  0x0(%rbp,%rax,8),%xmm0
movsd  %xmm0,0x88(%rsp)
mov    0xd8(%rsp),%rax
movsd  0x0(%rbp,%rax,8),%xmm0
movsd  %xmm0,0x90(%rsp)
mov    0xc8(%rsp),%rax
movsd  0x0(%rbp,%rax,8),%xmm0
movsd  %xmm0,0xa0(%rsp)
mov    %rbp,0xe8(%rsp)
movsd  0x0(%rbp),%xmm0
mov    %rdi,0xf0(%rsp)
movsd  (%rdi),%xmm1
movsd  %xmm1,0x110(%rsp)
mov    %rsi,0xf8(%rsp)
movsd  (%rsi),%xmm1
movsd  %xmm1,0x108(%rsp)
movsd  %xmm0,0x40(%rsp)
subsd  0xd0(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,%ebx
movsd  0xa0(%rsp),%xmm0
subsd  0xc0(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,0x30(%rsp)
movsd  0x90(%rsp),%xmm0
subsd  0xb8(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
mov    %eax,0x24(%rsp)
movsd  0x88(%rsp),%xmm0
subsd  0xb0(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
cmpl   $0x0,0x208(%rsp)
jle    1410 <interp4_table1_real_per_adj+0x2f0>
add    $0x1,%ebx
mov    %ebx,0x7c(%rsp)
movslq %ebx,%rcx
mov    %rcx,0x100(%rsp)
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,0x28(%rsp)
mov    0x24(%rsp),%ecx
add    $0x1,%ecx
mov    %ecx,0x60(%rsp)
mov    0x30(%rsp),%ecx
add    $0x1,%ecx
mov    %ecx,0x70(%rsp)
xor    %ecx,%ecx
jmp    159d <interp4_table1_real_per_adj+0x47d>
mov    0x64(%rsp),%ecx
add    $0x1,%ecx
addl   $0x1,0x28(%rsp)
cmp    0x208(%rsp),%ecx
mov    0x68(%rsp),%eax
je     1410 <interp4_table1_real_per_adj+0x2f0>
mov    %ecx,0x64(%rsp)
add    $0x1,%eax
mov    %eax,0x68(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x88(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x120(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
cvttsd2si %xmm1,%edi
call   1040 <floor@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
cltq
movsd  0xa13(%rip),%xmm0
subsd  %xmm1,%xmm0
mov    0x128(%rsp),%rcx
mulsd  0x8(%rcx,%rax,8),%xmm1
movsd  %xmm1,0x8(%rsp)
mulsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0x10(%rsp),%xmm0
divsd  0x118(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
cmpl   $0x0,0x200(%rsp)
jle    1580 <interp4_table1_real_per_adj+0x460>
imul   0x20(%rsp),%eax
movsd  0x48(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  0x110(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x138(%rsp)
mulsd  0x108(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
mov    0x28(%rsp),%ecx
sub    %eax,%ecx
imul   0x5c(%rsp),%ecx
movslq %ecx,%rax
add    0x100(%rsp),%rax
mov    %rax,0x130(%rsp)
xor    %eax,%eax
mov    0x60(%rsp),%ecx
mov    %ecx,0x34(%rsp)
mov    0x24(%rsp),%ecx
jmp    16cd <interp4_table1_real_per_adj+0x5ad>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x78(%rsp),%eax
add    $0x1,%eax
addl   $0x1,0x34(%rsp)
cmp    0x200(%rsp),%eax
mov    0x74(%rsp),%ecx
je     1580 <interp4_table1_real_per_adj+0x460>
mov    %eax,0x78(%rsp)
add    $0x1,%ecx
mov    %ecx,0x74(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x90(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x148(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
cvttsd2si %xmm1,%edi
call   1040 <floor@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
cltq
movsd  0x8e3(%rip),%xmm0
subsd  %xmm1,%xmm0
mov    0x150(%rsp),%rcx
mulsd  0x8(%rcx,%rax,8),%xmm1
movsd  %xmm1,0x8(%rsp)
mulsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0x10(%rsp),%xmm0
divsd  0x140(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
cmpl   $0x0,0x1f8(%rsp)
jle    16b0 <interp4_table1_real_per_adj+0x590>
movsd  0x50(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  0x138(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x168(%rsp)
mulsd  0x48(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
imul   0x2c(%rsp),%eax
mov    0x34(%rsp),%ecx
sub    %eax,%ecx
imul   0x6c(%rsp),%ecx
movslq %ecx,%rax
add    0x130(%rsp),%rax
mov    %rax,0x160(%rsp)
xor    %eax,%eax
mov    0x70(%rsp),%ecx
mov    %ecx,0x3c(%rsp)
mov    0x30(%rsp),%ecx
jmp    17f3 <interp4_table1_real_per_adj+0x6d3>
nop
mov    0x84(%rsp),%eax
add    $0x1,%eax
addl   $0x1,0x3c(%rsp)
cmp    0x1f8(%rsp),%eax
mov    0x80(%rsp),%ecx
je     16b0 <interp4_table1_real_per_adj+0x590>
mov    %eax,0x84(%rsp)
add    $0x1,%ecx
mov    %ecx,0x80(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0xa0(%rsp),%xmm1
subsd  %xmm0,%xmm1
mulsd  0x178(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
cvttsd2si %xmm1,%edi
call   1040 <floor@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
cltq
movsd  0x7b7(%rip),%xmm0
subsd  %xmm1,%xmm0
mov    0x180(%rsp),%rcx
mulsd  0x8(%rcx,%rax,8),%xmm1
movsd  %xmm1,0x8(%rsp)
mulsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x10(%rsp),%xmm0
divsd  0x170(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
cmpl   $0x0,0x1f0(%rsp)
movsd  0xa8(%rsp),%xmm1
movsd  0x40(%rsp),%xmm2
jle    17d0 <interp4_table1_real_per_adj+0x6b0>
mov    %r15d,%edx
movsd  0x18(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  0x168(%rsp),%xmm3
mulsd  %xmm0,%xmm3
movsd  %xmm3,0x190(%rsp)
mulsd  0x50(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
imul   0x38(%rsp),%eax
mov    0x3c(%rsp),%ecx
sub    %eax,%ecx
imul   %r15d,%ecx
movslq %ecx,%rax
add    0x160(%rsp),%rax
mov    0x158(%rsp),%rcx
lea    (%rcx,%rax,8),%r13
mov    0x98(%rsp),%rcx
lea    (%rcx,%rax,8),%rbx
mov    0x1f0(%rsp),%ebp
mov    0x7c(%rsp),%r14d
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
movsd  %xmm0,0x8(%rsp)
subsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x10(%rsp)
cvttsd2si %xmm2,%edi
call   1040 <floor@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
cltq
movsd  0x6a8(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  0x8(%r12,%rax,8),%xmm1
mulsd  (%r12,%rax,8),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
divsd  0x188(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <floor@plt>
movsd  0x40(%rsp),%xmm2
movsd  0xa8(%rsp),%xmm1
mov    %r15d,%ecx
imul   %r15d,%eax
cltq
shl    $0x3,%rax
mov    %r13,%rcx
sub    %rax,%rcx
movsd  0x10(%rsp),%xmm3
movapd %xmm3,%xmm0
mulsd  0x190(%rsp),%xmm0
addsd  (%rcx),%xmm0
movsd  %xmm0,(%rcx)
mov    %rbx,%rcx
sub    %rax,%rcx
movapd %xmm3,%xmm0
mulsd  0x18(%rsp),%xmm0
addsd  (%rcx),%xmm0
movsd  %xmm0,(%rcx)
add    $0x1,%r14d
add    $0x8,%r13
add    $0x8,%rbx
add    $0xffffffff,%ebp
jne    1920 <interp4_table1_real_per_adj+0x800>
jmp    17d0 <interp4_table1_real_per_adj+0x6b0>
add    $0x198,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @interp4_table1_real_per_adj(double* %0, double* %1, i32 %2, i32 %3, i32 %4, i32 %5, double* %6, double* %7, double* %8, double* %9, i32 %10, i32 %11, i32 %12, i32 %13, i32 %14, i32 %15, i32 %16, i32 %17, double* %18, i32 %19, double* %20, double* %21) {
%23 = alloca double*
%24 = alloca double*
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca double*
%30 = alloca double*
%31 = alloca double*
%32 = alloca double*
%33 = alloca i32
%34 = alloca i32
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca double*
%42 = alloca i32
%43 = alloca double*
%44 = alloca double*
%45 = alloca i32
%46 = alloca i32
%47 = alloca i32
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
%51 = alloca i32
%52 = alloca i32
%53 = alloca i32
%54 = alloca double
%55 = alloca double
%56 = alloca double
%57 = alloca double
%58 = alloca double
%59 = alloca double
%60 = alloca i32
%61 = alloca i32
%62 = alloca i32
%63 = alloca i32
%64 = alloca double
%65 = alloca i32
%66 = alloca double
%67 = alloca double*
%68 = alloca double
%69 = alloca i32
%70 = alloca i32
%71 = alloca i64
%72 = alloca double
%73 = alloca double
%74 = alloca i32
%75 = alloca double
%76 = alloca i32
%77 = alloca double
%78 = alloca double*
%79 = alloca double
%80 = alloca i32
%81 = alloca i32
%82 = alloca i64
%83 = alloca double
%84 = alloca double
%85 = alloca i32
%86 = alloca double
%87 = alloca i32
%88 = alloca double
%89 = alloca double*
%90 = alloca double
%91 = alloca i32
%92 = alloca i32
%93 = alloca i64
%94 = alloca double
%95 = alloca double
%96 = alloca i32
%97 = alloca double
%98 = alloca i32
%99 = alloca double
%100 = alloca double*
%101 = alloca double
%102 = alloca i32
%103 = alloca i32
%104 = alloca i64
store double* %0, double** %23
store double* %1, double** %24
store i32 %2, i32* %25
store i32 %3, i32* %26
store i32 %4, i32* %27
store i32 %5, i32* %28
store double* %6, double** %29
store double* %7, double** %30
store double* %8, double** %31
store double* %9, double** %32
store i32 %10, i32* %33
store i32 %11, i32* %34
store i32 %12, i32* %35
store i32 %13, i32* %36
store i32 %14, i32* %37
store i32 %15, i32* %38
store i32 %16, i32* %39
store i32 %17, i32* %40
store double* %18, double** %41
store i32 %19, i32* %42
store double* %20, double** %43
store double* %21, double** %44
%105 = load i32, i32* %33
%106 = load i32, i32* %37
%107 = mul nsw i32 %105, %106
%108 = sitofp i32 %107 to double
%109 = fdiv double %108, 2.000000e+00
%110 = fptosi double %109 to i32
%111 = call i32 @floor(i32 %110)
store i32 %111, i32* %46
%112 = load i32, i32* %46
%113 = load double*, double** %29
%114 = sext i32 %112 to i64
%115 = getelementptr inbounds double, double* %113, i64 %114
store double* %115, double** %29
%116 = load i32, i32* %34
%117 = load i32, i32* %38
%118 = mul nsw i32 %116, %117
%119 = sitofp i32 %118 to double
%120 = fdiv double %119, 2.000000e+00
%121 = fptosi double %120 to i32
%122 = call i32 @floor(i32 %121)
store i32 %122, i32* %47
%123 = load i32, i32* %47
%124 = load double*, double** %30
%125 = sext i32 %123 to i64
%126 = getelementptr inbounds double, double* %124, i64 %125
store double* %126, double** %30
%127 = load i32, i32* %35
%128 = load i32, i32* %39
%129 = mul nsw i32 %127, %128
%130 = sitofp i32 %129 to double
%131 = fdiv double %130, 2.000000e+00
%132 = fptosi double %131 to i32
%133 = call i32 @floor(i32 %132)
store i32 %133, i32* %48
%134 = load i32, i32* %48
%135 = load double*, double** %31
%136 = sext i32 %134 to i64
%137 = getelementptr inbounds double, double* %135, i64 %136
store double* %137, double** %31
%138 = load i32, i32* %36
%139 = load i32, i32* %40
%140 = mul nsw i32 %138, %139
%141 = sitofp i32 %140 to double
%142 = fdiv double %141, 2.000000e+00
%143 = fptosi double %142 to i32
%144 = call i32 @floor(i32 %143)
store i32 %144, i32* %49
%145 = load i32, i32* %49
%146 = load double*, double** %32
%147 = sext i32 %145 to i64
%148 = getelementptr inbounds double, double* %146, i64 %147
store double* %148, double** %32
%149 = load double*, double** %23
%150 = bitcast double* %149 to i8*
%151 = load i32, i32* %25
%152 = load i32, i32* %26
%153 = mul nsw i32 %151, %152
%154 = load i32, i32* %27
%155 = mul nsw i32 %153, %154
%156 = load i32, i32* %28
%157 = mul nsw i32 %155, %156
%158 = sext i32 %157 to i64
%159 = mul i64 %158, 8
%160 = trunc i64 %159 to i32
%161 = call i32 @memset(i8* %150, i32 0, i32 %160)
%162 = load double*, double** %24
%163 = bitcast double* %162 to i8*
%164 = load i32, i32* %25
%165 = load i32, i32* %26
%166 = mul nsw i32 %164, %165
%167 = load i32, i32* %27
%168 = mul nsw i32 %166, %167
%169 = load i32, i32* %28
%170 = mul nsw i32 %168, %169
%171 = sext i32 %170 to i64
%172 = mul i64 %171, 8
%173 = trunc i64 %172 to i32
%174 = call i32 @memset(i8* %163, i32 0, i32 %173)
store i32 0, i32* %45
br label %175
175: ; preds = %503, %22
%176 = load i32, i32* %45
%177 = load i32, i32* %42
%178 = icmp slt i32 %176, %177
br i1 %178, label %179, label %506
179: ; preds = %175
%180 = load double*, double** %41
%181 = load i32, i32* %42
%182 = mul nsw i32 3, %181
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds double, double* %180, i64 %183
%185 = load double, double* %184
store double %185, double* %54
%186 = load double*, double** %41
%187 = load i32, i32* %42
%188 = mul nsw i32 2, %187
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds double, double* %186, i64 %189
%191 = load double, double* %190
store double %191, double* %55
%192 = load double*, double** %41
%193 = load i32, i32* %42
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds double, double* %192, i64 %194
%196 = load double, double* %195
store double %196, double* %56
%197 = load double*, double** %41
%198 = getelementptr inbounds double, double* %197, i32 1
store double* %198, double** %41
%199 = load double, double* %197
store double %199, double* %57
%200 = load double*, double** %43
%201 = getelementptr inbounds double, double* %200, i32 1
store double* %201, double** %43
%202 = load double, double* %200
store double %202, double* %58
%203 = load double*, double** %44
%204 = getelementptr inbounds double, double* %203, i32 1
store double* %204, double** %44
%205 = load double, double* %203
store double %205, double* %59
%206 = load double, double* %57
%207 = load i32, i32* %33
%208 = sitofp i32 %207 to double
%209 = fdiv double %208, 2.000000e+00
%210 = fsub double %206, %209
%211 = fptosi double %210 to i32
%212 = call i32 @floor(i32 %211)
%213 = add nsw i32 1, %212
store i32 %213, i32* %60
%214 = load double, double* %56
%215 = load i32, i32* %34
%216 = sitofp i32 %215 to double
%217 = fdiv double %216, 2.000000e+00
%218 = fsub double %214, %217
%219 = fptosi double %218 to i32
%220 = call i32 @floor(i32 %219)
%221 = add nsw i32 1, %220
store i32 %221, i32* %61
%222 = load double, double* %55
%223 = load i32, i32* %35
%224 = sitofp i32 %223 to double
%225 = fdiv double %224, 2.000000e+00
%226 = fsub double %222, %225
%227 = fptosi double %226 to i32
%228 = call i32 @floor(i32 %227)
%229 = add nsw i32 1, %228
store i32 %229, i32* %62
%230 = load double, double* %54
%231 = load i32, i32* %36
%232 = sitofp i32 %231 to double
%233 = fdiv double %232, 2.000000e+00
%234 = fsub double %230, %233
%235 = fptosi double %234 to i32
%236 = call i32 @floor(i32 %235)
%237 = add nsw i32 1, %236
store i32 %237, i32* %63
store i32 0, i32* %53
br label %238
238: ; preds = %497, %179
%239 = load i32, i32* %53
%240 = load i32, i32* %36
%241 = icmp slt i32 %239, %240
br i1 %241, label %242, label %502
242: ; preds = %238
%243 = load double, double* %54
%244 = load i32, i32* %63
%245 = sitofp i32 %244 to double
%246 = fsub double %243, %245
%247 = load i32, i32* %40
%248 = sitofp i32 %247 to double
%249 = fmul double %246, %248
store double %249, double* %64
%250 = load double, double* %64
%251 = fptosi double %250 to i32
%252 = call i32 @floor(i32 %251)
store i32 %252, i32* %65
%253 = load double, double* %64
%254 = load i32, i32* %65
%255 = sitofp i32 %254 to double
%256 = fsub double %253, %255
store double %256, double* %66
%257 = load double*, double** %32
%258 = load i32, i32* %65
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds double, double* %257, i64 %259
store double* %260, double** %67
%261 = load double, double* %66
%262 = fsub double 1.000000e+00, %261
%263 = load double*, double** %67
%264 = load double, double* %263
%265 = load double, double* %66
%266 = load double*, double** %67
%267 = getelementptr inbounds double, double* %266, i64 1
%268 = load double, double* %267
%269 = fmul double %265, %268
%270 = call double @llvm.fmuladd.f64(double %262, double %264, double %269)
store double %270, double* %68
%271 = load i32, i32* %63
%272 = sitofp i32 %271 to double
%273 = load i32, i32* %28
%274 = sitofp i32 %273 to double
%275 = fdiv double %272, %274
%276 = fptosi double %275 to i32
%277 = call i32 @floor(i32 %276)
store i32 %277, i32* %69
%278 = load i32, i32* %63
%279 = load i32, i32* %28
%280 = load i32, i32* %69
%281 = mul nsw i32 %279, %280
%282 = sub nsw i32 %278, %281
store i32 %282, i32* %70
%283 = load i32, i32* %70
%284 = load i32, i32* %27
%285 = mul nsw i32 %283, %284
%286 = load i32, i32* %26
%287 = mul nsw i32 %285, %286
%288 = load i32, i32* %25
%289 = mul nsw i32 %287, %288
%290 = sext i32 %289 to i64
store i64 %290, i64* %71
%291 = load double, double* %68
%292 = load double, double* %58
%293 = fmul double %291, %292
store double %293, double* %72
%294 = load double, double* %68
%295 = load double, double* %59
%296 = fmul double %294, %295
store double %296, double* %73
%297 = load i32, i32* %62
store i32 %297, i32* %74
store i32 0, i32* %52
br label %298
298: ; preds = %491, %242
%299 = load i32, i32* %52
%300 = load i32, i32* %35
%301 = icmp slt i32 %299, %300
br i1 %301, label %302, label %496
302: ; preds = %298
%303 = load double, double* %55
%304 = load i32, i32* %74
%305 = sitofp i32 %304 to double
%306 = fsub double %303, %305
%307 = load i32, i32* %39
%308 = sitofp i32 %307 to double
%309 = fmul double %306, %308
store double %309, double* %75
%310 = load double, double* %75
%311 = fptosi double %310 to i32
%312 = call i32 @floor(i32 %311)
store i32 %312, i32* %76
%313 = load double, double* %75
%314 = load i32, i32* %76
%315 = sitofp i32 %314 to double
%316 = fsub double %313, %315
store double %316, double* %77
%317 = load double*, double** %31
%318 = load i32, i32* %76
%319 = sext i32 %318 to i64
%320 = getelementptr inbounds double, double* %317, i64 %319
store double* %320, double** %78
%321 = load double, double* %77
%322 = fsub double 1.000000e+00, %321
%323 = load double*, double** %78
%324 = load double, double* %323
%325 = load double, double* %77
%326 = load double*, double** %78
%327 = getelementptr inbounds double, double* %326, i64 1
%328 = load double, double* %327
%329 = fmul double %325, %328
%330 = call double @llvm.fmuladd.f64(double %322, double %324, double %329)
store double %330, double* %79
%331 = load i32, i32* %74
%332 = sitofp i32 %331 to double
%333 = load i32, i32* %27
%334 = sitofp i32 %333 to double
%335 = fdiv double %332, %334
%336 = fptosi double %335 to i32
%337 = call i32 @floor(i32 %336)
store i32 %337, i32* %80
%338 = load i32, i32* %74
%339 = load i32, i32* %27
%340 = load i32, i32* %80
%341 = mul nsw i32 %339, %340
%342 = sub nsw i32 %338, %341
store i32 %342, i32* %81
%343 = load i32, i32* %81
%344 = load i32, i32* %26
%345 = mul nsw i32 %343, %344
%346 = load i32, i32* %25
%347 = mul nsw i32 %345, %346
%348 = sext i32 %347 to i64
store i64 %348, i64* %82
%349 = load double, double* %79
%350 = load double, double* %72
%351 = fmul double %349, %350
store double %351, double* %83
%352 = load double, double* %79
%353 = load double, double* %73
%354 = fmul double %352, %353
store double %354, double* %84
%355 = load i32, i32* %61
store i32 %355, i32* %85
store i32 0, i32* %51
br label %356
356: ; preds = %485, %302
%357 = load i32, i32* %51
%358 = load i32, i32* %34
%359 = icmp slt i32 %357, %358
br i1 %359, label %360, label %490
360: ; preds = %356
%361 = load double, double* %56
%362 = load i32, i32* %85
%363 = sitofp i32 %362 to double
%364 = fsub double %361, %363
%365 = load i32, i32* %38
%366 = sitofp i32 %365 to double
%367 = fmul double %364, %366
store double %367, double* %86
%368 = load double, double* %86
%369 = fptosi double %368 to i32
%370 = call i32 @floor(i32 %369)
store i32 %370, i32* %87
%371 = load double, double* %86
%372 = load i32, i32* %87
%373 = sitofp i32 %372 to double
%374 = fsub double %371, %373
store double %374, double* %88
%375 = load double*, double** %30
%376 = load i32, i32* %87
%377 = sext i32 %376 to i64
%378 = getelementptr inbounds double, double* %375, i64 %377
store double* %378, double** %89
%379 = load double, double* %88
%380 = fsub double 1.000000e+00, %379
%381 = load double*, double** %89
%382 = load double, double* %381
%383 = load double, double* %88
%384 = load double*, double** %89
%385 = getelementptr inbounds double, double* %384, i64 1
%386 = load double, double* %385
%387 = fmul double %383, %386
%388 = call double @llvm.fmuladd.f64(double %380, double %382, double %387)
store double %388, double* %90
%389 = load i32, i32* %85
%390 = sitofp i32 %389 to double
%391 = load i32, i32* %26
%392 = sitofp i32 %391 to double
%393 = fdiv double %390, %392
%394 = fptosi double %393 to i32
%395 = call i32 @floor(i32 %394)
store i32 %395, i32* %91
%396 = load i32, i32* %85
%397 = load i32, i32* %26
%398 = load i32, i32* %91
%399 = mul nsw i32 %397, %398
%400 = sub nsw i32 %396, %399
store i32 %400, i32* %92
%401 = load i32, i32* %92
%402 = load i32, i32* %25
%403 = mul nsw i32 %401, %402
%404 = sext i32 %403 to i64
store i64 %404, i64* %93
%405 = load double, double* %90
%406 = load double, double* %83
%407 = fmul double %405, %406
store double %407, double* %94
%408 = load double, double* %90
%409 = load double, double* %84
%410 = fmul double %408, %409
store double %410, double* %95
%411 = load i32, i32* %60
store i32 %411, i32* %96
store i32 0, i32* %50
br label %412
412: ; preds = %479, %360
%413 = load i32, i32* %50
%414 = load i32, i32* %33
%415 = icmp slt i32 %413, %414
br i1 %415, label %416, label %484
416: ; preds = %412
%417 = load double, double* %57
%418 = load i32, i32* %96
%419 = sitofp i32 %418 to double
%420 = fsub double %417, %419
%421 = load i32, i32* %37
%422 = sitofp i32 %421 to double
%423 = fmul double %420, %422
store double %423, double* %97
%424 = load double, double* %97
%425 = fptosi double %424 to i32
%426 = call i32 @floor(i32 %425)
store i32 %426, i32* %98
%427 = load double, double* %97
%428 = load i32, i32* %98
%429 = sitofp i32 %428 to double
%430 = fsub double %427, %429
store double %430, double* %99
%431 = load double*, double** %29
%432 = load i32, i32* %98
%433 = sext i32 %432 to i64
%434 = getelementptr inbounds double, double* %431, i64 %433
store double* %434, double** %100
%435 = load double, double* %99
%436 = fsub double 1.000000e+00, %435
%437 = load double*, double** %100
%438 = load double, double* %437
%439 = load double, double* %99
%440 = load double*, double** %100
%441 = getelementptr inbounds double, double* %440, i64 1
%442 = load double, double* %441
%443 = fmul double %439, %442
%444 = call double @llvm.fmuladd.f64(double %436, double %438, double %443)
store double %444, double* %101
%445 = load i32, i32* %96
%446 = sitofp i32 %445 to double
%447 = load i32, i32* %25
%448 = sitofp i32 %447 to double
%449 = fdiv double %446, %448
%450 = fptosi double %449 to i32
%451 = call i32 @floor(i32 %450)
store i32 %451, i32* %102
%452 = load i32, i32* %96
%453 = load i32, i32* %25
%454 = load i32, i32* %102
%455 = mul nsw i32 %453, %454
%456 = sub nsw i32 %452, %455
store i32 %456, i32* %103
%457 = load i64, i64* %71
%458 = load i64, i64* %82
%459 = add nsw i64 %457, %458
%460 = load i64, i64* %93
%461 = add nsw i64 %459, %460
%462 = load i32, i32* %103
%463 = sext i32 %462 to i64
%464 = add nsw i64 %461, %463
store i64 %464, i64* %104
%465 = load double, double* %101
%466 = load double, double* %94
%467 = load double*, double** %23
%468 = load i64, i64* %104
%469 = getelementptr inbounds double, double* %467, i64 %468
%470 = load double, double* %469
%471 = call double @llvm.fmuladd.f64(double %465, double %466, double %470)
store double %471, double* %469
%472 = load double, double* %101
%473 = load double, double* %95
%474 = load double*, double** %24
%475 = load i64, i64* %104
%476 = getelementptr inbounds double, double* %474, i64 %475
%477 = load double, double* %476
%478 = call double @llvm.fmuladd.f64(double %472, double %473, double %477)
store double %478, double* %476
br label %479
479: ; preds = %416
%480 = load i32, i32* %50
%481 = add nsw i32 %480, 1
store i32 %481, i32* %50
%482 = load i32, i32* %96
%483 = add nsw i32 %482, 1
store i32 %483, i32* %96
br label %412
484: ; preds = %412
br label %485
485: ; preds = %484
%486 = load i32, i32* %51
%487 = add nsw i32 %486, 1
store i32 %487, i32* %51
%488 = load i32, i32* %85
%489 = add nsw i32 %488, 1
store i32 %489, i32* %85
br label %356
490: ; preds = %356
br label %491
491: ; preds = %490
%492 = load i32, i32* %52
%493 = add nsw i32 %492, 1
store i32 %493, i32* %52
%494 = load i32, i32* %74
%495 = add nsw i32 %494, 1
store i32 %495, i32* %74
br label %298
496: ; preds = %298
br label %497
497: ; preds = %496
%498 = load i32, i32* %53
%499 = add nsw i32 %498, 1
store i32 %499, i32* %53
%500 = load i32, i32* %63
%501 = add nsw i32 %500, 1
store i32 %501, i32* %63
br label %238
502: ; preds = %238
br label %503
503: ; preds = %502
%504 = load i32, i32* %45
%505 = add nsw i32 %504, 1
store i32 %505, i32* %45
br label %175
506: ; preds = %175
ret void
}

LLVM IR (-O2):
define void @interp4_table1_real_per_adj(double* %0, double* %1, i32 %2, i32 %3, i32 %4, i32 %5, double* nocapture %6, double* nocapture %7, double* nocapture %8, double* nocapture %9, i32 %10, i32 %11, i32 %12, i32 %13, i32 %14, i32 %15, i32 %16, i32 %17, double* nocapture %18, i32 %19, double* nocapture %20, double* nocapture %21) {
%23 = mul nsw i32 %14, %10
%24 = sitofp i32 %23 to double
%25 = fmul double %24, 5.000000e-01
%26 = fptosi double %25 to i32
%27 = tail call i32 @floor(i32 %26)
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds double, double* %6, i64 %28
%30 = mul nsw i32 %15, %11
%31 = sitofp i32 %30 to double
%32 = fmul double %31, 5.000000e-01
%33 = fptosi double %32 to i32
%34 = tail call i32 @floor(i32 %33)
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds double, double* %7, i64 %35
%37 = mul nsw i32 %16, %12
%38 = sitofp i32 %37 to double
%39 = fmul double %38, 5.000000e-01
%40 = fptosi double %39 to i32
%41 = tail call i32 @floor(i32 %40)
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds double, double* %8, i64 %42
%44 = mul nsw i32 %17, %13
%45 = sitofp i32 %44 to double
%46 = fmul double %45, 5.000000e-01
%47 = fptosi double %46 to i32
%48 = tail call i32 @floor(i32 %47)
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds double, double* %9, i64 %49
%51 = bitcast double* %0 to i8*
%52 = mul i32 %3, %2
%53 = shl i32 %52, 3
%54 = mul i32 %53, %4
%55 = mul i32 %54, %5
%56 = tail call i32 @memset(i8* %51, i32 0, i32 %55)
%57 = bitcast double* %1 to i8*
%58 = tail call i32 @memset(i8* %57, i32 0, i32 %55)
%59 = icmp sgt i32 %19, 0
br i1 %59, label %60, label %250
60: ; preds = %22
%61 = mul nsw i32 %19, 3
%62 = sext i32 %61 to i64
%63 = shl nuw nsw i32 %19, 1
%64 = sext i32 %63 to i64
%65 = zext i32 %19 to i64
%66 = sitofp i32 %10 to double
%67 = fmul double %66, 5.000000e-01
%68 = sitofp i32 %11 to double
%69 = fmul double %68, 5.000000e-01
%70 = sitofp i32 %12 to double
%71 = fmul double %70, 5.000000e-01
%72 = sitofp i32 %13 to double
%73 = fmul double %72, 5.000000e-01
%74 = icmp sgt i32 %13, 0
%75 = sitofp i32 %17 to double
%76 = sitofp i32 %5 to double
%77 = mul i32 %52, %4
%78 = icmp sgt i32 %12, 0
%79 = sitofp i32 %16 to double
%80 = sitofp i32 %4 to double
%81 = icmp sgt i32 %11, 0
%82 = sitofp i32 %15 to double
%83 = sitofp i32 %3 to double
%84 = icmp sgt i32 %10, 0
%85 = sitofp i32 %14 to double
%86 = sitofp i32 %2 to double
br label %87
87: ; preds = %60, %247
%88 = phi double* [ %18, %60 ], [ %98, %247 ]
%89 = phi double* [ %20, %60 ], [ %100, %247 ]
%90 = phi double* [ %21, %60 ], [ %102, %247 ]
%91 = phi i32 [ 0, %60 ], [ %248, %247 ]
%92 = getelementptr inbounds double, double* %88, i64 %62
%93 = load double, double* %92
%94 = getelementptr inbounds double, double* %88, i64 %64
%95 = load double, double* %94
%96 = getelementptr inbounds double, double* %88, i64 %65
%97 = load double, double* %96
%98 = getelementptr inbounds double, double* %88, i64 1
%99 = load double, double* %88
%100 = getelementptr inbounds double, double* %89, i64 1
%101 = load double, double* %89
%102 = getelementptr inbounds double, double* %90, i64 1
%103 = load double, double* %90
%104 = fsub double %99, %67
%105 = fptosi double %104 to i32
%106 = tail call i32 @floor(i32 %105)
%107 = fsub double %97, %69
%108 = fptosi double %107 to i32
%109 = tail call i32 @floor(i32 %108)
%110 = fsub double %95, %71
%111 = fptosi double %110 to i32
%112 = tail call i32 @floor(i32 %111)
%113 = fsub double %93, %73
%114 = fptosi double %113 to i32
%115 = tail call i32 @floor(i32 %114)
br i1 %74, label %116, label %247
116: ; preds = %87, %244
%117 = phi i32 [ %119, %244 ], [ %115, %87 ]
%118 = phi i32 [ %245, %244 ], [ 0, %87 ]
%119 = add nsw i32 %117, 1
%120 = sitofp i32 %119 to double
%121 = fsub double %93, %120
%122 = fmul double %121, %75
%123 = fptosi double %122 to i32
%124 = tail call i32 @floor(i32 %123)
%125 = sitofp i32 %124 to double
%126 = fsub double %122, %125
%127 = sext i32 %124 to i64
%128 = getelementptr inbounds double, double* %50, i64 %127
%129 = fsub double 1.000000e+00, %126
%130 = load double, double* %128
%131 = getelementptr inbounds double, double* %128, i64 1
%132 = load double, double* %131
%133 = fmul double %126, %132
%134 = tail call double @llvm.fmuladd.f64(double %129, double %130, double %133)
%135 = fdiv double %120, %76
%136 = fptosi double %135 to i32
%137 = tail call i32 @floor(i32 %136)
%138 = mul nsw i32 %137, %5
%139 = sub nsw i32 %119, %138
%140 = mul i32 %77, %139
%141 = sext i32 %140 to i64
%142 = fmul double %101, %134
%143 = fmul double %103, %134
br i1 %78, label %144, label %244
144: ; preds = %116, %241
%145 = phi i32 [ %147, %241 ], [ %112, %116 ]
%146 = phi i32 [ %242, %241 ], [ 0, %116 ]
%147 = add nsw i32 %145, 1
%148 = sitofp i32 %147 to double
%149 = fsub double %95, %148
%150 = fmul double %149, %79
%151 = fptosi double %150 to i32
%152 = tail call i32 @floor(i32 %151)
%153 = sitofp i32 %152 to double
%154 = fsub double %150, %153
%155 = sext i32 %152 to i64
%156 = getelementptr inbounds double, double* %43, i64 %155
%157 = fsub double 1.000000e+00, %154
%158 = load double, double* %156
%159 = getelementptr inbounds double, double* %156, i64 1
%160 = load double, double* %159
%161 = fmul double %154, %160
%162 = tail call double @llvm.fmuladd.f64(double %157, double %158, double %161)
%163 = fdiv double %148, %80
%164 = fptosi double %163 to i32
%165 = tail call i32 @floor(i32 %164)
%166 = fmul double %142, %162
%167 = fmul double %143, %162
br i1 %81, label %168, label %241
168: ; preds = %144
%169 = mul nsw i32 %165, %4
%170 = sub nsw i32 %147, %169
%171 = mul i32 %52, %170
%172 = sext i32 %171 to i64
%173 = add nsw i64 %172, %141
br label %174
174: ; preds = %168, %238
%175 = phi i32 [ %109, %168 ], [ %177, %238 ]
%176 = phi i32 [ 0, %168 ], [ %239, %238 ]
%177 = add nsw i32 %175, 1
%178 = sitofp i32 %177 to double
%179 = fsub double %97, %178
%180 = fmul double %179, %82
%181 = fptosi double %180 to i32
%182 = tail call i32 @floor(i32 %181)
%183 = sitofp i32 %182 to double
%184 = fsub double %180, %183
%185 = sext i32 %182 to i64
%186 = getelementptr inbounds double, double* %36, i64 %185
%187 = fsub double 1.000000e+00, %184
%188 = load double, double* %186
%189 = getelementptr inbounds double, double* %186, i64 1
%190 = load double, double* %189
%191 = fmul double %184, %190
%192 = tail call double @llvm.fmuladd.f64(double %187, double %188, double %191)
%193 = fdiv double %178, %83
%194 = fptosi double %193 to i32
%195 = tail call i32 @floor(i32 %194)
%196 = fmul double %166, %192
%197 = fmul double %167, %192
br i1 %84, label %198, label %238
198: ; preds = %174
%199 = mul nsw i32 %195, %3
%200 = sub nsw i32 %177, %199
%201 = mul nsw i32 %200, %2
%202 = sext i32 %201 to i64
%203 = add nsw i64 %173, %202
br label %204
204: ; preds = %198, %204
%205 = phi i32 [ %106, %198 ], [ %207, %204 ]
%206 = phi i32 [ 0, %198 ], [ %236, %204 ]
%207 = add nsw i32 %205, 1
%208 = sitofp i32 %207 to double
%209 = fsub double %99, %208
%210 = fmul double %209, %85
%211 = fptosi double %210 to i32
%212 = tail call i32 @floor(i32 %211)
%213 = sitofp i32 %212 to double
%214 = fsub double %210, %213
%215 = sext i32 %212 to i64
%216 = getelementptr inbounds double, double* %29, i64 %215
%217 = fsub double 1.000000e+00, %214
%218 = load double, double* %216
%219 = getelementptr inbounds double, double* %216, i64 1
%220 = load double, double* %219
%221 = fmul double %214, %220
%222 = tail call double @llvm.fmuladd.f64(double %217, double %218, double %221)
%223 = fdiv double %208, %86
%224 = fptosi double %223 to i32
%225 = tail call i32 @floor(i32 %224)
%226 = mul nsw i32 %225, %2
%227 = sub nsw i32 %207, %226
%228 = sext i32 %227 to i64
%229 = add nsw i64 %203, %228
%230 = getelementptr inbounds double, double* %0, i64 %229
%231 = load double, double* %230
%232 = tail call double @llvm.fmuladd.f64(double %222, double %196, double %231)
store double %232, double* %230
%233 = getelementptr inbounds double, double* %1, i64 %229
%234 = load double, double* %233
%235 = tail call double @llvm.fmuladd.f64(double %222, double %197, double %234)
store double %235, double* %233
%236 = add nuw nsw i32 %206, 1
%237 = icmp eq i32 %236, %10
br i1 %237, label %238, label %204
238: ; preds = %204, %174
%239 = add nuw nsw i32 %176, 1
%240 = icmp eq i32 %239, %11
br i1 %240, label %241, label %174
241: ; preds = %238, %144
%242 = add nuw nsw i32 %146, 1
%243 = icmp eq i32 %242, %12
br i1 %243, label %244, label %144
244: ; preds = %241, %116
%245 = add nuw nsw i32 %118, 1
%246 = icmp eq i32 %245, %13
br i1 %246, label %247, label %116
247: ; preds = %244, %87
%248 = add nuw nsw i32 %91, 1
%249 = icmp eq i32 %248, %19
br i1 %249, label %250, label %87
250: ; preds = %247, %22
ret void
}