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

```asm
<getEfficiency_matchl32>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%r9d
  mov    %edx,%edi
  mov    %esi,%eax
  cltd
  idiv   %ecx
  mov    %edx,%r10d
  mov    %edi,%eax
  cltd
  idiv   %ecx
  mov    %edx,%r11d
  mov    %r10d,%ebx
  imul   %r9d,%ebx
  mov    %edx,%r8d
  imul   %r9d,%r8d
  mov    %r9d,%edx
  imul   %ecx,%edx
  cmp    %r8d,%ebx
  mov    %r8d,%r9d
  cmovle %ebx,%r9d
  lea    0x3e(%rdx),%ebp
  mov    %edx,%eax
  add    $0x1f,%eax
  cmovns %eax,%ebp
  sar    $0x5,%ebp
  pxor   %xmm3,%xmm3
  cvtsi2sd %ebp,%xmm3
  mov    %edx,%r12d
  sar    $0x1f,%r12d
  shr    $0x1b,%r12d
  lea    (%rdx,%r12,1),%ebp
  and    $0x1f,%ebp
  sub    %r12d,%ebp
  pxor   %xmm1,%xmm1
  cvtsi2sd %ebp,%xmm1
  movsd  D26(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  test   %edx,%edx
  cmovns %edx,%eax
  sar    $0x5,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  addsd  %xmm2,%xmm1
  divsd  %xmm3,%xmm1
  mov    %ebx,%ebp
  sar    $0x1f,%ebp
  shr    $0x1b,%ebp
  lea    (%rbx,%rbp,1),%eax
  and    $0x1f,%eax
  sub    %ebp,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  mulsd  %xmm0,%xmm2
  lea    0x1f(%rbx),%eax
  test   %ebx,%ebx
  cmovns %ebx,%eax
  sar    $0x5,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  %xmm0,%xmm2
  test   %edx,%edx
  jle    L8
L2:
  mov    %esi,%eax
  cltd
  idiv   %ecx
  mov    %eax,%esi
  mov    %edi,%eax
  cltd
  idiv   %ecx
  mov    %eax,%edi
  mov    %esi,%eax
  imul   %edi,%eax
  mov    $0x0,%ecx
  test   %r10d,%r10d
  cmovle %ecx,%edi
  test   %r11d,%r11d
  setg   %dl
  movzbl %dl,%edx
  imul   %edx,%esi
  test   %r10d,%r10d
  cmovle %ecx,%edx
  mov    %r8d,%r10d
  sar    $0x1f,%r10d
  shr    $0x1b,%r10d
  lea    (%r8,%r10,1),%ecx
  and    $0x1f,%ecx
  sub    %r10d,%ecx
  pxor   %xmm0,%xmm0
  cvtsi2sd %ecx,%xmm0
  movsd  D26(%rip),%xmm5
  mulsd  %xmm5,%xmm0
  lea    0x1f(%r8),%ecx
  test   %r8d,%r8d
  cmovns %r8d,%ecx
  sar    $0x5,%ecx
  pxor   %xmm4,%xmm4
  cvtsi2sd %ecx,%xmm4
  addsd  %xmm4,%xmm0
  divsd  %xmm3,%xmm0
  pxor   %xmm4,%xmm4
  cvtsi2sd %esi,%xmm4
  mulsd  %xmm4,%xmm0
  pxor   %xmm4,%xmm4
  cvtsi2sd %edi,%xmm4
  divsd  %xmm3,%xmm2
  mulsd  %xmm4,%xmm2
  pxor   %xmm4,%xmm4
  cvtsi2sd %eax,%xmm4
  mulsd  %xmm4,%xmm1
  addsd  %xmm2,%xmm1
  addsd  %xmm1,%xmm0
  mov    %r9d,%r8d
  sar    $0x1f,%r8d
  shr    $0x1b,%r8d
  lea    (%r9,%r8,1),%ecx
  and    $0x1f,%ecx
  sub    %r8d,%ecx
  pxor   %xmm1,%xmm1
  cvtsi2sd %ecx,%xmm1
  mulsd  %xmm5,%xmm1
  lea    0x1f(%r9),%ecx
  test   %r9d,%r9d
  cmovns %r9d,%ecx
  sar    $0x5,%ecx
  pxor   %xmm2,%xmm2
  cvtsi2sd %ecx,%xmm2
  addsd  %xmm2,%xmm1
  divsd  %xmm3,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sd %edx,%xmm2
  mulsd  %xmm2,%xmm1
  addsd  %xmm1,%xmm0
  add    %edi,%eax
  add    %esi,%eax
  add    %edx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  divsd  %xmm1,%xmm0
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L8:
  movsd  D15(%rip),%xmm3
  jmp    L2
```

tool_calls: name: parse_data
arguments: tag: D26
data_type: byte[8]
name: parse_data
arguments: tag: D15
data_type: byte[8]

tool: {"D26": [0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x3f]}

tool: {"D15": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

assistant: ```c
double getEfficiency_matchl32(int size0, int asize, int bsize, int blockA) {
  double f1, f2, f3, f4, f;
  const int remainder1 = asize % blockA;
  const int remainder2 = bsize % blockA;
  const int ilimit = remainder1 * size0;
  const int olimit = remainder2 * size0;
  const int plain = blockA * size0;
  int minlimit = (ilimit < olimit ? ilimit : olimit);
  f1 = ((plain / 32) + (double)(plain % 32) / 32) / (int)((plain + 31) / 32);
  f2 = ((ilimit / 32) + (double)(ilimit % 32) / 32) / (int)((1 > (plain + 31) / 32 ? 1 : (plain + 31) / 32));
  f3 = ((olimit / 32) + (double)(olimit % 32) / 32) / (int)((1 > (plain + 31) / 32 ? 1 : (plain + 31) / 32));
  f4 = ((minlimit / 32) + (double)(minlimit % 32) / 32) / (int)((1 > (plain + 31) / 32 ? 1 : (plain + 31) / 32));
  int amax = blockA;
  int bmax = blockA;
  int n1, n2, n3, n4;
  n1 = (asize / amax) * (bsize / bmax);
  n2 = (asize % amax > 0) * (bsize / bmax);
  n3 = (asize / amax) * (bsize % bmax > 0);
  n4 = (asize % amax > 0) * (bsize % bmax > 0);
  f = (n1 * f1 + n2 * f2 + n3 * f3 + n4 * f4) / (n1 + n2 + n3 + n4);
  return f;
}
```