user: Converte this assembly snippet into its equivalent C code:

```asm
<mdfour64>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  mov    %r8,%rbp
  push   %rbx
  mov    %rdx,%rbx
  sub    $0xa8,%rsp
  mov    (%rcx),%r8d
  mov    (%rdx),%r9d
  mov    0x0(%rbp),%ecx
  movdqu (%rdi),%xmm0
  movdqu 0x10(%rdi),%xmm1
  movdqu 0x20(%rdi),%xmm2
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  movdqu 0x30(%rdi),%xmm3
  mov    (%rsi),%r15d
  mov    %r9d,%edi
  mov    %r8d,%esi
  mov    %ecx,%edx
  movaps %xmm0,0x50(%rsp)
  movaps %xmm1,0x60(%rsp)
  movaps %xmm2,0x70(%rsp)
  movaps %xmm3,0x80(%rsp)
  mov    %r8d,0x48(%rsp)
  mov    %r9d,0x44(%rsp)
  mov    %ecx,0x4c(%rsp)
  call   <F@plt>
  mov    0x50(%rsp),%r10d
  mov    $0x3,%esi
  mov    %r15d,0x38(%rsp)
  lea    (%rax,%r15,1),%edi
  add    %r10d,%edi
  mov    %r10d,0x40(%rsp)
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <F@plt>
  mov    0x54(%rsp),%ecx
  mov    $0x7,%esi
  lea    (%r14,%rax,1),%edi
  add    %ecx,%edi
  mov    %ecx,0x4(%rsp)
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <F@plt>
  mov    0x58(%rsp),%r15d
  mov    $0xb,%esi
  lea    (%r14,%rax,1),%edi
  add    %r15d,%edi
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <F@plt>
  mov    0x5c(%rsp),%edx
  mov    $0x13,%esi
  lea    (%r14,%rax,1),%edi
  add    %edx,%edi
  mov    %edx,0x8(%rsp)
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <F@plt>
  mov    0x60(%rsp),%esi
  lea    (%r14,%rax,1),%edi
  add    %esi,%edi
  mov    %esi,0xc(%rsp)
  mov    $0x3,%esi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <F@plt>
  mov    0x64(%rsp),%r9d
  mov    $0x7,%esi
  lea    (%r14,%rax,1),%edi
  add    %r9d,%edi
  mov    %r9d,0x10(%rsp)
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <F@plt>
  mov    0x68(%rsp),%r8d
  mov    $0xb,%esi
  lea    (%r14,%rax,1),%edi
  add    %r8d,%edi
  mov    %r8d,0x14(%rsp)
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <F@plt>
  mov    0x6c(%rsp),%r10d
  mov    $0x13,%esi
  lea    (%r14,%rax,1),%edi
  add    %r10d,%edi
  mov    %r10d,0x18(%rsp)
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <F@plt>
  mov    0x70(%rsp),%r11d
  mov    $0x3,%esi
  lea    (%r14,%rax,1),%edi
  add    %r11d,%edi
  mov    %r11d,0x1c(%rsp)
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <F@plt>
  mov    0x74(%rsp),%ecx
  mov    $0x7,%esi
  lea    (%r14,%rax,1),%edi
  add    %ecx,%edi
  mov    %ecx,0x20(%rsp)
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <F@plt>
  mov    0x78(%rsp),%r11d
  mov    $0xb,%esi
  lea    (%r14,%rax,1),%edi
  add    %r11d,%edi
  mov    %r11d,0x3c(%rsp)
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <F@plt>
  mov    0x7c(%rsp),%edx
  mov    $0x13,%esi
  lea    (%r14,%rax,1),%edi
  add    %edx,%edi
  mov    %edx,0x24(%rsp)
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <F@plt>
  mov    0x80(%rsp),%esi
  lea    (%r14,%rax,1),%edi
  add    %esi,%edi
  mov    %esi,0x28(%rsp)
  mov    $0x3,%esi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <F@plt>
  mov    0x84(%rsp),%r9d
  mov    $0x7,%esi
  lea    (%r14,%rax,1),%edi
  add    %r9d,%edi
  mov    %r9d,0x2c(%rsp)
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <F@plt>
  mov    0x88(%rsp),%r8d
  mov    $0xb,%esi
  lea    (%r14,%rax,1),%edi
  add    %r8d,%edi
  mov    %r8d,0x30(%rsp)
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <F@plt>
  mov    0x8c(%rsp),%r10d
  mov    $0x13,%esi
  lea    (%r14,%rax,1),%edi
  add    %r10d,%edi
  mov    %r10d,0x34(%rsp)
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <G@plt>
  mov    0x40(%rsp),%r10d
  mov    $0x3,%esi
  add    %eax,%r14d
  lea    0x5a827999(%r10,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <G@plt>
  mov    0xc(%rsp),%esi
  add    %eax,%r14d
  lea    0x5a827999(%rsi,%r14,1),%edi
  mov    $0x5,%esi
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <G@plt>
  mov    0x1c(%rsp),%r11d
  mov    $0x9,%esi
  add    %eax,%r14d
  lea    0x5a827999(%r11,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <G@plt>
  mov    $0xd,%esi
  add    %eax,%r14d
  mov    0x28(%rsp),%eax
  lea    0x5a827999(%rax,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <G@plt>
  mov    0x4(%rsp),%ecx
  mov    $0x3,%esi
  add    %eax,%r14d
  lea    0x5a827999(%rcx,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <G@plt>
  mov    0x10(%rsp),%r9d
  mov    $0x5,%esi
  add    %eax,%r14d
  lea    0x5a827999(%r9,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <G@plt>
  mov    $0x9,%esi
  add    %eax,%r14d
  mov    0x20(%rsp),%eax
  lea    0x5a827999(%rax,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <G@plt>
  mov    0x2c(%rsp),%edi
  mov    $0xd,%esi
  add    %eax,%r14d
  lea    0x5a827999(%rdi,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <G@plt>
  mov    $0x3,%esi
  add    %eax,%r14d
  lea    0x5a827999(%r15,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <G@plt>
  mov    0x14(%rsp),%r8d
  mov    $0x5,%esi
  add    %eax,%r14d
  lea    0x5a827999(%r8,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <G@plt>
  mov    0x3c(%rsp),%r11d
  mov    $0x9,%esi
  add    %eax,%r14d
  lea    0x5a827999(%r11,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <G@plt>
  mov    0x30(%rsp),%edi
  mov    $0xd,%esi
  add    %eax,%r14d
  lea    0x5a827999(%rdi,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <G@plt>
  mov    0x8(%rsp),%edx
  mov    $0x3,%esi
  add    %eax,%r14d
  lea    0x5a827999(%rdx,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <G@plt>
  mov    0x18(%rsp),%r10d
  mov    $0x5,%esi
  add    %eax,%r14d
  lea    0x5a827999(%r10,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <G@plt>
  mov    0x24(%rsp),%edi
  mov    $0x9,%esi
  add    %eax,%r14d
  lea    0x5a827999(%rdi,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <G@plt>
  mov    0x34(%rsp),%r10d
  mov    $0xd,%esi
  add    %eax,%r14d
  lea    0x5a827999(%r10,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <H@plt>
  mov    0x40(%rsp),%r10d
  mov    $0x3,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r10,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <H@plt>
  mov    0x1c(%rsp),%r11d
  mov    $0x9,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r11,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <H@plt>
  mov    0xc(%rsp),%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%rsi,%r14,1),%edi
  mov    $0xb,%esi
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <H@plt>
  mov    0x28(%rsp),%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%rsi,%r14,1),%edi
  mov    $0xf,%esi
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <H@plt>
  mov    $0x3,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r15,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <H@plt>
  mov    0x3c(%rsp),%r11d
  mov    $0x9,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r11,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <H@plt>
  mov    0x14(%rsp),%r8d
  mov    $0xb,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r8,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <H@plt>
  mov    0x30(%rsp),%r8d
  mov    $0xf,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r8,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <H@plt>
  mov    0x4(%rsp),%ecx
  mov    $0x3,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%rcx,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <H@plt>
  mov    $0x9,%esi
  add    %eax,%r14d
  mov    0x20(%rsp),%eax
  lea    0x6ed9eba1(%rax,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <H@plt>
  mov    0x10(%rsp),%r9d
  mov    $0xb,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r9,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <H@plt>
  mov    0x2c(%rsp),%r9d
  mov    $0xf,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r9,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%rbx)
  mov    0x0(%rbp),%edx
  mov    %eax,%edi
  mov    (%r12),%esi
  mov    0x0(%r13),%r14d
  call   <H@plt>
  mov    0x8(%rsp),%edx
  mov    $0x3,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%rdx,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%r13)
  mov    (%r12),%edx
  mov    %eax,%edi
  mov    (%rbx),%esi
  mov    0x0(%rbp),%r14d
  call   <H@plt>
  mov    0x24(%rsp),%edi
  mov    $0x9,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%rdi,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,0x0(%rbp)
  mov    (%rbx),%edx
  mov    %eax,%edi
  mov    0x0(%r13),%esi
  mov    (%r12),%r14d
  call   <H@plt>
  mov    0x18(%rsp),%r10d
  mov    $0xb,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r10,%r14,1),%edi
  call   <lshift@plt>
  mov    %eax,(%r12)
  mov    0x0(%r13),%edx
  mov    %eax,%edi
  mov    0x0(%rbp),%esi
  mov    (%rbx),%r14d
  call   <H@plt>
  mov    0x34(%rsp),%r10d
  mov    $0xf,%esi
  add    %eax,%r14d
  lea    0x6ed9eba1(%r10,%r14,1),%edi
  call   <lshift@plt>
  mov    0x38(%rsp),%r15d
  mov    0x44(%rsp),%r9d
  mov    0x48(%rsp),%r8d
  mov    0x4c(%rsp),%ecx
  mov    %eax,(%rbx)
  add    %r15d,0x0(%r13)
  add    %r9d,(%rbx)
  add    %r8d,(%r12)
  add    %ecx,0x0(%rbp)
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L0
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L0:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void mdfour64(__u32 *M, __u32 *A, __u32 *B, __u32 *C, __u32 *D) {
  int j;
  __u32 AA, BB, CC, DD;
  __u32 X[16];
  for (j = 0; j < 16; j++)
    X[j] = M[j];
  AA = *A;
  BB = *B;
  CC = *C;
  DD = *D;
  (*A) = lshift((*A) + F(*B, *C, *D) + X[0], 3);
  (*D) = lshift((*D) + F(*A, *B, *C) + X[1], 7);
  (*C) = lshift((*C) + F(*D, *A, *B) + X[2], 11);
  (*B) = lshift((*B) + F(*C, *D, *A) + X[3], 19);
  (*A) = lshift((*A) + F(*B, *C, *D) + X[4], 3);
  (*D) = lshift((*D) + F(*A, *B, *C) + X[5], 7);
  (*C) = lshift((*C) + F(*D, *A, *B) + X[6], 11);
  (*B) = lshift((*B) + F(*C, *D, *A) + X[7], 19);
  (*A) = lshift((*A) + F(*B, *C, *D) + X[8], 3);
  (*D) = lshift((*D) + F(*A, *B, *C) + X[9], 7);
  (*C) = lshift((*C) + F(*D, *A, *B) + X[10], 11);
  (*B) = lshift((*B) + F(*C, *D, *A) + X[11], 19);
  (*A) = lshift((*A) + F(*B, *C, *D) + X[12], 3);
  (*D) = lshift((*D) + F(*A, *B, *C) + X[13], 7);
  (*C) = lshift((*C) + F(*D, *A, *B) + X[14], 11);
  (*B) = lshift((*B) + F(*C, *D, *A) + X[15], 19);
  (*A) = lshift((*A) + G(*B, *C, *D) + X[0] + (__u32)0x5A827999, 3);
  (*D) = lshift((*D) + G(*A, *B, *C) + X[4] + (__u32)0x5A827999, 5);
  (*C) = lshift((*C) + G(*D, *A, *B) + X[8] + (__u32)0x5A827999, 9);
  (*B) = lshift((*B) + G(*C, *D, *A) + X[12] + (__u32)0x5A827999, 13);
  (*A) = lshift((*A) + G(*B, *C, *D) + X[1] + (__u32)0x5A827999, 3);
  (*D) = lshift((*D) + G(*A, *B, *C) + X[5] + (__u32)0x5A827999, 5);
  (*C) = lshift((*C) + G(*D, *A, *B) + X[9] + (__u32)0x5A827999, 9);
  (*B) = lshift((*B) + G(*C, *D, *A) + X[13] + (__u32)0x5A827999, 13);
  (*A) = lshift((*A) + G(*B, *C, *D) + X[2] + (__u32)0x5A827999, 3);
  (*D) = lshift((*D) + G(*A, *B, *C) + X[6] + (__u32)0x5A827999, 5);
  (*C) = lshift((*C) + G(*D, *A, *B) + X[10] + (__u32)0x5A827999, 9);
  (*B) = lshift((*B) + G(*C, *D, *A) + X[14] + (__u32)0x5A827999, 13);
  (*A) = lshift((*A) + G(*B, *C, *D) + X[3] + (__u32)0x5A827999, 3);
  (*D) = lshift((*D) + G(*A, *B, *C) + X[7] + (__u32)0x5A827999, 5);
  (*C) = lshift((*C) + G(*D, *A, *B) + X[11] + (__u32)0x5A827999, 9);
  (*B) = lshift((*B) + G(*C, *D, *A) + X[15] + (__u32)0x5A827999, 13);
  (*A) = lshift((*A) + H(*B, *C, *D) + X[0] + (__u32)0x6ED9EBA1, 3);
  (*D) = lshift((*D) + H(*A, *B, *C) + X[8] + (__u32)0x6ED9EBA1, 9);
  (*C) = lshift((*C) + H(*D, *A, *B) + X[4] + (__u32)0x6ED9EBA1, 11);
  (*B) = lshift((*B) + H(*C, *D, *A) + X[12] + (__u32)0x6ED9EBA1, 15);
  (*A) = lshift((*A) + H(*B, *C, *D) + X[2] + (__u32)0x6ED9EBA1, 3);
  (*D) = lshift((*D) + H(*A, *B, *C) + X[10] + (__u32)0x6ED9EBA1, 9);
  (*C) = lshift((*C) + H(*D, *A, *B) + X[6] + (__u32)0x6ED9EBA1, 11);
  (*B) = lshift((*B) + H(*C, *D, *A) + X[14] + (__u32)0x6ED9EBA1, 15);
  (*A) = lshift((*A) + H(*B, *C, *D) + X[1] + (__u32)0x6ED9EBA1, 3);
  (*D) = lshift((*D) + H(*A, *B, *C) + X[9] + (__u32)0x6ED9EBA1, 9);
  (*C) = lshift((*C) + H(*D, *A, *B) + X[5] + (__u32)0x6ED9EBA1, 11);
  (*B) = lshift((*B) + H(*C, *D, *A) + X[13] + (__u32)0x6ED9EBA1, 15);
  (*A) = lshift((*A) + H(*B, *C, *D) + X[3] + (__u32)0x6ED9EBA1, 3);
  (*D) = lshift((*D) + H(*A, *B, *C) + X[11] + (__u32)0x6ED9EBA1, 9);
  (*C) = lshift((*C) + H(*D, *A, *B) + X[7] + (__u32)0x6ED9EBA1, 11);
  (*B) = lshift((*B) + H(*C, *D, *A) + X[15] + (__u32)0x6ED9EBA1, 15);
  *A += AA;
  *B += BB;
  *C += CC;
  *D += DD;
  *A &= 0xFFFFFFFF;
  *B &= 0xFFFFFFFF;
  *C &= 0xFFFFFFFF;
  *D &= 0xFFFFFFFF;
  for (j = 0; j < 16; j++)
    X[j] = 0;
}
```