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

```asm
<TEA_encrypt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    $0x34,%eax
  cltd
  idivl  -0x2c(%rbp)
  add    $0x6,%eax
  mov    %eax,-0xc(%rbp)
  movl   $0x0,-0x14(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x18(%rbp)
L2:
  mov    -0x14(%rbp),%eax
  sub    $0x61c88647,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  sar    $0x2,%eax
  and    $0x3,%eax
  mov    %eax,-0x8(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L5
L11:
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x10(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x18(%rbp),%eax
  sar    $0x5,%eax
  mov    %eax,%ecx
  mov    -0x4(%rbp),%eax
  shl    $0x2,%eax
  xor    %eax,%ecx
  mov    -0x4(%rbp),%eax
  sar    $0x3,%eax
  mov    %eax,%esi
  mov    -0x18(%rbp),%eax
  shl    $0x4,%eax
  xor    %esi,%eax
  lea    (%rcx,%rax,1),%esi
  mov    -0x14(%rbp),%eax
  xor    -0x4(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%eax
  and    $0x3,%eax
  xor    -0x8(%rbp),%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdi
  mov    -0x38(%rbp),%rax
  add    %rdi,%rax
  mov    (%rax),%eax
  xor    -0x18(%rbp),%eax
  add    %ecx,%eax
  xor    %eax,%esi
  mov    %esi,%ecx
  mov    -0x10(%rbp),%eax
  lea    0x0(,%rax,4),%rsi
  mov    -0x28(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    (%rax),%eax
  mov    %eax,-0x18(%rbp)
  addl   $0x1,-0x10(%rbp)
L5:
  mov    -0x2c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x10(%rbp)
  jb     L11
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x18(%rbp),%eax
  sar    $0x5,%eax
  mov    %eax,%ecx
  mov    -0x4(%rbp),%eax
  shl    $0x2,%eax
  xor    %eax,%ecx
  mov    -0x4(%rbp),%eax
  sar    $0x3,%eax
  mov    %eax,%esi
  mov    -0x18(%rbp),%eax
  shl    $0x4,%eax
  xor    %esi,%eax
  lea    (%rcx,%rax,1),%esi
  mov    -0x14(%rbp),%eax
  xor    -0x4(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%eax
  and    $0x3,%eax
  xor    -0x8(%rbp),%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdi
  mov    -0x38(%rbp),%rax
  add    %rdi,%rax
  mov    (%rax),%eax
  xor    -0x18(%rbp),%eax
  add    %ecx,%eax
  mov    %esi,%ecx
  xor    %eax,%ecx
  mov    -0x2c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rsi
  mov    -0x28(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    (%rax),%eax
  mov    %eax,-0x18(%rbp)
  subl   $0x1,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  jne    L2
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void TEA_encrypt(uint32_t *v, int n, uint32_t const key[4]) {
  uint32_t y, z, sum;
  unsigned p, rounds, e;
  rounds = 6 + 52 / n;
  sum = 0;
  z = v[n - 1];
  do {
    sum += 0x9e3779b9;
    e = (sum >> 2) & 3;
    for (p = 0; p < n - 1; p++) {
      y = v[p + 1];
      z = v[p] += (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum ^ y) + (key[(p & 3) ^ e] ^ z)));
    }
    y = v[0];
    z = v[n - 1] += (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum ^ y) + (key[(p & 3) ^ e] ^ z)));
  } while (--rounds);
}
```