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

```asm
<foo>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  movl   $0x0,-0x4(%rbp)
  jmp    L144
L145:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L144:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L145
  movl   $0x0,-0x4(%rbp)
  jmp    L106
L125:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L106:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L125
  movl   $0x0,-0x4(%rbp)
  jmp    L59
L22:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L59:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L22
  movl   $0x0,-0x4(%rbp)
  jmp    L121
L130:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L121:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L130
  movl   $0x0,-0x4(%rbp)
  jmp    L99
L70:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L99:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L70
  movl   $0x0,-0x4(%rbp)
  jmp    L117
L0:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L117:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L0
  movl   $0x0,-0x4(%rbp)
  jmp    L151
L128:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L151:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L128
  movl   $0x0,-0x4(%rbp)
  jmp    L53
L58:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L53:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L58
  movl   $0x0,-0x4(%rbp)
  jmp    L61
L6:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L61:
  mov    -0x4(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L6
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void foo(int n, float *a, float *b) {
  int i;
#pragma omp simd
  for (i = 0; i < n; i++)
    a[i] = b[i];
#pragma omp for simd
  for (i = 0; i < n; i++)
    a[i] = b[i];
#pragma omp distribute simd
  for (i = 0; i < n; i++)
    a[i] = b[i];
#pragma omp distribute parallel for simd
  for (i = 0; i < n; i++)
    a[i] = b[i];
#pragma omp parallel for simd
  for (i = 0; i < n; i++)
    a[i] = b[i];
#pragma omp teams distribute simd
  for (i = 0; i < n; i++)
    a[i] = b[i];
#pragma omp target teams distribute simd
  for (i = 0; i < n; i++)
    a[i] = b[i];
#pragma omp teams distribute parallel for simd
  for (i = 0; i < n; i++)
    a[i] = b[i];
#pragma omp target teams distribute parallel for simd
  for (i = 0; i < n; i++)
    a[i] = b[i];
}
```