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

```asm
<s_update_var_mpc>:
  endbr64
  push   %r15
  movaps %xmm0,%xmm2
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  movslq %edi,%rbx
  mov    0x38(%rsp),%r14
  mov    0x40(%rsp),%r13
  mov    0x58(%rsp),%r15
  mov    %edx,-0x10(%rsp)
  mov    %ecx,-0xc(%rsp)
  mov    %r9,-0x8(%rsp)
  test   %esi,%esi
  jle    L148
  mov    (%r14),%rdx
  mov    0x0(%r13),%rsi
  movslq %ebp,%rcx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L156:
  movss  (%rdx,%rax,4),%xmm3
  movss  (%rsi,%rax,4),%xmm0
  subss  %xmm3,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm3,%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%rcx
  jne    L156
L148:
  add    %r8d,%r8d
  pxor   %xmm3,%xmm3
  test   %r8d,%r8d
  jle    L145
  mov    0x60(%rsp),%rax
  mov    (%r15),%rdx
  pxor   %xmm3,%xmm3
  mov    (%rax),%rdi
  mov    0x48(%rsp),%rax
  mov    (%rax),%rcx
  mov    0x50(%rsp),%rax
  mov    (%rax),%rsi
  xor    %eax,%eax
  nopl   (%rax)
L6:
  movss  (%rdi,%rax,4),%xmm0
  add    $0x8,%rdx
  mulss  %xmm1,%xmm0
  addss  -0x8(%rdx),%xmm0
  movss  %xmm0,-0x8(%rdx)
  movss  0x4(%rdi,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  addss  -0x4(%rdx),%xmm0
  movss  %xmm0,-0x4(%rdx)
  movss  (%rsi,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  addss  (%rcx,%rax,4),%xmm0
  movss  %xmm0,(%rcx,%rax,4)
  movss  0x4(%rsi,%rax,4),%xmm4
  mulss  %xmm1,%xmm4
  addss  0x4(%rcx,%rax,4),%xmm4
  movss  %xmm4,0x4(%rcx,%rax,4)
  mulss  -0x8(%rdx),%xmm0
  add    $0x2,%rax
  mulss  -0x4(%rdx),%xmm4
  addss  %xmm4,%xmm0
  addss  %xmm0,%xmm3
  cmp    %eax,%r8d
  jg     L6
L145:
  movslq -0x10(%rsp),%rax
  cmp    $0x1,%eax
  jle    L142
  movslq %ebp,%r11
  mov    %rax,-0x20(%rsp)
  mov    -0xc(%rsp),%edi
  lea    -0x1(%rbx),%r12d
  lea    0x0(,%r11,4),%rax
  lea    0x1(%r12,%r11,1),%r10
  mov    $0x1,%r8d
  mov    %rax,-0x18(%rsp)
  lea    (%rdi,%rdi,1),%r9d
  shl    $0x2,%r10
  nopl   (%rax)
L143:
  test   %ebp,%ebp
  jle    L76
  mov    (%r14,%r8,8),%rdx
  mov    0x0(%r13,%r8,8),%rcx
  xor    %eax,%eax
  nop
L161:
  movss  (%rdx,%rax,4),%xmm4
  movss  (%rcx,%rax,4),%xmm0
  subss  %xmm4,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%r11
  jne    L161
L76:
  test   %ebx,%ebx
  jle    L2
  mov    (%r14,%r8,8),%rdx
  mov    0x0(%r13,%r8,8),%rcx
  mov    -0x18(%rsp),%rax
  cs nopw 0x0(%rax,%rax,1)
L172:
  movss  (%rdx,%rax,1),%xmm4
  movss  (%rcx,%rax,1),%xmm0
  subss  %xmm4,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,(%rdx,%rax,1)
  add    $0x4,%rax
  cmp    %rax,%r10
  jne    L172
  mov    0x68(%rsp),%rax
  mov    (%rax,%r8,8),%rdx
  mov    0x70(%rsp),%rax
  mov    (%rax,%r8,8),%rsi
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L163:
  movss  (%rdx,%rax,4),%xmm4
  movss  (%rsi,%rax,4),%xmm0
  mov    %rax,%rcx
  subss  %xmm4,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %rcx,%r12
  jne    L163
L2:
  test   %r9d,%r9d
  jle    L87
  mov    0x60(%rsp),%rax
  mov    (%r15,%r8,8),%rdx
  mov    (%rax,%r8,8),%rdi
  mov    0x48(%rsp),%rax
  mov    (%rax,%r8,8),%rcx
  mov    0x50(%rsp),%rax
  mov    (%rax,%r8,8),%rsi
  xor    %eax,%eax
  nopl   0x0(%rax)
L94:
  movss  (%rdi,%rax,4),%xmm0
  add    $0x8,%rdx
  mulss  %xmm1,%xmm0
  addss  -0x8(%rdx),%xmm0
  movss  %xmm0,-0x8(%rdx)
  movss  0x4(%rdi,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  addss  -0x4(%rdx),%xmm0
  movss  %xmm0,-0x4(%rdx)
  movss  (%rsi,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  addss  (%rcx,%rax,4),%xmm0
  movss  %xmm0,(%rcx,%rax,4)
  movss  0x4(%rsi,%rax,4),%xmm4
  mulss  %xmm1,%xmm4
  addss  0x4(%rcx,%rax,4),%xmm4
  movss  %xmm4,0x4(%rcx,%rax,4)
  mulss  -0x8(%rdx),%xmm0
  add    $0x2,%rax
  mulss  -0x4(%rdx),%xmm4
  addss  %xmm4,%xmm0
  addss  %xmm0,%xmm3
  cmp    %eax,%r9d
  jg     L94
L87:
  add    $0x1,%r8
  cmp    %r8,-0x20(%rsp)
  jne    L143
L142:
  test   %ebx,%ebx
  jle    L37
  movslq -0x10(%rsp),%rcx
  movslq %ebp,%rsi
  lea    0x0(,%rsi,4),%rax
  add    %rbx,%rsi
  mov    (%r14,%rcx,8),%rdx
  mov    0x0(%r13,%rcx,8),%rdi
  shl    $0x2,%rsi
  xchg   %ax,%ax
L125:
  movss  (%rdx,%rax,1),%xmm4
  movss  (%rdi,%rax,1),%xmm0
  subss  %xmm4,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,(%rdx,%rax,1)
  add    $0x4,%rax
  cmp    %rax,%rsi
  jne    L125
  mov    0x68(%rsp),%rax
  mov    (%rax,%rcx,8),%rdx
  mov    0x70(%rsp),%rax
  mov    (%rax,%rcx,8),%rcx
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L120:
  movss  (%rdx,%rax,4),%xmm4
  movss  (%rcx,%rax,4),%xmm0
  subss  %xmm4,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%rbx
  jne    L120
L37:
  mov    -0xc(%rsp),%ebx
  lea    0x0(%rbp,%rbp,1),%eax
  lea    (%rbx,%rbx,1),%ecx
  cmp    %ebx,%ebp
  jge    L35
  movslq -0x10(%rsp),%rdx
  mov    0x60(%rsp),%rbx
  cltq
  mov    (%rbx,%rdx,8),%rdi
  mov    0x48(%rsp),%rbx
  mov    (%rbx,%rdx,8),%rsi
  mov    0x50(%rsp),%rbx
  mov    (%rbx,%rdx,8),%r8
  mov    (%r15,%rdx,8),%rdx
  lea    (%rdx,%rax,4),%rdx
  nopl   0x0(%rax)
L103:
  movss  (%rdi,%rax,4),%xmm0
  add    $0x8,%rdx
  mulss  %xmm1,%xmm0
  addss  -0x8(%rdx),%xmm0
  movss  %xmm0,-0x8(%rdx)
  movss  0x4(%rdi,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  addss  -0x4(%rdx),%xmm0
  movss  %xmm0,-0x4(%rdx)
  movss  (%r8,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  addss  (%rsi,%rax,4),%xmm0
  movss  %xmm0,(%rsi,%rax,4)
  movss  0x4(%r8,%rax,4),%xmm4
  mulss  %xmm1,%xmm4
  addss  0x4(%rsi,%rax,4),%xmm4
  movss  %xmm4,0x4(%rsi,%rax,4)
  mulss  -0x8(%rdx),%xmm0
  add    $0x2,%rax
  mulss  -0x4(%rdx),%xmm4
  addss  %xmm4,%xmm0
  addss  %xmm0,%xmm3
  cmp    %eax,%ecx
  jg     L103
L35:
  mulss  %xmm3,%xmm2
  mov    -0x8(%rsp),%rax
  movss  %xmm2,(%rax)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void s_update_var_mpc(int nx, int nu, int N, int nb, int nbu, float *ptr_mu, float mu_scal, float alpha, float **ux, float **dux, float **t, float **dt, float **lam, float **dlam, float **pi, float **dpi) {
  int jj, ll;
  float mu = 0;
  for (ll = 0; ll < nu; ll++)
    ux[0][ll] += alpha * (dux[0][ll] - ux[0][ll]);
  for (ll = 0; ll < 2 * nbu; ll += 2) {
    lam[0][ll + 0] += alpha * dlam[0][ll + 0];
    lam[0][ll + 1] += alpha * dlam[0][ll + 1];
    t[0][ll + 0] += alpha * dt[0][ll + 0];
    t[0][ll + 1] += alpha * dt[0][ll + 1];
    mu += lam[0][ll + 0] * t[0][ll + 0] + lam[0][ll + 1] * t[0][ll + 1];
  }
  for (jj = 1; jj < N; jj++) {
    for (ll = 0; ll < nu; ll++)
      ux[jj][ll] += alpha * (dux[jj][ll] - ux[jj][ll]);
    for (ll = 0; ll < nx; ll++)
      ux[jj][nu + ll] += alpha * (dux[jj][nu + ll] - ux[jj][nu + ll]);
    for (ll = 0; ll < nx; ll++)
      pi[jj][ll] += alpha * (dpi[jj][ll] - pi[jj][ll]);
    for (ll = 0; ll < 2 * nb; ll += 2) {
      lam[jj][ll + 0] += alpha * dlam[jj][ll + 0];
      lam[jj][ll + 1] += alpha * dlam[jj][ll + 1];
      t[jj][ll + 0] += alpha * dt[jj][ll + 0];
      t[jj][ll + 1] += alpha * dt[jj][ll + 1];
      mu += lam[jj][ll + 0] * t[jj][ll + 0] + lam[jj][ll + 1] * t[jj][ll + 1];
    }
  }
  for (ll = 0; ll < nx; ll++)
    ux[N][nu + ll] += alpha * (dux[N][nu + ll] - ux[N][nu + ll]);
  for (ll = 0; ll < nx; ll++)
    pi[N][ll] += alpha * (dpi[N][ll] - pi[N][ll]);
  for (ll = 2 * nu; ll < 2 * nb; ll += 2) {
    lam[N][ll + 0] += alpha * dlam[N][ll + 0];
    lam[N][ll + 1] += alpha * dlam[N][ll + 1];
    t[N][ll + 0] += alpha * dt[N][ll + 0];
    t[N][ll + 1] += alpha * dt[N][ll + 1];
    mu += lam[N][ll + 0] * t[N][ll + 0] + lam[N][ll + 1] * t[N][ll + 1];
  }
  mu *= mu_scal;
  ptr_mu[0] = mu;
  return;
}
```