user: Please show me the C implementation that matches the assembly code listed below:

```asm
<helper_float_5>:
  endbr64
  lea    0x20(%rdi),%rax
  lea    0x40(%rdi),%rdx
  lea    0x60(%rdi),%rcx
  vmovups (%rdi),%ymm0
  vmovups (%rax),%ymm1
  vmovups (%rdx),%ymm2
  vmovups (%rcx),%ymm3
  vpermilps $0xa0,%ymm0,%ymm8
  vpermilps $0xf5,%ymm0,%ymm9
  vxorps %ymm10,%ymm10,%ymm10
  vsubps %ymm9,%ymm10,%ymm11
  vaddsubps %ymm11,%ymm8,%ymm0
  vpermilps $0xa0,%ymm1,%ymm8
  vpermilps $0xf5,%ymm1,%ymm9
  vxorps %ymm10,%ymm10,%ymm10
  vsubps %ymm9,%ymm10,%ymm11
  vaddsubps %ymm11,%ymm8,%ymm1
  vpermilps $0xa0,%ymm2,%ymm8
  vpermilps $0xf5,%ymm2,%ymm9
  vxorps %ymm10,%ymm10,%ymm10
  vsubps %ymm9,%ymm10,%ymm11
  vaddsubps %ymm11,%ymm8,%ymm2
  vpermilps $0xa0,%ymm3,%ymm8
  vpermilps $0xf5,%ymm3,%ymm9
  vxorps %ymm10,%ymm10,%ymm10
  vsubps %ymm9,%ymm10,%ymm11
  vaddsubps %ymm11,%ymm8,%ymm3
  vpermilps $0x44,%ymm0,%ymm8
  vpermilps $0xee,%ymm0,%ymm9
  vxorps %ymm10,%ymm10,%ymm10
  vsubps %ymm9,%ymm10,%ymm11
  vblendps $0xcc,%ymm11,%ymm9,%ymm12
  vaddps %ymm8,%ymm12,%ymm0
  vpermilps $0x44,%ymm1,%ymm8
  vpermilps $0xee,%ymm1,%ymm9
  vxorps %ymm10,%ymm10,%ymm10
  vsubps %ymm9,%ymm10,%ymm11
  vblendps $0xcc,%ymm11,%ymm9,%ymm12
  vaddps %ymm8,%ymm12,%ymm1
  vpermilps $0x44,%ymm2,%ymm8
  vpermilps $0xee,%ymm2,%ymm9
  vxorps %ymm10,%ymm10,%ymm10
  vsubps %ymm9,%ymm10,%ymm11
  vblendps $0xcc,%ymm11,%ymm9,%ymm12
  vaddps %ymm8,%ymm12,%ymm2
  vpermilps $0x44,%ymm3,%ymm8
  vpermilps $0xee,%ymm3,%ymm9
  vxorps %ymm10,%ymm10,%ymm10
  vsubps %ymm9,%ymm10,%ymm11
  vblendps $0xcc,%ymm11,%ymm9,%ymm12
  vaddps %ymm8,%ymm12,%ymm3
  vxorps %ymm8,%ymm8,%ymm8
  vsubps %ymm0,%ymm8,%ymm9
  vperm2f128 $0x0,%ymm0,%ymm0,%ymm10
  vperm2f128 $0x31,%ymm9,%ymm0,%ymm11
  vaddps %ymm10,%ymm11,%ymm0
  vxorps %ymm8,%ymm8,%ymm8
  vsubps %ymm1,%ymm8,%ymm9
  vperm2f128 $0x0,%ymm1,%ymm1,%ymm10
  vperm2f128 $0x31,%ymm9,%ymm1,%ymm11
  vaddps %ymm10,%ymm11,%ymm1
  vxorps %ymm8,%ymm8,%ymm8
  vsubps %ymm2,%ymm8,%ymm9
  vperm2f128 $0x0,%ymm2,%ymm2,%ymm10
  vperm2f128 $0x31,%ymm9,%ymm2,%ymm11
  vaddps %ymm10,%ymm11,%ymm2
  vxorps %ymm8,%ymm8,%ymm8
  vsubps %ymm3,%ymm8,%ymm9
  vperm2f128 $0x0,%ymm3,%ymm3,%ymm10
  vperm2f128 $0x31,%ymm9,%ymm3,%ymm11
  vaddps %ymm10,%ymm11,%ymm3
  vaddps %ymm1,%ymm0,%ymm8
  vsubps %ymm1,%ymm0,%ymm9
  vaddps %ymm3,%ymm2,%ymm10
  vsubps %ymm3,%ymm2,%ymm11
  vaddps %ymm10,%ymm8,%ymm0
  vsubps %ymm10,%ymm8,%ymm2
  vaddps %ymm11,%ymm9,%ymm1
  vsubps %ymm11,%ymm9,%ymm3
  vmovups %ymm0,(%rdi)
  vmovups %ymm1,(%rax)
  vmovups %ymm2,(%rdx)
  vmovups %ymm3,(%rcx)
  ret
```

