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

```asm
<vm>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,-0x50(%rsp)
  mov    %rsi,-0x58(%rsp)
  cmp    $0x2,%ecx
  jle    L13
  mov    %ecx,%r11d
  lea    0x4(%rsi),%rcx
  lea    0xc(%rdx),%r9
  mov    %rsi,%r10
  lea    -0x3(%r11),%eax
  lea    -0x4(%r11),%r15d
  mov    %r9,-0x48(%rsp)
  mov    %r9,%rsi
  mov    %rax,%rbx
  mov    %eax,-0x2c(%rsp)
  lea    0xc(%rdx,%rax,4),%rax
  lea    -0x1(%r11),%ebp
  cmp    %rax,%rcx
  lea    0x8(%r10),%rax
  mov    $0x1,%r10d
  mov    %r15d,-0x30(%rsp)
  setae  %dil
  cmp    %rax,%r9
  pxor   %xmm1,%xmm1
  movq   $0x10,-0x60(%rsp)
  setae  %al
  mov    $0x3,%r9d
  or     %eax,%edi
  mov    %ebx,%eax
  shr    $0x2,%eax
  mov    %dil,-0x31(%rsp)
  mov    %ebx,%edi
  sub    $0x1,%eax
  and    $0xfffffffc,%edi
  shl    $0x4,%rax
  mov    %edi,-0x20(%rsp)
  add    $0x1c,%rax
  mov    %rax,-0x28(%rsp)
  mov    %ebx,%eax
  or     $0x3,%eax
  mov    %eax,-0x14(%rsp)
  lea    0x1c(%rdx),%rax
  mov    %rax,-0x40(%rsp)
  mov    %r15d,%eax
  add    $0x4,%rax
  mov    %rax,-0x10(%rsp)
  mov    %r11d,%eax
  sub    %edi,%eax
  mov    %eax,-0x1c(%rsp)
  sub    $0x3,%eax
  mov    %eax,-0x18(%rsp)
  cmp    $0x1,%r10
  je     L181
  nopl   0x0(%rax,%rax,1)
L133:
  movss  0x4(%rcx),%xmm0
  subss  -0x4(%rsi),%xmm0
  mov    %r9d,%eax
  movss  %xmm0,0x4(%rcx)
  cmp    %r9d,%r11d
  jle    L234
  lea    0x2(%r10),%r13
  mov    %ebx,%r12d
  mov    -0x60(%rsp),%r15
  mov    -0x50(%rsp),%rdi
  add    %r13,%r12
  lea    (%rdx,%r12,4),%r12
  lea    -0x4(%r15),%r8
  mov    (%rdi,%r10,8),%rdi
  cmp    %r12,%rcx
  lea    0x4(%rcx),%r12
  setae  %r15b
  cmp    %r12,%rsi
  setae  %r14b
  or     %r15b,%r14b
  je     L55
  mov    -0x60(%rsp),%r15
  mov    %rsi,%r14
  add    %rdi,%r15
  sub    %r15,%r14
  cmp    $0x8,%r14
  seta   %r15b
  cmp    $0x3,%ebp
  setne  %r14b
  test   %r14b,%r15b
  je     L55
  lea    -0x3(%rbp),%r14d
  cmp    $0x2,%r14d
  jbe    L197
  mov    %ebx,%r14d
  movss  (%rcx),%xmm2
  add    %rdi,%r8
  xor    %eax,%eax
  shr    $0x2,%r14d
  shl    $0x4,%r14
  shufps $0x0,%xmm2,%xmm2
  nopw   0x0(%rax,%rax,1)
L38:
  movups (%r8,%rax,1),%xmm0
  movups (%rsi,%rax,1),%xmm4
  mulps  %xmm2,%xmm0
  addps  %xmm4,%xmm0
  movups %xmm0,(%rsi,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%r14
  jne    L38
  mov    %ebx,%r8d
  and    $0xfffffffc,%r8d
  lea    (%r9,%r8,1),%eax
  cmp    %ebx,%r8d
  je     L30
  mov    %ebp,%r15d
  sub    %r8d,%r15d
  lea    -0x2(%r15),%r14d
  cmp    $0x3,%r15d
  je     L123
L24:
  add    %r13,%r8
  movss  (%rcx),%xmm2
  movq   (%rdi,%r8,4),%xmm0
  lea    (%rdx,%r8,4),%r13
  mov    %r14d,%r8d
  shufps $0xe0,%xmm2,%xmm2
  and    $0xfffffffe,%r8d
  mulps  %xmm2,%xmm0
  movq   0x0(%r13),%xmm2
  add    %r8d,%eax
  addps  %xmm0,%xmm2
  movlps %xmm2,0x0(%r13)
  cmp    %r8d,%r14d
  je     L30
L123:
  cltq
  movss  (%rdi,%rax,4),%xmm0
  lea    (%rdx,%rax,4),%r8
  mulss  (%rcx),%xmm0
  addss  (%r8),%xmm0
  movss  %xmm0,(%r8)
L30:
  addq   $0x4,-0x60(%rsp)
  add    $0x1,%r10
  mov    %r12,%rcx
  sub    $0x1,%ebp
  lea    0x1(%r9),%eax
  add    $0x4,%rsi
  sub    $0x1,%ebx
  cmp    %r11d,%r9d
  je     L13
  mov    %eax,%r9d
  cmp    $0x1,%r10
  jne    L133
L181:
  movl   $0x0,0x8(%rdx)
  cmp    $0x3,%r11d
  jle    L234
  mov    -0x50(%rsp),%rax
  mov    0x8(%rax),%rdi
  lea    0xc(%rdi),%rax
  cmp    -0x40(%rsp),%rax
  lea    0x1c(%rdi),%rax
  setae  %r8b
  cmp    %rax,-0x48(%rsp)
  setae  %al
  or     %r8d,%eax
  cmp    $0x4,%r11d
  setne  %r8b
  test   %r8b,%al
  je     L10
  cmpb   $0x0,-0x31(%rsp)
  je     L10
  cmpl   $0x2,-0x30(%rsp)
  jbe    L220
  mov    -0x58(%rsp),%rax
  mov    -0x28(%rsp),%r8
  pxor   %xmm2,%xmm2
  movss  0x4(%rax),%xmm3
  mov    $0xc,%eax
  shufps $0x0,%xmm3,%xmm3
  nopl   0x0(%rax)
L267:
  movups %xmm2,(%rdx,%rax,1)
  movups (%rdi,%rax,1),%xmm0
  mulps  %xmm3,%xmm0
  addps  %xmm2,%xmm0
  movups %xmm0,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%r8
  jne    L267
  mov    -0x20(%rsp),%r8d
  mov    -0x2c(%rsp),%eax
  lea    0x4(%rcx),%r12
  cmp    %eax,%r8d
  je     L30
  cmpl   $0x4,-0x1c(%rsp)
  mov    -0x18(%rsp),%r13d
  mov    -0x14(%rsp),%eax
  je     L247
L158:
  lea    0x3(%r8),%r12d
  mov    -0x58(%rsp),%r15
  lea    (%rdx,%r12,4),%r8
  movss  0x4(%r15),%xmm2
  movq   $0x0,(%r8)
  movq   (%rdi,%r12,4),%xmm0
  lea    0x4(%rcx),%r12
  shufps $0xe0,%xmm2,%xmm2
  mulps  %xmm2,%xmm0
  xorps  %xmm2,%xmm2
  addps  %xmm2,%xmm0
  movlps %xmm0,(%r8)
  mov    %r13d,%r8d
  and    $0xfffffffe,%r8d
  add    %r8d,%eax
  cmp    %r13d,%r8d
  je     L30
L247:
  cltq
  lea    0x4(%rcx),%r12
  lea    (%rdx,%rax,4),%r8
  movl   $0x0,(%r8)
  movss  (%rdi,%rax,4),%xmm0
  mov    -0x58(%rsp),%rax
  mulss  0x4(%rax),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,(%r8)
  jmp    L30
L10:
  mov    -0x58(%rsp),%r8
  mov    -0x10(%rsp),%r12
  mov    $0x3,%eax
  cs nopw 0x0(%rax,%rax,1)
L134:
  movl   $0x0,(%rdx,%rax,4)
  movss  (%rdi,%rax,4),%xmm0
  mulss  0x4(%r8),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%r12
  jne    L134
L234:
  lea    0x4(%rcx),%r12
  jmp    L30
  nopl   (%rax)
L55:
  movslq %r9d,%rax
  nopl   0x0(%rax,%rax,1)
L242:
  movss  (%rcx),%xmm0
  mulss  (%rdi,%rax,4),%xmm0
  addss  (%rdx,%rax,4),%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %eax,%r11d
  jg     L242
  jmp    L30
  nopl   0x0(%rax)
L13:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L197:
  lea    -0x2(%rbp),%r14d
  xor    %r8d,%r8d
  jmp    L24
L220:
  mov    -0x2c(%rsp),%r13d
  xor    %r8d,%r8d
  mov    $0x3,%eax
  jmp    L158
```

assistant: ```c
void vm(float **a, float *b, float *s, int n) {
  int t4;
  int t2;
  int i;
  int j;
  for (t2 = 1; t2 <= n - 2; t2 += 1)
    if (t2 <= 1) {
      s[2] = 0.0f;
      b[2] = (b[2] - s[2]);
      for (t4 = 3; t4 <= n - 1; t4 += 1) {
        s[t4] = 0.0f;
        s[t4] = (s[t4] + (b[t2] * a[t2][t4]));
      }
    } else {
      b[t2 + 1] = (b[t2 + 1] - s[t2 + 1]);
      for (t4 = t2 + 2; t4 <= n - 1; t4 += 1)
        s[t4] = (s[t4] + (b[t2] * a[t2][t4]));
    }
}
```