user: 请从给定的汇编指令推导出C源代码：

```asm
<trasp64_64_88ccw>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x78(%rbp)
  movl   $0x0,-0x64(%rbp)
  jmp    L214
L213:
  movl   $0x0,-0x68(%rbp)
  jmp    L120
L65:
  mov    -0x64(%rbp),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x64(%rbp),%eax
  lea    0x20(%rax),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  mov    %eax,%esi
  mov    -0x8(%rbp),%rax
  shl    $0x20,%rax
  mov    %rax,%rcx
  mov    -0x64(%rbp),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  or     %rcx,%rsi
  mov    %rsi,%rdx
  mov    %rdx,(%rax)
  mov    -0x10(%rbp),%rax
  shr    $0x20,%rax
  mov    %rax,%rcx
  movabs $0xffffffff00000000,%rax
  and    -0x8(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x64(%rbp),%eax
  lea    0x20(%rax),%esi
  mov    -0x68(%rbp),%eax
  add    %esi,%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x78(%rbp),%rax
  add    %rsi,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  addl   $0x1,-0x68(%rbp)
L120:
  cmpl   $0x1f,-0x68(%rbp)
  jle    L65
  addl   $0x40,-0x64(%rbp)
L214:
  cmpl   $0x3f,-0x64(%rbp)
  jle    L213
  movl   $0x0,-0x64(%rbp)
  jmp    L99
L151:
  movl   $0x0,-0x68(%rbp)
  jmp    L57
L76:
  mov    -0x64(%rbp),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x64(%rbp),%eax
  lea    0x10(%rax),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x18(%rbp)
  movabs $0xffff0000ffff,%rax
  and    -0x20(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  shl    $0x10,%rax
  mov    %rax,%rcx
  movabs $0xffff0000ffff0000,%rax
  mov    %rcx,%rsi
  and    %rax,%rsi
  mov    -0x64(%rbp),%ecx
  mov    -0x68(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  or     %rsi,%rdx
  mov    %rdx,(%rax)
  mov    -0x20(%rbp),%rax
  shr    $0x10,%rax
  mov    %rax,%rdx
  movabs $0xffff0000ffff,%rax
  mov    %rdx,%rcx
  and    %rax,%rcx
  movabs $0xffff0000ffff0000,%rax
  and    -0x18(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x64(%rbp),%eax
  lea    0x10(%rax),%esi
  mov    -0x68(%rbp),%eax
  add    %esi,%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x78(%rbp),%rax
  add    %rsi,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  addl   $0x1,-0x68(%rbp)
L57:
  cmpl   $0xf,-0x68(%rbp)
  jle    L76
  addl   $0x20,-0x64(%rbp)
L99:
  cmpl   $0x3f,-0x64(%rbp)
  jle    L151
  movl   $0x0,-0x64(%rbp)
  jmp    L143
L63:
  movl   $0x0,-0x68(%rbp)
  jmp    L167
L169:
  mov    -0x64(%rbp),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x64(%rbp),%eax
  lea    0x8(%rax),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x28(%rbp)
  movabs $0xff00ff00ff00ff,%rax
  and    -0x30(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  shl    $0x8,%rax
  mov    %rax,%rcx
  movabs $0xff00ff00ff00ff00,%rax
  mov    %rcx,%rsi
  and    %rax,%rsi
  mov    -0x64(%rbp),%ecx
  mov    -0x68(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  or     %rsi,%rdx
  mov    %rdx,(%rax)
  mov    -0x30(%rbp),%rax
  shr    $0x8,%rax
  mov    %rax,%rdx
  movabs $0xff00ff00ff00ff,%rax
  mov    %rdx,%rcx
  and    %rax,%rcx
  movabs $0xff00ff00ff00ff00,%rax
  and    -0x28(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x64(%rbp),%eax
  lea    0x8(%rax),%esi
  mov    -0x68(%rbp),%eax
  add    %esi,%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x78(%rbp),%rax
  add    %rsi,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  addl   $0x1,-0x68(%rbp)
L167:
  cmpl   $0x7,-0x68(%rbp)
  jle    L169
  addl   $0x10,-0x64(%rbp)
L143:
  cmpl   $0x3f,-0x64(%rbp)
  jle    L63
  movl   $0x0,-0x64(%rbp)
  jmp    L199
L145:
  movl   $0x0,-0x68(%rbp)
  jmp    L184
L194:
  mov    -0x64(%rbp),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x64(%rbp),%eax
  lea    0x4(%rax),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x40(%rbp),%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  movabs $0xf0f0f0f0f0f0f0f0,%rax
  mov    %rdx,%rsi
  and    %rax,%rsi
  movabs $0xf0f0f0f0f0f0f0f,%rax
  and    -0x38(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x64(%rbp),%ecx
  mov    -0x68(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  or     %rsi,%rdx
  mov    %rdx,(%rax)
  movabs $0xf0f0f0f0f0f0f0f0,%rax
  and    -0x40(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x38(%rbp),%rax
  shr    $0x4,%rax
  mov    %rax,%rcx
  movabs $0xf0f0f0f0f0f0f0f,%rax
  and    %rax,%rcx
  mov    -0x64(%rbp),%eax
  lea    0x4(%rax),%esi
  mov    -0x68(%rbp),%eax
  add    %esi,%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x78(%rbp),%rax
  add    %rsi,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  addl   $0x1,-0x68(%rbp)
L184:
  cmpl   $0x3,-0x68(%rbp)
  jle    L194
  addl   $0x8,-0x64(%rbp)
L199:
  cmpl   $0x3f,-0x64(%rbp)
  jle    L145
  movl   $0x0,-0x64(%rbp)
  jmp    L33
L155:
  movl   $0x0,-0x68(%rbp)
  jmp    L85
L222:
  mov    -0x64(%rbp),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x50(%rbp)
  mov    -0x64(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x50(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  movabs $0xcccccccccccccccc,%rax
  mov    %rdx,%rsi
  and    %rax,%rsi
  movabs $0x3333333333333333,%rax
  and    -0x48(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x64(%rbp),%ecx
  mov    -0x68(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  or     %rsi,%rdx
  mov    %rdx,(%rax)
  movabs $0xcccccccccccccccc,%rax
  and    -0x50(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x48(%rbp),%rax
  shr    $0x2,%rax
  mov    %rax,%rcx
  movabs $0x3333333333333333,%rax
  and    %rax,%rcx
  mov    -0x64(%rbp),%eax
  lea    0x2(%rax),%esi
  mov    -0x68(%rbp),%eax
  add    %esi,%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x78(%rbp),%rax
  add    %rsi,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  addl   $0x1,-0x68(%rbp)
L85:
  cmpl   $0x1,-0x68(%rbp)
  jle    L222
  addl   $0x4,-0x64(%rbp)
L33:
  cmpl   $0x3f,-0x64(%rbp)
  jle    L155
  movl   $0x0,-0x64(%rbp)
  jmp    L97
L165:
  movl   $0x0,-0x68(%rbp)
  jmp    L237
L4:
  mov    -0x64(%rbp),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x60(%rbp)
  mov    -0x64(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x68(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x58(%rbp)
  mov    -0x60(%rbp),%rax
  lea    (%rax,%rax,1),%rdx
  movabs $0xaaaaaaaaaaaaaaaa,%rax
  mov    %rdx,%rsi
  and    %rax,%rsi
  movabs $0x5555555555555555,%rax
  and    -0x58(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x64(%rbp),%ecx
  mov    -0x68(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  or     %rsi,%rdx
  mov    %rdx,(%rax)
  movabs $0xaaaaaaaaaaaaaaaa,%rax
  and    -0x60(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x58(%rbp),%rax
  shr    %rax
  mov    %rax,%rcx
  movabs $0x5555555555555555,%rax
  and    %rax,%rcx
  mov    -0x64(%rbp),%eax
  lea    0x1(%rax),%esi
  mov    -0x68(%rbp),%eax
  add    %esi,%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x78(%rbp),%rax
  add    %rsi,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  addl   $0x1,-0x68(%rbp)
L237:
  cmpl   $0x0,-0x68(%rbp)
  jle    L4
  addl   $0x2,-0x64(%rbp)
L97:
  cmpl   $0x3f,-0x64(%rbp)
  jle    L165
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void trasp64_64_88ccw(unsigned char *data) {
  int i, j;
  for (j = 0; j < 64; j += 64) {
    unsigned long long int t, b;
    for (i = 0; i < 32; i++) {
      t = ((unsigned long long int *)data)[j + i];
      b = ((unsigned long long int *)data)[j + 32 + i];
      ((unsigned long long int *)data)[j + i] = (t & 0x00000000ffffffffULL) | ((b) << 32);
      ((unsigned long long int *)data)[j + 32 + i] = ((t) >> 32) | (b & 0xffffffff00000000ULL);
    }
  }
  for (j = 0; j < 64; j += 32) {
    unsigned long long int t, b;
    for (i = 0; i < 16; i++) {
      t = ((unsigned long long int *)data)[j + i];
      b = ((unsigned long long int *)data)[j + 16 + i];
      ((unsigned long long int *)data)[j + i] = (t & 0x0000ffff0000ffffULL) | ((b & 0x0000ffff0000ffffULL) << 16);
      ((unsigned long long int *)data)[j + 16 + i] = ((t & 0xffff0000ffff0000ULL) >> 16) | (b & 0xffff0000ffff0000ULL);
    }
  }
  for (j = 0; j < 64; j += 16) {
    unsigned long long int t, b;
    for (i = 0; i < 8; i++) {
      t = ((unsigned long long int *)data)[j + i];
      b = ((unsigned long long int *)data)[j + 8 + i];
      ((unsigned long long int *)data)[j + i] = (t & 0x00ff00ff00ff00ffULL) | ((b & 0x00ff00ff00ff00ffULL) << 8);
      ((unsigned long long int *)data)[j + 8 + i] = ((t & 0xff00ff00ff00ff00ULL) >> 8) | (b & 0xff00ff00ff00ff00ULL);
    }
  }
  for (j = 0; j < 64; j += 8) {
    unsigned long long int t, b;
    for (i = 0; i < 4; i++) {
      t = ((unsigned long long int *)data)[j + i];
      b = ((unsigned long long int *)data)[j + 4 + i];
      ((unsigned long long int *)data)[j + i] = ((t & 0x0f0f0f0f0f0f0f0fULL) << 4) | (b & 0x0f0f0f0f0f0f0f0fULL);
      ((unsigned long long int *)data)[j + 4 + i] = (t & 0xf0f0f0f0f0f0f0f0ULL) | ((b & 0xf0f0f0f0f0f0f0f0ULL) >> 4);
    }
  }
  for (j = 0; j < 64; j += 4) {
    unsigned long long int t, b;
    for (i = 0; i < 2; i++) {
      t = ((unsigned long long int *)data)[j + i];
      b = ((unsigned long long int *)data)[j + 2 + i];
      ((unsigned long long int *)data)[j + i] = ((t & 0x3333333333333333ULL) << 2) | (b & 0x3333333333333333ULL);
      ((unsigned long long int *)data)[j + 2 + i] = (t & 0xccccccccccccccccULL) | ((b & 0xccccccccccccccccULL) >> 2);
    }
  }
  for (j = 0; j < 64; j += 2) {
    unsigned long long int t, b;
    for (i = 0; i < 1; i++) {
      t = ((unsigned long long int *)data)[j + i];
      b = ((unsigned long long int *)data)[j + 1 + i];
      ((unsigned long long int *)data)[j + i] = ((t & 0x5555555555555555ULL) << 1) | (b & 0x5555555555555555ULL);
      ((unsigned long long int *)data)[j + 1 + i] = (t & 0xaaaaaaaaaaaaaaaaULL) | ((b & 0xaaaaaaaaaaaaaaaaULL) >> 1);
    }
  }
}
```