user: Translate the below assembly code into C programming language:

```asm
<vde_chain_nm2>:
  endbr64
  mov    (%rsi),%rcx
  test   %rcx,%rcx
  je     L61
  mov    (%rdx),%rax
  movsd  0x18(%rcx),%xmm0
  test   %rax,%rax
  je     L65
  movsd  %xmm0,(%rax)
  movsd  0x20(%rcx),%xmm0
  movsd  %xmm0,0x8(%rax)
  movsd  0x28(%rcx),%xmm0
  mov    0x18(%rsi),%rcx
  movsd  %xmm0,0x10(%rax)
  test   %rcx,%rcx
  je     L131
L80:
  movsd  (%rcx),%xmm0
  movsd  %xmm0,0x18(%rax)
  movsd  0x8(%rcx),%xmm0
  movsd  %xmm0,0x20(%rax)
  movsd  0x10(%rcx),%xmm0
L17:
  movsd  %xmm0,0x28(%rax)
L65:
  mov    0x8(%rsi),%rcx
  mov    0x8(%rdx),%rax
  test   %rcx,%rcx
  je     L100
  movsd  0x18(%rcx),%xmm0
  test   %rax,%rax
  je     L95
  movsd  %xmm0,(%rax)
  movsd  0x20(%rcx),%xmm0
  movsd  %xmm0,0x8(%rax)
  movsd  0x28(%rcx),%xmm0
  movq   $0x0,0x18(%rax)
  movq   $0x0,0x20(%rax)
  movq   $0x0,0x28(%rax)
  movsd  %xmm0,0x10(%rax)
  movsd  0x48(%rcx),%xmm0
  movsd  %xmm0,0x30(%rax)
  movsd  0x50(%rcx),%xmm0
  movsd  %xmm0,0x38(%rax)
  movsd  0x58(%rcx),%xmm0
  movq   $0x0,0x48(%rax)
  movq   $0x0,0x50(%rax)
  movq   $0x0,0x58(%rax)
  movsd  %xmm0,0x40(%rax)
  movsd  0x78(%rcx),%xmm0
  movsd  %xmm0,0x60(%rax)
  movsd  0x80(%rcx),%xmm0
  movsd  %xmm0,0x68(%rax)
  movsd  0x88(%rcx),%xmm0
  movq   $0x0,0x78(%rax)
  movq   $0x0,0x80(%rax)
  movq   $0x0,0x88(%rax)
  movsd  %xmm0,0x70(%rax)
  movsd  0xa8(%rcx),%xmm0
  movsd  %xmm0,0x90(%rax)
  movsd  0xb0(%rcx),%xmm0
  movsd  %xmm0,0x98(%rax)
  movsd  0xb8(%rcx),%xmm0
  movsd  %xmm0,0xa0(%rax)
  movq   $0x0,0xa8(%rax)
  movq   $0x0,0xb0(%rax)
  movq   $0x0,0xb8(%rax)
  movsd  0xd8(%rcx),%xmm0
  movsd  %xmm0,0xc0(%rax)
  movsd  0xe0(%rcx),%xmm0
  movsd  %xmm0,0xc8(%rax)
  movsd  0xe8(%rcx),%xmm0
  movq   $0x0,0xd8(%rax)
  movq   $0x0,0xe0(%rax)
  movq   $0x0,0xe8(%rax)
  movsd  %xmm0,0xd0(%rax)
  movsd  0x108(%rcx),%xmm0
  movsd  %xmm0,0xf0(%rax)
  movsd  0x110(%rcx),%xmm0
  movsd  %xmm0,0xf8(%rax)
  movsd  0x118(%rcx),%xmm0
L16:
  movq   $0x0,0x108(%rax)
  movq   $0x0,0x110(%rax)
  movq   $0x0,0x118(%rax)
  movsd  %xmm0,0x100(%rax)
L95:
  mov    0x10(%rsi),%rcx
  mov    0x10(%rdx),%rax
  test   %rcx,%rcx
  je     L115
  movsd  0x18(%rcx),%xmm0
  test   %rax,%rax
  je     L137
  movsd  %xmm0,(%rax)
  movsd  0x20(%rcx),%xmm0
  movsd  %xmm0,0x8(%rax)
  movsd  0x28(%rcx),%xmm0
  movq   $0x0,0x20(%rax)
  movsd  %xmm0,0x10(%rax)
  movsd  D2(%rip),%xmm0
  movq   $0x0,0x28(%rax)
  movsd  %xmm0,0x18(%rax)
  movsd  0x48(%rcx),%xmm1
  movsd  %xmm1,0x30(%rax)
  movsd  0x50(%rcx),%xmm1
  movsd  %xmm1,0x38(%rax)
  movsd  0x58(%rcx),%xmm1
  movq   $0x0,0x48(%rax)
  movq   $0x0,0x58(%rax)
  movsd  %xmm1,0x40(%rax)
  movsd  %xmm0,0x50(%rax)
  movsd  0x78(%rcx),%xmm1
  movsd  %xmm1,0x60(%rax)
  movsd  0x80(%rcx),%xmm1
  movsd  %xmm1,0x68(%rax)
  movsd  0x88(%rcx),%xmm1
L117:
  movq   $0x0,0x78(%rax)
  movq   $0x0,0x80(%rax)
  movsd  %xmm1,0x70(%rax)
  movsd  %xmm0,0x88(%rax)
L137:
  xor    %eax,%eax
  ret
  nopw   0x0(%rax,%rax,1)
L61:
  mov    (%rdx),%rax
  test   %rax,%rax
  je     L65
  mov    0x18(%rsi),%rcx
  pxor   %xmm0,%xmm0
  movq   $0x0,(%rax)
  movq   $0x0,0x8(%rax)
  movsd  %xmm0,0x10(%rax)
  test   %rcx,%rcx
  jne    L80
L131:
  movq   $0x0,0x18(%rax)
  pxor   %xmm0,%xmm0
  movq   $0x0,0x20(%rax)
  jmp    L17
  nopw   0x0(%rax,%rax,1)
L115:
  test   %rax,%rax
  je     L137
  movsd  D2(%rip),%xmm0
  movq   $0x0,(%rax)
  pxor   %xmm1,%xmm1
  movq   $0x0,0x8(%rax)
  movq   $0x0,0x10(%rax)
  movq   $0x0,0x20(%rax)
  movq   $0x0,0x28(%rax)
  movq   $0x0,0x30(%rax)
  movq   $0x0,0x38(%rax)
  movq   $0x0,0x40(%rax)
  movq   $0x0,0x48(%rax)
  movq   $0x0,0x58(%rax)
  movq   $0x0,0x60(%rax)
  movq   $0x0,0x68(%rax)
  movsd  %xmm0,0x18(%rax)
  movsd  %xmm0,0x50(%rax)
  jmp    L117
  nopw   0x0(%rax,%rax,1)
L100:
  test   %rax,%rax
  je     L95
  movq   $0x0,(%rax)
  pxor   %xmm0,%xmm0
  movq   $0x0,0x8(%rax)
  movq   $0x0,0x10(%rax)
  movq   $0x0,0x18(%rax)
  movq   $0x0,0x20(%rax)
  movq   $0x0,0x28(%rax)
  movq   $0x0,0x30(%rax)
  movq   $0x0,0x38(%rax)
  movq   $0x0,0x40(%rax)
  movq   $0x0,0x48(%rax)
  movq   $0x0,0x50(%rax)
  movq   $0x0,0x58(%rax)
  movq   $0x0,0x60(%rax)
  movq   $0x0,0x68(%rax)
  movq   $0x0,0x70(%rax)
  movq   $0x0,0x78(%rax)
  movq   $0x0,0x80(%rax)
  movq   $0x0,0x88(%rax)
  movq   $0x0,0x90(%rax)
  movq   $0x0,0x98(%rax)
  movq   $0x0,0xa0(%rax)
  movq   $0x0,0xa8(%rax)
  movq   $0x0,0xb0(%rax)
  movq   $0x0,0xb8(%rax)
  movq   $0x0,0xc0(%rax)
  movq   $0x0,0xc8(%rax)
  movq   $0x0,0xd0(%rax)
  movq   $0x0,0xd8(%rax)
  movq   $0x0,0xe0(%rax)
  movq   $0x0,0xe8(%rax)
  movq   $0x0,0xf0(%rax)
  movq   $0x0,0xf8(%rax)
  jmp    L16
```

