user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<caguard2l>:
  endbr64
  mov    %rdi,%rax
  mov    %ecx,%r8d
  mov    %edx,%edi
  test   %edx,%edx
  jle    L90
  cmp    $0x1,%ecx
  jne    L105
  movslq %esi,%r10
  lea    0x10(%rax),%rdx
  lea    (%rax,%r10,4),%rcx
  lea    0x10(,%r10,4),%r9
  cmp    %rdx,%rcx
  setae  %dl
  test   %r9,%r9
  setle  %r9b
  or     %r9b,%dl
  je     L118
  cmp    $0x1,%edi
  je     L118
  lea    -0x1(%rdi),%edx
  mov    %edi,%r9d
  cmp    $0x2,%edx
  jbe    L140
  shr    $0x2,%r9d
  xor    %edx,%edx
  pxor   %xmm1,%xmm1
  shl    $0x4,%r9
  nopl   0x0(%rax)
L210:
  movups (%rax,%rdx,1),%xmm0
  movups (%rcx,%rdx,1),%xmm3
  addps  %xmm3,%xmm0
  movups %xmm0,(%rax,%rdx,1)
  movups %xmm1,(%rcx,%rdx,1)
  add    $0x10,%rdx
  cmp    %r9,%rdx
  jne    L210
  mov    %edi,%ecx
  and    $0xfffffffc,%ecx
  mov    %ecx,%edx
  cmp    %ecx,%edi
  je     L90
  mov    %edi,%r9d
  sub    %ecx,%r9d
  cmp    $0x1,%r9d
  je     L10
L102:
  lea    (%rax,%rcx,4),%r11
  add    %r10,%rcx
  lea    (%rax,%rcx,4),%rcx
  movq   (%r11),%xmm0
  movq   (%rcx),%xmm1
  addps  %xmm1,%xmm0
  movlps %xmm0,(%r11)
  movq   $0x0,(%rcx)
  mov    %r9d,%ecx
  and    $0xfffffffe,%ecx
  add    %ecx,%edx
  cmp    %ecx,%r9d
  je     L90
L10:
  movslq %edx,%rcx
  add    %esi,%edx
  movslq %edx,%rdx
  lea    (%rax,%rcx,4),%rcx
  lea    (%rax,%rdx,4),%rdx
  movss  (%rcx),%xmm0
  addss  (%rdx),%xmm0
  movss  %xmm0,(%rcx)
  movl   $0x0,(%rdx)
L90:
  imul   %r8d,%edi
  test   %esi,%esi
  jle    L222
  movslq %edi,%r9
  lea    0x10(%rax),%rdx
  lea    (%rax,%r9,4),%rcx
  lea    0x10(,%r9,4),%r8
  cmp    %rdx,%rcx
  setae  %dl
  test   %r8,%r8
  setle  %r8b
  or     %r8b,%dl
  je     L241
  cmp    $0x1,%esi
  je     L241
  lea    -0x1(%rsi),%edx
  mov    %esi,%r8d
  cmp    $0x2,%edx
  jbe    L56
  shr    $0x2,%r8d
  xor    %edx,%edx
  pxor   %xmm1,%xmm1
  shl    $0x4,%r8
  nop
L233:
  movups (%rax,%rdx,1),%xmm0
  movups (%rcx,%rdx,1),%xmm2
  addps  %xmm2,%xmm0
  movups %xmm0,(%rax,%rdx,1)
  movups %xmm1,(%rcx,%rdx,1)
  add    $0x10,%rdx
  cmp    %r8,%rdx
  jne    L233
  mov    %esi,%ecx
  and    $0xfffffffc,%ecx
  mov    %ecx,%edx
  cmp    %ecx,%esi
  je     L222
  mov    %esi,%r8d
  sub    %ecx,%r8d
  cmp    $0x1,%r8d
  je     L246
L53:
  lea    (%rax,%rcx,4),%r10
  add    %r9,%rcx
  lea    (%rax,%rcx,4),%rcx
  movq   (%r10),%xmm0
  movq   (%rcx),%xmm1
  addps  %xmm1,%xmm0
  movlps %xmm0,(%r10)
  movq   $0x0,(%rcx)
  mov    %r8d,%ecx
  and    $0xfffffffe,%ecx
  add    %ecx,%edx
  cmp    %r8d,%ecx
  je     L222
L246:
  movslq %edx,%rcx
  add    %edi,%edx
  movslq %edx,%rdx
  lea    (%rax,%rcx,4),%rcx
  lea    (%rax,%rdx,4),%rdx
  movss  (%rcx),%xmm0
  addss  (%rdx),%xmm0
  movss  %xmm0,(%rcx)
  movl   $0x0,(%rdx)
L222:
  add    %esi,%edi
  movss  (%rax),%xmm0
  movslq %edi,%rdi
  lea    (%rax,%rdi,4),%rdx
  addss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  movl   $0x0,(%rdx)
  ret
L241:
  lea    -0x1(%rsi),%ecx
  mov    %rax,%rdx
  lea    0x4(%rax,%rcx,4),%rcx
  nopl   0x0(%rax,%rax,1)
L176:
  movss  (%rdx),%xmm0
  addss  (%rdx,%r9,4),%xmm0
  movss  %xmm0,(%rdx)
  movl   $0x0,(%rdx,%r9,4)
  add    $0x4,%rdx
  cmp    %rcx,%rdx
  jne    L176
  jmp    L222
  nopl   0x0(%rax)
L105:
  movslq %ecx,%r10
  mov    %rax,%rdx
  xor    %ecx,%ecx
  movslq %esi,%r9
  shl    $0x2,%r10
  nopw   0x0(%rax,%rax,1)
L98:
  movss  (%rdx),%xmm0
  addss  (%rdx,%r9,4),%xmm0
  add    $0x1,%ecx
  movss  %xmm0,(%rdx)
  movl   $0x0,(%rdx,%r9,4)
  add    %r10,%rdx
  cmp    %ecx,%edi
  jne    L98
  jmp    L90
  nopl   (%rax)
L118:
  lea    -0x1(%rdi),%ecx
  mov    %rax,%rdx
  lea    0x4(%rax,%rcx,4),%rcx
  nopl   0x0(%rax,%rax,1)
L51:
  movss  (%rdx),%xmm0
  addss  (%rdx,%r10,4),%xmm0
  movss  %xmm0,(%rdx)
  movl   $0x0,(%rdx,%r10,4)
  add    $0x4,%rdx
  cmp    %rdx,%rcx
  jne    L51
  jmp    L90
L56:
  xor    %ecx,%ecx
  xor    %edx,%edx
  jmp    L53
L140:
  xor    %ecx,%ecx
  xor    %edx,%edx
  jmp    L102
```

assistant: ```c
void caguard2l(float q[], int nx, int ny, int nxe, int nye) {
  int j, k;
  for (k = 0; k < ny; k++) {
    q[nxe * k] += q[nx + nxe * k];
    q[nx + nxe * k] = 0.0;
  }
  for (j = 0; j < nx; j++) {
    q[j] += q[j + nxe * ny];
    q[j + nxe * ny] = 0.0;
  }
  q[0] += q[nx + nxe * ny];
  q[nx + nxe * ny] = 0.0;
  return;
}
```