user: 下面的汇编指令对应的C源代码是什么:

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

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