user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<kern_r4_fma_u4_b>:
  endbr64
  push   %r13
  mov    %rdx,%r10
  mov    %rcx,%r11
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x120,%rsp
  mov    0x170(%rsp),%r12
  mov    0x148(%rsp),%rcx
  mov    0x150(%rsp),%rdx
  mov    0x158(%rsp),%rbp
  mov    0x160(%rsp),%r13
  test   %r12,%r12
  jle    L3
  cmp    $0x1,%r12
  je     L9
  lea    -0x1(%r12),%rbx
  shl    $0x6,%r12
  xor    %eax,%eax
  sub    $0x40,%r12
  nopl   0x0(%rax)
L12:
  movupd 0x0(%rbp,%rax,1),%xmm2
  movupd 0x20(%r9,%rax,4),%xmm7
  movupd 0x30(%r9,%rax,4),%xmm14
  movupd (%r9,%rax,4),%xmm15
  unpcklpd %xmm2,%xmm2
  movupd 0x0(%rbp,%rax,2),%xmm0
  movupd 0x10(%r9,%rax,4),%xmm8
  mulpd  %xmm2,%xmm7
  movapd %xmm2,%xmm9
  movupd 0x30(%r9,%rax,4),%xmm13
  movapd %xmm15,%xmm6
  mulpd  %xmm2,%xmm14
  shufpd $0x1,%xmm15,%xmm6
  movaps %xmm6,-0x78(%rsp)
  unpcklpd %xmm0,%xmm0
  mulpd  %xmm15,%xmm9
  shufpd $0x1,%xmm13,%xmm13
  movaps %xmm13,-0x38(%rsp)
  movapd %xmm0,%xmm12
  mulpd  %xmm2,%xmm8
  movupd 0x0(%rbp,%rax,2),%xmm1
  movupd 0x10(%rcx,%rax,4),%xmm11
  movapd %xmm0,%xmm10
  movupd 0x0(%r13,%rax,1),%xmm3
  movupd 0x0(%rbp,%rax,1),%xmm4
  movaps %xmm7,0x8(%rsp)
  mulpd  %xmm11,%xmm10
  movupd 0x20(%r9,%rax,4),%xmm7
  unpckhpd %xmm1,%xmm1
  movaps %xmm14,-0x8(%rsp)
  unpcklpd %xmm3,%xmm3
  movupd 0x10(%r9,%rax,4),%xmm14
  shufpd $0x1,%xmm11,%xmm11
  shufpd $0x1,%xmm7,%xmm7
  movaps %xmm9,0x28(%rsp)
  movapd %xmm6,%xmm9
  unpckhpd %xmm4,%xmm4
  shufpd $0x1,%xmm14,%xmm14
  movaps %xmm14,-0x18(%rsp)
  movapd %xmm14,%xmm6
  movapd %xmm7,%xmm14
  mulpd  %xmm2,%xmm6
  movaps %xmm8,0x18(%rsp)
  movupd 0x20(%rcx,%rax,4),%xmm8
  movupd 0x0(%r13,%rax,1),%xmm5
  mulpd  %xmm2,%xmm9
  movaps %xmm7,-0x28(%rsp)
  movapd %xmm0,%xmm7
  mulpd  %xmm2,%xmm14
  unpckhpd %xmm5,%xmm5
  mulpd  %xmm13,%xmm2
  movupd (%rcx,%rax,4),%xmm13
  mulpd  %xmm8,%xmm7
  shufpd $0x1,%xmm8,%xmm8
  mulpd  %xmm13,%xmm12
  shufpd $0x1,%xmm13,%xmm13
  movaps %xmm14,0x58(%rsp)
  movaps %xmm2,0x68(%rsp)
  movupd 0x30(%rcx,%rax,4),%xmm2
  mulpd  %xmm2,%xmm0
  movapd %xmm12,%xmm14
  addpd  %xmm13,%xmm12
  shufpd $0x1,%xmm2,%xmm2
  subpd  %xmm13,%xmm14
  movsd  %xmm14,%xmm12
  mulpd  %xmm1,%xmm12
  movaps %xmm12,0x48(%rsp)
  movapd %xmm10,%xmm12
  addpd  %xmm11,%xmm10
  subpd  %xmm11,%xmm12
  movsd  %xmm12,%xmm10
  mulpd  %xmm1,%xmm10
  movaps %xmm10,-0x68(%rsp)
  movapd %xmm7,%xmm10
  addpd  %xmm8,%xmm7
  subpd  %xmm8,%xmm10
  movsd  %xmm10,%xmm7
  movapd %xmm0,%xmm10
  addpd  %xmm2,%xmm0
  subpd  %xmm2,%xmm10
  movapd %xmm7,%xmm11
  mulpd  %xmm1,%xmm11
  movsd  %xmm10,%xmm0
  mulpd  %xmm1,%xmm0
  movupd (%rdx,%rax,4),%xmm1
  mulpd  %xmm3,%xmm1
  movaps %xmm11,-0x58(%rsp)
  movaps %xmm0,-0x48(%rsp)
  movapd %xmm1,%xmm13
  movupd 0x10(%rdx,%rax,4),%xmm1
  movupd (%rdx,%rax,4),%xmm2
  movupd 0x20(%rdx,%rax,4),%xmm0
  movupd 0x30(%rdx,%rax,4),%xmm11
  mulpd  %xmm3,%xmm1
  movupd 0x30(%rdx,%rax,4),%xmm12
  shufpd $0x1,%xmm2,%xmm2
  movapd %xmm2,%xmm10
  shufpd $0x1,%xmm0,%xmm0
  mulpd  %xmm3,%xmm11
  movapd %xmm0,%xmm7
  shufpd $0x1,%xmm12,%xmm12
  mulpd  %xmm3,%xmm10
  mulpd  %xmm3,%xmm7
  movaps %xmm1,0x38(%rsp)
  movupd 0x20(%rdx,%rax,4),%xmm1
  mulpd  %xmm3,%xmm1
  movapd %xmm1,%xmm14
  movupd 0x10(%rdx,%rax,4),%xmm1
  shufpd $0x1,%xmm1,%xmm1
  movapd %xmm1,%xmm8
  mulpd  %xmm3,%xmm8
  mulpd  %xmm12,%xmm3
  movaps %xmm3,0x78(%rsp)
  movapd %xmm15,%xmm3
  addpd  %xmm9,%xmm3
  subpd  %xmm15,%xmm9
  movupd (%rdx,%rax,4),%xmm15
  addpd  %xmm10,%xmm15
  movsd  %xmm3,%xmm9
  movupd (%rdx,%rax,4),%xmm3
  subpd  %xmm3,%xmm10
  movupd 0x20(%r9,%rax,4),%xmm3
  movsd  %xmm15,%xmm10
  movupd 0x10(%r9,%rax,4),%xmm15
  mulpd  %xmm5,%xmm10
  addpd  %xmm6,%xmm15
  subpd  %xmm10,%xmm9
  movapd %xmm9,%xmm10
  movapd %xmm15,%xmm9
  movupd 0x10(%r9,%rax,4),%xmm15
  mulpd  %xmm4,%xmm10
  subpd  %xmm15,%xmm6
  movupd 0x10(%rdx,%rax,4),%xmm15
  addpd  %xmm8,%xmm15
  movsd  %xmm9,%xmm6
  movapd %xmm15,%xmm9
  movupd 0x10(%rdx,%rax,4),%xmm15
  subpd  %xmm15,%xmm8
  movsd  %xmm9,%xmm8
  movapd 0x78(%rsp),%xmm9
  mulpd  %xmm5,%xmm8
  subpd  %xmm8,%xmm6
  movapd %xmm6,%xmm15
  movapd 0x58(%rsp),%xmm6
  mulpd  %xmm4,%xmm15
  addpd  %xmm6,%xmm3
  movapd %xmm3,%xmm8
  movupd 0x20(%r9,%rax,4),%xmm3
  subpd  %xmm3,%xmm6
  movupd 0x20(%rdx,%rax,4),%xmm3
  addpd  %xmm7,%xmm3
  movsd  %xmm8,%xmm6
  movapd %xmm3,%xmm8
  movupd 0x20(%rdx,%rax,4),%xmm3
  subpd  %xmm3,%xmm7
  movupd 0x30(%r9,%rax,4),%xmm3
  movsd  %xmm8,%xmm7
  mulpd  %xmm5,%xmm7
  subpd  %xmm7,%xmm6
  movapd 0x68(%rsp),%xmm7
  addpd  %xmm7,%xmm3
  mulpd  %xmm4,%xmm6
  movapd %xmm3,%xmm8
  movupd 0x30(%r9,%rax,4),%xmm3
  subpd  %xmm3,%xmm7
  movupd 0x30(%rdx,%rax,4),%xmm3
  addpd  %xmm9,%xmm3
  movsd  %xmm8,%xmm7
  movapd %xmm3,%xmm8
  movupd 0x30(%rdx,%rax,4),%xmm3
  subpd  %xmm3,%xmm9
  movapd %xmm7,%xmm3
  movapd %xmm13,%xmm7
  subpd  %xmm2,%xmm7
  addpd  %xmm13,%xmm2
  shufpd $0x2,%xmm9,%xmm8
  movapd 0x28(%rsp),%xmm9
  mulpd  %xmm5,%xmm8
  movsd  %xmm7,%xmm2
  mulpd  %xmm5,%xmm2
  movapd %xmm9,%xmm7
  subpd  %xmm8,%xmm3
  movapd -0x78(%rsp),%xmm8
  subpd  %xmm8,%xmm7
  addpd  %xmm9,%xmm8
  movapd -0x18(%rsp),%xmm9
  mulpd  %xmm4,%xmm3
  movsd  %xmm7,%xmm8
  addpd  %xmm8,%xmm2
  movapd 0x18(%rsp),%xmm8
  mulpd  %xmm4,%xmm2
  movaps %xmm2,-0x78(%rsp)
  movapd 0x38(%rsp),%xmm2
  movapd %xmm2,%xmm13
  subpd  %xmm1,%xmm13
  addpd  %xmm2,%xmm1
  movsd  %xmm13,%xmm1
  movapd %xmm1,%xmm2
  movapd %xmm8,%xmm1
  subpd  %xmm9,%xmm1
  addpd  %xmm8,%xmm9
  mulpd  %xmm5,%xmm2
  movapd %xmm9,%xmm7
  movapd 0x8(%rsp),%xmm9
  movupd 0x20(%r8,%rax,4),%xmm8
  movsd  %xmm1,%xmm7
  movapd %xmm14,%xmm1
  subpd  -0x58(%rsp),%xmm8
  subpd  %xmm0,%xmm1
  addpd  %xmm14,%xmm0
  movapd -0x8(%rsp),%xmm14
  addpd  %xmm7,%xmm2
  movapd %xmm1,%xmm7
  movapd %xmm0,%xmm1
  movapd %xmm9,%xmm0
  mulpd  %xmm4,%xmm2
  movsd  %xmm7,%xmm1
  movapd -0x28(%rsp),%xmm7
  mulpd  %xmm5,%xmm1
  subpd  %xmm7,%xmm0
  addpd  %xmm9,%xmm7
  movupd 0x10(%r8,%rax,4),%xmm9
  subpd  -0x68(%rsp),%xmm9
  movsd  %xmm0,%xmm7
  movapd %xmm12,%xmm0
  addpd  %xmm7,%xmm1
  movapd %xmm11,%xmm7
  addpd  %xmm11,%xmm0
  subpd  %xmm12,%xmm7
  movapd %xmm8,%xmm12
  addpd  %xmm6,%xmm8
  subpd  %xmm6,%xmm12
  movupd (%r8,%rax,4),%xmm6
  movapd %xmm9,%xmm13
  addpd  %xmm15,%xmm9
  subpd  %xmm15,%xmm13
  movapd -0x78(%rsp),%xmm15
  mulpd  %xmm4,%xmm1
  movsd  %xmm7,%xmm0
  movapd %xmm14,%xmm7
  mulpd  %xmm5,%xmm0
  movapd -0x38(%rsp),%xmm5
  subpd  %xmm5,%xmm7
  addpd  %xmm14,%xmm5
  movsd  %xmm7,%xmm5
  movupd 0x30(%r8,%rax,4),%xmm7
  subpd  -0x48(%rsp),%xmm7
  addpd  %xmm5,%xmm0
  movapd 0x48(%rsp),%xmm5
  addpd  %xmm5,%xmm6
  movapd %xmm7,%xmm11
  addpd  %xmm3,%xmm7
  mulpd  %xmm4,%xmm0
  movupd (%r8,%rax,4),%xmm4
  subpd  %xmm3,%xmm11
  movupd 0x30(%r8,%rax,4),%xmm3
  addpd  -0x48(%rsp),%xmm3
  addpd  %xmm6,%xmm15
  subpd  %xmm5,%xmm4
  movupd 0x10(%r8,%rax,4),%xmm5
  addpd  -0x68(%rsp),%xmm5
  subpd  -0x78(%rsp),%xmm6
  movups %xmm15,(%rdi,%rax,1)
  movapd %xmm2,%xmm15
  movapd %xmm4,%xmm14
  addpd  %xmm5,%xmm15
  subpd  %xmm10,%xmm14
  movups %xmm6,(%r10,%rax,1)
  addpd  %xmm4,%xmm10
  movupd 0x20(%r8,%rax,4),%xmm4
  subpd  %xmm2,%xmm5
  movapd %xmm8,%xmm2
  addpd  -0x58(%rsp),%xmm4
  movsd  %xmm12,%xmm2
  movsd  %xmm8,%xmm12
  movups %xmm15,0x10(%rdi,%rax,1)
  movapd %xmm1,%xmm15
  movapd %xmm10,%xmm6
  movups %xmm5,0x10(%r10,%rax,1)
  addpd  %xmm4,%xmm15
  movsd  %xmm14,%xmm6
  subpd  %xmm1,%xmm4
  movups %xmm2,0x20(%rsi,%rax,1)
  movups %xmm6,(%rsi,%rax,1)
  movapd %xmm9,%xmm6
  movsd  %xmm10,%xmm14
  movsd  %xmm13,%xmm6
  movsd  %xmm9,%xmm13
  movups %xmm15,0x20(%rdi,%rax,1)
  movapd %xmm0,%xmm15
  addpd  %xmm3,%xmm15
  subpd  %xmm0,%xmm3
  movups %xmm6,0x10(%rsi,%rax,1)
  movapd %xmm7,%xmm6
  movsd  %xmm11,%xmm6
  movsd  %xmm7,%xmm11
  movups %xmm4,0x20(%r10,%rax,1)
  movups %xmm15,0x30(%rdi,%rax,1)
  movups %xmm3,0x30(%r10,%rax,1)
  movups %xmm6,0x30(%rsi,%rax,1)
  movups %xmm14,(%r11,%rax,1)
  movups %xmm13,0x10(%r11,%rax,1)
  movups %xmm12,0x20(%r11,%rax,1)
  movups %xmm11,0x30(%r11,%rax,1)
  add    $0x40,%rax
  cmp    %r12,%rax
  jne    L12
