user: What is the c source code of the assembly code below?

```asm
<open_simplex_noise2>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,%r13
  movapd %xmm0,%xmm4
  addsd  %xmm1,%xmm0
  mulsd  D97(%rip),%xmm0
  movsd  %xmm4,(%rsp)
  movapd %xmm4,%xmm5
  addsd  %xmm0,%xmm5
  movq   %xmm5,%r14
  movsd  %xmm1,0x8(%rsp)
  addsd  %xmm1,%xmm0
  movq   %xmm0,%r12
  movapd %xmm5,%xmm0
  call   <fastFloor@plt>
  mov    %eax,%ebx
  movq   %r12,%xmm0
  call   <fastFloor@plt>
  mov    %eax,%ebp
  lea    (%rbx,%rax,1),%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D230(%rip),%xmm3
  mulsd  %xmm3,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sd %ebx,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebp,%xmm0
  movq   %r14,%xmm7
  subsd  %xmm2,%xmm7
  movsd  %xmm7,0x10(%rsp)
  movq   %r12,%xmm8
  subsd  %xmm0,%xmm8
  movsd  %xmm8,0x20(%rsp)
  addsd  %xmm8,%xmm7
  movsd  %xmm7,0x18(%rsp)
  addsd  %xmm1,%xmm2
  movsd  (%rsp),%xmm4
  subsd  %xmm2,%xmm4
  movsd  %xmm4,(%rsp)
  addsd  %xmm1,%xmm0
  movsd  0x8(%rsp),%xmm6
  subsd  %xmm0,%xmm6
  movsd  %xmm6,0x8(%rsp)
  subsd  D195(%rip),%xmm4
  movsd  %xmm4,0x28(%rsp)
  movapd %xmm4,%xmm2
  subsd  %xmm3,%xmm2
  subsd  %xmm3,%xmm6
  movapd %xmm2,%xmm3
  mulsd  %xmm2,%xmm3
  movsd  D58(%rip),%xmm0
  subsd  %xmm3,%xmm0
  movapd %xmm6,%xmm3
  mulsd  %xmm6,%xmm3
  subsd  %xmm3,%xmm0
  mov    D184(%rip),%r12
  comisd D184(%rip),%xmm0
  ja     L116
L191:
  movsd  D230(%rip),%xmm0
  movsd  (%rsp),%xmm2
  subsd  %xmm0,%xmm2
  movsd  0x8(%rsp),%xmm5
  subsd  D195(%rip),%xmm5
  movsd  %xmm5,0x30(%rsp)
  movapd %xmm5,%xmm1
  subsd  %xmm0,%xmm1
  movapd %xmm2,%xmm3
  mulsd  %xmm2,%xmm3
  movsd  D58(%rip),%xmm0
  subsd  %xmm3,%xmm0
  movapd %xmm1,%xmm3
  mulsd  %xmm1,%xmm3
  subsd  %xmm3,%xmm0
  comisd D184(%rip),%xmm0
  ja     L155
L192:
  movsd  D195(%rip),%xmm0
  movsd  0x18(%rsp),%xmm5
  comisd %xmm5,%xmm0
  jae    L163
  movsd  D58(%rip),%xmm0
  subsd  0x18(%rsp),%xmm0
  movsd  0x10(%rsp),%xmm6
  comisd %xmm0,%xmm6
  ja     L128
  movsd  0x20(%rsp),%xmm6
  comisd %xmm0,%xmm6
  jbe    L24
L128:
  movsd  0x10(%rsp),%xmm4
  comisd 0x20(%rsp),%xmm4
  jbe    L139
  lea    0x2(%rbx),%r14d
  movsd  (%rsp),%xmm1
  subsd  D58(%rip),%xmm1
  movsd  D143(%rip),%xmm0
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rsp)
  movsd  0x8(%rsp),%xmm1
  addsd  D184(%rip),%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rsp)
  mov    %ebp,%r15d
L174:
  add    $0x1,%ebx
  add    $0x1,%ebp
  movsd  D143(%rip),%xmm0
  movsd  0x28(%rsp),%xmm7
  subsd  %xmm0,%xmm7
  movsd  %xmm7,(%rsp)
  movsd  0x30(%rsp),%xmm4
  subsd  %xmm0,%xmm4
  movsd  %xmm4,0x8(%rsp)
L107:
  movsd  D58(%rip),%xmm0
  movsd  (%rsp),%xmm5
  movapd %xmm5,%xmm1
  mulsd  %xmm5,%xmm1
  subsd  %xmm1,%xmm0
  movsd  0x8(%rsp),%xmm7
  movapd %xmm7,%xmm1
  mulsd  %xmm7,%xmm1
  subsd  %xmm1,%xmm0
  comisd D184(%rip),%xmm0
  ja     L138
L48:
  movsd  D58(%rip),%xmm0
  movsd  0x10(%rsp),%xmm3
  movapd %xmm3,%xmm1
  mulsd  %xmm3,%xmm1
  subsd  %xmm1,%xmm0
  movsd  0x18(%rsp),%xmm2
  movapd %xmm2,%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  comisd D184(%rip),%xmm0
  ja     L177
L1:
  movq   %r12,%xmm0
  divsd  D107(%rip),%xmm0
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L116:
  movapd %xmm6,%xmm1
  mulsd  %xmm0,%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,0x30(%rsp)
  lea    0x1(%rbx),%esi
  movapd %xmm2,%xmm0
  mov    %ebp,%edx
  mov    %r13,%rdi
  call   <extrapolate2@plt>
  mulsd  0x30(%rsp),%xmm0
  addsd  D184(%rip),%xmm0
  movq   %xmm0,%r12
  jmp    L191
L155:
  mulsd  %xmm0,%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,0x38(%rsp)
  lea    0x1(%rbp),%edx
  movapd %xmm2,%xmm0
  mov    %ebx,%esi
  mov    %r13,%rdi
  call   <extrapolate2@plt>
  mulsd  0x38(%rsp),%xmm0
  movq   %r12,%xmm4
  addsd  %xmm0,%xmm4
  movq   %xmm4,%r12
  jmp    L192
L163:
  subsd  %xmm5,%xmm0
  comisd 0x10(%rsp),%xmm0
  ja     L157
  comisd 0x20(%rsp),%xmm0
  jbe    L38
L157:
  movsd  0x10(%rsp),%xmm6
  comisd 0x20(%rsp),%xmm6
  jbe    L61
  lea    0x1(%rbx),%r14d
  lea    -0x1(%rbp),%r15d
  movsd  0x8(%rsp),%xmm7
  addsd  D195(%rip),%xmm7
  movsd  %xmm7,0x18(%rsp)
  movsd  0x28(%rsp),%xmm7
  movsd  %xmm7,0x10(%rsp)
  jmp    L107
L61:
  lea    -0x1(%rbx),%r14d
  lea    0x1(%rbp),%r15d
  movsd  (%rsp),%xmm5
  addsd  D195(%rip),%xmm5
  movsd  %xmm5,0x10(%rsp)
  movsd  0x30(%rsp),%xmm6
  movsd  %xmm6,0x18(%rsp)
  jmp    L107
L38:
  lea    0x1(%rbx),%r14d
  lea    0x1(%rbp),%r15d
  movsd  D143(%rip),%xmm0
  movsd  0x28(%rsp),%xmm5
  subsd  %xmm0,%xmm5
  movsd  %xmm5,0x10(%rsp)
  movsd  0x30(%rsp),%xmm7
  subsd  %xmm0,%xmm7
  movsd  %xmm7,0x18(%rsp)
  jmp    L107
L139:
  lea    0x2(%rbp),%r15d
  movsd  (%rsp),%xmm1
  addsd  D184(%rip),%xmm1
  movsd  D143(%rip),%xmm0
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rsp)
  movsd  0x8(%rsp),%xmm1
  subsd  D58(%rip),%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rsp)
  mov    %ebx,%r14d
  jmp    L174
L24:
  mov    %ebp,%r15d
  mov    %ebx,%r14d
  movsd  0x8(%rsp),%xmm4
  movsd  %xmm4,0x18(%rsp)
  movsd  (%rsp),%xmm6
  movsd  %xmm6,0x10(%rsp)
  jmp    L174
L138:
  mulsd  %xmm0,%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,(%rsp)
  movapd %xmm7,%xmm1
  movapd %xmm5,%xmm0
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r13,%rdi
  call   <extrapolate2@plt>
  mulsd  (%rsp),%xmm0
  movq   %r12,%xmm7
  addsd  %xmm0,%xmm7
  movq   %xmm7,%r12
  jmp    L48
L177:
  mulsd  %xmm0,%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,(%rsp)
  movapd %xmm2,%xmm1
  movapd %xmm3,%xmm0
  mov    %r15d,%edx
  mov    %r14d,%esi
  mov    %r13,%rdi
  call   <extrapolate2@plt>
  mulsd  (%rsp),%xmm0
  movq   %r12,%xmm4
  addsd  %xmm0,%xmm4
  movq   %xmm4,%r12
  jmp    L1
```

