user: Please show me the C implementation that matches the assembly code listed below:

```asm
<encrypt_tea>:
  endbr64
  mov    0x4(%rdi),%eax
  mov    %rdi,%rsi
  mov    %eax,%ecx
  mov    %eax,%edx
  shr    $0x5,%ecx
  shl    $0x4,%edx
  sub    $0x5cbece94,%edx
  sub    $0x37fec15c,%ecx
  xor    %edx,%ecx
  lea    -0x61c88647(%rax),%edx
  xor    %edx,%ecx
  add    (%rdi),%ecx
  mov    %ecx,%edx
  mov    %ecx,%edi
  shr    $0x5,%edx
  shl    $0x4,%edi
  sub    $0x526f8883,%edi
  add    $0x7e95761e,%edx
  xor    %edi,%edx
  lea    -0x61c88647(%rcx),%edi
  xor    %edi,%edx
  add    %eax,%edx
  mov    %edx,%eax
  mov    %edx,%edi
  shr    $0x5,%eax
  shl    $0x4,%edi
  sub    $0x5cbece94,%edi
  sub    $0x37fec15c,%eax
  xor    %edi,%eax
  lea    0x3c6ef372(%rdx),%edi
  xor    %edi,%eax
  add    %ecx,%eax
  mov    %eax,%ecx
  mov    %eax,%edi
  shr    $0x5,%ecx
  shl    $0x4,%edi
  sub    $0x526f8883,%edi
  add    $0x7e95761e,%ecx
  xor    %edi,%ecx
  lea    0x3c6ef372(%rax),%edi
  xor    %edi,%ecx
  add    %edx,%ecx
  mov    %ecx,%edx
  mov    %ecx,%edi
  shl    $0x4,%edx
  shr    $0x5,%edi
  sub    $0x37fec15c,%edi
  sub    $0x5cbece94,%edx
  xor    %edi,%edx
  lea    -0x255992d5(%rcx),%edi
  xor    %edi,%edx
  add    %eax,%edx
  mov    %edx,%eax
  mov    %edx,%edi
  shl    $0x4,%eax
  shr    $0x5,%edi
  add    $0x7e95761e,%edi
  sub    $0x526f8883,%eax
  xor    %edi,%eax
  lea    -0x255992d5(%rdx),%edi
  xor    %edi,%eax
  add    %ecx,%eax
  mov    %eax,%ecx
  mov    %eax,%edi
  shl    $0x4,%ecx
  shr    $0x5,%edi
  sub    $0x37fec15c,%edi
  sub    $0x5cbece94,%ecx
  xor    %edi,%ecx
  lea    0x78dde6e4(%rax),%edi
  xor    %edi,%ecx
  add    %edx,%ecx
  mov    %ecx,%edx
  mov    %ecx,%edi
  shl    $0x4,%edx
  shr    $0x5,%edi
  add    $0x7e95761e,%edi
  sub    $0x526f8883,%edx
  xor    %edi,%edx
  lea    0x78dde6e4(%rcx),%edi
  xor    %edi,%edx
  add    %eax,%edx
  mov    %edx,%eax
  mov    %edx,%edi
  shl    $0x4,%eax
  shr    $0x5,%edi
  sub    $0x37fec15c,%edi
  sub    $0x5cbece94,%eax
  xor    %edi,%eax
  lea    0x1715609d(%rdx),%edi
  xor    %edi,%eax
  add    %ecx,%eax
  mov    %eax,%ecx
  mov    %eax,%edi
  shl    $0x4,%ecx
  sub    $0x526f8883,%ecx
  shr    $0x5,%edi
  add    $0x7e95761e,%edi
  xor    %edi,%ecx
  lea    0x1715609d(%rax),%edi
  xor    %edi,%ecx
  add    %edx,%ecx
  mov    %ecx,%edx
  mov    %ecx,%edi
  shl    $0x4,%edx
  shr    $0x5,%edi
  sub    $0x37fec15c,%edi
  sub    $0x5cbece94,%edx
  xor    %edi,%edx
  lea    -0x4ab325aa(%rcx),%edi
  xor    %edi,%edx
  add    %eax,%edx
  mov    %edx,%eax
  mov    %edx,%edi
  shl    $0x4,%eax
  shr    $0x5,%edi
  add    $0x7e95761e,%edi
  sub    $0x526f8883,%eax
  xor    %edi,%eax
  lea    -0x4ab325aa(%rdx),%edi
  xor    %edi,%eax
  add    %ecx,%eax
  mov    %eax,%ecx
  mov    %eax,%edi
  shl    $0x4,%ecx
  shr    $0x5,%edi
  sub    $0x37fec15c,%edi
  sub    $0x5cbece94,%ecx
  xor    %edi,%ecx
  lea    0x5384540f(%rax),%edi
  xor    %edi,%ecx
  add    %edx,%ecx
  mov    %ecx,%edx
  mov    %ecx,%edi
  shl    $0x4,%edx
  shr    $0x5,%edi
  add    $0x7e95761e,%edi
  sub    $0x526f8883,%edx
  xor    %edi,%edx
  lea    0x5384540f(%rcx),%edi
  xor    %edi,%edx
  add    %eax,%edx
  mov    %edx,%eax
  mov    %edx,%edi
  shl    $0x4,%eax
  shr    $0x5,%edi
  sub    $0x37fec15c,%edi
  sub    $0x5cbece94,%eax
  xor    %edi,%eax
  lea    -0xe443238(%rdx),%edi
  xor    %edi,%eax
  add    %ecx,%eax
  mov    %eax,%ecx
  mov    %eax,%edi
  mov    %eax,(%rsi)
  sub    $0xe443238,%eax
  shl    $0x4,%ecx
  shr    $0x5,%edi
  sub    $0x526f8883,%ecx
  add    $0x7e95761e,%edi
  xor    %edi,%ecx
  xor    %ecx,%eax
  add    %edx,%eax
  mov    %eax,0x4(%rsi)
  ret
```

assistant: ```c
void encrypt_tea(unsigned int *arg) {
  const unsigned int key[] = {0xa341316c, 0xc8013ea4, 0xad90777d, 0x7e95761e};
  unsigned int v0 = arg[0], v1 = arg[1];
  unsigned int sum = 0;
  unsigned int delta = 0x9e3779b9;
  for (int i = 0; i < 8; i++) {
    sum += delta;
    v0 += ((v1 << 4) + key[0]) ^ (v1 + sum) ^ ((v1 >> 5) + key[1]);
    v1 += ((v0 << 4) + key[2]) ^ (v0 + sum) ^ ((v0 >> 5) + key[3]);
  }
  arg[0] = v0;
  arg[1] = v1;
}
```