user: Translate the below assembly code into C programming language:

```asm
<_deal>:
  endbr64
  mov    %edi,%eax
  mov    %edi,%esi
  mov    %edi,%ecx
  mov    %edi,%edx
  shl    $0xf,%eax
  shr    $0x2,%esi
  shr    %ax
  shl    $0xf,%esi
  or     %eax,%esi
  shr    %ecx
  mov    %edi,%eax
  shl    $0xf,%ecx
  shr    $0x3,%eax
  shr    %cx
  shl    $0xf,%eax
  or     %ecx,%eax
  mov    %edi,%ecx
  shr    %si
  shr    $0x4,%ecx
  shr    %ax
  shl    $0xf,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x5,%esi
  shr    %cx
  shl    $0xf,%esi
  or     %eax,%esi
  mov    %edi,%eax
  shr    $0x6,%eax
  shr    %si
  shl    $0xf,%eax
  or     %ecx,%eax
  mov    %edi,%ecx
  shr    $0x7,%ecx
  shr    %ax
  shl    $0xf,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x8,%esi
  shr    %cx
  shl    $0xf,%esi
  or     %eax,%esi
  mov    %edi,%eax
  shr    $0x9,%eax
  shr    %si
  shl    $0xf,%eax
  or     %ecx,%eax
  mov    %edi,%ecx
  shr    $0xa,%ecx
  shr    %ax
  shl    $0xf,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0xb,%esi
  shr    %cx
  shl    $0xf,%esi
  or     %eax,%esi
  mov    %edi,%eax
  shr    $0xc,%eax
  shr    %si
  shl    $0xf,%eax
  or     %ecx,%eax
  mov    %edi,%ecx
  shr    $0xd,%ecx
  shr    %ax
  shl    $0xf,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0xe,%esi
  shr    %cx
  shl    $0xf,%esi
  or     %eax,%esi
  mov    %edi,%eax
  shr    $0xf,%eax
  shr    %si
  shl    $0xf,%eax
  or     %ecx,%eax
  mov    %edi,%ecx
  shr    $0x10,%ecx
  shr    %ax
  shl    $0xf,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x11,%esi
  shr    %cx
  shl    $0xf,%esi
  or     %eax,%esi
  mov    %edi,%eax
  shr    $0x12,%eax
  shr    %si
  shl    $0xf,%eax
  or     %ecx,%eax
  mov    %edi,%ecx
  shr    $0x13,%ecx
  shr    %ax
  shl    $0xf,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x14,%esi
  shr    %cx
  shl    $0xf,%esi
  or     %eax,%esi
  mov    %edi,%eax
  shr    $0x15,%eax
  shr    %si
  shl    $0xf,%eax
  or     %ecx,%eax
  mov    %edi,%ecx
  shr    $0x16,%ecx
  shr    %ax
  shl    $0xf,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x17,%esi
  shr    %cx
  shl    $0xf,%esi
  or     %eax,%esi
  mov    %edi,%eax
  shr    $0x18,%eax
  shr    %si
  shl    $0xf,%eax
  or     %ecx,%eax
  mov    %edi,%ecx
  shr    $0x19,%ecx
  shr    %ax
  shl    $0xf,%ecx
  shr    $0x1e,%edx
  or     %esi,%ecx
  mov    %edi,%esi
  shl    $0xf,%edx
  shr    $0x1a,%esi
  shr    %cx
  shl    $0xf,%esi
  or     %eax,%esi
  mov    %edi,%eax
  shr    $0x1b,%eax
  shr    %si
  shl    $0xf,%eax
  or     %ecx,%eax
  mov    %edi,%ecx
  shr    $0x1c,%ecx
  shr    %ax
  shl    $0xf,%ecx
  or     %esi,%ecx
  mov    %edi,%esi
  shr    $0x1d,%esi
  shr    %cx
  shl    $0xf,%esi
  or     %ecx,%edx
  or     %eax,%esi
  mov    %edi,%eax
  movzwl %dx,%edx
  shr    $0x1f,%eax
  shr    %si
  shl    $0xf,%eax
  or     %esi,%eax
  shl    $0x10,%eax
  or     %edx,%eax
  ret
```

assistant: ```c
unsigned int _deal(unsigned int src) {
  int i;
  unsigned short lo = 0, hi = 0;
  for (i = 0; i < 32; i += 2) {
    lo >>= 1;
    lo |= (src & 0x1) << 15;
    src >>= 1;
    hi >>= 1;
    hi |= (src & 0x1) << 15;
    src >>= 1;
  }
  return (hi << 16) | lo;
}
```