user: 请将以下的汇编代码转换成C语言代码：

```asm
<compression_G>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x50,%rsp
  mov    %rdi,-0x2038(%rbp)
  mov    %rsi,-0x2040(%rbp)
  mov    %rdx,-0x2048(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x2048(%rbp),%rdx
  mov    -0x2040(%rbp),%rcx
  lea    -0x2010(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <xor_blocks@plt>
  movl   $0x0,-0x202c(%rbp)
  movl   $0x0,-0x2028(%rbp)
  jmp    L94
L19:
  movl   $0x0,-0x2024(%rbp)
  jmp    L42
L71:
  mov    -0x202c(%rbp),%eax
  shl    $0x4,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    -0x2010(%rbp),%rax
  lea    (%rax,%rdx,1),%rcx
  lea    -0x1010(%rbp),%rdx
  mov    -0x2024(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x2028(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rsi,%rax
  shl    $0x6,%rax
  add    %rdx,%rax
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  addl   $0x1,-0x202c(%rbp)
  addl   $0x1,-0x2024(%rbp)
L42:
  cmpl   $0x7,-0x2024(%rbp)
  jle    L71
  addl   $0x1,-0x2028(%rbp)
L94:
  cmpl   $0x7,-0x2028(%rbp)
  jle    L19
  movl   $0x0,-0x2020(%rbp)
  jmp    L22
L61:
  lea    -0x1010(%rbp),%rdx
  mov    -0x2020(%rbp),%eax
  cltq
  shl    $0x9,%rax
  add    $0x1c0,%rax
  lea    (%rdx,%rax,1),%r8
  lea    -0x1010(%rbp),%rdx
  mov    -0x2020(%rbp),%eax
  cltq
  shl    $0x9,%rax
  add    $0x180,%rax
  lea    (%rdx,%rax,1),%rdi
  lea    -0x1010(%rbp),%rdx
  mov    -0x2020(%rbp),%eax
  cltq
  shl    $0x9,%rax
  add    $0x140,%rax
  lea    (%rdx,%rax,1),%r9
  lea    -0x1010(%rbp),%rdx
  mov    -0x2020(%rbp),%eax
  cltq
  shl    $0x9,%rax
  add    $0x100,%rax
  lea    (%rdx,%rax,1),%r10
  lea    -0x1010(%rbp),%rdx
  mov    -0x2020(%rbp),%eax
  cltq
  shl    $0x9,%rax
  add    $0xc0,%rax
  lea    (%rdx,%rax,1),%rcx
  lea    -0x1010(%rbp),%rdx
  mov    -0x2020(%rbp),%eax
  cltq
  shl    $0x9,%rax
  sub    $0xffffffffffffff80,%rax
  add    %rax,%rdx
  lea    -0x1010(%rbp),%rsi
  mov    -0x2020(%rbp),%eax
  cltq
  shl    $0x9,%rax
  add    $0x40,%rax
  add    %rax,%rsi
  lea    -0x1010(%rbp),%r11
  mov    -0x2020(%rbp),%eax
  cltq
  shl    $0x9,%rax
  add    %r11,%rax
  push   %r8
  push   %rdi
  mov    %r10,%r8
  mov    %rax,%rdi
  call   <P@plt>
  add    $0x10,%rsp
  addl   $0x1,-0x2020(%rbp)
L22:
  cmpl   $0x7,-0x2020(%rbp)
  jle    L61
  movl   $0x0,-0x201c(%rbp)
  jmp    L64
L100:
  lea    -0x1010(%rbp),%rdx
  mov    -0x201c(%rbp),%eax
  cltq
  add    $0x38,%rax
  shl    $0x6,%rax
  lea    (%rdx,%rax,1),%r8
  lea    -0x1010(%rbp),%rdx
  mov    -0x201c(%rbp),%eax
  cltq
  add    $0x30,%rax
  shl    $0x6,%rax
  lea    (%rdx,%rax,1),%rdi
  lea    -0x1010(%rbp),%rdx
  mov    -0x201c(%rbp),%eax
  cltq
  add    $0x28,%rax
  shl    $0x6,%rax
  lea    (%rdx,%rax,1),%r9
  lea    -0x1010(%rbp),%rdx
  mov    -0x201c(%rbp),%eax
  cltq
  add    $0x20,%rax
  shl    $0x6,%rax
  lea    (%rdx,%rax,1),%r10
  lea    -0x1010(%rbp),%rdx
  mov    -0x201c(%rbp),%eax
  cltq
  add    $0x18,%rax
  shl    $0x6,%rax
  lea    (%rdx,%rax,1),%rcx
  lea    -0x1010(%rbp),%rdx
  mov    -0x201c(%rbp),%eax
  cltq
  add    $0x10,%rax
  shl    $0x6,%rax
  add    %rax,%rdx
  lea    -0x1010(%rbp),%rsi
  mov    -0x201c(%rbp),%eax
  cltq
  add    $0x8,%rax
  shl    $0x6,%rax
  add    %rax,%rsi
  lea    -0x1010(%rbp),%r11
  mov    -0x201c(%rbp),%eax
  cltq
  shl    $0x6,%rax
  add    %r11,%rax
  push   %r8
  push   %rdi
  mov    %r10,%r8
  mov    %rax,%rdi
  call   <P@plt>
  add    $0x10,%rsp
  addl   $0x1,-0x201c(%rbp)
L64:
  cmpl   $0x7,-0x201c(%rbp)
  jle    L100
  movl   $0x0,-0x202c(%rbp)
  movl   $0x0,-0x2018(%rbp)
  jmp    L101
L111:
  movl   $0x0,-0x2014(%rbp)
  jmp    L14
L92:
  lea    -0x1010(%rbp),%rdx
  mov    -0x2014(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x2018(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  shl    $0x6,%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x202c(%rbp),%eax
  shl    $0x4,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    -0x2010(%rbp),%rax
  add    %rdx,%rax
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  addl   $0x1,-0x202c(%rbp)
  addl   $0x1,-0x2014(%rbp)
L14:
  cmpl   $0x7,-0x2014(%rbp)
  jle    L92
  addl   $0x1,-0x2018(%rbp)
L101:
  cmpl   $0x7,-0x2018(%rbp)
  jle    L111
  mov    -0x2048(%rbp),%rdx
  mov    -0x2040(%rbp),%rcx
  mov    -0x2038(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <xor_blocks@plt>
  lea    -0x2010(%rbp),%rdx
  mov    -0x2038(%rbp),%rcx
  mov    -0x2038(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <xor_blocks@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L25
  call   <__stack_chk_fail@plt>
L25:
  leave
  ret
```

assistant: ```c
void compression_G(uint8_t *Result, uint8_t *X, uint8_t *Y) {
  uint8_t R_array[1024];
  xor_blocks(R_array, X, Y);
  uint8_t R[8][8][16];
  int h = 0;
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      memcpy(R[i][j], R_array + 16 * h, 16);
      h++;
    }
  }
  for (int i = 0; i < 8; i++) {
    P(R[i][0], R[i][1], R[i][2], R[i][3], R[i][4], R[i][5], R[i][6], R[i][7]);
  }
  for (int j = 0; j < 8; j++) {
    P(R[0][j], R[1][j], R[2][j], R[3][j], R[4][j], R[5][j], R[6][j], R[7][j]);
  }
  h = 0;
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      memcpy(R_array + 16 * h, R[i][j], 16);
      h++;
    }
  }
  xor_blocks(Result, X, Y);
  xor_blocks(Result, Result, R_array);
}
```