user: Converte this assembly snippet into its equivalent C code:

```asm
<add_u_v_term_l_2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %rdx,-0x20(%rbp)
  mov    %rcx,-0x28(%rbp)
  mov    %r8,-0x30(%rbp)
  mov    %r9,-0x38(%rbp)
  movsd  %xmm0,-0x40(%rbp)
  movsd  %xmm1,-0x48(%rbp)
  movsd  %xmm2,-0x50(%rbp)
  movsd  %xmm3,-0x58(%rbp)
  mov    -0x14(%rbp),%eax
  imul   -0x18(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,0xe0(%rbp)
  jne    L92
  mov    0x18(%rbp),%r8
  mov    -0x38(%rbp),%rcx
  mov    -0x30(%rbp),%rdx
  mov    0x28(%rbp),%rsi
  mov    0x20(%rbp),%rax
  sub    $0x8,%rsp
  push   0xa8(%rbp)
  push   0xa0(%rbp)
  mov    -0x4(%rbp),%edi
  push   %rdi
  mov    %r8,%r9
  mov    0x10(%rbp),%r8
  mov    %rax,%rdi
  call   <dmat_mul_a2@plt>
  add    $0x20,%rsp
  mov    0x48(%rbp),%r9
  mov    0x40(%rbp),%r8
  mov    0x38(%rbp),%rcx
  mov    0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  sub    $0x8,%rsp
  push   0xc8(%rbp)
  push   0xc0(%rbp)
  mov    -0x4(%rbp),%edi
  push   %rdi
  mov    %rax,%rdi
  call   <dmat_mul_a2@plt>
  add    $0x20,%rsp
  mov    D0(%rip),%rdi
  mov    0x58(%rbp),%r9
  mov    0x50(%rbp),%r10
  mov    0xc8(%rbp),%rcx
  mov    0xc0(%rbp),%rdx
  mov    0xa8(%rbp),%rsi
  mov    0xa0(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x4(%rbp),%r8d
  push   %r8
  movq   %rdi,%xmm0
  mov    %r10,%r8
  mov    %rax,%rdi
  call   <dmat_scale_add_1x2@plt>
  add    $0x10,%rsp
  jmp    L1
L92:
  mov    0x18(%rbp),%r8
  mov    -0x38(%rbp),%rcx
  mov    -0x30(%rbp),%rdx
  mov    0x28(%rbp),%rsi
  mov    0x20(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x0
  push   $0xffffffffffffffff
  push   0xa8(%rbp)
  push   0xa0(%rbp)
  mov    -0x4(%rbp),%edi
  push   %rdi
  mov    %r8,%r9
  mov    0x10(%rbp),%r8
  mov    %rax,%rdi
  call   <dmat_mul_a3@plt>
  add    $0x30,%rsp
  mov    0x48(%rbp),%r9
  mov    0x40(%rbp),%r8
  mov    0x38(%rbp),%rcx
  mov    0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x0
  push   $0xffffffffffffffff
  push   0xc8(%rbp)
  push   0xc0(%rbp)
  mov    -0x4(%rbp),%edi
  push   %rdi
  mov    %rax,%rdi
  call   <dmat_mul_a3@plt>
  add    $0x30,%rsp
  mov    -0x4(%rbp),%ecx
  mov    0x50(%rbp),%rdx
  mov    0xc0(%rbp),%rsi
  mov    0xa0(%rbp),%rax
  mov    $0x1,%r8d
  mov    %rax,%rdi
  call   <dsym_add@plt>
  mov    -0x4(%rbp),%ecx
  mov    0x58(%rbp),%rdx
  mov    0xc8(%rbp),%rsi
  mov    0xa8(%rbp),%rax
  mov    $0x0,%r8d
  mov    %rax,%rdi
  call   <dsym_add@plt>
  mov    -0x4(%rbp),%ecx
  mov    0x58(%rbp),%rax
  mov    $0xffffffff,%edx
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <dmat_sym@plt>
L1:
  pxor   %xmm0,%xmm0
  ucomisd -0x40(%rbp),%xmm0
  jp     L51
  pxor   %xmm0,%xmm0
  ucomisd -0x40(%rbp),%xmm0
  je     L50
L51:
  mov    -0x40(%rbp),%rdi
  mov    0x68(%rbp),%r9
  mov    0x60(%rbp),%r10
  mov    0x58(%rbp),%rcx
  mov    0x50(%rbp),%rdx
  mov    0x68(%rbp),%rsi
  mov    0x60(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x4(%rbp),%r8d
  push   %r8
  movq   %rdi,%xmm0
  mov    %r10,%r8
  mov    %rax,%rdi
  call   <dmat_scale_add_1x2@plt>
  add    $0x10,%rsp
L50:
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L41
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  je     L25
L41:
  mov    -0x48(%rbp),%rdi
  mov    0x78(%rbp),%r9
  mov    0x70(%rbp),%r10
  mov    0x58(%rbp),%rcx
  mov    0x50(%rbp),%rdx
  mov    0x78(%rbp),%rsi
  mov    0x70(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x4(%rbp),%r8d
  push   %r8
  movq   %rdi,%xmm0
  mov    %r10,%r8
  mov    %rax,%rdi
  call   <dmat_scale_add_1x2@plt>
  add    $0x10,%rsp
L25:
  pxor   %xmm0,%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jp     L5
  pxor   %xmm0,%xmm0
  ucomisd -0x50(%rbp),%xmm0
  je     L3
L5:
  mov    -0x50(%rbp),%rdi
  mov    0x88(%rbp),%r9
  mov    0x80(%rbp),%r10
  mov    0x58(%rbp),%rcx
  mov    0x50(%rbp),%rdx
  mov    0x88(%rbp),%rsi
  mov    0x80(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x4(%rbp),%r8d
  push   %r8
  movq   %rdi,%xmm0
  mov    %r10,%r8
  mov    %rax,%rdi
  call   <dmat_scale_add_1x2@plt>
  add    $0x10,%rsp
L3:
  pxor   %xmm0,%xmm0
  ucomisd -0x58(%rbp),%xmm0
  jp     L86
  pxor   %xmm0,%xmm0
  ucomisd -0x58(%rbp),%xmm0
  je     L38
L86:
  mov    -0x58(%rbp),%rdi
  mov    0x98(%rbp),%r9
  mov    0x90(%rbp),%r10
  mov    0x58(%rbp),%rcx
  mov    0x50(%rbp),%rdx
  mov    0x98(%rbp),%rsi
  mov    0x90(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x4(%rbp),%r8d
  push   %r8
  movq   %rdi,%xmm0
  mov    %r10,%r8
  mov    %rax,%rdi
  call   <dmat_scale_add_1x2@plt>
  add    $0x10,%rsp
L38:
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D0
type: f64

tool: D0: 1

assistant: ```c
void add_u_v_term_l_2(int n_quad, int n_stokes, double **ax11, double **ax12, double **bx11, double **bx12, double **bx21, double **bx22, double **ay11, double **ay12, double **by11, double **by12, double **by21, double **by22, double **cy11, double **cy12, double **uy11, double **uy12, double **vy11, double **vy12, double **wy11, double **wy12, double **xy11, double **xy12, double **w111, double **w112, double **w121, double **w122, double **w211, double **w212, double **w221, double **w222, double c0, double c1, double c2, double c3, int symmetric) {
  int n_quad_v;
  n_quad_v = n_quad * n_stokes;
  if (!symmetric) {
    dmat_mul_a2(ay11, ay12, bx11, bx12, bx21, bx22, n_quad_v, w111, w112);
    dmat_mul_a2(ax11, ax12, by11, by12, by21, by22, n_quad_v, w211, w212);
    dmat_scale_add_1x2(w111, w112, w211, w212, cy11, cy12, 1., n_quad_v);
  } else {
    dmat_mul_a3(ay11, ay12, bx11, bx12, bx21, bx22, n_quad_v, w111, w112, -1., 0);
    dmat_mul_a3(ax11, ax12, by11, by12, by21, by22, n_quad_v, w211, w212, -1., 0);
    dsym_add(w111, w211, cy11, n_quad_v, 1);
    dsym_add(w112, w212, cy12, n_quad_v, 0);
    dmat_sym(cy12, n_quad_v, -1.);
  }
  if (c0 != 0.)
    dmat_scale_add_1x2(uy11, uy12, cy11, cy12, uy11, uy12, c0, n_quad_v);
  if (c1 != 0.)
    dmat_scale_add_1x2(vy11, vy12, cy11, cy12, vy11, vy12, c1, n_quad_v);
  if (c2 != 0.)
    dmat_scale_add_1x2(wy11, wy12, cy11, cy12, wy11, wy12, c2, n_quad_v);
  if (c3 != 0.)
    dmat_scale_add_1x2(xy11, xy12, cy11, cy12, xy11, xy12, c3, n_quad_v);
}
```