user: What is the c source code of the assembly code below:

```asm
<fdct_int32>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x180,%rsp
  mov    %rdi,-0x178(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x110(%rbp),%rax
  mov    %rax,-0x118(%rbp)
  mov    -0x178(%rbp),%rax
  mov    %rax,-0x120(%rbp)
  movl   $0x0,-0x168(%rbp)
  jmp    L27
L69:
  mov    -0x120(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0x120(%rbp),%rax
  add    $0xe,%rax
  movzwl (%rax),%eax
  cwtl
  add    %edx,%eax
  mov    %eax,-0x164(%rbp)
  mov    -0x120(%rbp),%rax
  movzwl (%rax),%eax
  cwtl
  mov    -0x120(%rbp),%rdx
  add    $0xe,%rdx
  movzwl (%rdx),%edx
  movswl %dx,%edx
  sub    %edx,%eax
  mov    %eax,-0x160(%rbp)
  mov    -0x120(%rbp),%rax
  add    $0x2,%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0x120(%rbp),%rax
  add    $0xc,%rax
  movzwl (%rax),%eax
  cwtl
  add    %edx,%eax
  mov    %eax,-0x15c(%rbp)
  mov    -0x120(%rbp),%rax
  add    $0x2,%rax
  movzwl (%rax),%eax
  cwtl
  mov    -0x120(%rbp),%rdx
  add    $0xc,%rdx
  movzwl (%rdx),%edx
  movswl %dx,%edx
  sub    %edx,%eax
  mov    %eax,-0x158(%rbp)
  mov    -0x120(%rbp),%rax
  add    $0x4,%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0x120(%rbp),%rax
  add    $0xa,%rax
  movzwl (%rax),%eax
  cwtl
  add    %edx,%eax
  mov    %eax,-0x154(%rbp)
  mov    -0x120(%rbp),%rax
  add    $0x4,%rax
  movzwl (%rax),%eax
  cwtl
  mov    -0x120(%rbp),%rdx
  add    $0xa,%rdx
  movzwl (%rdx),%edx
  movswl %dx,%edx
  sub    %edx,%eax
  mov    %eax,-0x150(%rbp)
  mov    -0x120(%rbp),%rax
  add    $0x6,%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0x120(%rbp),%rax
  add    $0x8,%rax
  movzwl (%rax),%eax
  cwtl
  add    %edx,%eax
  mov    %eax,-0x14c(%rbp)
  mov    -0x120(%rbp),%rax
  add    $0x6,%rax
  movzwl (%rax),%eax
  cwtl
  mov    -0x120(%rbp),%rdx
  add    $0x8,%rdx
  movzwl (%rdx),%edx
  movswl %dx,%edx
  sub    %edx,%eax
  mov    %eax,-0x148(%rbp)
  mov    -0x164(%rbp),%edx
  mov    -0x14c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x144(%rbp)
  mov    -0x164(%rbp),%eax
  sub    -0x14c(%rbp),%eax
  mov    %eax,-0x140(%rbp)
  mov    -0x15c(%rbp),%edx
  mov    -0x154(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x13c(%rbp)
  mov    -0x15c(%rbp),%eax
  sub    -0x154(%rbp),%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x144(%rbp),%edx
  mov    -0x13c(%rbp),%eax
  add    %edx,%eax
  lea    0x0(,%rax,4),%edx
  mov    -0x118(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x144(%rbp),%eax
  sub    -0x13c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x118(%rbp),%rax
  add    $0x10,%rax
  shl    $0x2,%edx
  mov    %edx,(%rax)
  mov    -0x138(%rbp),%edx
  mov    -0x140(%rbp),%eax
  add    %edx,%eax
  imul   $0x1151,%eax,%eax
  mov    %eax,-0x134(%rbp)
  mov    -0x140(%rbp),%eax
  imul   $0x187e,%eax,%edx
  mov    -0x134(%rbp),%eax
  add    %edx,%eax
  lea    0x400(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0x8,%rax
  sar    $0xb,%edx
  mov    %edx,(%rax)
  mov    -0x138(%rbp),%eax
  imul   $0xffffc4df,%eax,%edx
  mov    -0x134(%rbp),%eax
  add    %edx,%eax
  lea    0x400(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0x18,%rax
  sar    $0xb,%edx
  mov    %edx,(%rax)
  mov    -0x148(%rbp),%edx
  mov    -0x160(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x134(%rbp)
  mov    -0x150(%rbp),%edx
  mov    -0x158(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x130(%rbp)
  mov    -0x148(%rbp),%edx
  mov    -0x158(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x12c(%rbp)
  mov    -0x150(%rbp),%edx
  mov    -0x160(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x128(%rbp)
  mov    -0x12c(%rbp),%edx
  mov    -0x128(%rbp),%eax
  add    %edx,%eax
  imul   $0x25a1,%eax,%eax
  mov    %eax,-0x124(%rbp)
  mov    -0x148(%rbp),%eax
  imul   $0x98e,%eax,%eax
  mov    %eax,-0x148(%rbp)
  mov    -0x150(%rbp),%eax
  imul   $0x41b3,%eax,%eax
  mov    %eax,-0x150(%rbp)
  mov    -0x158(%rbp),%eax
  imul   $0x6254,%eax,%eax
  mov    %eax,-0x158(%rbp)
  mov    -0x160(%rbp),%eax
  imul   $0x300b,%eax,%eax
  mov    %eax,-0x160(%rbp)
  mov    -0x134(%rbp),%eax
  imul   $0xffffe333,%eax,%eax
  mov    %eax,-0x134(%rbp)
  mov    -0x130(%rbp),%eax
  imul   $0xffffadfd,%eax,%eax
  mov    %eax,-0x130(%rbp)
  mov    -0x12c(%rbp),%eax
  imul   $0xffffc13b,%eax,%eax
  mov    %eax,-0x12c(%rbp)
  mov    -0x128(%rbp),%eax
  imul   $0xfffff384,%eax,%eax
  mov    %eax,-0x128(%rbp)
  mov    -0x124(%rbp),%eax
  add    %eax,-0x12c(%rbp)
  mov    -0x124(%rbp),%eax
  add    %eax,-0x128(%rbp)
  mov    -0x148(%rbp),%edx
  mov    -0x134(%rbp),%eax
  add    %eax,%edx
  mov    -0x12c(%rbp),%eax
  add    %edx,%eax
  lea    0x400(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0x1c,%rax
  sar    $0xb,%edx
  mov    %edx,(%rax)
  mov    -0x150(%rbp),%edx
  mov    -0x130(%rbp),%eax
  add    %eax,%edx
  mov    -0x128(%rbp),%eax
  add    %edx,%eax
  lea    0x400(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0x14,%rax
  sar    $0xb,%edx
  mov    %edx,(%rax)
  mov    -0x158(%rbp),%edx
  mov    -0x130(%rbp),%eax
  add    %eax,%edx
  mov    -0x12c(%rbp),%eax
  add    %edx,%eax
  lea    0x400(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0xc,%rax
  sar    $0xb,%edx
  mov    %edx,(%rax)
  mov    -0x160(%rbp),%edx
  mov    -0x134(%rbp),%eax
  add    %eax,%edx
  mov    -0x128(%rbp),%eax
  add    %edx,%eax
  lea    0x400(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0x4,%rax
  sar    $0xb,%edx
  mov    %edx,(%rax)
  addq   $0x20,-0x118(%rbp)
  addq   $0x10,-0x120(%rbp)
  addl   $0x1,-0x168(%rbp)
L27:
  cmpl   $0x7,-0x168(%rbp)
  jle    L69
  lea    -0x110(%rbp),%rax
  mov    %rax,-0x118(%rbp)
  movl   $0x0,-0x168(%rbp)
  jmp    L60
L41:
  mov    -0x118(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0xe0,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x164(%rbp)
  mov    -0x118(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x118(%rbp),%rdx
  add    $0xe0,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x160(%rbp)
  mov    -0x118(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0xc0,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x15c(%rbp)
  mov    -0x118(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%eax
  mov    -0x118(%rbp),%rdx
  add    $0xc0,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x158(%rbp)
  mov    -0x118(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0xa0,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x154(%rbp)
  mov    -0x118(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%eax
  mov    -0x118(%rbp),%rdx
  add    $0xa0,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x150(%rbp)
  mov    -0x118(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%edx
  mov    -0x118(%rbp),%rax
  sub    $0xffffffffffffff80,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x14c(%rbp)
  mov    -0x118(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%eax
  mov    -0x118(%rbp),%rdx
  sub    $0xffffffffffffff80,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x148(%rbp)
  mov    -0x164(%rbp),%edx
  mov    -0x14c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x144(%rbp)
  mov    -0x164(%rbp),%eax
  sub    -0x14c(%rbp),%eax
  mov    %eax,-0x140(%rbp)
  mov    -0x15c(%rbp),%edx
  mov    -0x154(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x13c(%rbp)
  mov    -0x15c(%rbp),%eax
  sub    -0x154(%rbp),%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x144(%rbp),%edx
  mov    -0x13c(%rbp),%eax
  add    %edx,%eax
  add    $0x2,%eax
  sar    $0x2,%eax
  mov    %eax,%edx
  mov    -0x118(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x144(%rbp),%eax
  sub    -0x13c(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x118(%rbp),%rax
  sub    $0xffffffffffffff80,%rax
  sar    $0x2,%edx
  mov    %edx,(%rax)
  mov    -0x138(%rbp),%edx
  mov    -0x140(%rbp),%eax
  add    %edx,%eax
  imul   $0x1151,%eax,%eax
  mov    %eax,-0x134(%rbp)
  mov    -0x140(%rbp),%eax
  imul   $0x187e,%eax,%edx
  mov    -0x134(%rbp),%eax
  add    %edx,%eax
  lea    0x4000(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0x40,%rax
  sar    $0xf,%edx
  mov    %edx,(%rax)
  mov    -0x138(%rbp),%eax
  imul   $0xffffc4df,%eax,%edx
  mov    -0x134(%rbp),%eax
  add    %edx,%eax
  lea    0x4000(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0xc0,%rax
  sar    $0xf,%edx
  mov    %edx,(%rax)
  mov    -0x148(%rbp),%edx
  mov    -0x160(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x134(%rbp)
  mov    -0x150(%rbp),%edx
  mov    -0x158(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x130(%rbp)
  mov    -0x148(%rbp),%edx
  mov    -0x158(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x12c(%rbp)
  mov    -0x150(%rbp),%edx
  mov    -0x160(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x128(%rbp)
  mov    -0x12c(%rbp),%edx
  mov    -0x128(%rbp),%eax
  add    %edx,%eax
  imul   $0x25a1,%eax,%eax
  mov    %eax,-0x124(%rbp)
  mov    -0x148(%rbp),%eax
  imul   $0x98e,%eax,%eax
  mov    %eax,-0x148(%rbp)
  mov    -0x150(%rbp),%eax
  imul   $0x41b3,%eax,%eax
  mov    %eax,-0x150(%rbp)
  mov    -0x158(%rbp),%eax
  imul   $0x6254,%eax,%eax
  mov    %eax,-0x158(%rbp)
  mov    -0x160(%rbp),%eax
  imul   $0x300b,%eax,%eax
  mov    %eax,-0x160(%rbp)
  mov    -0x134(%rbp),%eax
  imul   $0xffffe333,%eax,%eax
  mov    %eax,-0x134(%rbp)
  mov    -0x130(%rbp),%eax
  imul   $0xffffadfd,%eax,%eax
  mov    %eax,-0x130(%rbp)
  mov    -0x12c(%rbp),%eax
  imul   $0xffffc13b,%eax,%eax
  mov    %eax,-0x12c(%rbp)
  mov    -0x128(%rbp),%eax
  imul   $0xfffff384,%eax,%eax
  mov    %eax,-0x128(%rbp)
  mov    -0x124(%rbp),%eax
  add    %eax,-0x12c(%rbp)
  mov    -0x124(%rbp),%eax
  add    %eax,-0x128(%rbp)
  mov    -0x148(%rbp),%edx
  mov    -0x134(%rbp),%eax
  add    %eax,%edx
  mov    -0x12c(%rbp),%eax
  add    %edx,%eax
  lea    0x4000(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0xe0,%rax
  sar    $0xf,%edx
  mov    %edx,(%rax)
  mov    -0x150(%rbp),%edx
  mov    -0x130(%rbp),%eax
  add    %eax,%edx
  mov    -0x128(%rbp),%eax
  add    %edx,%eax
  lea    0x4000(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0xa0,%rax
  sar    $0xf,%edx
  mov    %edx,(%rax)
  mov    -0x158(%rbp),%edx
  mov    -0x130(%rbp),%eax
  add    %eax,%edx
  mov    -0x12c(%rbp),%eax
  add    %edx,%eax
  lea    0x4000(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0x60,%rax
  sar    $0xf,%edx
  mov    %edx,(%rax)
  mov    -0x160(%rbp),%edx
  mov    -0x134(%rbp),%eax
  add    %eax,%edx
  mov    -0x128(%rbp),%eax
  add    %edx,%eax
  lea    0x4000(%rax),%edx
  mov    -0x118(%rbp),%rax
  add    $0x20,%rax
  sar    $0xf,%edx
  mov    %edx,(%rax)
  addq   $0x4,-0x118(%rbp)
  addl   $0x1,-0x168(%rbp)
L60:
  cmpl   $0x7,-0x168(%rbp)
  jle    L41
  movl   $0x0,-0x168(%rbp)
  jmp    L50
L61:
  mov    -0x168(%rbp),%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  add    $0x4,%eax
  sar    $0x3,%eax
  mov    %eax,%edx
  mov    -0x168(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rcx
  mov    -0x178(%rbp),%rax
  add    %rcx,%rax
  mov    %dx,(%rax)
  addl   $0x1,-0x168(%rbp)
L50:
  cmpl   $0x3f,-0x168(%rbp)
  jle    L61
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L68
  call   <__stack_chk_fail@plt>
L68:
  leave
  ret
```

