user: 下面的汇编指令对应的C源代码是什么:

```asm
<IDCT>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  cmpl   $0x1,-0x4c(%rbp)
  jne    L49
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <IDCT1@plt>
  jmp    L42
L49:
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x40(%rbp)
  jmp    L72
L97:
  mov    -0x8(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  sub    $0xffffffffffffff80,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0xa0,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0xc0,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0xe0,%rax
  mov    (%rax),%eax
  or     %edx,%eax
  test   %eax,%eax
  jne    L4
  mov    -0x8(%rbp),%rax
  add    $0xe0,%rax
  mov    -0x8(%rbp),%rdx
  mov    (%rdx),%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rdx
  add    $0xc0,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%rax
  add    $0xa0,%rax
  mov    (%rdx),%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rdx
  sub    $0xffffffffffffff80,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%rax
  add    $0x60,%rax
  mov    (%rdx),%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rdx
  add    $0x40,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%rax
  add    $0x20,%rax
  mov    (%rdx),%edx
  mov    %edx,(%rax)
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L13
L4:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  sub    $0xffffffffffffff80,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x8(%rbp),%rdx
  sub    $0xffffffffffffff80,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0xc0,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%eax
  mov    -0x8(%rbp),%rdx
  add    $0xc0,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  imul   $0x16a,%eax,%eax
  sar    $0x8,%eax
  sub    -0x34(%rbp),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x3c(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x3c(%rbp),%eax
  sub    -0x34(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x38(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x30(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0xa0,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%eax
  mov    -0x8(%rbp),%rdx
  add    $0xa0,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0xe0,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%eax
  mov    -0x8(%rbp),%rdx
  add    $0xe0,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x30(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  imul   $0x1d9,%eax,%eax
  sar    $0x8,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x38(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x3c(%rbp),%eax
  imul   $0x29d,%eax,%eax
  sar    $0x8,%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x34(%rbp),%eax
  imul   $0x16a,%eax,%eax
  sar    $0x8,%eax
  sub    -0x14(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x30(%rbp),%eax
  imul   $0x115,%eax,%eax
  sar    $0x8,%eax
  sub    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  lea    0xe0(%rax),%rdx
  mov    -0x2c(%rbp),%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%rax
  add    $0x20,%rax
  mov    -0x24(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  lea    0xc0(%rax),%rdx
  mov    -0x24(%rbp),%eax
  sub    -0x14(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%rax
  add    $0x40,%rax
  mov    -0x20(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  lea    0xa0(%rax),%rdx
  mov    -0x20(%rbp),%eax
  sub    -0x10(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%rax
  sub    $0xffffffffffffff80,%rax
  mov    -0x28(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  lea    0x60(%rax),%rdx
  mov    -0x28(%rbp),%eax
  sub    -0xc(%rbp),%eax
  mov    %eax,(%rdx)
L13:
  addl   $0x1,-0x40(%rbp)
  addq   $0x4,-0x8(%rbp)
L72:
  cmpl   $0x7,-0x40(%rbp)
  jle    L97
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x40(%rbp)
  jmp    L84
L28:
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%eax
  or     %edx,%eax
  test   %eax,%eax
  jne    L91
  mov    -0x8(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x1c,%rax
  sar    $0x5,%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rdx
  add    $0x18,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%rax
  add    $0x14,%rax
  mov    (%rdx),%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rdx
  add    $0x10,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  mov    (%rdx),%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rdx
  add    $0x8,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  mov    (%rdx),%edx
  mov    %edx,(%rax)
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L24
L91:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x8(%rbp),%rdx
  add    $0x10,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  mov    -0x8(%rbp),%rdx
  add    $0x18,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  imul   $0x16a,%eax,%eax
  sar    $0x8,%eax
  sub    -0x34(%rbp),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x3c(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x3c(%rbp),%eax
  sub    -0x34(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x38(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x30(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  mov    -0x8(%rbp),%rdx
  add    $0x14,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%eax
  add    %edx,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    -0x8(%rbp),%rdx
  add    $0x1c,%rdx
  mov    (%rdx),%edx
  sub    %edx,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x30(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  imul   $0x1d9,%eax,%eax
  sar    $0x8,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x38(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x3c(%rbp),%eax
  imul   $0x29d,%eax,%eax
  sar    $0x8,%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x34(%rbp),%eax
  imul   $0x16a,%eax,%eax
  sar    $0x8,%eax
  sub    -0x14(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x30(%rbp),%eax
  imul   $0x115,%eax,%eax
  sar    $0x8,%eax
  sub    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  sar    $0x5,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x2c(%rbp),%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x1c,%rax
  sar    $0x5,%edx
  mov    %edx,(%rax)
  mov    -0x24(%rbp),%edx
  mov    -0x14(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  sar    $0x5,%edx
  mov    %edx,(%rax)
  mov    -0x24(%rbp),%eax
  sub    -0x14(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x18,%rax
  sar    $0x5,%edx
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  sar    $0x5,%edx
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%eax
  sub    -0x10(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x14,%rax
  sar    $0x5,%edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x10,%rax
  sar    $0x5,%edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%eax
  sub    -0xc(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  sar    $0x5,%edx
  mov    %edx,(%rax)
L24:
  addl   $0x1,-0x40(%rbp)
  addq   $0x20,-0x8(%rbp)
L84:
  cmpl   $0x7,-0x40(%rbp)
  jle    L28
L42:
  leave
  ret
```

