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

```asm
<double_reduc>:
  endbr64
  sub    $0x240,%rsp
  movups (%rdi),%xmm4
  movups 0x10(%rdi),%xmm3
  xor    %edx,%edx
  movups 0xd0(%rdi),%xmm7
  movups 0x20(%rdi),%xmm2
  pxor   %xmm0,%xmm0
  movss  %xmm4,0x1c8(%rsp)
  movups 0x30(%rdi),%xmm1
  movups 0x40(%rdi),%xmm6
  movaps %xmm7,-0x78(%rsp)
  movaps %xmm4,%xmm7
  movups 0x50(%rdi),%xmm15
  movups 0x60(%rdi),%xmm14
  shufps $0x55,%xmm4,%xmm7
  movaps %xmm7,-0x38(%rsp)
  movaps %xmm4,%xmm7
  movups 0x70(%rdi),%xmm13
  unpckhps %xmm4,%xmm7
  shufps $0xff,%xmm4,%xmm4
  movaps %xmm4,-0x8(%rsp)
  movaps %xmm3,%xmm4
  movaps %xmm7,-0x18(%rsp)
  movaps %xmm3,%xmm7
  shufps $0x55,%xmm3,%xmm4
  movups 0x80(%rdi),%xmm12
  unpckhps %xmm3,%xmm7
  movups 0x90(%rdi),%xmm11
  movss  %xmm3,0x170(%rsp)
  shufps $0xff,%xmm3,%xmm3
  movaps %xmm3,0x228(%rsp)
  movaps %xmm2,%xmm3
  movups 0xa0(%rdi),%xmm10
  movups 0xb0(%rdi),%xmm9
  shufps $0x55,%xmm2,%xmm3
  movaps %xmm3,-0x58(%rsp)
  movaps %xmm2,%xmm3
  movups 0xc0(%rdi),%xmm8
  unpckhps %xmm2,%xmm3
  movups 0xf0(%rdi),%xmm5
  movaps %xmm6,-0x68(%rsp)
  movups 0xe0(%rdi),%xmm6
  movss  %xmm2,0x168(%rsp)
  shufps $0xff,%xmm2,%xmm2
  movaps %xmm2,0x218(%rsp)
  movaps %xmm1,%xmm2
  shufps $0x55,%xmm1,%xmm2
  movaps %xmm4,-0x48(%rsp)
  movaps %xmm1,%xmm4
  movaps %xmm7,-0x28(%rsp)
  unpckhps %xmm1,%xmm4
  movaps %xmm3,0x208(%rsp)
  movss  %xmm1,0xf4(%rsp)
  shufps $0xff,%xmm1,%xmm1
  movaps %xmm2,0x1e8(%rsp)
  movaps -0x68(%rsp),%xmm7
  movaps %xmm1,0x1f8(%rsp)
  movaps %xmm7,%xmm1
  movaps %xmm7,%xmm2
  movaps %xmm7,%xmm3
  movss  %xmm10,0x7c(%rsp)
  unpckhps %xmm7,%xmm1
  shufps $0x55,%xmm7,%xmm2
  movss  %xmm15,0x80(%rsp)
  movaps %xmm1,0x1d8(%rsp)
  movaps %xmm7,%xmm1
  movss  %xmm14,0x1d4(%rsp)
  shufps $0xff,%xmm7,%xmm1
  movaps %xmm15,%xmm7
  shufps $0x55,%xmm15,%xmm7
  movaps %xmm1,0x28(%rsp)
  movaps -0x78(%rsp),%xmm1
  movaps %xmm7,0xa8(%rsp)
  movaps %xmm15,%xmm7
  movss  %xmm1,0xec(%rsp)
  unpckhps %xmm15,%xmm7
  shufps $0xff,%xmm15,%xmm15
  movaps %xmm7,0xd8(%rsp)
  movaps %xmm14,%xmm7
  movss  %xmm13,0x174(%rsp)
  shufps $0x55,%xmm14,%xmm7
  movaps %xmm7,0x1b8(%rsp)
  movaps %xmm14,%xmm7
  movss  %xmm12,0xf0(%rsp)
  unpckhps %xmm14,%xmm7
  shufps $0xff,%xmm14,%xmm14
  movaps %xmm7,0x18(%rsp)
  movaps %xmm13,%xmm7
  movss  %xmm11,0xe8(%rsp)
  shufps $0x55,%xmm13,%xmm7
  movaps %xmm7,0xb8(%rsp)
  movaps %xmm13,%xmm7
  movss  %xmm9,0x1d0(%rsp)
  unpckhps %xmm13,%xmm7
  shufps $0xff,%xmm13,%xmm13
  movaps %xmm7,0xf8(%rsp)
  movaps %xmm12,%xmm7
  movss  %xmm8,0x16c(%rsp)
  shufps $0x55,%xmm12,%xmm7
  movaps %xmm7,0x38(%rsp)
  movaps %xmm12,%xmm7
  unpckhps %xmm12,%xmm7
  shufps $0xff,%xmm12,%xmm12
  movaps %xmm7,0x58(%rsp)
  movaps %xmm11,%xmm7
  shufps $0x55,%xmm11,%xmm7
  movaps %xmm7,0x118(%rsp)
  movaps %xmm11,%xmm7
  unpckhps %xmm11,%xmm7
  shufps $0xff,%xmm11,%xmm11
  movaps %xmm7,0x178(%rsp)
  movaps %xmm10,%xmm7
  shufps $0x55,%xmm10,%xmm7
  movaps %xmm7,0x48(%rsp)
  movaps %xmm10,%xmm7
  unpckhps %xmm10,%xmm7
  shufps $0xff,%xmm10,%xmm10
  movaps %xmm7,0x68(%rsp)
  movaps %xmm9,%xmm7
  shufps $0x55,%xmm9,%xmm7
  movaps %xmm7,0x138(%rsp)
  movaps %xmm9,%xmm7
  unpckhps %xmm9,%xmm7
  shufps $0xff,%xmm9,%xmm9
  movaps %xmm7,0x188(%rsp)
  movaps %xmm8,%xmm7
  shufps $0x55,%xmm8,%xmm7
  movaps %xmm7,0x88(%rsp)
  movaps %xmm8,%xmm7
  unpckhps %xmm8,%xmm7
  shufps $0xff,%xmm8,%xmm8
  movaps %xmm7,0x98(%rsp)
  movaps %xmm1,%xmm7
  shufps $0x55,%xmm1,%xmm7
  movaps %xmm7,0x198(%rsp)
  movaps %xmm1,%xmm7
  unpckhps %xmm1,%xmm7
  movaps %xmm7,0x1a8(%rsp)
  movaps %xmm1,%xmm7
  movss  %xmm6,0x84(%rsp)
  shufps $0xff,%xmm1,%xmm7
  movaps %xmm6,%xmm1
  movss  %xmm5,0x1cc(%rsp)
  shufps $0x55,%xmm6,%xmm1
  movaps %xmm1,0xc8(%rsp)
  movaps %xmm6,%xmm1
  unpckhps %xmm6,%xmm1
  shufps $0xff,%xmm6,%xmm6
  movaps %xmm1,0x128(%rsp)
  movaps %xmm5,%xmm1
  shufps $0x55,%xmm5,%xmm1
  movaps %xmm1,0x108(%rsp)
  movaps %xmm5,%xmm1
  unpckhps %xmm5,%xmm1
  shufps $0xff,%xmm5,%xmm5
  movaps %xmm5,0x158(%rsp)
  movaps %xmm1,0x148(%rsp)
  movaps -0x38(%rsp),%xmm1
  movss  %xmm1,0x78(%rsp)
  movaps -0x18(%rsp),%xmm1
  movss  %xmm1,0x14(%rsp)
  movaps -0x8(%rsp),%xmm1
  movss  %xmm1,-0x8(%rsp)
  movaps -0x48(%rsp),%xmm1
  movss  %xmm1,-0x18(%rsp)
  movaps -0x28(%rsp),%xmm1
  movss  %xmm1,-0x28(%rsp)
  movaps 0x228(%rsp),%xmm1
  movss  %xmm1,-0x38(%rsp)
  movaps -0x58(%rsp),%xmm1
  movss  %xmm1,-0x48(%rsp)
  movaps 0x208(%rsp),%xmm1
  movss  %xmm1,-0x58(%rsp)
  movaps 0x218(%rsp),%xmm1
  movss  %xmm1,-0x68(%rsp)
  movaps 0x1e8(%rsp),%xmm1
  movss  %xmm1,-0x78(%rsp)
  movaps 0x1f8(%rsp),%xmm1
  nop
L7:
  addss  0x1c8(%rsp),%xmm0
  addss  0x78(%rsp),%xmm0
  add    $0x1,%edx
  addss  0x14(%rsp),%xmm0
  addss  -0x8(%rsp),%xmm0
  addss  0x170(%rsp),%xmm0
  addss  -0x18(%rsp),%xmm0
  addss  -0x28(%rsp),%xmm0
  addss  -0x38(%rsp),%xmm0
  addss  0x168(%rsp),%xmm0
  addss  -0x48(%rsp),%xmm0
  addss  -0x58(%rsp),%xmm0
  addss  -0x68(%rsp),%xmm0
  addss  0xf4(%rsp),%xmm0
  movss  -0x78(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movaps %xmm4,%xmm0
  addss  %xmm5,%xmm0
  movaps %xmm1,%xmm5
  addss  %xmm0,%xmm5
  movaps %xmm2,%xmm0
  addss  %xmm3,%xmm5
  addss  %xmm5,%xmm0
  movss  0x1d8(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movss  0x28(%rsp),%xmm0
  addss  %xmm5,%xmm0
  addss  0x80(%rsp),%xmm0
  movss  0xa8(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movss  0xd8(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movaps %xmm15,%xmm5
  addss  %xmm0,%xmm5
  addss  0x1d4(%rsp),%xmm5
  movss  0x1b8(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movss  0x18(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movaps %xmm14,%xmm0
  addss  %xmm5,%xmm0
  addss  0x174(%rsp),%xmm0
  movss  0xb8(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movss  0xf8(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movaps %xmm13,%xmm5
  addss  %xmm0,%xmm5
  movss  0x38(%rsp),%xmm0
  addss  0xf0(%rsp),%xmm5
  addss  %xmm5,%xmm0
  movss  0x58(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movaps %xmm12,%xmm0
  addss  %xmm5,%xmm0
  addss  0xe8(%rsp),%xmm0
  movss  0x118(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movss  0x178(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movaps %xmm11,%xmm5
  addss  %xmm0,%xmm5
  addss  0x7c(%rsp),%xmm5
  movss  0x48(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movss  0x68(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movaps %xmm10,%xmm0
  addss  %xmm5,%xmm0
  addss  0x1d0(%rsp),%xmm0
  movss  0x138(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movss  0x188(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movaps %xmm9,%xmm5
  addss  %xmm0,%xmm5
  addss  0x16c(%rsp),%xmm5
  movss  0x88(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movss  0x98(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movaps %xmm8,%xmm0
  addss  %xmm5,%xmm0
  addss  0xec(%rsp),%xmm0
  movss  0x198(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movss  0x1a8(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movaps %xmm7,%xmm5
  addss  %xmm0,%xmm5
  addss  0x84(%rsp),%xmm5
  movss  0xc8(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movss  0x128(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movaps %xmm6,%xmm0
  addss  %xmm5,%xmm0
  addss  0x1cc(%rsp),%xmm0
  movss  0x108(%rsp),%xmm5
  addss  %xmm0,%xmm5
  movss  0x148(%rsp),%xmm0
  addss  %xmm5,%xmm0
  movss  0x158(%rsp),%xmm5
  addss  %xmm5,%xmm0
  cmp    $0x8,%edx
  jne    L7
  add    $0x240,%rsp
  ret
```

assistant: ```c
float double_reduc(float *i) {
  float l = 0;
  for (int a = 0; a < 8; a++)
    for (int b = 0; b < 16; b++) {
      l += i[b * 4];
      l += i[b * 4 + 1];
      l += i[b * 4 + 2];
      l += i[b * 4 + 3];
    }
  return l;
}
```