assistant: ```c
void fdct_int32(short *const block) {
  int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
  int tmp10, tmp11, tmp12, tmp13;
  int z1, z2, z3, z4, z5;
  short *blkptr;
  int *dataptr;
  int data[64];
  int i;
  dataptr = data;
  blkptr = block;
  for (i = 0; i < 8; i++) {
    tmp0 = blkptr[0] + blkptr[7];
    tmp7 = blkptr[0] - blkptr[7];
    tmp1 = blkptr[1] + blkptr[6];
    tmp6 = blkptr[1] - blkptr[6];
    tmp2 = blkptr[2] + blkptr[5];
    tmp5 = blkptr[2] - blkptr[5];
    tmp3 = blkptr[3] + blkptr[4];
    tmp4 = blkptr[3] - blkptr[4];
    tmp10 = tmp0 + tmp3;
    tmp13 = tmp0 - tmp3;
    tmp11 = tmp1 + tmp2;
    tmp12 = tmp1 - tmp2;
    dataptr[0] = (tmp10 + tmp11) << 2;
    dataptr[4] = (tmp10 - tmp11) << 2;
    z1 = (tmp12 + tmp13) * ((int)4433);
    dataptr[2] = (((z1 + tmp13 * ((int)6270)) + (((int)1) << ((13 - 2) - 1))) >> (13 - 2));
    dataptr[6] = (((z1 + tmp12 * (-((int)15137))) + (((int)1) << ((13 - 2) - 1))) >> (13 - 2));
    z1 = tmp4 + tmp7;
    z2 = tmp5 + tmp6;
    z3 = tmp4 + tmp6;
    z4 = tmp5 + tmp7;
    z5 = (z3 + z4) * ((int)9633);
    tmp4 *= ((int)2446);
    tmp5 *= ((int)16819);
    tmp6 *= ((int)25172);
    tmp7 *= ((int)12299);
    z1 *= -((int)7373);
    z2 *= -((int)20995);
    z3 *= -((int)16069);
    z4 *= -((int)3196);
    z3 += z5;
    z4 += z5;
    dataptr[7] = (((tmp4 + z1 + z3) + (((int)1) << ((13 - 2) - 1))) >> (13 - 2));
    dataptr[5] = (((tmp5 + z2 + z4) + (((int)1) << ((13 - 2) - 1))) >> (13 - 2));
    dataptr[3] = (((tmp6 + z2 + z3) + (((int)1) << ((13 - 2) - 1))) >> (13 - 2));
    dataptr[1] = (((tmp7 + z1 + z4) + (((int)1) << ((13 - 2) - 1))) >> (13 - 2));
    dataptr += 8;
    blkptr += 8;
  }
  dataptr = data;
  for (i = 0; i < 8; i++) {
    tmp0 = dataptr[0] + dataptr[56];
    tmp7 = dataptr[0] - dataptr[56];
    tmp1 = dataptr[8] + dataptr[48];
    tmp6 = dataptr[8] - dataptr[48];
    tmp2 = dataptr[16] + dataptr[40];
    tmp5 = dataptr[16] - dataptr[40];
    tmp3 = dataptr[24] + dataptr[32];
    tmp4 = dataptr[24] - dataptr[32];
    tmp10 = tmp0 + tmp3;
    tmp13 = tmp0 - tmp3;
    tmp11 = tmp1 + tmp2;
    tmp12 = tmp1 - tmp2;
    dataptr[0] = (((tmp10 + tmp11) + (((int)1) << ((2) - 1))) >> (2));
    dataptr[32] = (((tmp10 - tmp11) + (((int)1) << ((2) - 1))) >> (2));
    z1 = (tmp12 + tmp13) * ((int)4433);
    dataptr[16] = (((z1 + tmp13 * ((int)6270)) + (((int)1) << ((13 + 2) - 1))) >> (13 + 2));
    dataptr[48] = (((z1 + tmp12 * (-((int)15137))) + (((int)1) << ((13 + 2) - 1))) >> (13 + 2));
    z1 = tmp4 + tmp7;
    z2 = tmp5 + tmp6;
    z3 = tmp4 + tmp6;
    z4 = tmp5 + tmp7;
    z5 = (z3 + z4) * ((int)9633);
    tmp4 *= ((int)2446);
    tmp5 *= ((int)16819);
    tmp6 *= ((int)25172);
    tmp7 *= ((int)12299);
    z1 *= -((int)7373);
    z2 *= -((int)20995);
    z3 *= -((int)16069);
    z4 *= -((int)3196);
    z3 += z5;
    z4 += z5;
    dataptr[56] = (((tmp4 + z1 + z3) + (((int)1) << ((13 + 2) - 1))) >> (13 + 2));
    dataptr[40] = (((tmp5 + z2 + z4) + (((int)1) << ((13 + 2) - 1))) >> (13 + 2));
    dataptr[24] = (((tmp6 + z2 + z3) + (((int)1) << ((13 + 2) - 1))) >> (13 + 2));
    dataptr[8] = (((tmp7 + z1 + z4) + (((int)1) << ((13 + 2) - 1))) >> (13 + 2));
    dataptr++;
  }
  for (i = 0; i < 64; i++)
    block[i] = (short int)(((data[i]) + (((int)1) << ((3) - 1))) >> (3));
}
```