assistant: ```c
void helper_float_5(float *buf) {
  for (int j = 0; j < 32; j += 32) {
    for (int k = 0; k < 8; k += 8) {
      __asm__ volatile("vmovups (%0), %%ymm0\n"
                       "vmovups (%1), %%ymm1\n"
                       "vmovups (%2), %%ymm2\n"
                       "vmovups (%3), %%ymm3\n"
                       "vpermilps $160, %%ymm0, %%ymm8\n"
                       "vpermilps $245, %%ymm0, %%ymm9\n"
                       "vxorps %%ymm10, %%ymm10, %%ymm10\n"
                       "vsubps %%ymm9, %%ymm10, %%ymm11\n"
                       "vaddsubps %%ymm11, %%ymm8, %%ymm0\n"
                       "vpermilps $160, %%ymm1, %%ymm8\n"
                       "vpermilps $245, %%ymm1, %%ymm9\n"
                       "vxorps %%ymm10, %%ymm10, %%ymm10\n"
                       "vsubps %%ymm9, %%ymm10, %%ymm11\n"
                       "vaddsubps %%ymm11, %%ymm8, %%ymm1\n"
                       "vpermilps $160, %%ymm2, %%ymm8\n"
                       "vpermilps $245, %%ymm2, %%ymm9\n"
                       "vxorps %%ymm10, %%ymm10, %%ymm10\n"
                       "vsubps %%ymm9, %%ymm10, %%ymm11\n"
                       "vaddsubps %%ymm11, %%ymm8, %%ymm2\n"
                       "vpermilps $160, %%ymm3, %%ymm8\n"
                       "vpermilps $245, %%ymm3, %%ymm9\n"
                       "vxorps %%ymm10, %%ymm10, %%ymm10\n"
                       "vsubps %%ymm9, %%ymm10, %%ymm11\n"
                       "vaddsubps %%ymm11, %%ymm8, %%ymm3\n"
                       "vpermilps $68, %%ymm0, %%ymm8\n"
                       "vpermilps $238, %%ymm0, %%ymm9\n"
                       "vxorps %%ymm10, %%ymm10, %%ymm10\n"
                       "vsubps %%ymm9, %%ymm10, %%ymm11\n"
                       "vblendps $204, %%ymm11, %%ymm9, %%ymm12\n"
                       "vaddps %%ymm8, %%ymm12, %%ymm0\n"
                       "vpermilps $68, %%ymm1, %%ymm8\n"
                       "vpermilps $238, %%ymm1, %%ymm9\n"
                       "vxorps %%ymm10, %%ymm10, %%ymm10\n"
                       "vsubps %%ymm9, %%ymm10, %%ymm11\n"
                       "vblendps $204, %%ymm11, %%ymm9, %%ymm12\n"
                       "vaddps %%ymm8, %%ymm12, %%ymm1\n"
                       "vpermilps $68, %%ymm2, %%ymm8\n"
                       "vpermilps $238, %%ymm2, %%ymm9\n"
                       "vxorps %%ymm10, %%ymm10, %%ymm10\n"
                       "vsubps %%ymm9, %%ymm10, %%ymm11\n"
                       "vblendps $204, %%ymm11, %%ymm9, %%ymm12\n"
                       "vaddps %%ymm8, %%ymm12, %%ymm2\n"
                       "vpermilps $68, %%ymm3, %%ymm8\n"
                       "vpermilps $238, %%ymm3, %%ymm9\n"
                       "vxorps %%ymm10, %%ymm10, %%ymm10\n"
                       "vsubps %%ymm9, %%ymm10, %%ymm11\n"
                       "vblendps $204, %%ymm11, %%ymm9, %%ymm12\n"
                       "vaddps %%ymm8, %%ymm12, %%ymm3\n"
                       "vxorps %%ymm8, %%ymm8, %%ymm8\n"
                       "vsubps %%ymm0, %%ymm8, %%ymm9\n"
                       "vperm2f128 $0, %%ymm0, %%ymm0, %%ymm10\n"
                       "vperm2f128 $49, %%ymm9, %%ymm0, %%ymm11\n"
                       "vaddps %%ymm10, %%ymm11, %%ymm0\n"
                       "vxorps %%ymm8, %%ymm8, %%ymm8\n"
                       "vsubps %%ymm1, %%ymm8, %%ymm9\n"
                       "vperm2f128 $0, %%ymm1, %%ymm1, %%ymm10\n"
                       "vperm2f128 $49, %%ymm9, %%ymm1, %%ymm11\n"
                       "vaddps %%ymm10, %%ymm11, %%ymm1\n"
                       "vxorps %%ymm8, %%ymm8, %%ymm8\n"
                       "vsubps %%ymm2, %%ymm8, %%ymm9\n"
                       "vperm2f128 $0, %%ymm2, %%ymm2, %%ymm10\n"
                       "vperm2f128 $49, %%ymm9, %%ymm2, %%ymm11\n"
                       "vaddps %%ymm10, %%ymm11, %%ymm2\n"
                       "vxorps %%ymm8, %%ymm8, %%ymm8\n"
                       "vsubps %%ymm3, %%ymm8, %%ymm9\n"
                       "vperm2f128 $0, %%ymm3, %%ymm3, %%ymm10\n"
                       "vperm2f128 $49, %%ymm9, %%ymm3, %%ymm11\n"
                       "vaddps %%ymm10, %%ymm11, %%ymm3\n"
                       "vaddps %%ymm1, %%ymm0, %%ymm8\n"
                       "vsubps %%ymm1, %%ymm0, %%ymm9\n"
                       "vaddps %%ymm3, %%ymm2, %%ymm10\n"
                       "vsubps %%ymm3, %%ymm2, %%ymm11\n"
                       "vaddps %%ymm10, %%ymm8, %%ymm0\n"
                       "vsubps %%ymm10, %%ymm8, %%ymm2\n"
                       "vaddps %%ymm11, %%ymm9, %%ymm1\n"
                       "vsubps %%ymm11, %%ymm9, %%ymm3\n"
                       "vmovups %%ymm0, (%0)\n"
                       "vmovups %%ymm1, (%1)\n"
                       "vmovups %%ymm2, (%2)\n"
                       "vmovups %%ymm3, (%3)\n" ::"r"(buf + j + k + 0),
                       "r"(buf + j + k + 8), "r"(buf + j + k + 16), "r"(buf + j + k + 24)
                       : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory");
    }
  }
}
```