#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 exp(double);
double fabs(double);
double *diff(void) {
  static double diff_data[200 * 200];
  double x, y, a, b, c, e, e1, e2, f, f1;
  double p = 4.0 / 200;
  int i, j, k = 0;
  for (y = -2.0, i = 0; i < 200; y += p, i++) {
    for (x = -2.0, j = 0; j < 200; x += p, j++) {
      a = (exp(-x * x - y * y)) * (-2 * x - 2 * y);
      b = (exp(-(x + 0.001) * (x + 0.001) - y * y) - exp(-x * x - y * y)) /
              0.001 +
          (exp(-(y + 0.001) * (y + 0.001) - x * x) - exp(-x * x - y * y)) /
              0.001;
      c = (exp(-(x + 0.001) * (x + 0.001) - y * y) -
           exp(-(x - 0.001) * (x - 0.001) - y * y) +
           exp(-(y + 0.001) * (y + 0.001) - x * x) -
           exp(-(y - 0.001) * (y - 0.001) - x * x)) /
          (2 * 0.001);
      e1 = (-exp(-(x + 2 * 0.001) * (x + 2 * 0.001) - y * y) +
            8 * (exp(-(x + 0.001) * (x + 0.001) - y * y)) -
            8 * (exp(-(x - 0.001) * (x - 0.001) - y * y)) +
            exp(-(x - 2 * 0.001) * (x - 2 * 0.001) - y * y)) /
           (12 * 0.001);
      e2 = (-exp(-(y + 2 * 0.001) * (y + 2 * 0.001) - x * x) +
            8 * (exp(-(y + 0.001) * (y + 0.001) - x * x)) -
            8 * (exp(-(y - 0.001) * (y - 0.001) - x * x)) +
            exp(-(y - 2 * 0.001) * (y - 2 * 0.001) - x * x)) /
           (12 * 0.001);
      e = e2 + e1;
      diff_data[k] = fabs(a - b);
      k++;
    }
  }
  return diff_data;
}


