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

```asm
<HashGen>:
  endbr64
  mov    %rdi,%rax
  mov    %esi,%edi
  sub    $0x4,%edi
  je     L63
  lea    -0x5(%rsi),%edx
  cmp    $0xe,%edx
  jbe    L53
  lea    0x2(%rax),%rdx
  pxor   %xmm5,%xmm5
  pxor   %xmm4,%xmm4
  mov    %edi,%ecx
  shr    $0x4,%ecx
  pxor   %xmm0,%xmm0
  sub    $0x1,%ecx
  shl    $0x4,%rcx
  lea    0x12(%rax,%rcx,1),%rcx
  nop
L79:
  movdqu 0x1(%rdx),%xmm3
  movdqu -0x2(%rdx),%xmm10
  add    $0x10,%rdx
  movdqu -0x11(%rdx),%xmm6
  movdqu -0x10(%rdx),%xmm1
  movdqa %xmm3,%xmm8
  punpckhbw %xmm4,%xmm3
  movdqa %xmm10,%xmm2
  punpcklbw %xmm4,%xmm8
  punpcklbw %xmm4,%xmm2
  punpckhbw %xmm4,%xmm10
  movdqa %xmm8,%xmm11
  punpckhwd %xmm0,%xmm8
  movdqa %xmm6,%xmm9
  punpcklwd %xmm0,%xmm11
  movdqa %xmm1,%xmm7
  punpcklbw %xmm4,%xmm9
  pxor   %xmm11,%xmm8
  movdqa %xmm3,%xmm11
  punpcklbw %xmm4,%xmm7
  punpcklwd %xmm0,%xmm11
  psllw  $0x8,%xmm9
  punpckhwd %xmm0,%xmm3
  pxor   %xmm11,%xmm8
  movdqa %xmm2,%xmm11
  punpcklwd %xmm0,%xmm2
  punpckhwd %xmm0,%xmm11
  pslld  $0x18,%xmm8
  punpckhbw %xmm4,%xmm1
  pxor   %xmm11,%xmm2
  movdqa %xmm10,%xmm11
  punpcklwd %xmm0,%xmm10
  punpckhwd %xmm0,%xmm11
  pslld  $0x18,%xmm3
  punpckhbw %xmm4,%xmm6
  pxor   %xmm11,%xmm10
  psllw  $0x8,%xmm6
  pxor   %xmm10,%xmm2
  movdqa %xmm9,%xmm10
  punpckhwd %xmm0,%xmm9
  pxor   %xmm2,%xmm8
  movdqa %xmm7,%xmm2
  punpckhwd %xmm0,%xmm7
  punpcklwd %xmm0,%xmm2
  pslld  $0x10,%xmm7
  punpcklwd %xmm0,%xmm10
  pslld  $0x10,%xmm2
  pxor   %xmm9,%xmm7
  pxor   %xmm10,%xmm2
  pxor   %xmm7,%xmm2
  pxor   %xmm3,%xmm2
  movdqa %xmm6,%xmm3
  punpckhwd %xmm0,%xmm6
  pxor   %xmm2,%xmm8
  movdqa %xmm1,%xmm2
  punpckhwd %xmm0,%xmm1
  punpcklwd %xmm0,%xmm2
  pslld  $0x10,%xmm1
  punpcklwd %xmm0,%xmm3
  pslld  $0x10,%xmm2
  pxor   %xmm6,%xmm1
  pxor   %xmm3,%xmm2
  pxor   %xmm2,%xmm1
  pxor   %xmm5,%xmm1
  movdqa %xmm8,%xmm5
  pxor   %xmm1,%xmm5
  cmp    %rcx,%rdx
  jne    L79
  movdqa %xmm5,%xmm0
  mov    %edi,%r9d
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%r9d
  pxor   %xmm0,%xmm5
  movdqa %xmm5,%xmm0
  psrldq $0x4,%xmm0
  pxor   %xmm0,%xmm5
  movd   %xmm5,%r8d
  test   $0xf,%dil
  je     L76
L66:
  lea    0x1(%r9),%r10d
  lea    -0x6(%rsi),%edx
  push   %r15
  movslq %r9d,%r11
  cmp    %edx,%r10d
  push   %r14
  lea    (%rax,%r11,1),%rcx
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  setb   %bl
  cmp    %edi,%r10d
  setbe  %sil
  test   %sil,%bl
  je     L57
  cmp    $0x1,%edi
  jbe    L57
  movzbl 0x1(%rcx),%r11d
  movzbl 0x2(%rcx),%r14d
  add    $0x3,%r9d
  movzbl (%rcx),%ebp
  movslq %r9d,%rsi
  mov    %r11d,%ebx
  mov    %r14d,%r13d
L54:
  movzbl (%rax,%rsi,1),%r9d
  mov    %r14d,%r12d
  mov    %ebx,%ecx
  mov    %r14d,%r10d
  shl    $0x8,%r11d
  mov    %ebp,%r14d
  xor    %r13d,%ecx
  shl    $0x10,%r12d
  xor    %r11d,%r12d
  xor    %r14d,%ecx
  movzbl 0x1(%rax,%rsi,1),%r11d
  mov    %r9d,%r13d
  movzbl 0x2(%rax,%rsi,1),%r14d
  shl    $0x18,%r13d
  movzbl %cl,%ecx
  mov    %r9d,%ebp
  xor    %r13d,%ecx
  mov    %r11d,%r13d
  shl    $0x8,%r10d
  mov    %r11d,%ebx
  shl    $0x18,%r13d
  mov    %r14d,%r15d
  xor    %r13d,%ecx
  shl    $0x18,%r15d
  mov    %r14d,%r13d
  xor    %r15d,%ecx
  xor    %r12d,%ecx
  mov    %r9d,%r12d
  shl    $0x8,%r9d
  shl    $0x10,%r12d
  xor    %r12d,%r10d
  xor    %r10d,%ecx
  mov    %r11d,%r10d
  shl    $0x10,%r10d
  xor    %r10d,%r9d
  xor    %r9d,%ecx
  mov    %esi,%r9d
  add    $0x3,%rsi
  xor    %ecx,%r8d
  lea    -0x2(%rsi),%ecx
  cmp    %ecx,%edx
  ja     L54
  movslq %r9d,%r11
L57:
  add    %r11,%rax
  sub    %eax,%r9d
  nopl   0x0(%rax,%rax,1)
L61:
  movzbl 0x2(%rax),%edx
  movzbl 0x1(%rax),%ecx
  add    $0x1,%rax
  movzbl -0x1(%rax),%esi
  shl    $0x8,%ecx
  shl    $0x10,%edx
  xor    %ecx,%edx
  movzbl 0x2(%rax),%ecx
  shl    $0x18,%ecx
  xor    %esi,%ecx
  xor    %ecx,%edx
  xor    %edx,%r8d
  lea    (%r9,%rax,1),%edx
  cmp    %edx,%edi
  ja     L61
  pop    %rbx
  mov    %r8d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L63:
  xor    %r8d,%r8d
L76:
  mov    %r8d,%eax
  ret
L53:
  xor    %r9d,%r9d
  xor    %r8d,%r8d
  jmp    L66
```

assistant: ```c
unsigned int HashGen(unsigned char *file, unsigned int size) {
  unsigned int HASH = 0;
  int i;
  for (i = 0; i < size - 4; i++) {
    HASH ^= file[i];
    HASH ^= file[i + 1] << 8;
    HASH ^= file[i + 2] << 16;
    HASH ^= file[i + 3] << 24;
  }
  return HASH;
}
```