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

```asm
<kern_r4_u4_f>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    0x30(%rsp),%rbx
  mov    0x40(%rsp),%rbp
  test   %rbp,%rbp
  jle    L2
  mov    %rdi,%r12
  mov    %rsi,%r11
  mov    %rcx,%rax
  mov    0x20(%rsp),%r10
  mov    0x28(%rsp),%rdi
  mov    %r12,%rsi
  mov    %rdx,%rcx
  mov    %r11,%rdx
  shl    $0x6,%rbp
  mov    $0x0,%r11d
L9:
  lea    (%r11,%r11,2),%r12
  movsd  (%rbx,%r12,1),%xmm5
  movsd  0x8(%rbx,%r12,1),%xmm7
  movsd  (%r9),%xmm0
  movsd  0x8(%r9),%xmm9
  movapd %xmm0,%xmm3
  mulsd  (%rbx,%r11,1),%xmm3
  movapd %xmm9,%xmm1
  mulsd  0x8(%rbx,%r11,1),%xmm1
  addsd  %xmm1,%xmm3
  mulsd  (%rbx,%r11,1),%xmm9
  mulsd  0x8(%rbx,%r11,1),%xmm0
  subsd  %xmm0,%xmm9
  movsd  (%r10),%xmm0
  movsd  0x8(%r10),%xmm12
  movapd %xmm0,%xmm1
  mulsd  (%rbx,%r11,2),%xmm1
  movapd %xmm12,%xmm2
  mulsd  0x8(%rbx,%r11,2),%xmm2
  addsd  %xmm2,%xmm1
  mulsd  (%rbx,%r11,2),%xmm12
  mulsd  0x8(%rbx,%r11,2),%xmm0
  subsd  %xmm0,%xmm12
  movsd  (%rdi),%xmm2
  movsd  0x8(%rdi),%xmm6
  movapd %xmm5,%xmm0
  mulsd  %xmm2,%xmm0
  movapd %xmm7,%xmm4
  mulsd  %xmm6,%xmm4
  addsd  %xmm4,%xmm0
  movsd  %xmm5,-0x10(%rsp)
  mulsd  %xmm5,%xmm6
  movsd  %xmm7,-0x8(%rsp)
  mulsd  %xmm7,%xmm2
  subsd  %xmm2,%xmm6
  movsd  (%r8),%xmm8
  movapd %xmm8,%xmm11
  addsd  %xmm1,%xmm11
  subsd  %xmm1,%xmm8
  movsd  0x8(%r8),%xmm5
  movapd %xmm5,%xmm10
  addsd  %xmm12,%xmm10
  subsd  %xmm12,%xmm5
  movapd %xmm3,%xmm12
  addsd  %xmm0,%xmm12
  subsd  %xmm0,%xmm3
  movapd %xmm9,%xmm13
  addsd  %xmm6,%xmm13
  subsd  %xmm6,%xmm9
  movsd  0x10(%r9),%xmm0
  movsd  0x18(%r9),%xmm6
  movapd %xmm0,%xmm4
  mulsd  (%rbx,%r11,1),%xmm4
  movapd %xmm6,%xmm2
  mulsd  0x8(%rbx,%r11,1),%xmm2
  movapd %xmm4,%xmm1
  addsd  %xmm2,%xmm1
  mulsd  (%rbx,%r11,1),%xmm6
  mulsd  0x8(%rbx,%r11,1),%xmm0
  subsd  %xmm0,%xmm6
  movsd  0x10(%r10),%xmm0
  movsd  0x18(%r10),%xmm15
  movapd %xmm0,%xmm4
  mulsd  (%rbx,%r11,2),%xmm4
  movapd %xmm15,%xmm2
  mulsd  0x8(%rbx,%r11,2),%xmm2
  addsd  %xmm2,%xmm4
  mulsd  (%rbx,%r11,2),%xmm15
  mulsd  0x8(%rbx,%r11,2),%xmm0
  subsd  %xmm0,%xmm15
  movsd  0x10(%rdi),%xmm0
  movsd  0x18(%rdi),%xmm14
  movsd  -0x10(%rsp),%xmm2
  mulsd  %xmm0,%xmm2
  movsd  -0x8(%rsp),%xmm7
  mulsd  %xmm14,%xmm7
  addsd  %xmm7,%xmm2
  mulsd  -0x10(%rsp),%xmm14
  movapd %xmm0,%xmm7
  mulsd  -0x8(%rsp),%xmm7
  subsd  %xmm7,%xmm14
  movapd %xmm14,%xmm0
  movapd %xmm11,%xmm14
  addsd  %xmm12,%xmm14
  movsd  %xmm14,(%rsi)
  movapd %xmm10,%xmm14
  addsd  %xmm13,%xmm14
  movsd  %xmm14,0x8(%rsi)
  subsd  %xmm12,%xmm11
  movsd  %xmm11,(%rcx)
  subsd  %xmm13,%xmm10
  movsd  %xmm10,0x8(%rcx)
  movapd %xmm8,%xmm10
  addsd  %xmm9,%xmm10
  movsd  %xmm10,(%rdx)
  movapd %xmm5,%xmm10
  subsd  %xmm3,%xmm10
  movsd  %xmm10,0x8(%rdx)
  subsd  %xmm9,%xmm8
  movsd  %xmm8,(%rax)
  addsd  %xmm3,%xmm5
  movsd  %xmm5,0x8(%rax)
  movsd  0x10(%r8),%xmm8
  movapd %xmm8,%xmm10
  addsd  %xmm4,%xmm10
  subsd  %xmm4,%xmm8
  movsd  0x18(%r8),%xmm4
  movapd %xmm4,%xmm11
  addsd  %xmm15,%xmm11
  subsd  %xmm15,%xmm4
  movapd %xmm1,%xmm5
  addsd  %xmm2,%xmm5
  subsd  %xmm2,%xmm1
  movapd %xmm1,%xmm7
  movapd %xmm6,%xmm12
  addsd  %xmm0,%xmm12
  subsd  %xmm0,%xmm6
  movapd %xmm6,%xmm13
  movsd  0x20(%r9),%xmm0
  movsd  0x28(%r9),%xmm6
  movapd %xmm0,%xmm2
  mulsd  (%rbx,%r11,1),%xmm2
  movapd %xmm6,%xmm1
  mulsd  0x8(%rbx,%r11,1),%xmm1
  addsd  %xmm1,%xmm2
  mulsd  (%rbx,%r11,1),%xmm6
  mulsd  0x8(%rbx,%r11,1),%xmm0
  subsd  %xmm0,%xmm6
  movsd  0x20(%r10),%xmm0
  movsd  0x28(%r10),%xmm15
  movapd %xmm0,%xmm3
  mulsd  (%rbx,%r11,2),%xmm3
  movapd %xmm15,%xmm1
  mulsd  0x8(%rbx,%r11,2),%xmm1
  addsd  %xmm1,%xmm3
  mulsd  (%rbx,%r11,2),%xmm15
  mulsd  0x8(%rbx,%r11,2),%xmm0
  subsd  %xmm0,%xmm15
  movsd  0x20(%rdi),%xmm0
  movsd  0x28(%rdi),%xmm14
  movsd  -0x10(%rsp),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0x8(%rsp),%xmm9
  mulsd  %xmm14,%xmm9
  addsd  %xmm9,%xmm1
  mulsd  -0x10(%rsp),%xmm14
  movapd %xmm0,%xmm9
  mulsd  -0x8(%rsp),%xmm9
  subsd  %xmm9,%xmm14
  movapd %xmm14,%xmm0
  movapd %xmm10,%xmm14
  addsd  %xmm5,%xmm14
  movsd  %xmm14,0x10(%rsi)
  movapd %xmm11,%xmm14
  addsd  %xmm12,%xmm14
  movsd  %xmm14,0x18(%rsi)
  subsd  %xmm5,%xmm10
  movsd  %xmm10,0x10(%rcx)
  subsd  %xmm12,%xmm11
  movsd  %xmm11,0x18(%rcx)
  movapd %xmm8,%xmm10
  addsd  %xmm13,%xmm10
  movsd  %xmm10,0x10(%rdx)
  movapd %xmm4,%xmm10
  subsd  %xmm7,%xmm10
  movsd  %xmm10,0x18(%rdx)
  subsd  %xmm13,%xmm8
  movsd  %xmm8,0x10(%rax)
  addsd  %xmm4,%xmm7
  movsd  %xmm7,0x18(%rax)
  movsd  0x20(%r8),%xmm10
  movapd %xmm10,%xmm11
  addsd  %xmm3,%xmm11
  subsd  %xmm3,%xmm10
  movsd  0x28(%r8),%xmm8
  movapd %xmm8,%xmm12
  addsd  %xmm15,%xmm12
  subsd  %xmm15,%xmm8
  movapd %xmm2,%xmm3
  addsd  %xmm1,%xmm3
  movapd %xmm3,%xmm9
  movapd %xmm2,%xmm7
  subsd  %xmm1,%xmm7
  movapd %xmm6,%xmm13
  addsd  %xmm0,%xmm13
  subsd  %xmm0,%xmm6
  movsd  0x30(%r9),%xmm1
  movsd  0x38(%r9),%xmm15
  movapd %xmm1,%xmm3
  mulsd  (%rbx,%r11,1),%xmm3
  movapd %xmm15,%xmm4
  mulsd  0x8(%rbx,%r11,1),%xmm4
  addsd  %xmm4,%xmm3
  mulsd  (%rbx,%r11,1),%xmm15
  mulsd  0x8(%rbx,%r11,1),%xmm1
  movapd %xmm15,%xmm2
  subsd  %xmm1,%xmm2
  movsd  0x30(%r10),%xmm0
  movsd  0x38(%r10),%xmm15
  movapd %xmm0,%xmm5
  mulsd  (%rbx,%r11,2),%xmm5
  movapd %xmm15,%xmm1
  mulsd  0x8(%rbx,%r11,2),%xmm1
  addsd  %xmm1,%xmm5
  mulsd  (%rbx,%r11,2),%xmm15
  mulsd  0x8(%rbx,%r11,2),%xmm0
  subsd  %xmm0,%xmm15
  movsd  0x30(%rdi),%xmm0
  movsd  0x38(%rdi),%xmm1
  movsd  -0x10(%rsp),%xmm4
  mulsd  %xmm0,%xmm4
  movsd  -0x8(%rsp),%xmm14
  mulsd  %xmm1,%xmm14
  addsd  %xmm14,%xmm4
  mulsd  -0x10(%rsp),%xmm1
  mulsd  -0x8(%rsp),%xmm0
  subsd  %xmm0,%xmm1
  movapd %xmm11,%xmm0
  addsd  %xmm9,%xmm0
  movsd  %xmm0,0x20(%rsi)
  movapd %xmm12,%xmm0
  addsd  %xmm13,%xmm0
  movsd  %xmm0,0x28(%rsi)
  subsd  %xmm9,%xmm11
  movsd  %xmm11,0x20(%rcx)
  subsd  %xmm13,%xmm12
  movsd  %xmm12,0x28(%rcx)
  movapd %xmm10,%xmm0
  addsd  %xmm6,%xmm0
  movsd  %xmm0,0x20(%rdx)
  movapd %xmm8,%xmm0
  subsd  %xmm7,%xmm0
  movsd  %xmm0,0x28(%rdx)
  subsd  %xmm6,%xmm10
  movsd  %xmm10,0x20(%rax)
  addsd  %xmm7,%xmm8
  movsd  %xmm8,0x28(%rax)
  movsd  0x30(%r8),%xmm6
  movapd %xmm6,%xmm8
  addsd  %xmm5,%xmm8
  subsd  %xmm5,%xmm6
  movsd  0x38(%r8),%xmm0
  movapd %xmm0,%xmm5
  addsd  %xmm15,%xmm5
  subsd  %xmm15,%xmm0
  movapd %xmm3,%xmm7
  addsd  %xmm4,%xmm7
  subsd  %xmm4,%xmm3
  movapd %xmm2,%xmm4
  addsd  %xmm1,%xmm4
  subsd  %xmm1,%xmm2
  movapd %xmm8,%xmm1
  addsd  %xmm7,%xmm1
  movsd  %xmm1,0x30(%rsi)
  movapd %xmm5,%xmm1
  addsd  %xmm4,%xmm1
  movsd  %xmm1,0x38(%rsi)
  subsd  %xmm7,%xmm8
  movsd  %xmm8,0x30(%rcx)
  subsd  %xmm4,%xmm5
  movsd  %xmm5,0x38(%rcx)
  movapd %xmm6,%xmm1
  addsd  %xmm2,%xmm1
  movsd  %xmm1,0x30(%rdx)
  movapd %xmm0,%xmm1
  subsd  %xmm3,%xmm1
  movsd  %xmm1,0x38(%rdx)
  subsd  %xmm2,%xmm6
  movsd  %xmm6,0x30(%rax)
  addsd  %xmm3,%xmm0
  movsd  %xmm0,0x38(%rax)
  add    $0x100,%r9
  add    $0x100,%r10
  add    $0x100,%rdi
  add    $0x100,%r8
  add    $0x40,%rsi
  add    $0x40,%rcx
  add    $0x40,%rdx
  add    $0x40,%rax
  add    $0x40,%r11
  cmp    %rbp,%r11
  jne    L9
L2:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

assistant: ```c
void kern_r4_u4_f(double *restrict o0, double *restrict o1, double *restrict o2, double *restrict o3, double *i0, double *i1, double *i2, double *i3, double *w, long bsize, long blocks) {
  long i;
  for (i = 0; i < blocks; i++) {
    double wr1, wi1;
    double wr2, wi2;
    double wr3, wi3;
    double pr1, pi1;
    double pr2, pi2;
    double pr3, pi3;
    double qr0, qi0;
    double qr1, qi1;
    double qr2, qi2;
    double qr3, qi3;
    wr1 = w[8 * i];
    wi1 = w[8 * i + 1];
    wr2 = w[16 * i];
    wi2 = w[16 * i + 1];
    wr3 = w[24 * i];
    wi3 = w[24 * i + 1];
    pr1 = i1[32 * i] * wr1 + i1[32 * i + 1] * wi1;
    pi1 = i1[32 * i + 1] * wr1 - i1[32 * i] * wi1;
    pr2 = i2[32 * i] * wr2 + i2[32 * i + 1] * wi2;
    pi2 = i2[32 * i + 1] * wr2 - i2[32 * i] * wi2;
    pr3 = i3[32 * i] * wr3 + i3[32 * i + 1] * wi3;
    pi3 = i3[32 * i + 1] * wr3 - i3[32 * i] * wi3;
    qr0 = i0[32 * i] + pr2;
    qr2 = i0[32 * i] - pr2;
    qi0 = i0[32 * i + 1] + pi2;
    qi2 = i0[32 * i + 1] - pi2;
    qr1 = pr1 + pr3;
    qr3 = pr1 - pr3;
    qi1 = pi1 + pi3;
    qi3 = pi1 - pi3;
    pr1 = i1[32 * i + 2] * wr1 + i1[32 * i + 3] * wi1;
    pi1 = i1[32 * i + 3] * wr1 - i1[32 * i + 2] * wi1;
    pr2 = i2[32 * i + 2] * wr2 + i2[32 * i + 3] * wi2;
    pi2 = i2[32 * i + 3] * wr2 - i2[32 * i + 2] * wi2;
    pr3 = i3[32 * i + 2] * wr3 + i3[32 * i + 3] * wi3;
    pi3 = i3[32 * i + 3] * wr3 - i3[32 * i + 2] * wi3;
    o0[8 * i] = qr0 + qr1;
    o0[8 * i + 1] = qi0 + qi1;
    o2[8 * i] = qr0 - qr1;
    o2[8 * i + 1] = qi0 - qi1;
    o1[8 * i] = qr2 + qi3;
    o1[8 * i + 1] = qi2 - qr3;
    o3[8 * i] = qr2 - qi3;
    o3[8 * i + 1] = qi2 + qr3;
    qr0 = i0[32 * i + 2] + pr2;
    qr2 = i0[32 * i + 2] - pr2;
    qi0 = i0[32 * i + 3] + pi2;
    qi2 = i0[32 * i + 3] - pi2;
    qr1 = pr1 + pr3;
    qr3 = pr1 - pr3;
    qi1 = pi1 + pi3;
    qi3 = pi1 - pi3;
    pr1 = i1[32 * i + 4] * wr1 + i1[32 * i + 5] * wi1;
    pi1 = i1[32 * i + 5] * wr1 - i1[32 * i + 4] * wi1;
    pr2 = i2[32 * i + 4] * wr2 + i2[32 * i + 5] * wi2;
    pi2 = i2[32 * i + 5] * wr2 - i2[32 * i + 4] * wi2;
    pr3 = i3[32 * i + 4] * wr3 + i3[32 * i + 5] * wi3;
    pi3 = i3[32 * i + 5] * wr3 - i3[32 * i + 4] * wi3;
    o0[8 * i + 2] = qr0 + qr1;
    o0[8 * i + 3] = qi0 + qi1;
    o2[8 * i + 2] = qr0 - qr1;
    o2[8 * i + 3] = qi0 - qi1;
    o1[8 * i + 2] = qr2 + qi3;
    o1[8 * i + 3] = qi2 - qr3;
    o3[8 * i + 2] = qr2 - qi3;
    o3[8 * i + 3] = qi2 + qr3;
    qr0 = i0[32 * i + 4] + pr2;
    qr2 = i0[32 * i + 4] - pr2;
    qi0 = i0[32 * i + 5] + pi2;
    qi2 = i0[32 * i + 5] - pi2;
    qr1 = pr1 + pr3;
    qr3 = pr1 - pr3;
    qi1 = pi1 + pi3;
    qi3 = pi1 - pi3;
    pr1 = i1[32 * i + 6] * wr1 + i1[32 * i + 7] * wi1;
    pi1 = i1[32 * i + 7] * wr1 - i1[32 * i + 6] * wi1;
    pr2 = i2[32 * i + 6] * wr2 + i2[32 * i + 7] * wi2;
    pi2 = i2[32 * i + 7] * wr2 - i2[32 * i + 6] * wi2;
    pr3 = i3[32 * i + 6] * wr3 + i3[32 * i + 7] * wi3;
    pi3 = i3[32 * i + 7] * wr3 - i3[32 * i + 6] * wi3;
    o0[8 * i + 4] = qr0 + qr1;
    o0[8 * i + 5] = qi0 + qi1;
    o2[8 * i + 4] = qr0 - qr1;
    o2[8 * i + 5] = qi0 - qi1;
    o1[8 * i + 4] = qr2 + qi3;
    o1[8 * i + 5] = qi2 - qr3;
    o3[8 * i + 4] = qr2 - qi3;
    o3[8 * i + 5] = qi2 + qr3;
    qr0 = i0[32 * i + 6] + pr2;
    qr2 = i0[32 * i + 6] - pr2;
    qi0 = i0[32 * i + 7] + pi2;
    qi2 = i0[32 * i + 7] - pi2;
    qr1 = pr1 + pr3;
    qr3 = pr1 - pr3;
    qi1 = pi1 + pi3;
    qi3 = pi1 - pi3;
    o0[8 * i + 6] = qr0 + qr1;
    o0[8 * i + 7] = qi0 + qi1;
    o2[8 * i + 6] = qr0 - qr1;
    o2[8 * i + 7] = qi0 - qi1;
    o1[8 * i + 6] = qr2 + qi3;
    o1[8 * i + 7] = qi2 - qr3;
    o3[8 * i + 6] = qr2 - qi3;
    o3[8 * i + 7] = qi2 + qr3;
  }
}
```