tool_calls: name: parse_data
arguments: data_tag: D97
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D230
type_guessed: f64
name: parse_data
arguments: data_tag: D195
type_guessed: f64
name: parse_data
arguments: data_tag: D58
type_guessed: f64
name: parse_data
arguments: data_tag: D184
type_guessed: f64[2]
name: parse_data
arguments: data_tag: D143
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D107
type_guessed: f64

tool: {"D97": [0xc3,0x99,0xdf,0x74,0xb1,0x0c,0xcb,0xbf]}

tool: D230: 0.366025403784439

tool: D195: 1

tool: D58: 2

tool: {"D184": [0.0,-0.211324865405187]}

tool: {"D143": [0x5b,0x99,0xb0,0xd0,0xf5,0x6c,0xe7,0x3f]}

tool: D107: 47

assistant: ```c
double open_simplex_noise2(struct osn_context *ctx, double x, double y) {
  double stretchOffset = (x + y) * (-0.211324865405187);
  double xs = x + stretchOffset;
  double ys = y + stretchOffset;
  int xsb = fastFloor(xs);
  int ysb = fastFloor(ys);
  double squishOffset = (xsb + ysb) * (0.366025403784439);
  double xb = xsb + squishOffset;
  double yb = ysb + squishOffset;
  double xins = xs - xsb;
  double yins = ys - ysb;
  double inSum = xins + yins;
  double dx0 = x - xb;
  double dy0 = y - yb;
  double dx_ext, dy_ext;
  int xsv_ext, ysv_ext;
  double value = 0;
  double dx1 = dx0 - 1 - (0.366025403784439);
  double dy1 = dy0 - 0 - (0.366025403784439);
  double attn1 = 2 - dx1 * dx1 - dy1 * dy1;
  if (attn1 > 0) {
    attn1 *= attn1;
    value += attn1 * attn1 * extrapolate2(ctx, xsb + 1, ysb + 0, dx1, dy1);
  }
  double dx2 = dx0 - 0 - (0.366025403784439);
  double dy2 = dy0 - 1 - (0.366025403784439);
  double attn2 = 2 - dx2 * dx2 - dy2 * dy2;
  if (attn2 > 0) {
    attn2 *= attn2;
    value += attn2 * attn2 * extrapolate2(ctx, xsb + 0, ysb + 1, dx2, dy2);
  }
  if (inSum <= 1) {
    double zins = 1 - inSum;
    if (zins > xins || zins > yins) {
      if (xins > yins) {
        xsv_ext = xsb + 1;
        ysv_ext = ysb - 1;
        dx_ext = dx0 - 1;
        dy_ext = dy0 + 1;
      } else {
        xsv_ext = xsb - 1;
        ysv_ext = ysb + 1;
        dx_ext = dx0 + 1;
        dy_ext = dy0 - 1;
      }
    } else {
      xsv_ext = xsb + 1;
      ysv_ext = ysb + 1;
      dx_ext = dx0 - 1 - 2 * (0.366025403784439);
      dy_ext = dy0 - 1 - 2 * (0.366025403784439);
    }
  } else {
    double zins = 2 - inSum;
    if (zins < xins || zins < yins) {
      if (xins > yins) {
        xsv_ext = xsb + 2;
        ysv_ext = ysb + 0;
        dx_ext = dx0 - 2 - 2 * (0.366025403784439);
        dy_ext = dy0 + 0 - 2 * (0.366025403784439);
      } else {
        xsv_ext = xsb + 0;
        ysv_ext = ysb + 2;
        dx_ext = dx0 + 0 - 2 * (0.366025403784439);
        dy_ext = dy0 - 2 - 2 * (0.366025403784439);
      }
    } else {
      dx_ext = dx0;
      dy_ext = dy0;
      xsv_ext = xsb;
      ysv_ext = ysb;
    }
    xsb += 1;
    ysb += 1;
    dx0 = dx0 - 1 - 2 * (0.366025403784439);
    dy0 = dy0 - 1 - 2 * (0.366025403784439);
  }
  double attn0 = 2 - dx0 * dx0 - dy0 * dy0;
  if (attn0 > 0) {
    attn0 *= attn0;
    value += attn0 * attn0 * extrapolate2(ctx, xsb, ysb, dx0, dy0);
  }
  double attn_ext = 2 - dx_ext * dx_ext - dy_ext * dy_ext;
  if (attn_ext > 0) {
    attn_ext *= attn_ext;
    value += attn_ext * attn_ext * extrapolate2(ctx, xsv_ext, ysv_ext, dx_ext, dy_ext);
  }
  return value / (47.0);
}
```