user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<dct_inverse>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  movl   $0x0,-0x18(%rbp)
  jmp    L179
L115:
  movl   $0x0,-0x14(%rbp)
  jmp    L169
L135:
  mov    -0x18(%rbp),%eax
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  movl   $0x0,-0x10(%rbp)
  jmp    L164
L77:
  movss  D13(%rip),%xmm0
  movss  %xmm0,-0x8(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  jne    L44
  mov    $0x2,%edi
  call   <sqrt@plt>
  movaps %xmm0,%xmm1
  movss  D13(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
L44:
  movl   $0x0,-0xc(%rbp)
  jmp    L59
L168:
  movss  D13(%rip),%xmm0
  movss  %xmm0,-0x4(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  jne    L78
  mov    $0x2,%edi
  call   <sqrt@plt>
  movaps %xmm0,%xmm1
  movss  D13(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
L78:
  mov    -0x18(%rbp),%eax
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  movss  (%rdx,%rax,4),%xmm3
  movss  %xmm3,-0x34(%rbp)
  mov    -0x10(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  pxor   %xmm4,%xmm4
  cvtsi2ss %eax,%xmm4
  movss  %xmm4,-0x38(%rbp)
  mov    -0x18(%rbp),%eax
  test   %rax,%rax
  js     L108
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L94
L108:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L94:
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  movss  D13(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  D12(%rip),%xmm2
  movaps %xmm0,%xmm1
  divss  %xmm2,%xmm1
  mov    -0x10(%rbp),%eax
  test   %rax,%rax
  js     L99
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L31
L99:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L31:
  mulss  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D102(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm5,%xmm5
  cvtsd2ss %xmm0,%xmm5
  movd   %xmm5,%eax
  movd   %eax,%xmm0
  call   <cosf@plt>
  mulss  -0x38(%rbp),%xmm0
  movss  %xmm0,-0x38(%rbp)
  mov    -0x14(%rbp),%eax
  test   %rax,%rax
  js     L67
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L100
L67:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L100:
  movaps %xmm0,%xmm1
  addss  %xmm0,%xmm1
  movss  D13(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  D12(%rip),%xmm2
  movaps %xmm0,%xmm1
  divss  %xmm2,%xmm1
  mov    -0xc(%rbp),%eax
  test   %rax,%rax
  js     L142
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L38
L142:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L38:
  mulss  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D102(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm7,%xmm7
  cvtsd2ss %xmm0,%xmm7
  movd   %xmm7,%eax
  movd   %eax,%xmm0
  call   <cosf@plt>
  mulss  -0x38(%rbp),%xmm0
  mulss  -0x8(%rbp),%xmm0
  mulss  -0x4(%rbp),%xmm0
  mov    -0x18(%rbp),%eax
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  addss  -0x34(%rbp),%xmm0
  mov    -0x14(%rbp),%eax
  movss  %xmm0,(%rdx,%rax,4)
  addl   $0x1,-0xc(%rbp)
L59:
  cmpl   $0x7,-0xc(%rbp)
  jbe    L168
  addl   $0x1,-0x10(%rbp)
L164:
  cmpl   $0x7,-0x10(%rbp)
  jbe    L77
  mov    -0x18(%rbp),%eax
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  movss  (%rdx,%rax,4),%xmm1
  mov    -0x18(%rbp),%eax
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  movss  D45(%rip),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x14(%rbp),%eax
  movss  %xmm0,(%rdx,%rax,4)
  mov    -0x18(%rbp),%eax
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  movss  (%rdx,%rax,4),%xmm1
  mov    -0x18(%rbp),%eax
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  movss  D44(%rip),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x14(%rbp),%eax
  movss  %xmm0,(%rdx,%rax,4)
  addl   $0x1,-0x14(%rbp)
L169:
  cmpl   $0x7,-0x14(%rbp)
  jbe    L135
  addl   $0x1,-0x18(%rbp)
L179:
  cmpl   $0x7,-0x18(%rbp)
  jbe    L115
  nop
  nop
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D13
type: byte[4]
name: unpack_data
arguments: label: D12
type: byte[4]
name: unpack_data
arguments: label: D102
type: f64
name: unpack_data
arguments: label: D45
type: byte[4]
name: unpack_data
arguments: label: D44
type: byte[4]

tool: {"D13": [0x00,0x00,0x80,0x3f]}

tool: {"D12": [0x00,0x00,0x80,0x41]}

tool: D102: 3.141592653589793

tool: {"D45": [0x00,0x00,0x80,0x3e]}

tool: {"D44": [0x00,0x00,0x00,0x43]}

assistant: ```c
void dct_inverse(int chunk[(8 * 8)], float pixels[8][8]) {
  unsigned int x, y;
  for (x = 0; x < 8; x++) {
    for (y = 0; y < 8; y++) {
      unsigned int u, v;
      pixels[x][y] = 0.0f;
      for (u = 0; u < 8; u++) {
        float u_scaling_factor = 1.0f;
        if (u == 0) {
          u_scaling_factor = 1.0f / sqrt(2);
        }
        for (v = 0; v < 8; v++) {
          float v_scaling_factor = 1.0f;
          if (v == 0) {
            v_scaling_factor = 1.0f / sqrt(2);
          }
          pixels[x][y] += (float)chunk[u * 8 + v] * cosf((2.0f * (float)x + 1.0f) / 16.0f * (float)u * 3.14159265358979323846264338327) * cosf((2.0f * (float)y + 1.0f) / 16.0f * (float)v * 3.14159265358979323846264338327) * u_scaling_factor * v_scaling_factor;
        }
      }
      pixels[x][y] *= 0.25f;
      pixels[x][y] += 128.0f;
    }
  }
}
```