user: What is the c source code of the assembly code below?

```asm
<imdct_step3_inner_s_loop>:
  endbr64
  push   %rbx
  mov    %rsi,%rax
  movss  (%rsi),%xmm1
  mov    %rdx,%r11
  movss  0x4(%rsi),%xmm2
  movslq %r9d,%rsi
  movslq %ecx,%r10
  lea    0x0(,%rsi,4),%rdx
  lea    (%rax,%rdx,1),%rcx
  movss  0x4(%rax,%rdx,1),%xmm4
  movss  (%rcx),%xmm3
  add    %rdx,%rcx
  lea    (%r9,%r9,1),%edx
  movss  (%rcx),%xmm5
  movss  (%rcx,%rsi,4),%xmm7
  mov    %r8d,%ecx
  movslq %edx,%rbx
  shr    $0x1f,%ecx
  add    %r9d,%edx
  movss  0x4(%rax,%rbx,4),%xmm6
  add    %r8d,%ecx
  movslq %edx,%rdx
  sar    %ecx
  movss  0x4(%rax,%rdx,4),%xmm8
  lea    (%r11,%r10,4),%rdx
  movslq %ecx,%rcx
  mov    %rdx,%rax
  shl    $0x2,%rcx
  sub    %rcx,%rax
  test   %edi,%edi
  jle    L10
  movslq %r8d,%rsi
  mov    %edi,%ecx
  shl    $0x2,%rsi
  neg    %rsi
  cs nopw 0x0(%rax,%rax,1)
L14:
  movss  -0x4(%rax),%xmm12
  movss  -0x4(%rdx),%xmm11
  movss  -0x8(%rdx),%xmm10
  movaps %xmm11,%xmm9
  addss  %xmm12,%xmm11
  movaps %xmm10,%xmm0
  subss  -0x8(%rax),%xmm0
  subss  %xmm12,%xmm9
  movss  %xmm11,-0x4(%rdx)
  addss  -0x8(%rax),%xmm10
  movaps %xmm2,%xmm11
  mulss  %xmm0,%xmm11
  mulss  %xmm1,%xmm0
  movss  %xmm10,-0x8(%rdx)
  movaps %xmm1,%xmm10
  movss  -0xc(%rax),%xmm12
  mulss  %xmm9,%xmm10
  mulss  %xmm2,%xmm9
  subss  %xmm11,%xmm10
  addss  %xmm9,%xmm0
  movss  %xmm10,-0x4(%rax)
  movss  %xmm0,-0x8(%rax)
  movss  -0xc(%rdx),%xmm11
  movss  -0x10(%rdx),%xmm10
  movaps %xmm11,%xmm9
  addss  %xmm12,%xmm11
  movaps %xmm10,%xmm0
  subss  -0x10(%rax),%xmm0
  subss  %xmm12,%xmm9
  movss  %xmm11,-0xc(%rdx)
  addss  -0x10(%rax),%xmm10
  movaps %xmm4,%xmm11
  mulss  %xmm0,%xmm11
  mulss  %xmm3,%xmm0
  movss  %xmm10,-0x10(%rdx)
  movaps %xmm3,%xmm10
  movss  -0x14(%rax),%xmm12
  mulss  %xmm9,%xmm10
  mulss  %xmm4,%xmm9
  subss  %xmm11,%xmm10
  addss  %xmm9,%xmm0
  movss  %xmm10,-0xc(%rax)
  movss  %xmm0,-0x10(%rax)
  movss  -0x14(%rdx),%xmm11
  movss  -0x18(%rdx),%xmm10
  movaps %xmm11,%xmm9
  addss  %xmm12,%xmm11
  movaps %xmm10,%xmm0
  subss  -0x18(%rax),%xmm0
  subss  %xmm12,%xmm9
  movss  %xmm11,-0x14(%rdx)
  addss  -0x18(%rax),%xmm10
  movaps %xmm6,%xmm11
  mulss  %xmm0,%xmm11
  mulss  %xmm5,%xmm0
  movss  %xmm10,-0x18(%rdx)
  movaps %xmm5,%xmm10
  movss  -0x1c(%rax),%xmm12
  mulss  %xmm9,%xmm10
  mulss  %xmm6,%xmm9
  subss  %xmm11,%xmm10
  addss  %xmm9,%xmm0
  movss  %xmm10,-0x14(%rax)
  movss  %xmm0,-0x18(%rax)
  movss  -0x1c(%rdx),%xmm11
  movss  -0x20(%rdx),%xmm10
  movaps %xmm11,%xmm9
  addss  %xmm12,%xmm11
  movaps %xmm10,%xmm0
  subss  -0x20(%rax),%xmm0
  subss  %xmm12,%xmm9
  movss  %xmm11,-0x1c(%rdx)
  addss  -0x20(%rax),%xmm10
  movaps %xmm8,%xmm11
  mulss  %xmm0,%xmm11
  mulss  %xmm7,%xmm0
  movss  %xmm10,-0x20(%rdx)
  movaps %xmm7,%xmm10
  add    %rsi,%rdx
  mulss  %xmm9,%xmm10
  mulss  %xmm8,%xmm9
  subss  %xmm11,%xmm10
  addss  %xmm9,%xmm0
  movss  %xmm10,-0x1c(%rax)
  movss  %xmm0,-0x20(%rax)
  add    %rsi,%rax
  sub    $0x1,%ecx
  jne    L14
L10:
  pop    %rbx
  ret
```

assistant: ```c
void imdct_step3_inner_s_loop(const unsigned int lim, const float *A, float *e, int i_off, int k0, int k1) {
  const float A0 = A[0];
  const float A1 = A[0 + 1];
  const float A2 = A[0 + k1];
  const float A3 = A[0 + k1 + 1];
  const float A4 = A[0 + k1 * 2 + 0];
  const float A5 = A[0 + k1 * 2 + 1];
  const float A6 = A[0 + k1 * 3 + 0];
  const float A7 = A[0 + k1 * 3 + 1];
  float *e0 = e + i_off;
  float *e2 = e0 - k0 / 2;
  for (int i = lim; i > 0; i--, e0 -= k0, e2 -= k0) {
    float k00, k11;
    k00 = e0[-1] - e2[-1];
    k11 = e0[-2] - e2[-2];
    e0[-1] = e0[-1] + e2[-1];
    e0[-2] = e0[-2] + e2[-2];
    e2[-1] = k00 * A0 - k11 * A1;
    e2[-2] = k11 * A0 + k00 * A1;
    k00 = e0[-3] - e2[-3];
    k11 = e0[-4] - e2[-4];
    e0[-3] = e0[-3] + e2[-3];
    e0[-4] = e0[-4] + e2[-4];
    e2[-3] = k00 * A2 - k11 * A3;
    e2[-4] = k11 * A2 + k00 * A3;
    k00 = e0[-5] - e2[-5];
    k11 = e0[-6] - e2[-6];
    e0[-5] = e0[-5] + e2[-5];
    e0[-6] = e0[-6] + e2[-6];
    e2[-5] = k00 * A4 - k11 * A5;
    e2[-6] = k11 * A4 + k00 * A5;
    k00 = e0[-7] - e2[-7];
    k11 = e0[-8] - e2[-8];
    e0[-7] = e0[-7] + e2[-7];
    e0[-8] = e0[-8] + e2[-8];
    e2[-7] = k00 * A6 - k11 * A7;
    e2[-8] = k11 * A6 + k00 * A7;
  }
}
```