user: What is the c source code of the assembly code below:

```asm
<xy2tile>:
  endbr64
  mov    %edi,%ecx
  mov    %esi,%eax
  shr    $0xf,%esi
  mov    %edi,%edx
  shr    $0xe,%ecx
  and    $0x1,%esi
  and    $0x2,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0xe,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0xe,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0xd,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0xd,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0xc,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0xc,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0xb,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0xb,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0xa,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0xa,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x9,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0x9,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x8,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0x8,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x7,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0x7,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x6,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0x6,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x5,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0x5,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x4,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0x4,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x3,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  and    $0x1,%edx
  shr    $0x3,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x2,%esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  shr    $0x2,%ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    %esi
  add    %ecx,%ecx
  and    $0x1,%esi
  or     %ecx,%esi
  mov    %eax,%ecx
  and    $0x1,%eax
  shr    %ecx
  add    %esi,%esi
  and    $0x1,%ecx
  or     %esi,%ecx
  add    %ecx,%ecx
  or     %ecx,%edx
  add    %edx,%edx
  or     %edx,%eax
  ret
```

assistant: ```c
unsigned int xy2tile(unsigned int x, unsigned int y) {
  unsigned int tile = 0;
  int i;
  for (i = 15; i >= 0; i--) {
    tile = (tile << 1) | ((x >> i) & 1);
    tile = (tile << 1) | ((y >> i) & 1);
  }
  return tile;
}
```