user: 请将以下的汇编代码转换成C语言代码:

```asm
<IIRsos>:
  endbr64
  mov    %rdi,%rax
  movaps %xmm0,%xmm8
  mov    %rdx,%rdi
  mov    %rcx,%rdx
  pxor   %xmm5,%xmm5
  test   %rdi,%rdi
  je     L132
  movss  (%rdi),%xmm5
L132:
  pxor   %xmm0,%xmm0
  test   %rdx,%rdx
  je     L62
  movss  (%rdx),%xmm0
L62:
  ucomiss D16(%rip),%xmm3
  setp   %cl
  mov    $0x1,%r8d
  cmovne %r8d,%ecx
  test   %cl,%cl
  jne    L275
  ucomiss D16(%rip),%xmm4
  setp   %cl
  cmovne %r8d,%ecx
  test   %cl,%cl
  jne    L275
  ucomiss D16(%rip),%xmm1
  setp   %cl
  mov    $0x1,%r8d
  cmovne %r8d,%ecx
  test   %cl,%cl
  jne    L216
  ucomiss D16(%rip),%xmm2
  setp   %cl
  cmovne %r8d,%ecx
  test   %cl,%cl
  jne    L216
  ucomiss D1(%rip),%xmm8
  jp     L82
  je     L148
L82:
  test   %rsi,%rsi
  je     L148
L187:
  movaps %xmm8,%xmm1
  mulss  (%rax),%xmm1
  movss  %xmm1,(%rax)
  add    $0x4,%rax
  sub    $0x1,%rsi
  jne    L187
  jmp    L148
L275:
  ucomiss D16(%rip),%xmm1
  setp   %cl
  mov    $0x1,%r8d
  cmovne %r8d,%ecx
  test   %cl,%cl
  jne    L88
  ucomiss D16(%rip),%xmm2
  setp   %cl
  cmovne %r8d,%ecx
  test   %cl,%cl
  jne    L88
  ucomiss D1(%rip),%xmm8
  jp     L120
  jne    L120
  test   %rsi,%rsi
  jne    L72
  jmp    L148
L88:
  test   %rsi,%rsi
  jne    L283
  jmp    L148
L217:
  movaps %xmm6,%xmm5
L283:
  movss  (%rax),%xmm6
  movaps %xmm3,%xmm7
  mulss  %xmm5,%xmm7
  subss  %xmm7,%xmm6
  movaps %xmm4,%xmm7
  mulss  %xmm0,%xmm7
  subss  %xmm7,%xmm6
  add    $0x4,%rax
  movaps %xmm8,%xmm7
  mulss  %xmm6,%xmm7
  movaps %xmm1,%xmm9
  mulss  %xmm5,%xmm9
  addss  %xmm9,%xmm7
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm7
  movss  %xmm7,-0x4(%rax)
  movaps %xmm5,%xmm0
  sub    $0x1,%rsi
  jne    L217
  movaps %xmm6,%xmm5
L148:
  test   %rdi,%rdi
  je     L257
  movss  %xmm5,(%rdi)
L257:
  test   %rdx,%rdx
  je     L68
  movss  %xmm0,(%rdx)
L68:
  ret
L120:
  test   %rsi,%rsi
  jne    L213
  jmp    L148
L77:
  movaps %xmm1,%xmm5
L213:
  movss  (%rax),%xmm1
  movaps %xmm3,%xmm2
  mulss  %xmm5,%xmm2
  subss  %xmm2,%xmm1
  mulss  %xmm4,%xmm0
  subss  %xmm0,%xmm1
  add    $0x4,%rax
  movaps %xmm8,%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rax)
  movaps %xmm5,%xmm0
  sub    $0x1,%rsi
  jne    L77
  movaps %xmm1,%xmm5
  jmp    L148
L100:
  movaps %xmm1,%xmm5
L72:
  movss  (%rax),%xmm1
  movaps %xmm3,%xmm2
  mulss  %xmm5,%xmm2
  subss  %xmm2,%xmm1
  mulss  %xmm4,%xmm0
  subss  %xmm0,%xmm1
  add    $0x4,%rax
  movss  %xmm1,-0x4(%rax)
  movaps %xmm5,%xmm0
  sub    $0x1,%rsi
  jne    L100
  movaps %xmm1,%xmm5
  jmp    L148
L216:
  test   %rsi,%rsi
  jne    L8
  jmp    L148
L116:
  movaps %xmm4,%xmm5
L8:
  movss  (%rax),%xmm4
  add    $0x4,%rax
  movaps %xmm8,%xmm3
  mulss  %xmm4,%xmm3
  movaps %xmm1,%xmm6
  mulss  %xmm5,%xmm6
  addss  %xmm6,%xmm3
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm3
  movss  %xmm3,-0x4(%rax)
  movaps %xmm5,%xmm0
  sub    $0x1,%rsi
  jne    L116
  movaps %xmm4,%xmm5
  jmp    L148
```

tool_calls: name: unpack_data
arguments: data_label: D16
type_guessed: byte[4]
name: unpack_data
arguments: data_label: D1
type_guessed: byte[4]

tool: {"D16": [0x00,0x00,0x00,0x00]}

tool: {"D1": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void IIRsos(float *x, unsigned long Nx, float b0, float b1, float b2, float a1, float a2, float *tz1, float *tz2) {
  register float z0;
  register float z1;
  register float z2;
  if (tz1 == NULL)
    z1 = 0.0f;
  else
    z1 = *tz1;
  if (tz2 == NULL)
    z2 = 0.0f;
  else
    z2 = *tz2;
  if ((a1 != 0.0f) || (a2 != 0.0f)) {
    if ((b1 != 0.0f) || (b2 != 0.0f)) {
      while ((Nx) > 0) {
        Nx--;
        z0 = (*x) - a1 * z1 - a2 * z2;
        *(x++) = b0 * z0 + b1 * z1 + b2 * z2;
        z2 = z1;
        z1 = z0;
      }
    } else {
      if (b0 != 1.0f) {
        while ((Nx) > 0) {
          Nx--;
          z0 = (*x) - a1 * z1 - a2 * z2;
          *(x++) = b0 * z0;
          z2 = z1;
          z1 = z0;
        }
      } else {
        while ((Nx) > 0) {
          Nx--;
          z0 = (*x) - a1 * z1 - a2 * z2;
          *(x++) = z0;
          z2 = z1;
          z1 = z0;
        }
      }
    }
  } else {
    if ((b1 != 0.0f) || (b2 != 0.0f)) {
      while ((Nx) > 0) {
        Nx--;
        z0 = (*x);
        *(x++) = b0 * z0 + b1 * z1 + b2 * z2;
        z2 = z1;
        z1 = z0;
      }
    } else {
      if (b0 != 1.0f) {
        while ((Nx) > 0) {
          Nx--;
          *x = b0 * (*x);
          x++;
        }
      }
    }
  }
  if (tz1 != NULL)
    (*tz1) = z1;
  if (tz2 != NULL)
    (*tz2) = z2;
}
```