tool_calls: name: unpack_data
arguments: label: D2
type_infered: f64

tool: D2: 1

assistant: ```c
int vde_chain_nm2(void *mem, const double **arg, double **res, int *iw, double *w) {
  mem = 0;
  mem += 0;
  w = 0;
  w += 0;
  iw = 0;
  iw += 0;
  double a0 = arg[0] ? arg[0][3] : 0;
  if (res[0] != 0)
    res[0][0] = a0;
  a0 = arg[0] ? arg[0][4] : 0;
  if (res[0] != 0)
    res[0][1] = a0;
  a0 = arg[0] ? arg[0][5] : 0;
  if (res[0] != 0)
    res[0][2] = a0;
  a0 = arg[3] ? arg[3][0] : 0;
  if (res[0] != 0)
    res[0][3] = a0;
  a0 = arg[3] ? arg[3][1] : 0;
  if (res[0] != 0)
    res[0][4] = a0;
  a0 = arg[3] ? arg[3][2] : 0;
  if (res[0] != 0)
    res[0][5] = a0;
  a0 = arg[1] ? arg[1][3] : 0;
  if (res[1] != 0)
    res[1][0] = a0;
  a0 = arg[1] ? arg[1][4] : 0;
  if (res[1] != 0)
    res[1][1] = a0;
  a0 = arg[1] ? arg[1][5] : 0;
  if (res[1] != 0)
    res[1][2] = a0;
  a0 = 0.;
  if (res[1] != 0)
    res[1][3] = a0;
  if (res[1] != 0)
    res[1][4] = a0;
  if (res[1] != 0)
    res[1][5] = a0;
  double a1 = arg[1] ? arg[1][9] : 0;
  if (res[1] != 0)
    res[1][6] = a1;
  a1 = arg[1] ? arg[1][10] : 0;
  if (res[1] != 0)
    res[1][7] = a1;
  a1 = arg[1] ? arg[1][11] : 0;
  if (res[1] != 0)
    res[1][8] = a1;
  if (res[1] != 0)
    res[1][9] = a0;
  if (res[1] != 0)
    res[1][10] = a0;
  if (res[1] != 0)
    res[1][11] = a0;
  a1 = arg[1] ? arg[1][15] : 0;
  if (res[1] != 0)
    res[1][12] = a1;
  a1 = arg[1] ? arg[1][16] : 0;
  if (res[1] != 0)
    res[1][13] = a1;
  a1 = arg[1] ? arg[1][17] : 0;
  if (res[1] != 0)
    res[1][14] = a1;
  if (res[1] != 0)
    res[1][15] = a0;
  if (res[1] != 0)
    res[1][16] = a0;
  if (res[1] != 0)
    res[1][17] = a0;
  a1 = arg[1] ? arg[1][21] : 0;
  if (res[1] != 0)
    res[1][18] = a1;
  a1 = arg[1] ? arg[1][22] : 0;
  if (res[1] != 0)
    res[1][19] = a1;
  a1 = arg[1] ? arg[1][23] : 0;
  if (res[1] != 0)
    res[1][20] = a1;
  if (res[1] != 0)
    res[1][21] = a0;
  if (res[1] != 0)
    res[1][22] = a0;
  if (res[1] != 0)
    res[1][23] = a0;
  a1 = arg[1] ? arg[1][27] : 0;
  if (res[1] != 0)
    res[1][24] = a1;
  a1 = arg[1] ? arg[1][28] : 0;
  if (res[1] != 0)
    res[1][25] = a1;
  a1 = arg[1] ? arg[1][29] : 0;
  if (res[1] != 0)
    res[1][26] = a1;
  if (res[1] != 0)
    res[1][27] = a0;
  if (res[1] != 0)
    res[1][28] = a0;
  if (res[1] != 0)
    res[1][29] = a0;
  a1 = arg[1] ? arg[1][33] : 0;
  if (res[1] != 0)
    res[1][30] = a1;
  a1 = arg[1] ? arg[1][34] : 0;
  if (res[1] != 0)
    res[1][31] = a1;
  a1 = arg[1] ? arg[1][35] : 0;
  if (res[1] != 0)
    res[1][32] = a1;
  if (res[1] != 0)
    res[1][33] = a0;
  if (res[1] != 0)
    res[1][34] = a0;
  if (res[1] != 0)
    res[1][35] = a0;
  a1 = arg[2] ? arg[2][3] : 0;
  if (res[2] != 0)
    res[2][0] = a1;
  a1 = arg[2] ? arg[2][4] : 0;
  if (res[2] != 0)
    res[2][1] = a1;
  a1 = arg[2] ? arg[2][5] : 0;
  if (res[2] != 0)
    res[2][2] = a1;
  a1 = 1.;
  if (res[2] != 0)
    res[2][3] = a1;
  if (res[2] != 0)
    res[2][4] = a0;
  if (res[2] != 0)
    res[2][5] = a0;
  double a2 = arg[2] ? arg[2][9] : 0;
  if (res[2] != 0)
    res[2][6] = a2;
  a2 = arg[2] ? arg[2][10] : 0;
  if (res[2] != 0)
    res[2][7] = a2;
  a2 = arg[2] ? arg[2][11] : 0;
  if (res[2] != 0)
    res[2][8] = a2;
  if (res[2] != 0)
    res[2][9] = a0;
  if (res[2] != 0)
    res[2][10] = a1;
  if (res[2] != 0)
    res[2][11] = a0;
  a2 = arg[2] ? arg[2][15] : 0;
  if (res[2] != 0)
    res[2][12] = a2;
  a2 = arg[2] ? arg[2][16] : 0;
  if (res[2] != 0)
    res[2][13] = a2;
  a2 = arg[2] ? arg[2][17] : 0;
  if (res[2] != 0)
    res[2][14] = a2;
  if (res[2] != 0)
    res[2][15] = a0;
  if (res[2] != 0)
    res[2][16] = a0;
  if (res[2] != 0)
    res[2][17] = a1;
  return 0;
}
```