assistant: ```c
void IDCT(int *block, int k) {
  int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
  int z5, z10, z11, z12, z13;
  int *ptr;
  int i;
  switch (k) {
  case 1:
    IDCT1(block);
    return;
  }
  ptr = block;
  for (i = 0; i < 8; i++, ptr++) {
    if ((ptr[8 * 1] | ptr[8 * 2] | ptr[8 * 3] | ptr[8 * 4] | ptr[8 * 5] | ptr[8 * 6] | ptr[8 * 7]) == 0) {
      ptr[8 * 0] = ptr[8 * 1] = ptr[8 * 2] = ptr[8 * 3] = ptr[8 * 4] = ptr[8 * 5] = ptr[8 * 6] = ptr[8 * 7] = ptr[8 * 0];
      continue;
    }
    z10 = ptr[8 * 0] + ptr[8 * 4];
    z11 = ptr[8 * 0] - ptr[8 * 4];
    z13 = ptr[8 * 2] + ptr[8 * 6];
    z12 = ((((ptr[8 * 2] - ptr[8 * 6]) * ((362))) >> (8))) - z13;
    tmp0 = z10 + z13;
    tmp3 = z10 - z13;
    tmp1 = z11 + z12;
    tmp2 = z11 - z12;
    z13 = ptr[8 * 3] + ptr[8 * 5];
    z10 = ptr[8 * 3] - ptr[8 * 5];
    z11 = ptr[8 * 1] + ptr[8 * 7];
    z12 = ptr[8 * 1] - ptr[8 * 7];
    z5 = ((((z12 - z10) * ((473))) >> (8)));
    tmp7 = z11 + z13;
    tmp6 = ((((z10) * ((669))) >> (8))) + z5 - tmp7;
    tmp5 = ((((z11 - z13) * ((362))) >> (8))) - tmp6;
    tmp4 = ((((z12) * ((277))) >> (8))) - z5 + tmp5;
    ptr[8 * 0] = (tmp0 + tmp7);
    ptr[8 * 7] = (tmp0 - tmp7);
    ptr[8 * 1] = (tmp1 + tmp6);
    ptr[8 * 6] = (tmp1 - tmp6);
    ptr[8 * 2] = (tmp2 + tmp5);
    ptr[8 * 5] = (tmp2 - tmp5);
    ptr[8 * 4] = (tmp3 + tmp4);
    ptr[8 * 3] = (tmp3 - tmp4);
  }
  ptr = block;
  for (i = 0; i < 8; i++, ptr += 8) {
    if ((ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5] | ptr[6] | ptr[7]) == 0) {
      ptr[0] = ptr[1] = ptr[2] = ptr[3] = ptr[4] = ptr[5] = ptr[6] = ptr[7] = (((ptr[0]) >> (2 + 3)));
      ;
      continue;
    }
    z10 = ptr[0] + ptr[4];
    z11 = ptr[0] - ptr[4];
    z13 = ptr[2] + ptr[6];
    z12 = ((((ptr[2] - ptr[6]) * ((362))) >> (8))) - z13;
    tmp0 = z10 + z13;
    tmp3 = z10 - z13;
    tmp1 = z11 + z12;
    tmp2 = z11 - z12;
    z13 = ptr[3] + ptr[5];
    z10 = ptr[3] - ptr[5];
    z11 = ptr[1] + ptr[7];
    z12 = ptr[1] - ptr[7];
    z5 = ((((z12 - z10) * ((473))) >> (8)));
    tmp7 = z11 + z13;
    tmp6 = ((((z10) * ((669))) >> (8))) + z5 - tmp7;
    tmp5 = ((((z11 - z13) * ((362))) >> (8))) - tmp6;
    tmp4 = ((((z12) * ((277))) >> (8))) - z5 + tmp5;
    ptr[0] = (((tmp0 + tmp7) >> (2 + 3)));
    ;
    ptr[7] = (((tmp0 - tmp7) >> (2 + 3)));
    ;
    ptr[1] = (((tmp1 + tmp6) >> (2 + 3)));
    ;
    ptr[6] = (((tmp1 - tmp6) >> (2 + 3)));
    ;
    ptr[2] = (((tmp2 + tmp5) >> (2 + 3)));
    ;
    ptr[5] = (((tmp2 - tmp5) >> (2 + 3)));
    ;
    ptr[4] = (((tmp3 + tmp4) >> (2 + 3)));
    ;
    ptr[3] = (((tmp3 - tmp4) >> (2 + 3)));
    ;
  }
}
```