L30:
  mov    %rbx,%rax
  shl    $0x6,%rax
  lea    0x0(%rbp,%rax,1),%r12
  movupd 0x0(%r13,%rax,1),%xmm2
  movupd (%r12),%xmm4
  movupd (%r12),%xmm7
  movupd (%r12,%rax,1),%xmm1
  mov    %rbx,%r12
  shl    $0x8,%rbx
  movapd %xmm2,%xmm0
  add    %rbx,%r9
  unpcklpd %xmm4,%xmm4
  add    %rbx,%rcx
  shl    $0x7,%r12
  movupd (%r9),%xmm10
  movapd %xmm4,%xmm5
  unpcklpd %xmm1,%xmm1
  add    %rbx,%rdx
  movupd 0x20(%r9),%xmm6
  movupd 0x10(%r9),%xmm9
  unpcklpd %xmm2,%xmm0
  unpckhpd %xmm2,%xmm2
  movapd %xmm10,%xmm11
  movupd 0x30(%r9),%xmm15
  unpckhpd %xmm7,%xmm7
  add    %rbx,%r8
  mulpd  %xmm6,%xmm5
  movapd %xmm9,%xmm12
  movapd %xmm9,%xmm14
  movupd 0x0(%rbp,%r12,1),%xmm3
  mulpd  %xmm4,%xmm11
  shufpd $0x1,%xmm9,%xmm14
  movaps %xmm14,0x68(%rsp)
  mulpd  %xmm4,%xmm12
  unpckhpd %xmm3,%xmm3
  movaps %xmm5,0xd8(%rsp)
  movapd %xmm4,%xmm5
  movaps %xmm11,0xf8(%rsp)
  mulpd  %xmm15,%xmm5
  movapd %xmm6,%xmm11
  movapd %xmm10,%xmm6
  movapd %xmm11,%xmm13
  shufpd $0x1,%xmm10,%xmm6
  movaps %xmm12,0xe8(%rsp)
  shufpd $0x1,%xmm11,%xmm13
  movapd %xmm13,%xmm12
  movaps %xmm13,0x58(%rsp)
  movapd %xmm1,%xmm13
  mulpd  %xmm4,%xmm12
  movaps %xmm6,0x78(%rsp)
  movaps %xmm11,0x108(%rsp)
  movapd %xmm14,%xmm11
  movupd (%rcx),%xmm14
  mulpd  %xmm4,%xmm11
  movaps %xmm5,0x28(%rsp)
  movapd %xmm15,%xmm5
  mulpd  %xmm14,%xmm13
  shufpd $0x1,%xmm15,%xmm5
  movapd %xmm5,%xmm8
  movapd %xmm6,%xmm5
  movapd %xmm4,%xmm6
  movaps %xmm8,0x48(%rsp)
  shufpd $0x1,%xmm14,%xmm14
  mulpd  %xmm8,%xmm6
  movaps %xmm12,-0x38(%rsp)
  movupd 0x10(%rcx),%xmm12
  mulpd  %xmm4,%xmm5
  movupd 0x30(%rcx),%xmm4
  movaps %xmm11,-0x48(%rsp)
  movapd %xmm1,%xmm11
  mulpd  %xmm12,%xmm11
  movapd %xmm13,%xmm8
  addpd  %xmm14,%xmm13
  shufpd $0x1,%xmm12,%xmm12
  subpd  %xmm14,%xmm8
  movapd %xmm0,%xmm14
  movaps %xmm6,-0x8(%rsp)
  movupd 0x20(%rcx),%xmm6
  movaps %xmm5,-0x58(%rsp)
  movapd %xmm1,%xmm5
  mulpd  %xmm6,%xmm5
  movsd  %xmm8,%xmm13
  shufpd $0x1,%xmm6,%xmm6
  mulpd  %xmm4,%xmm1
  movapd %xmm11,%xmm8
  addpd  %xmm12,%xmm11
  shufpd $0x1,%xmm4,%xmm4
  subpd  %xmm12,%xmm8
  mulpd  %xmm3,%xmm13
  movupd 0x10(%rdx),%xmm12
  movsd  %xmm8,%xmm11
  movapd %xmm5,%xmm8
  addpd  %xmm6,%xmm5
  subpd  %xmm6,%xmm8
  mulpd  %xmm3,%xmm11
  movaps %xmm13,-0x78(%rsp)
  movupd (%rdx),%xmm13
  mulpd  %xmm13,%xmm14
  movsd  %xmm8,%xmm5
  movapd %xmm1,%xmm8
  subpd  %xmm4,%xmm8
  addpd  %xmm4,%xmm1
  movapd %xmm5,%xmm6
  mulpd  %xmm3,%xmm6
  movaps %xmm11,-0x28(%rsp)
  movsd  %xmm8,%xmm1
  movapd %xmm13,%xmm8
  mulpd  %xmm3,%xmm1
  movapd %xmm0,%xmm3
  shufpd $0x1,%xmm13,%xmm8
  mulpd  %xmm12,%xmm3
  movaps %xmm6,-0x68(%rsp)
  movaps %xmm1,-0x18(%rsp)
  movupd 0x20(%rdx),%xmm11
  movapd %xmm0,%xmm1
  movupd 0x30(%rdx),%xmm6
  movaps %xmm3,0x88(%rsp)
  movapd %xmm12,%xmm3
  mulpd  %xmm11,%xmm1
  shufpd $0x1,%xmm12,%xmm3
  movaps %xmm14,0x18(%rsp)
  movapd %xmm0,%xmm14
  mulpd  %xmm6,%xmm14
  movaps %xmm3,0xc8(%rsp)
  movaps %xmm1,0x98(%rsp)
  movapd %xmm11,%xmm1
  movaps %xmm14,0xa8(%rsp)
  shufpd $0x1,%xmm11,%xmm1
  movapd %xmm1,%xmm4
  movapd %xmm6,%xmm1
  shufpd $0x1,%xmm6,%xmm1
  movaps %xmm1,0x8(%rsp)
  movapd %xmm3,%xmm1
  movapd %xmm8,%xmm14
  mulpd  %xmm0,%xmm1
  movapd %xmm0,%xmm8
  movaps %xmm4,0xb8(%rsp)
  mulpd  %xmm14,%xmm8
  movapd %xmm1,%xmm3
  movapd %xmm4,%xmm1
  movapd -0x58(%rsp),%xmm4
  mulpd  %xmm0,%xmm1
  movapd %xmm8,%xmm5
  mulpd  0x8(%rsp),%xmm0
  subpd  %xmm13,%xmm5
  movaps %xmm0,0x38(%rsp)
  movapd %xmm4,%xmm0
  subpd  %xmm10,%xmm4
  addpd  %xmm10,%xmm0
  movapd %xmm8,%xmm10
  movapd %xmm1,%xmm8
  addpd  %xmm13,%xmm10
  addpd  %xmm11,%xmm8
  subpd  %xmm11,%xmm1
  movsd  %xmm0,%xmm4
  movsd  %xmm10,%xmm5
  mulpd  %xmm2,%xmm5
  movsd  %xmm8,%xmm1
  mulpd  %xmm2,%xmm1
  subpd  %xmm5,%xmm4
  movapd %xmm4,%xmm10
  movapd -0x48(%rsp),%xmm4
  mulpd  %xmm7,%xmm10
  movapd %xmm4,%xmm5
  subpd  %xmm9,%xmm4
  addpd  %xmm9,%xmm5
  movapd %xmm3,%xmm9
  subpd  %xmm12,%xmm3
  addpd  %xmm12,%xmm9
  movapd 0x18(%rsp),%xmm12
  movsd  %xmm5,%xmm4
  movapd -0x38(%rsp),%xmm5
  movaps %xmm10,-0x58(%rsp)
  movsd  %xmm9,%xmm3
  mulpd  %xmm2,%xmm3
  movapd %xmm5,%xmm0
  subpd  %xmm3,%xmm4
  movapd %xmm4,%xmm9
  movapd 0x108(%rsp),%xmm4
  mulpd  %xmm7,%xmm9
  subpd  %xmm4,%xmm5
  addpd  %xmm4,%xmm0
  movapd %xmm5,%xmm4
  movapd 0x38(%rsp),%xmm5
  movsd  %xmm0,%xmm4
  movapd -0x8(%rsp),%xmm0
  movaps %xmm9,-0x48(%rsp)
  subpd  %xmm1,%xmm4
  movapd %xmm0,%xmm11
  subpd  %xmm15,%xmm0
  addpd  %xmm15,%xmm11
  movapd %xmm4,%xmm8
  movapd 0x58(%rsp),%xmm4
  mulpd  %xmm7,%xmm8
  movapd %xmm0,%xmm3
  movapd %xmm5,%xmm0
  addpd  %xmm6,%xmm0
  movsd  %xmm11,%xmm3
  movapd 0xf8(%rsp),%xmm11
  movapd %xmm11,%xmm10
  movapd %xmm0,%xmm1
  movapd %xmm5,%xmm0
  subpd  %xmm6,%xmm0
  movaps %xmm8,-0x38(%rsp)
  movapd 0x88(%rsp),%xmm6
  movsd  %xmm1,%xmm0
  movapd 0x68(%rsp),%xmm1
  mulpd  %xmm2,%xmm0
  subpd  %xmm0,%xmm3
  movapd %xmm12,%xmm0
  addpd  %xmm14,%xmm12
  subpd  %xmm14,%xmm0
  movapd %xmm3,%xmm15
  movapd 0x78(%rsp),%xmm3
  mulpd  %xmm7,%xmm15
  shufpd $0x2,%xmm12,%xmm0
  movapd 0xe8(%rsp),%xmm12
  mulpd  %xmm2,%xmm0
  subpd  %xmm3,%xmm10
  addpd  %xmm11,%xmm3
  movsd  %xmm10,%xmm3
  movapd 0xd8(%rsp),%xmm10
  addpd  %xmm3,%xmm0
  movapd 0xc8(%rsp),%xmm3
  mulpd  %xmm7,%xmm0
  movaps %xmm0,-0x8(%rsp)
  movapd %xmm6,%xmm0
  addpd  %xmm3,%xmm6
  subpd  %xmm3,%xmm0
  movapd %xmm6,%xmm3
  movapd 0x98(%rsp),%xmm6
  movsd  %xmm0,%xmm3
  movapd %xmm12,%xmm0
  mulpd  %xmm2,%xmm3
  subpd  %xmm1,%xmm0
  addpd  %xmm12,%xmm1
  movsd  %xmm0,%xmm1
  movapd %xmm6,%xmm0
  addpd  %xmm1,%xmm3
  movapd 0xb8(%rsp),%xmm1
  addpd  %xmm1,%xmm6
  subpd  %xmm1,%xmm0
  mulpd  %xmm7,%xmm3
  movapd %xmm6,%xmm1
  movapd 0xa8(%rsp),%xmm6
  movapd 0x48(%rsp),%xmm5
  movsd  %xmm0,%xmm1
  movapd %xmm10,%xmm0
  subpd  %xmm4,%xmm0
  mulpd  %xmm2,%xmm1
  addpd  %xmm10,%xmm4
  movsd  %xmm0,%xmm4
  movapd 0x8(%rsp),%xmm0
  addpd  %xmm4,%xmm1
  movapd %xmm6,%xmm4
  addpd  %xmm0,%xmm6
  subpd  %xmm0,%xmm4
  mulpd  %xmm7,%xmm1
  movapd %xmm6,%xmm0
  movupd (%r8),%xmm6
  movsd  %xmm4,%xmm0
  mulpd  %xmm2,%xmm0
  movapd 0x28(%rsp),%xmm2
  movapd %xmm6,%xmm10
  addpd  -0x78(%rsp),%xmm6
  subpd  -0x78(%rsp),%xmm10
  movapd %xmm2,%xmm4
  addpd  %xmm5,%xmm2
  subpd  %xmm5,%xmm4
  movupd 0x10(%r8),%xmm5
  movapd %xmm10,%xmm13
  subpd  -0x58(%rsp),%xmm13
  addpd  -0x58(%rsp),%xmm10
  movapd %xmm5,%xmm9
  addpd  -0x28(%rsp),%xmm5
  subpd  -0x28(%rsp),%xmm9
  movsd  %xmm4,%xmm2
  movupd 0x20(%r8),%xmm4
  addpd  %xmm2,%xmm0
  movupd 0x30(%r8),%xmm2
  movapd %xmm13,%xmm14
  movapd %xmm4,%xmm8
  addpd  -0x68(%rsp),%xmm4
  movapd %xmm9,%xmm13
  subpd  -0x68(%rsp),%xmm8
  addpd  -0x48(%rsp),%xmm9
  mulpd  %xmm7,%xmm0
  movapd %xmm2,%xmm7
  subpd  -0x18(%rsp),%xmm7
  addpd  -0x18(%rsp),%xmm2
  subpd  -0x48(%rsp),%xmm13
  movapd %xmm8,%xmm12
  addpd  -0x38(%rsp),%xmm8
  subpd  -0x38(%rsp),%xmm12
  movapd %xmm7,%xmm11
  addpd  %xmm15,%xmm7
  subpd  %xmm15,%xmm11
  movapd -0x8(%rsp),%xmm15
  addpd  %xmm6,%xmm15
  subpd  -0x8(%rsp),%xmm6
  movups %xmm15,(%rdi,%rax,1)
  movapd %xmm5,%xmm15
  subpd  %xmm3,%xmm5
  addpd  %xmm3,%xmm15
  movups %xmm6,(%r10,%rax,1)
  movups %xmm5,0x10(%r10,%rax,1)
  movups %xmm15,0x10(%rdi,%rax,1)
  movapd %xmm4,%xmm15
  subpd  %xmm1,%xmm4
  addpd  %xmm1,%xmm15
  movups %xmm4,0x20(%r10,%rax,1)
  movups %xmm15,0x20(%rdi,%rax,1)
  movapd %xmm2,%xmm15
  subpd  %xmm0,%xmm2
  addpd  %xmm0,%xmm15
  movups %xmm2,0x30(%r10,%rax,1)
  movapd %xmm10,%xmm2
  movsd  %xmm14,%xmm2
  movups %xmm15,0x30(%rdi,%rax,1)
  movsd  %xmm10,%xmm14
  movups %xmm2,(%rsi,%rax,1)
  movapd %xmm9,%xmm2
  movsd  %xmm13,%xmm2
  movsd  %xmm9,%xmm13
  movups %xmm14,(%r11,%rax,1)
  movups %xmm2,0x10(%rsi,%rax,1)
  movapd %xmm8,%xmm2
  movsd  %xmm12,%xmm2
  movsd  %xmm8,%xmm12
  movups %xmm13,0x10(%r11,%rax,1)
  movups %xmm2,0x20(%rsi,%rax,1)
  movapd %xmm7,%xmm2
  movsd  %xmm11,%xmm2
  movsd  %xmm7,%xmm11
  movups %xmm12,0x20(%r11,%rax,1)
  movups %xmm2,0x30(%rsi,%rax,1)
  movups %xmm11,0x30(%r11,%rax,1)
L3:
  add    $0x120,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L9:
  xor    %ebx,%ebx
  jmp    L30
```

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;
  }
}
```