x86 assembly (clang, -O0):
<diff>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
movsd  0xee5(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x0,-0x64(%rbp)
movsd  0xec9(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movl   $0x0,-0x5c(%rbp)
cmpl   $0xc8,-0x5c(%rbp)
jge    1990 <diff+0x880>
movsd  0xea8(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
movl   $0x0,-0x60(%rbp)
cmpl   $0xc8,-0x60(%rbp)
jge    196e <diff+0x85e>
movsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
cvtsi2sd %eax,%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  0xe57(%rip),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
addsd  %xmm2,%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe1a(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xdf6(%rip),%xmm2
addsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,-0x9c(%rbp)
movsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x9c(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  0xd58(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xd44(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xd20(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  -0x8(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,-0x8c(%rbp)
movsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
movsd  -0x98(%rbp),%xmm0
ff
mov    %eax,%ecx
mov    -0x8c(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm1
movsd  0xc7a(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xc65(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xc41(%rip),%xmm2
addsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,-0x88(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0xbfb(%rip),%xmm1
subsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  0xbd3(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x88(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x84(%rbp)
movsd  0xb89(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xb65(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  -0x8(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x84(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x80(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xb18(%rip),%xmm1
subsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0xaf0(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  -0x8(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x80(%rbp),%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  0xaa3(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xa92(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xa6e(%rip),%xmm2
addsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x7c(%rbp)
movsd  0xa32(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xa0e(%rip),%xmm2
addsd  -0x8(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x7c(%rbp),%eax
shl    $0x3,%ecx
add    %ecx,%eax
mov    %eax,-0x78(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0x9c1(%rip),%xmm1
subsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  0x999(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x78(%rbp),%eax
shl    $0x3,%ecx
sub    %ecx,%eax
mov    %eax,-0x74(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  0x945(%rip),%xmm1
subsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x8(%rbp),%xmm2
movsd  0x91d(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x74(%rbp),%eax
add    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  0x8d0(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0x8c7(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0x8a3(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  -0x8(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x70(%rbp)
movsd  0x867(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0x843(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  -0x8(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x70(%rbp),%eax
shl    $0x3,%ecx
add    %ecx,%eax
mov    %eax,-0x6c(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0x7f6(%rip),%xmm1
subsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x7ce(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  -0x8(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x6c(%rbp),%eax
shl    $0x3,%ecx
sub    %ecx,%eax
mov    %eax,-0x68(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0x77a(%rip),%xmm1
subsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0x752(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  -0x8(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1030 <exp@plt>
mov    %eax,%ecx
mov    -0x68(%rbp),%eax
add    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  0x705(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
movaps 0x6fc(%rip),%xmm1
pand   %xmm1,%xmm0
movslq -0x64(%rbp),%rcx
lea    0x26fd(%rip),%rax
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
movsd  -0x58(%rbp),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    1164 <diff+0x54>
jmp    1973 <diff+0x863>
movsd  -0x58(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    1143 <diff+0x33>
lea    0x26a9(%rip),%rax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<diff>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x138,%rsp
movsd  0xeda(%rip),%xmm7
xor    %r14d,%r14d
lea    0x2f10(%rip),%r15
movsd  0xed0(%rip),%xmm2
movsd  0xed0(%rip),%xmm3
movsd  0xed0(%rip),%xmm4
movsd  0xed0(%rip),%xmm5
movapd 0xed8(%rip),%xmm6
nopl   0x0(%rax,%rax,1)
movapd %xmm7,%xmm1
movapd 0xec3(%rip),%xmm8
xorpd  %xmm8,%xmm1
mulsd  %xmm7,%xmm1
movapd %xmm1,0x20(%rsp)
movapd %xmm7,%xmm1
movsd  0xe78(%rip),%xmm0
mulsd  %xmm0,%xmm1
movapd %xmm1,0x100(%rsp)
movapd %xmm7,%xmm1
addsd  %xmm2,%xmm1
movapd %xmm1,0xf0(%rsp)
xorpd  %xmm8,%xmm1
movapd %xmm1,0xe0(%rsp)
movapd %xmm7,%xmm1
addsd  %xmm3,%xmm1
movapd %xmm1,0xd0(%rsp)
xorpd  %xmm8,%xmm1
movapd %xmm1,0xc0(%rsp)
movapd %xmm7,%xmm1
addsd  %xmm4,%xmm1
movapd %xmm1,0xb0(%rsp)
xorpd  %xmm8,%xmm1
movapd %xmm1,0xa0(%rsp)
movapd %xmm7,0x70(%rsp)
addsd  %xmm5,%xmm7
movapd %xmm7,0x90(%rsp)
xorpd  %xmm8,%xmm7
movapd %xmm7,0x80(%rsp)
xor    %r12d,%r12d
cs nopw 0x0(%rax,%rax,1)
movapd %xmm0,0x10(%rsp)
movapd %xmm0,%xmm1
xorpd  %xmm6,%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,0x50(%rsp)
movapd %xmm1,%xmm0
addsd  0x20(%rsp),%xmm0
movapd %xmm0,0x40(%rsp)
call   1030 <exp@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd 0x10(%rsp),%xmm1
addsd  %xmm1,%xmm1
movapd 0x100(%rsp),%xmm2
subsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm2,0x120(%rsp)
movapd 0x10(%rsp),%xmm2
movsd  0xd82(%rip),%xmm1
addsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm2
movapd 0x20(%rsp),%xmm0
subsd  %xmm2,%xmm0
movapd %xmm0,0x60(%rsp)
call   1030 <exp@plt>
mov    %eax,%ebx
movaps 0x40(%rsp),%xmm0
call   1030 <exp@plt>
sub    %eax,%ebx
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
divsd  0xd48(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
movapd 0xe0(%rsp),%xmm0
mulsd  0xf0(%rsp),%xmm0
addsd  0x50(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
call   1030 <exp@plt>
mov    %eax,%ebx
movaps 0x40(%rsp),%xmm0
call   1030 <exp@plt>
sub    %eax,%ebx
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
divsd  0xd02(%rip),%xmm0
addsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movaps 0x60(%rsp),%xmm0
call   1030 <exp@plt>
movapd 0x10(%rsp),%xmm1
addsd  0xce6(%rip),%xmm1
mulsd  %xmm1,%xmm1
movapd 0x20(%rsp),%xmm0
subsd  %xmm1,%xmm0
movapd %xmm0,0x110(%rsp)
call   1030 <exp@plt>
movsd  0x38(%rsp),%xmm0
call   1030 <exp@plt>
movapd 0xc0(%rsp),%xmm0
mulsd  0xd0(%rsp),%xmm0
addsd  0x50(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1030 <exp@plt>
movapd 0x10(%rsp),%xmm1
addsd  0xc96(%rip),%xmm1
mulsd  %xmm1,%xmm1
movapd 0x20(%rsp),%xmm0
subsd  %xmm1,%xmm0
call   1030 <exp@plt>
movaps 0x60(%rsp),%xmm0
call   1030 <exp@plt>
movaps 0x110(%rsp),%xmm0
call   1030 <exp@plt>
movapd 0x10(%rsp),%xmm1
addsd  0xc66(%rip),%xmm1
mulsd  %xmm1,%xmm1
movapd 0x20(%rsp),%xmm0
subsd  %xmm1,%xmm0
call   1030 <exp@plt>
movapd 0xa0(%rsp),%xmm0
mulsd  0xb0(%rsp),%xmm0
addsd  0x50(%rsp),%xmm0
call   1030 <exp@plt>
movsd  0x38(%rsp),%xmm0
call   1030 <exp@plt>
movsd  0x8(%rsp),%xmm0
call   1030 <exp@plt>
movapd 0x80(%rsp),%xmm0
mulsd  0x90(%rsp),%xmm0
addsd  0x50(%rsp),%xmm0
call   1030 <exp@plt>
movsd  0xc03(%rip),%xmm1
movapd 0xc13(%rip),%xmm0
movapd 0xbfb(%rip),%xmm6
movapd 0x120(%rsp),%xmm2
subsd  0x40(%rsp),%xmm2
andpd  %xmm0,%xmm2
movapd 0x10(%rsp),%xmm0
movlpd %xmm2,(%r15,%r12,8)
addsd  %xmm1,%xmm0
add    $0x1,%r12
cmp    $0xc8,%r12d
jne    1220 <diff+0x110>
movapd 0x70(%rsp),%xmm7
addsd  %xmm1,%xmm7
add    $0x1,%r14d
add    $0x640,%r15
cmp    $0xc8,%r14d
movsd  0xb7b(%rip),%xmm2
movsd  0xb7b(%rip),%xmm3
movsd  0xb7b(%rip),%xmm4
movsd  0xb7b(%rip),%xmm5
jne    1160 <diff+0x50>
lea    0x2b8e(%rip),%rax
add    $0x138,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

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

LLVM IR (-O2):
@diff.diff_data = internal global [40000 x double] zeroinitializer
define double* @diff() {
br label %1
1: ; preds = %0, %74
%2 = phi i32 [ 0, %0 ], [ %17, %74 ]
%3 = phi i32 [ 0, %0 ], [ %76, %74 ]
%4 = phi double [ -2.000000e+00, %0 ], [ %75, %74 ]
%5 = fneg double %4
%6 = fmul double %4, %5
%7 = fmul double %4, -2.000000e+00
%8 = fadd double %4, 1.000000e-03
%9 = fneg double %8
%10 = fadd double %4, -1.000000e-03
%11 = fneg double %10
%12 = fadd double %4, 2.000000e-03
%13 = fneg double %12
%14 = fadd double %4, -2.000000e-03
%15 = fneg double %14
%16 = sext i32 %2 to i64
%17 = add i32 %2, 200
br label %18
18: ; preds = %1, %18
%19 = phi i64 [ %16, %1 ], [ %70, %18 ]
%20 = phi double [ -2.000000e+00, %1 ], [ %71, %18 ]
%21 = fneg double %20
%22 = tail call double @llvm.fmuladd.f64(double %21, double %20, double %6)
%23 = tail call i32 @exp(double %22)
%24 = sitofp i32 %23 to double
%25 = tail call double @llvm.fmuladd.f64(double %20, double -2.000000e+00, double %7)
%26 = fmul double %25, %24
%27 = fadd double %20, 1.000000e-03
%28 = fneg double %27
%29 = tail call double @llvm.fmuladd.f64(double %28, double %27, double %6)
%30 = tail call i32 @exp(double %29)
%31 = tail call i32 @exp(double %22)
%32 = sub nsw i32 %30, %31
%33 = sitofp i32 %32 to double
%34 = fdiv double %33, 1.000000e-03
%35 = fmul double %20, %21
%36 = tail call double @llvm.fmuladd.f64(double %9, double %8, double %35)
%37 = tail call i32 @exp(double %36)
%38 = tail call i32 @exp(double %22)
%39 = sub nsw i32 %37, %38
%40 = sitofp i32 %39 to double
%41 = fdiv double %40, 1.000000e-03
%42 = fadd double %34, %41
%43 = tail call i32 @exp(double %29)
%44 = fadd double %20, -1.000000e-03
%45 = fneg double %44
%46 = tail call double @llvm.fmuladd.f64(double %45, double %44, double %6)
%47 = tail call i32 @exp(double %46)
%48 = tail call i32 @exp(double %36)
%49 = tail call double @llvm.fmuladd.f64(double %11, double %10, double %35)
%50 = tail call i32 @exp(double %49)
%51 = fadd double %20, 2.000000e-03
%52 = fneg double %51
%53 = tail call double @llvm.fmuladd.f64(double %52, double %51, double %6)
%54 = tail call i32 @exp(double %53)
%55 = tail call i32 @exp(double %29)
%56 = tail call i32 @exp(double %46)
%57 = fadd double %20, -2.000000e-03
%58 = fneg double %57
%59 = tail call double @llvm.fmuladd.f64(double %58, double %57, double %6)
%60 = tail call i32 @exp(double %59)
%61 = tail call double @llvm.fmuladd.f64(double %13, double %12, double %35)
%62 = tail call i32 @exp(double %61)
%63 = tail call i32 @exp(double %36)
%64 = tail call i32 @exp(double %49)
%65 = tail call double @llvm.fmuladd.f64(double %15, double %14, double %35)
%66 = tail call i32 @exp(double %65)
%67 = fsub double %26, %42
%68 = tail call double @llvm.fabs.f64(double %67)
%69 = getelementptr inbounds [40000 x double], [40000 x double]* @diff.diff_data, i64 0, i64 %19
store double %68, double* %69
%70 = add nsw i64 %19, 1
%71 = fadd double %20, 2.000000e-02
%72 = trunc i64 %70 to i32
%73 = icmp eq i32 %17, %72
br i1 %73, label %74, label %18
74: ; preds = %18
%75 = fadd double %4, 2.000000e-02
%76 = add nuw nsw i32 %3, 1
%77 = icmp eq i32 %76, 200
br i1 %77, label %78, label %1
78: ; preds = %74
ret double* getelementptr inbounds ([40000 x double], [40000 x double]* @diff.diff_data, i64 0, i64 0)
}