void SHA512_transform(unsigned long long H[], unsigned long long W[]) {
  static const unsigned long long K[80] = {
      0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL,
      0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
      0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL,
      0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
      0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL,
      0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
      0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL,
      0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
      0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL,
      0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
      0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL,
      0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
      0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL,
      0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
      0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL,
      0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
      0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL,
      0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
      0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL,
      0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
      0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL,
      0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
      0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL,
      0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
      0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL,
      0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
      0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL};
  unsigned long long T1, T2;
  unsigned long long x[8];
  int t;
  memcpy(x, H, 64);
  for (t = 0; t < 80; t += 8) {
    T1 = x[7] +
         ((((x[4]) >> (14)) | ((x[4]) << (64 - 14))) ^
          (((x[4]) >> (18)) | ((x[4]) << (64 - 18))) ^
          (((x[4]) >> (41)) | ((x[4]) << (64 - 41)))) +
         (((x[4]) & (x[5])) ^ (~(x[4]) & (x[6]))) + K[t + 0] + W[t + 0];
    T2 = ((((x[0]) >> (28)) | ((x[0]) << (64 - 28))) ^
          (((x[0]) >> (34)) | ((x[0]) << (64 - 34))) ^
          (((x[0]) >> (39)) | ((x[0]) << (64 - 39)))) +
         (((x[0]) & (x[1])) ^ ((x[0]) & (x[2])) ^ ((x[1]) & (x[2])));
    x[3] = x[3] + T1;
    x[7] = T1 + T2;
    T1 = x[6] +
         ((((x[3]) >> (14)) | ((x[3]) << (64 - 14))) ^
          (((x[3]) >> (18)) | ((x[3]) << (64 - 18))) ^
          (((x[3]) >> (41)) | ((x[3]) << (64 - 41)))) +
         (((x[3]) & (x[4])) ^ (~(x[3]) & (x[5]))) + K[t + 1] + W[t + 1];
    T2 = ((((x[7]) >> (28)) | ((x[7]) << (64 - 28))) ^
          (((x[7]) >> (34)) | ((x[7]) << (64 - 34))) ^
          (((x[7]) >> (39)) | ((x[7]) << (64 - 39)))) +
         (((x[7]) & (x[0])) ^ ((x[7]) & (x[1])) ^ ((x[0]) & (x[1])));
    x[2] = x[2] + T1;
    x[6] = T1 + T2;
    T1 = x[5] +
         ((((x[2]) >> (14)) | ((x[2]) << (64 - 14))) ^
          (((x[2]) >> (18)) | ((x[2]) << (64 - 18))) ^
          (((x[2]) >> (41)) | ((x[2]) << (64 - 41)))) +
         (((x[2]) & (x[3])) ^ (~(x[2]) & (x[4]))) + K[t + 2] + W[t + 2];
    T2 = ((((x[6]) >> (28)) | ((x[6]) << (64 - 28))) ^
          (((x[6]) >> (34)) | ((x[6]) << (64 - 34))) ^
          (((x[6]) >> (39)) | ((x[6]) << (64 - 39)))) +
         (((x[6]) & (x[7])) ^ ((x[6]) & (x[0])) ^ ((x[7]) & (x[0])));
    x[1] = x[1] + T1;
    x[5] = T1 + T2;
    T1 = x[4] +
         ((((x[1]) >> (14)) | ((x[1]) << (64 - 14))) ^
          (((x[1]) >> (18)) | ((x[1]) << (64 - 18))) ^
          (((x[1]) >> (41)) | ((x[1]) << (64 - 41)))) +
         (((x[1]) & (x[2])) ^ (~(x[1]) & (x[3]))) + K[t + 3] + W[t + 3];
    T2 = ((((x[5]) >> (28)) | ((x[5]) << (64 - 28))) ^
          (((x[5]) >> (34)) | ((x[5]) << (64 - 34))) ^
          (((x[5]) >> (39)) | ((x[5]) << (64 - 39)))) +
         (((x[5]) & (x[6])) ^ ((x[5]) & (x[7])) ^ ((x[6]) & (x[7])));
    x[0] = x[0] + T1;
    x[4] = T1 + T2;
    T1 = x[3] +
         ((((x[0]) >> (14)) | ((x[0]) << (64 - 14))) ^
          (((x[0]) >> (18)) | ((x[0]) << (64 - 18))) ^
          (((x[0]) >> (41)) | ((x[0]) << (64 - 41)))) +
         (((x[0]) & (x[1])) ^ (~(x[0]) & (x[2]))) + K[t + 4] + W[t + 4];
    T2 = ((((x[4]) >> (28)) | ((x[4]) << (64 - 28))) ^
          (((x[4]) >> (34)) | ((x[4]) << (64 - 34))) ^
          (((x[4]) >> (39)) | ((x[4]) << (64 - 39)))) +
         (((x[4]) & (x[5])) ^ ((x[4]) & (x[6])) ^ ((x[5]) & (x[6])));
    x[7] = x[7] + T1;
    x[3] = T1 + T2;
    T1 = x[2] +
         ((((x[7]) >> (14)) | ((x[7]) << (64 - 14))) ^
          (((x[7]) >> (18)) | ((x[7]) << (64 - 18))) ^
          (((x[7]) >> (41)) | ((x[7]) << (64 - 41)))) +
         (((x[7]) & (x[0])) ^ (~(x[7]) & (x[1]))) + K[t + 5] + W[t + 5];
    T2 = ((((x[3]) >> (28)) | ((x[3]) << (64 - 28))) ^
          (((x[3]) >> (34)) | ((x[3]) << (64 - 34))) ^
          (((x[3]) >> (39)) | ((x[3]) << (64 - 39)))) +
         (((x[3]) & (x[4])) ^ ((x[3]) & (x[5])) ^ ((x[4]) & (x[5])));
    x[6] = x[6] + T1;
    x[2] = T1 + T2;
    T1 = x[1] +
         ((((x[6]) >> (14)) | ((x[6]) << (64 - 14))) ^
          (((x[6]) >> (18)) | ((x[6]) << (64 - 18))) ^
          (((x[6]) >> (41)) | ((x[6]) << (64 - 41)))) +
         (((x[6]) & (x[7])) ^ (~(x[6]) & (x[0]))) + K[t + 6] + W[t + 6];
    T2 = ((((x[2]) >> (28)) | ((x[2]) << (64 - 28))) ^
          (((x[2]) >> (34)) | ((x[2]) << (64 - 34))) ^
          (((x[2]) >> (39)) | ((x[2]) << (64 - 39)))) +
         (((x[2]) & (x[3])) ^ ((x[2]) & (x[4])) ^ ((x[3]) & (x[4])));
    x[5] = x[5] + T1;
    x[1] = T1 + T2;
    T1 = x[0] +
         ((((x[5]) >> (14)) | ((x[5]) << (64 - 14))) ^
          (((x[5]) >> (18)) | ((x[5]) << (64 - 18))) ^
          (((x[5]) >> (41)) | ((x[5]) << (64 - 41)))) +
         (((x[5]) & (x[6])) ^ (~(x[5]) & (x[7]))) + K[t + 7] + W[t + 7];
    T2 = ((((x[1]) >> (28)) | ((x[1]) << (64 - 28))) ^
          (((x[1]) >> (34)) | ((x[1]) << (64 - 34))) ^
          (((x[1]) >> (39)) | ((x[1]) << (64 - 39)))) +
         (((x[1]) & (x[2])) ^ ((x[1]) & (x[3])) ^ ((x[2]) & (x[3])));
    x[4] = x[4] + T1;
    x[0] = T1 + T2;
  }
  H[0] += x[0];
  H[1] += x[1];
  H[2] += x[2];
  H[3] += x[3];
  H[4] += x[4];
  H[5] += x[5];
  H[6] += x[6];
  H[7] += x[7];
}


x86 assembly (clang, -O0):
<SHA512_transform>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
lea    -0x60(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    $0x40,%edx
call   1030 <memcpy@plt>
movl   $0x0,-0x64(%rbp)
cmpl   $0x50,-0x64(%rbp)
jge    1979 <SHA512_transform+0x869>
mov    -0x28(%rbp),%rax
mov    -0x40(%rbp),%rcx
shr    $0xe,%rcx
mov    -0x40(%rbp),%rdx
shl    $0x32,%rdx
or     %rdx,%rcx
mov    -0x40(%rbp),%rdx
shr    $0x12,%rdx
mov    -0x40(%rbp),%rsi
shl    $0x2e,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
mov    -0x40(%rbp),%rdx
shr    $0x29,%rdx
mov    -0x40(%rbp),%rsi
shl    $0x17,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x40(%rbp),%rcx
and    -0x38(%rbp),%rcx
mov    -0x40(%rbp),%rdx
xor    $0xffffffffffffffff,%rdx
and    -0x30(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x64(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rdx
lea    0xe4d(%rip),%rcx
add    (%rcx,%rdx,8),%rax
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%edx
add    $0x0,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,8),%rax
mov    %rax,-0x18(%rbp)
mov    -0x60(%rbp),%rax
shr    $0x1c,%rax
mov    -0x60(%rbp),%rcx
shl    $0x24,%rcx
or     %rcx,%rax
mov    -0x60(%rbp),%rcx
shr    $0x22,%rcx
mov    -0x60(%rbp),%rdx
shl    $0x1e,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x60(%rbp),%rcx
shr    $0x27,%rcx
mov    -0x60(%rbp),%rdx
shl    $0x19,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x60(%rbp),%rcx
and    -0x58(%rbp),%rcx
mov    -0x60(%rbp),%rdx
and    -0x50(%rbp),%rdx
xor    %rdx,%rcx
mov    -0x58(%rbp),%rdx
and    -0x50(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x48(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
shr    $0xe,%rcx
mov    -0x48(%rbp),%rdx
shl    $0x32,%rdx
or     %rdx,%rcx
mov    -0x48(%rbp),%rdx
shr    $0x12,%rdx
mov    -0x48(%rbp),%rsi
shl    $0x2e,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
mov    -0x48(%rbp),%rdx
shr    $0x29,%rdx
mov    -0x48(%rbp),%rsi
shl    $0x17,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x48(%rbp),%rcx
and    -0x40(%rbp),%rcx
mov    -0x48(%rbp),%rdx
xor    $0xffffffffffffffff,%rdx
and    -0x38(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x64(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    0xd48(%rip),%rcx
add    (%rcx,%rdx,8),%rax
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,8),%rax
mov    %rax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
shr    $0x1c,%rax
mov    -0x28(%rbp),%rcx
shl    $0x24,%rcx
or     %rcx,%rax
mov    -0x28(%rbp),%rcx
shr    $0x22,%rcx
mov    -0x28(%rbp),%rdx
shl    $0x1e,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x28(%rbp),%rcx
shr    $0x27,%rcx
mov    -0x28(%rbp),%rdx
shl    $0x19,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x28(%rbp),%rcx
and    -0x60(%rbp),%rcx
mov    -0x28(%rbp),%rdx
and    -0x58(%rbp),%rdx
xor    %rdx,%rcx
mov    -0x60(%rbp),%rdx
and    -0x58(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x50(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x50(%rbp),%rcx
shr    $0xe,%rcx
mov    -0x50(%rbp),%rdx
shl    $0x32,%rdx
or     %rdx,%rcx
mov    -0x50(%rbp),%rdx
shr    $0x12,%rdx
mov    -0x50(%rbp),%rsi
shl    $0x2e,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
mov    -0x50(%rbp),%rdx
shr    $0x29,%rdx
mov    -0x50(%rbp),%rsi
shl    $0x17,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x50(%rbp),%rcx
and    -0x48(%rbp),%rcx
mov    -0x50(%rbp),%rdx
xor    $0xffffffffffffffff,%rdx
and    -0x40(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x64(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    0xc43(%rip),%rcx
add    (%rcx,%rdx,8),%rax
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,8),%rax
mov    %rax,-0x18(%rbp)
mov    -0x30(%rbp),%rax
shr    $0x1c,%rax
mov    -0x30(%rbp),%rcx
shl    $0x24,%rcx
or     %rcx,%rax
mov    -0x30(%rbp),%rcx
shr    $0x22,%rcx
mov    -0x30(%rbp),%rdx
shl    $0x1e,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x30(%rbp),%rcx
shr    $0x27,%rcx
mov    -0x30(%rbp),%rdx
shl    $0x19,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x30(%rbp),%rcx
and    -0x28(%rbp),%rcx
mov    -0x30(%rbp),%rdx
and    -0x60(%rbp),%rdx
xor    %rdx,%rcx
mov    -0x28(%rbp),%rdx
and    -0x60(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x58(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x58(%rbp),%rcx
shr    $0xe,%rcx
mov    -0x58(%rbp),%rdx
shl    $0x32,%rdx
or     %rdx,%rcx
mov    -0x58(%rbp),%rdx
shr    $0x12,%rdx
mov    -0x58(%rbp),%rsi
shl    $0x2e,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
mov    -0x58(%rbp),%rdx
shr    $0x29,%rdx
mov    -0x58(%rbp),%rsi
shl    $0x17,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x58(%rbp),%rcx
and    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%rdx
xor    $0xffffffffffffffff,%rdx
and    -0x48(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x64(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rdx
lea    0xb3e(%rip),%rcx
add    (%rcx,%rdx,8),%rax
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,8),%rax
mov    %rax,-0x18(%rbp)
mov    -0x38(%rbp),%rax
shr    $0x1c,%rax
mov    -0x38(%rbp),%rcx
shl    $0x24,%rcx
or     %rcx,%rax
mov    -0x38(%rbp),%rcx
shr    $0x22,%rcx
mov    -0x38(%rbp),%rdx
shl    $0x1e,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x38(%rbp),%rcx
shr    $0x27,%rcx
mov    -0x38(%rbp),%rdx
shl    $0x19,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x38(%rbp),%rcx
and    -0x30(%rbp),%rcx
mov    -0x38(%rbp),%rdx
and    -0x28(%rbp),%rdx
xor    %rdx,%rcx
mov    -0x30(%rbp),%rdx
and    -0x28(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x60(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rax
mov    -0x60(%rbp),%rcx
shr    $0xe,%rcx
mov    -0x60(%rbp),%rdx
shl    $0x32,%rdx
or     %rdx,%rcx
mov    -0x60(%rbp),%rdx
shr    $0x12,%rdx
mov    -0x60(%rbp),%rsi
shl    $0x2e,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
mov    -0x60(%rbp),%rdx
shr    $0x29,%rdx
mov    -0x60(%rbp),%rsi
shl    $0x17,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x60(%rbp),%rcx
and    -0x58(%rbp),%rcx
mov    -0x60(%rbp),%rdx
xor    $0xffffffffffffffff,%rdx
and    -0x50(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x64(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rdx
lea    0xa39(%rip),%rcx
add    (%rcx,%rdx,8),%rax
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%edx
add    $0x4,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,8),%rax
mov    %rax,-0x18(%rbp)
mov    -0x40(%rbp),%rax
shr    $0x1c,%rax
mov    -0x40(%rbp),%rcx
shl    $0x24,%rcx
or     %rcx,%rax
mov    -0x40(%rbp),%rcx
shr    $0x22,%rcx
mov    -0x40(%rbp),%rdx
shl    $0x1e,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x40(%rbp),%rcx
shr    $0x27,%rcx
mov    -0x40(%rbp),%rdx
shl    $0x19,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x40(%rbp),%rcx
and    -0x38(%rbp),%rcx
mov    -0x40(%rbp),%rdx
and    -0x30(%rbp),%rdx
xor    %rdx,%rcx
mov    -0x38(%rbp),%rdx
and    -0x30(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
mov    -0x28(%rbp),%rcx
shr    $0xe,%rcx
mov    -0x28(%rbp),%rdx
shl    $0x32,%rdx
or     %rdx,%rcx
mov    -0x28(%rbp),%rdx
shr    $0x12,%rdx
mov    -0x28(%rbp),%rsi
shl    $0x2e,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
mov    -0x28(%rbp),%rdx
shr    $0x29,%rdx
mov    -0x28(%rbp),%rsi
shl    $0x17,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x28(%rbp),%rcx
and    -0x60(%rbp),%rcx
mov    -0x28(%rbp),%rdx
xor    $0xffffffffffffffff,%rdx
and    -0x58(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x64(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rdx
lea    0x934(%rip),%rcx
add    (%rcx,%rdx,8),%rax
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%edx
add    $0x5,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,8),%rax
mov    %rax,-0x18(%rbp)
mov    -0x48(%rbp),%rax
shr    $0x1c,%rax
mov    -0x48(%rbp),%rcx
shl    $0x24,%rcx
or     %rcx,%rax
mov    -0x48(%rbp),%rcx
shr    $0x22,%rcx
mov    -0x48(%rbp),%rdx
shl    $0x1e,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x48(%rbp),%rcx
shr    $0x27,%rcx
mov    -0x48(%rbp),%rdx
shl    $0x19,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x48(%rbp),%rcx
and    -0x40(%rbp),%rcx
mov    -0x48(%rbp),%rdx
and    -0x38(%rbp),%rdx
xor    %rdx,%rcx
mov    -0x40(%rbp),%rdx
and    -0x38(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rax
mov    -0x30(%rbp),%rcx
shr    $0xe,%rcx
mov    -0x30(%rbp),%rdx
shl    $0x32,%rdx
or     %rdx,%rcx
mov    -0x30(%rbp),%rdx
shr    $0x12,%rdx
mov    -0x30(%rbp),%rsi
shl    $0x2e,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
mov    -0x30(%rbp),%rdx
shr    $0x29,%rdx
mov    -0x30(%rbp),%rsi
shl    $0x17,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x30(%rbp),%rcx
and    -0x28(%rbp),%rcx
mov    -0x30(%rbp),%rdx
xor    $0xffffffffffffffff,%rdx
and    -0x60(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x64(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rdx
lea    0x82f(%rip),%rcx
add    (%rcx,%rdx,8),%rax
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%edx
add    $0x6,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,8),%rax
mov    %rax,-0x18(%rbp)
mov    -0x50(%rbp),%rax
shr    $0x1c,%rax
mov    -0x50(%rbp),%rcx
shl    $0x24,%rcx
or     %rcx,%rax
mov    -0x50(%rbp),%rcx
shr    $0x22,%rcx
mov    -0x50(%rbp),%rdx
shl    $0x1e,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x50(%rbp),%rcx
shr    $0x27,%rcx
mov    -0x50(%rbp),%rdx
shl    $0x19,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x50(%rbp),%rcx
and    -0x48(%rbp),%rcx
mov    -0x50(%rbp),%rdx
and    -0x40(%rbp),%rdx
xor    %rdx,%rcx
mov    -0x48(%rbp),%rdx
and    -0x40(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x38(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x60(%rbp),%rax
mov    -0x38(%rbp),%rcx
shr    $0xe,%rcx
mov    -0x38(%rbp),%rdx
shl    $0x32,%rdx
or     %rdx,%rcx
mov    -0x38(%rbp),%rdx
shr    $0x12,%rdx
mov    -0x38(%rbp),%rsi
shl    $0x2e,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
mov    -0x38(%rbp),%rdx
shr    $0x29,%rdx
mov    -0x38(%rbp),%rsi
shl    $0x17,%rsi
or     %rsi,%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x38(%rbp),%rcx
and    -0x30(%rbp),%rcx
mov    -0x38(%rbp),%rdx
xor    $0xffffffffffffffff,%rdx
and    -0x28(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    -0x64(%rbp),%ecx
add    $0x7,%ecx
movslq %ecx,%rdx
lea    0x72a(%rip),%rcx
add    (%rcx,%rdx,8),%rax
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%edx
add    $0x7,%edx
movslq %edx,%rdx
add    (%rcx,%rdx,8),%rax
mov    %rax,-0x18(%rbp)
mov    -0x58(%rbp),%rax
shr    $0x1c,%rax
mov    -0x58(%rbp),%rcx
shl    $0x24,%rcx
or     %rcx,%rax
mov    -0x58(%rbp),%rcx
shr    $0x22,%rcx
mov    -0x58(%rbp),%rdx
shl    $0x1e,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x58(%rbp),%rcx
shr    $0x27,%rcx
mov    -0x58(%rbp),%rdx
shl    $0x19,%rdx
or     %rdx,%rcx
xor    %rcx,%rax
mov    -0x58(%rbp),%rcx
and    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%rdx
and    -0x48(%rbp),%rdx
xor    %rdx,%rcx
mov    -0x50(%rbp),%rdx
and    -0x48(%rbp),%rdx
xor    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x40(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x64(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x64(%rbp)
jmp    1139 <SHA512_transform+0x29>
mov    -0x60(%rbp),%rcx
mov    -0x8(%rbp),%rax
add    (%rax),%rcx
mov    %rcx,(%rax)
mov    -0x58(%rbp),%rcx
mov    -0x8(%rbp),%rax
add    0x8(%rax),%rcx
mov    %rcx,0x8(%rax)
mov    -0x50(%rbp),%rcx
mov    -0x8(%rbp),%rax
add    0x10(%rax),%rcx
mov    %rcx,0x10(%rax)
mov    -0x48(%rbp),%rcx
mov    -0x8(%rbp),%rax
add    0x18(%rax),%rcx
mov    %rcx,0x18(%rax)
mov    -0x40(%rbp),%rcx
mov    -0x8(%rbp),%rax
add    0x20(%rax),%rcx
mov    %rcx,0x20(%rax)
mov    -0x38(%rbp),%rcx
mov    -0x8(%rbp),%rax
add    0x28(%rax),%rcx
mov    %rcx,0x28(%rax)
mov    -0x30(%rbp),%rcx
mov    -0x8(%rbp),%rax
add    0x30(%rax),%rcx
mov    %rcx,0x30(%rax)
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
add    0x38(%rax),%rcx
mov    %rcx,0x38(%rax)
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<SHA512_transform>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rsi,-0x70(%rsp)
mov    (%rdi),%r10
mov    0x8(%rdi),%r12
mov    0x10(%rdi),%rax
mov    0x18(%rdi),%r11
mov    0x20(%rdi),%r9
mov    0x28(%rdi),%r13
mov    0x30(%rdi),%rcx
mov    %rdi,-0x10(%rsp)
mov    0x38(%rdi),%rdx
movq   $0xfffffffffffffff8,-0x60(%rsp)
ff ff
mov    %r10,-0x50(%rsp)
mov    %r12,-0x48(%rsp)
mov    %rax,-0x40(%rsp)
mov    %r11,-0x38(%rsp)
mov    %r9,-0x30(%rsp)
mov    %r13,-0x28(%rsp)
mov    %rcx,-0x20(%rsp)
mov    %rcx,-0x58(%rsp)
mov    %rdx,-0x18(%rsp)
mov    %rdx,-0x68(%rsp)
xchg   %ax,%ax
mov    %r9,%r8
rol    $0x32,%r8
mov    %r9,%rdx
rol    $0x2e,%rdx
mov    %r9,%rbx
rol    $0x17,%rbx
mov    %r9,%r15
and    %r13,%r15
mov    %r9,%rdi
not    %rdi
xor    %r8,%rdx
mov    -0x58(%rsp),%r8
and    %r8,%rdi
mov    %r10,%rcx
rol    $0x24,%rcx
xor    %rdx,%rbx
add    -0x68(%rsp),%rdi
mov    %r10,%rbp
rol    $0x1e,%rbp
add    %r15,%rdi
xor    %rcx,%rbp
mov    %r10,%rsi
rol    $0x19,%rsi
add    %rbx,%rdi
xor    %rbp,%rsi
mov    %r10,%rbp
and    %r12,%rbp
mov    %rbp,-0x8(%rsp)
mov    %r10,%r14
mov    -0x60(%rsp),%rdx
lea    0xe21(%rip),%rcx
add    0x40(%rcx,%rdx,8),%rdi
xor    %r12,%r14
and    %rax,%r14
mov    -0x70(%rsp),%rcx
add    0x40(%rcx,%rdx,8),%rdi
mov    %rdx,%rbx
xor    %rbp,%r14
add    %rsi,%r14
add    %rdi,%r11
add    %rdi,%r14
mov    %r11,%rsi
rol    $0x32,%rsi
mov    %r11,%rcx
rol    $0x2e,%rcx
mov    %r11,%rdi
rol    $0x17,%rdi
mov    %r11,%rdx
and    %r9,%rdx
xor    %rsi,%rcx
mov    %r11,%rsi
not    %rsi
lea    0xdd2(%rip),%r15
mov    %rbx,%rbp
add    0x48(%r15,%rbx,8),%r8
and    %r13,%rsi
mov    -0x70(%rsp),%rbx
add    0x48(%rbx,%rbp,8),%r8
mov    %r14,-0x68(%rsp)
add    %rsi,%r8
mov    %r14,%rsi
xor    %rcx,%rdi
rol    $0x24,%rsi
mov    %r14,%rcx
rol    $0x1e,%rcx
xor    %rsi,%rcx
mov    %r14,%rsi
rol    $0x19,%rsi
add    %rdx,%r8
xor    %rcx,%rsi
mov    %r14,%r15
and    %r10,%r15
and    %r12,%r14
add    %rdi,%r8
xor    -0x8(%rsp),%r14
xor    %r15,%r14
add    %rsi,%r14
add    %r8,%rax
mov    %rax,%rsi
rol    $0x32,%rsi
mov    %rax,%rdi
rol    $0x2e,%rdi
add    %r14,%r8
mov    %rax,%rcx
rol    $0x17,%rcx
mov    %rax,%r14
xor    %rsi,%rdi
and    %r11,%r14
mov    %rax,%rsi
lea    0xd4f(%rip),%rbx
add    0x50(%rbx,%rbp,8),%r13
not    %rsi
and    %r9,%rsi
mov    -0x70(%rsp),%rbx
add    0x50(%rbx,%rbp,8),%r13
mov    %rbp,%rdx
xor    %rdi,%rcx
add    %rsi,%r13
mov    %r8,%rsi
rol    $0x24,%rsi
mov    %r8,%rdi
add    %r14,%r13
rol    $0x1e,%rdi
mov    %r8,%rbx
rol    $0x19,%rbx
xor    %rsi,%rdi
xor    %rdi,%rbx
mov    %r8,%rsi
mov    -0x68(%rsp),%r14
and    %r14,%rsi
mov    %r8,%rdi
mov    %r8,%rbp
add    %rcx,%r13
and    %r10,%rdi
xor    %r15,%rdi
xor    %rsi,%rdi
add    %rbx,%rdi
add    %r13,%r12
add    %rdi,%r13
mov    %r12,%rcx
rol    $0x32,%rcx
mov    %r12,%rdi
lea    0xcdc(%rip),%r8
mov    %rdx,-0x60(%rsp)
add    0x58(%r8,%rdx,8),%r9
rol    $0x2e,%rdi
mov    %r12,%rbx
mov    -0x70(%rsp),%r15
add    0x58(%r15,%rdx,8),%r9
rol    $0x17,%rbx
xor    %rcx,%rdi
mov    %r12,%rcx
mov    %r13,%rdx
rol    $0x24,%rdx
xor    %rdi,%rbx
not    %rcx
mov    %r13,%rdi
rol    $0x1e,%rdi
and    %r11,%rcx
add    %rcx,%r9
xor    %rdx,%rdi
mov    %r12,%rcx
and    %rax,%rcx
add    %rcx,%r9
mov    %r13,%rdx
rol    $0x19,%rdx
xor    %rdi,%rdx
mov    %r13,%rdi
and    %r14,%rdi
xor    %rsi,%rdi
mov    %r13,%r8
and    %rbp,%r8
xor    %r8,%rdi
add    %rbx,%r9
add    %rdx,%rdi
add    %r9,%r10
mov    %r10,%rdx
rol    $0x32,%rdx
add    %rdi,%r9
mov    %r10,%rsi
rol    $0x2e,%rsi
mov    %r10,%rdi
xor    %rdx,%rsi
rol    $0x17,%rdi
mov    %r10,%rdx
and    %r12,%rdx
xor    %rsi,%rdi
mov    %r10,%rsi
not    %rsi
mov    -0x60(%rsp),%rbx
lea    0xc36(%rip),%rcx
add    0x60(%rcx,%rbx,8),%r11
and    %rax,%rsi
add    0x60(%r15,%rbx,8),%r11
add    %rsi,%r11
mov    %r9,%rsi
add    %rdx,%r11
rol    $0x24,%rsi
mov    %r9,%rdx
rol    $0x1e,%rdx
mov    %r11,%rbx
xor    %rsi,%rdx
mov    %r9,%rsi
rol    $0x19,%rsi
add    %rdi,%rbx
xor    %rdx,%rsi
mov    %r9,%r15
and    %r13,%r15
mov    %r9,%r11
and    %rbp,%r11
xor    %r8,%r11
xor    %r15,%r11
add    %rbx,%r14
mov    %r14,%rcx
rol    $0x32,%rcx
add    %rsi,%r11
mov    %r14,%rdx
rol    $0x2e,%rdx
add    %rbx,%r11
mov    %r14,%rsi
mov    -0x60(%rsp),%rbx
lea    0xbca(%rip),%rdi
add    0x68(%rdi,%rbx,8),%rax
rol    $0x17,%rsi
xor    %rcx,%rdx
mov    %r14,%rcx
mov    -0x70(%rsp),%rdi
add    0x68(%rdi,%rbx,8),%rax
not    %rcx
and    %r12,%rcx
add    %rcx,%rax
mov    %r14,%rcx
and    %r10,%rcx
xor    %rdx,%rsi
add    %rcx,%rax
mov    %rax,%rdx
mov    %r11,%rax
rol    $0x24,%rax
mov    %r11,%rcx
add    %rsi,%rdx
rol    $0x1e,%rcx
mov    %r11,%rsi
rol    $0x19,%rsi
xor    %rax,%rcx
xor    %rcx,%rsi
mov    %r11,%rcx
and    %r9,%rcx
mov    %r11,%rax
and    %r13,%rax
xor    %r15,%rax
xor    %rcx,%rax
add    %rdx,%rbp
mov    %rbp,%rdi
add    %rsi,%rax
rol    $0x32,%rdi
mov    %rbp,%rsi
rol    $0x2e,%rsi
add    %rdx,%rax
mov    %rbp,%rdx
rol    $0x17,%rdx
xor    %rdi,%rsi
mov    -0x70(%rsp),%r15
mov    0x70(%r15,%rbx,8),%r8
lea    0xb37(%rip),%rdi
add    0x70(%rdi,%rbx,8),%r8
xor    %rsi,%rdx
mov    %rbp,%rsi
and    %r14,%rsi
add    %r12,%r8
mov    %rbp,%rdi
not    %rdi
and    %r10,%rdi
add    %rdi,%r8
mov    0x78(%r15,%rbx,8),%r15
add    %rsi,%r8
mov    %rax,%rsi
add    %rdx,%r8
rol    $0x24,%rsi
mov    %rax,%rdx
rol    $0x1e,%rdx
xor    %rsi,%rdx
mov    %rax,%rsi
rol    $0x19,%rsi
xor    %rdx,%rsi
mov    %rax,%r12
and    %r9,%r12
xor    %rcx,%r12
mov    %rax,%rcx
and    %r11,%rcx
xor    %rcx,%r12
add    %rsi,%r12
add    %r8,%r13
mov    %r13,%rdx
rol    $0x32,%rdx
add    %r8,%r12
mov    %r13,%rsi
rol    $0x2e,%rsi
xor    %rdx,%rsi
mov    %r13,%rdx
lea    0xabe(%rip),%rdi
add    0x78(%rdi,%rbx,8),%r15
rol    $0x17,%rdx
xor    %rsi,%rdx
add    %r10,%r15
mov    %r13,%rsi
not    %rsi
mov    %r14,-0x68(%rsp)
and    %r14,%rsi
add    %rsi,%r15
mov    %r13,%rsi
mov    %rbp,-0x58(%rsp)
and    %rbp,%rsi
add    %rsi,%r15
mov    %r12,%rsi
add    %rdx,%r15
rol    $0x24,%rsi
mov    %r12,%rdx
rol    $0x1e,%rdx
xor    %rsi,%rdx
mov    %r12,%rsi
rol    $0x19,%rsi
xor    %rdx,%rsi
mov    %rax,%r10
xor    %r11,%r10
and    %r12,%r10
xor    %rcx,%r10
add    %rsi,%r10
add    %r15,%r9
add    %r15,%r10
mov    %rbx,%rcx
add    $0x8,%rcx
mov    %rcx,-0x60(%rsp)
cmp    $0x48,%rcx
jb     1170 <SHA512_transform+0x70>
add    -0x50(%rsp),%r10
mov    -0x10(%rsp),%rcx
mov    %r10,(%rcx)
add    -0x48(%rsp),%r12
mov    %r12,0x8(%rcx)
add    -0x40(%rsp),%rax
mov    %rax,0x10(%rcx)
add    -0x38(%rsp),%r11
mov    %r11,0x18(%rcx)
add    -0x30(%rsp),%r9
mov    %r9,0x20(%rcx)
add    -0x28(%rsp),%r13
mov    %r13,0x28(%rcx)
mov    -0x58(%rsp),%rbp
add    -0x20(%rsp),%rbp
mov    %rbp,0x30(%rcx)
mov    -0x68(%rsp),%r14
add    -0x18(%rsp),%r14
mov    %r14,0x38(%rcx)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@SHA512_transform.K = internal constant [80 x i64] [i64 4794697086780616226, i64 8158064640168781261, i64 -5349999486874862801, i64 -1606136188198331460, i64 4131703408338449720, i64 6480981068601479193, i64 -7908458776815382629, i64 -6116909921290321640, i64 -2880145864133508542, i64 1334009975649890238, i64 2608012711638119052, i64 6128411473006802146, i64 8268148722764581231, i64 -9160688886553864527, i64 -7215885187991268811, i64 -4495734319001033068, i64 -1973867731355612462, i64 -1171420211273849373, i64 1135362057144423861, i64 2597628984639134821, i64 3308224258029322869, i64 5365058923640841347, i64 6679025012923562964, i64 8573033837759648693, i64 -7476448914759557205, i64 -6327057829258317296, i64 -5763719355590565569, i64 -4658551843659510044, i64 -4116276920077217854, i64 -3051310485924567259, i64 489312712824947311, i64 1452737877330783856, i64 2861767655752347644, i64 3322285676063803686, i64 5560940570517711597, i64 5996557281743188959, i64 7280758554555802590, i64 8532644243296465576, i64 -9096487096722542874, i64 -7894198246740708037, i64 -6719396339535248540, i64 -6333637450476146687, i64 -4446306890439682159, i64 -4076793802049405392, i64 -3345356375505022440, i64 -2983346525034927856, i64 -860691631967231958, i64 1182934255886127544, i64 1847814050463011016, i64 2177327727835720531, i64 2830643537854262169, i64 3796741975233480872, i64 4115178125766777443, i64 5681478168544905931, i64 6601373596472566643, i64 7507060721942968483, i64 8399075790359081724, i64 8693463985226723168, i64 -8878714635349349518, i64 -8302665154208450068, i64 -8016688836872298968, i64 -6606660893046293015, i64 -4685533653050689259, i64 -4147400797238176981, i64 -3880063495543823972, i64 -3348786107499101689, i64 -1523767162380948706, i64 -757361751448694408, i64 500013540394364858, i64 748580250866718886, i64 1242879168328830382, i64 1977374033974150939, i64 2944078676154940804, i64 3659926193048069267, i64 4368137639120453308, i64 4836135668995329356, i64 5532061633213252278, i64 6448918945643986474, i64 6902733635092675308, i64 7801388544844847127]
define void @SHA512_transform(i64* %0, i64* %1) {
%3 = alloca i64*
%4 = alloca i64*
%5 = alloca i64
%6 = alloca i64
%7 = alloca [8 x i64]
%8 = alloca i32
store i64* %0, i64** %3
store i64* %1, i64** %4
%9 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%10 = bitcast i64* %9 to i8*
%11 = load i64*, i64** %3
%12 = bitcast i64* %11 to i8*
store i32 0, i32* %8
br label %13
13: ; preds = %833, %2
%14 = load i32, i32* %8
%15 = icmp slt i32 %14, 80
br i1 %15, label %16, label %836
16: ; preds = %13
%17 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%18 = load i64, i64* %17
%19 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%20 = load i64, i64* %19
%21 = lshr i64 %20, 14
%22 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%23 = load i64, i64* %22
%24 = shl i64 %23, 50
%25 = or i64 %21, %24
%26 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%27 = load i64, i64* %26
%28 = lshr i64 %27, 18
%29 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%30 = load i64, i64* %29
%31 = shl i64 %30, 46
%32 = or i64 %28, %31
%33 = xor i64 %25, %32
%34 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%35 = load i64, i64* %34
%36 = lshr i64 %35, 41
%37 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%38 = load i64, i64* %37
%39 = shl i64 %38, 23
%40 = or i64 %36, %39
%41 = xor i64 %33, %40
%42 = add i64 %18, %41
%43 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%44 = load i64, i64* %43
%45 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%46 = load i64, i64* %45
%47 = and i64 %44, %46
%48 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%49 = load i64, i64* %48
%50 = xor i64 %49, -1
%51 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%52 = load i64, i64* %51
%53 = and i64 %50, %52
%54 = xor i64 %47, %53
%55 = add i64 %42, %54
%56 = load i32, i32* %8
%57 = add nsw i32 %56, 0
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %58
%60 = load i64, i64* %59
%61 = add i64 %55, %60
%62 = load i64*, i64** %4
%63 = load i32, i32* %8
%64 = add nsw i32 %63, 0
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i64, i64* %62, i64 %65
%67 = load i64, i64* %66
%68 = add i64 %61, %67
store i64 %68, i64* %5
%69 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%70 = load i64, i64* %69
%71 = lshr i64 %70, 28
%72 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%73 = load i64, i64* %72
%74 = shl i64 %73, 36
%75 = or i64 %71, %74
%76 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%77 = load i64, i64* %76
%78 = lshr i64 %77, 34
%79 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%80 = load i64, i64* %79
%81 = shl i64 %80, 30
%82 = or i64 %78, %81
%83 = xor i64 %75, %82
%84 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%85 = load i64, i64* %84
%86 = lshr i64 %85, 39
%87 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%88 = load i64, i64* %87
%89 = shl i64 %88, 25
%90 = or i64 %86, %89
%91 = xor i64 %83, %90
%92 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%93 = load i64, i64* %92
%94 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%95 = load i64, i64* %94
%96 = and i64 %93, %95
%97 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%98 = load i64, i64* %97
%99 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%100 = load i64, i64* %99
%101 = and i64 %98, %100
%102 = xor i64 %96, %101
%103 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%104 = load i64, i64* %103
%105 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%106 = load i64, i64* %105
%107 = and i64 %104, %106
%108 = xor i64 %102, %107
%109 = add i64 %91, %108
store i64 %109, i64* %6
%110 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%111 = load i64, i64* %110
%112 = load i64, i64* %5
%113 = add i64 %111, %112
%114 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
store i64 %113, i64* %114
%115 = load i64, i64* %5
%116 = load i64, i64* %6
%117 = add i64 %115, %116
%118 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
store i64 %117, i64* %118
%119 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%120 = load i64, i64* %119
%121 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%122 = load i64, i64* %121
%123 = lshr i64 %122, 14
%124 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%125 = load i64, i64* %124
%126 = shl i64 %125, 50
%127 = or i64 %123, %126
%128 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%129 = load i64, i64* %128
%130 = lshr i64 %129, 18
%131 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%132 = load i64, i64* %131
%133 = shl i64 %132, 46
%134 = or i64 %130, %133
%135 = xor i64 %127, %134
%136 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%137 = load i64, i64* %136
%138 = lshr i64 %137, 41
%139 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%140 = load i64, i64* %139
%141 = shl i64 %140, 23
%142 = or i64 %138, %141
%143 = xor i64 %135, %142
%144 = add i64 %120, %143
%145 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%146 = load i64, i64* %145
%147 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%148 = load i64, i64* %147
%149 = and i64 %146, %148
%150 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%151 = load i64, i64* %150
%152 = xor i64 %151, -1
%153 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%154 = load i64, i64* %153
%155 = and i64 %152, %154
%156 = xor i64 %149, %155
%157 = add i64 %144, %156
%158 = load i32, i32* %8
%159 = add nsw i32 %158, 1
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %160
%162 = load i64, i64* %161
%163 = add i64 %157, %162
%164 = load i64*, i64** %4
%165 = load i32, i32* %8
%166 = add nsw i32 %165, 1
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds i64, i64* %164, i64 %167
%169 = load i64, i64* %168
%170 = add i64 %163, %169
store i64 %170, i64* %5
%171 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%172 = load i64, i64* %171
%173 = lshr i64 %172, 28
%174 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%175 = load i64, i64* %174
%176 = shl i64 %175, 36
%177 = or i64 %173, %176
%178 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%179 = load i64, i64* %178
%180 = lshr i64 %179, 34
%181 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%182 = load i64, i64* %181
%183 = shl i64 %182, 30
%184 = or i64 %180, %183
%185 = xor i64 %177, %184
%186 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%187 = load i64, i64* %186
%188 = lshr i64 %187, 39
%189 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%190 = load i64, i64* %189
%191 = shl i64 %190, 25
%192 = or i64 %188, %191
%193 = xor i64 %185, %192
%194 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%195 = load i64, i64* %194
%196 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%197 = load i64, i64* %196
%198 = and i64 %195, %197
%199 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%200 = load i64, i64* %199
%201 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%202 = load i64, i64* %201
%203 = and i64 %200, %202
%204 = xor i64 %198, %203
%205 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%206 = load i64, i64* %205
%207 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%208 = load i64, i64* %207
%209 = and i64 %206, %208
%210 = xor i64 %204, %209
%211 = add i64 %193, %210
store i64 %211, i64* %6
%212 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%213 = load i64, i64* %212
%214 = load i64, i64* %5
%215 = add i64 %213, %214
%216 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
store i64 %215, i64* %216
%217 = load i64, i64* %5
%218 = load i64, i64* %6
%219 = add i64 %217, %218
%220 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
store i64 %219, i64* %220
%221 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%222 = load i64, i64* %221
%223 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%224 = load i64, i64* %223
%225 = lshr i64 %224, 14
%226 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%227 = load i64, i64* %226
%228 = shl i64 %227, 50
%229 = or i64 %225, %228
%230 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%231 = load i64, i64* %230
%232 = lshr i64 %231, 18
%233 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%234 = load i64, i64* %233
%235 = shl i64 %234, 46
%236 = or i64 %232, %235
%237 = xor i64 %229, %236
%238 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%239 = load i64, i64* %238
%240 = lshr i64 %239, 41
%241 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%242 = load i64, i64* %241
%243 = shl i64 %242, 23
%244 = or i64 %240, %243
%245 = xor i64 %237, %244
%246 = add i64 %222, %245
%247 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%248 = load i64, i64* %247
%249 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%250 = load i64, i64* %249
%251 = and i64 %248, %250
%252 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%253 = load i64, i64* %252
%254 = xor i64 %253, -1
%255 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%256 = load i64, i64* %255
%257 = and i64 %254, %256
%258 = xor i64 %251, %257
%259 = add i64 %246, %258
%260 = load i32, i32* %8
%261 = add nsw i32 %260, 2
%262 = sext i32 %261 to i64
%263 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %262
%264 = load i64, i64* %263
%265 = add i64 %259, %264
%266 = load i64*, i64** %4
%267 = load i32, i32* %8
%268 = add nsw i32 %267, 2
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds i64, i64* %266, i64 %269
%271 = load i64, i64* %270
%272 = add i64 %265, %271
store i64 %272, i64* %5
%273 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%274 = load i64, i64* %273
%275 = lshr i64 %274, 28
%276 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%277 = load i64, i64* %276
%278 = shl i64 %277, 36
%279 = or i64 %275, %278
%280 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%281 = load i64, i64* %280
%282 = lshr i64 %281, 34
%283 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%284 = load i64, i64* %283
%285 = shl i64 %284, 30
%286 = or i64 %282, %285
%287 = xor i64 %279, %286
%288 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%289 = load i64, i64* %288
%290 = lshr i64 %289, 39
%291 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%292 = load i64, i64* %291
%293 = shl i64 %292, 25
%294 = or i64 %290, %293
%295 = xor i64 %287, %294
%296 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%297 = load i64, i64* %296
%298 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%299 = load i64, i64* %298
%300 = and i64 %297, %299
%301 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%302 = load i64, i64* %301
%303 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%304 = load i64, i64* %303
%305 = and i64 %302, %304
%306 = xor i64 %300, %305
%307 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%308 = load i64, i64* %307
%309 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%310 = load i64, i64* %309
%311 = and i64 %308, %310
%312 = xor i64 %306, %311
%313 = add i64 %295, %312
store i64 %313, i64* %6
%314 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%315 = load i64, i64* %314
%316 = load i64, i64* %5
%317 = add i64 %315, %316
%318 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
store i64 %317, i64* %318
%319 = load i64, i64* %5
%320 = load i64, i64* %6
%321 = add i64 %319, %320
%322 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
store i64 %321, i64* %322
%323 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%324 = load i64, i64* %323
%325 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%326 = load i64, i64* %325
%327 = lshr i64 %326, 14
%328 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%329 = load i64, i64* %328
%330 = shl i64 %329, 50
%331 = or i64 %327, %330
%332 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%333 = load i64, i64* %332
%334 = lshr i64 %333, 18
%335 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%336 = load i64, i64* %335
%337 = shl i64 %336, 46
%338 = or i64 %334, %337
%339 = xor i64 %331, %338
%340 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%341 = load i64, i64* %340
%342 = lshr i64 %341, 41
%343 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%344 = load i64, i64* %343
%345 = shl i64 %344, 23
%346 = or i64 %342, %345
%347 = xor i64 %339, %346
%348 = add i64 %324, %347
%349 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%350 = load i64, i64* %349
%351 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%352 = load i64, i64* %351
%353 = and i64 %350, %352
%354 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%355 = load i64, i64* %354
%356 = xor i64 %355, -1
%357 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%358 = load i64, i64* %357
%359 = and i64 %356, %358
%360 = xor i64 %353, %359
%361 = add i64 %348, %360
%362 = load i32, i32* %8
%363 = add nsw i32 %362, 3
%364 = sext i32 %363 to i64
%365 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %364
%366 = load i64, i64* %365
%367 = add i64 %361, %366
%368 = load i64*, i64** %4
%369 = load i32, i32* %8
%370 = add nsw i32 %369, 3
%371 = sext i32 %370 to i64
%372 = getelementptr inbounds i64, i64* %368, i64 %371
%373 = load i64, i64* %372
%374 = add i64 %367, %373
store i64 %374, i64* %5
%375 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%376 = load i64, i64* %375
%377 = lshr i64 %376, 28
%378 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%379 = load i64, i64* %378
%380 = shl i64 %379, 36
%381 = or i64 %377, %380
%382 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%383 = load i64, i64* %382
%384 = lshr i64 %383, 34
%385 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%386 = load i64, i64* %385
%387 = shl i64 %386, 30
%388 = or i64 %384, %387
%389 = xor i64 %381, %388
%390 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%391 = load i64, i64* %390
%392 = lshr i64 %391, 39
%393 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%394 = load i64, i64* %393
%395 = shl i64 %394, 25
%396 = or i64 %392, %395
%397 = xor i64 %389, %396
%398 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%399 = load i64, i64* %398
%400 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%401 = load i64, i64* %400
%402 = and i64 %399, %401
%403 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%404 = load i64, i64* %403
%405 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%406 = load i64, i64* %405
%407 = and i64 %404, %406
%408 = xor i64 %402, %407
%409 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%410 = load i64, i64* %409
%411 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%412 = load i64, i64* %411
%413 = and i64 %410, %412
%414 = xor i64 %408, %413
%415 = add i64 %397, %414
store i64 %415, i64* %6
%416 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%417 = load i64, i64* %416
%418 = load i64, i64* %5
%419 = add i64 %417, %418
%420 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
store i64 %419, i64* %420
%421 = load i64, i64* %5
%422 = load i64, i64* %6
%423 = add i64 %421, %422
%424 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
store i64 %423, i64* %424
%425 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%426 = load i64, i64* %425
%427 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%428 = load i64, i64* %427
%429 = lshr i64 %428, 14
%430 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%431 = load i64, i64* %430
%432 = shl i64 %431, 50
%433 = or i64 %429, %432
%434 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%435 = load i64, i64* %434
%436 = lshr i64 %435, 18
%437 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%438 = load i64, i64* %437
%439 = shl i64 %438, 46
%440 = or i64 %436, %439
%441 = xor i64 %433, %440
%442 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%443 = load i64, i64* %442
%444 = lshr i64 %443, 41
%445 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%446 = load i64, i64* %445
%447 = shl i64 %446, 23
%448 = or i64 %444, %447
%449 = xor i64 %441, %448
%450 = add i64 %426, %449
%451 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%452 = load i64, i64* %451
%453 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%454 = load i64, i64* %453
%455 = and i64 %452, %454
%456 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%457 = load i64, i64* %456
%458 = xor i64 %457, -1
%459 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%460 = load i64, i64* %459
%461 = and i64 %458, %460
%462 = xor i64 %455, %461
%463 = add i64 %450, %462
%464 = load i32, i32* %8
%465 = add nsw i32 %464, 4
%466 = sext i32 %465 to i64
%467 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %466
%468 = load i64, i64* %467
%469 = add i64 %463, %468
%470 = load i64*, i64** %4
%471 = load i32, i32* %8
%472 = add nsw i32 %471, 4
%473 = sext i32 %472 to i64
%474 = getelementptr inbounds i64, i64* %470, i64 %473
%475 = load i64, i64* %474
%476 = add i64 %469, %475
store i64 %476, i64* %5
%477 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%478 = load i64, i64* %477
%479 = lshr i64 %478, 28
%480 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%481 = load i64, i64* %480
%482 = shl i64 %481, 36
%483 = or i64 %479, %482
%484 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%485 = load i64, i64* %484
%486 = lshr i64 %485, 34
%487 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%488 = load i64, i64* %487
%489 = shl i64 %488, 30
%490 = or i64 %486, %489
%491 = xor i64 %483, %490
%492 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%493 = load i64, i64* %492
%494 = lshr i64 %493, 39
%495 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%496 = load i64, i64* %495
%497 = shl i64 %496, 25
%498 = or i64 %494, %497
%499 = xor i64 %491, %498
%500 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%501 = load i64, i64* %500
%502 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%503 = load i64, i64* %502
%504 = and i64 %501, %503
%505 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%506 = load i64, i64* %505
%507 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%508 = load i64, i64* %507
%509 = and i64 %506, %508
%510 = xor i64 %504, %509
%511 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%512 = load i64, i64* %511
%513 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%514 = load i64, i64* %513
%515 = and i64 %512, %514
%516 = xor i64 %510, %515
%517 = add i64 %499, %516
store i64 %517, i64* %6
%518 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%519 = load i64, i64* %518
%520 = load i64, i64* %5
%521 = add i64 %519, %520
%522 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
store i64 %521, i64* %522
%523 = load i64, i64* %5
%524 = load i64, i64* %6
%525 = add i64 %523, %524
%526 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
store i64 %525, i64* %526
%527 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%528 = load i64, i64* %527
%529 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%530 = load i64, i64* %529
%531 = lshr i64 %530, 14
%532 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%533 = load i64, i64* %532
%534 = shl i64 %533, 50
%535 = or i64 %531, %534
%536 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%537 = load i64, i64* %536
%538 = lshr i64 %537, 18
%539 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%540 = load i64, i64* %539
%541 = shl i64 %540, 46
%542 = or i64 %538, %541
%543 = xor i64 %535, %542
%544 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%545 = load i64, i64* %544
%546 = lshr i64 %545, 41
%547 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%548 = load i64, i64* %547
%549 = shl i64 %548, 23
%550 = or i64 %546, %549
%551 = xor i64 %543, %550
%552 = add i64 %528, %551
%553 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%554 = load i64, i64* %553
%555 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%556 = load i64, i64* %555
%557 = and i64 %554, %556
%558 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%559 = load i64, i64* %558
%560 = xor i64 %559, -1
%561 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%562 = load i64, i64* %561
%563 = and i64 %560, %562
%564 = xor i64 %557, %563
%565 = add i64 %552, %564
%566 = load i32, i32* %8
%567 = add nsw i32 %566, 5
%568 = sext i32 %567 to i64
%569 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %568
%570 = load i64, i64* %569
%571 = add i64 %565, %570
%572 = load i64*, i64** %4
%573 = load i32, i32* %8
%574 = add nsw i32 %573, 5
%575 = sext i32 %574 to i64
%576 = getelementptr inbounds i64, i64* %572, i64 %575
%577 = load i64, i64* %576
%578 = add i64 %571, %577
store i64 %578, i64* %5
%579 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%580 = load i64, i64* %579
%581 = lshr i64 %580, 28
%582 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%583 = load i64, i64* %582
%584 = shl i64 %583, 36
%585 = or i64 %581, %584
%586 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%587 = load i64, i64* %586
%588 = lshr i64 %587, 34
%589 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%590 = load i64, i64* %589
%591 = shl i64 %590, 30
%592 = or i64 %588, %591
%593 = xor i64 %585, %592
%594 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%595 = load i64, i64* %594
%596 = lshr i64 %595, 39
%597 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%598 = load i64, i64* %597
%599 = shl i64 %598, 25
%600 = or i64 %596, %599
%601 = xor i64 %593, %600
%602 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%603 = load i64, i64* %602
%604 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%605 = load i64, i64* %604
%606 = and i64 %603, %605
%607 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%608 = load i64, i64* %607
%609 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%610 = load i64, i64* %609
%611 = and i64 %608, %610
%612 = xor i64 %606, %611
%613 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%614 = load i64, i64* %613
%615 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%616 = load i64, i64* %615
%617 = and i64 %614, %616
%618 = xor i64 %612, %617
%619 = add i64 %601, %618
store i64 %619, i64* %6
%620 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%621 = load i64, i64* %620
%622 = load i64, i64* %5
%623 = add i64 %621, %622
%624 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
store i64 %623, i64* %624
%625 = load i64, i64* %5
%626 = load i64, i64* %6
%627 = add i64 %625, %626
%628 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
store i64 %627, i64* %628
%629 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%630 = load i64, i64* %629
%631 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%632 = load i64, i64* %631
%633 = lshr i64 %632, 14
%634 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%635 = load i64, i64* %634
%636 = shl i64 %635, 50
%637 = or i64 %633, %636
%638 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%639 = load i64, i64* %638
%640 = lshr i64 %639, 18
%641 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%642 = load i64, i64* %641
%643 = shl i64 %642, 46
%644 = or i64 %640, %643
%645 = xor i64 %637, %644
%646 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%647 = load i64, i64* %646
%648 = lshr i64 %647, 41
%649 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%650 = load i64, i64* %649
%651 = shl i64 %650, 23
%652 = or i64 %648, %651
%653 = xor i64 %645, %652
%654 = add i64 %630, %653
%655 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%656 = load i64, i64* %655
%657 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%658 = load i64, i64* %657
%659 = and i64 %656, %658
%660 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%661 = load i64, i64* %660
%662 = xor i64 %661, -1
%663 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%664 = load i64, i64* %663
%665 = and i64 %662, %664
%666 = xor i64 %659, %665
%667 = add i64 %654, %666
%668 = load i32, i32* %8
%669 = add nsw i32 %668, 6
%670 = sext i32 %669 to i64
%671 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %670
%672 = load i64, i64* %671
%673 = add i64 %667, %672
%674 = load i64*, i64** %4
%675 = load i32, i32* %8
%676 = add nsw i32 %675, 6
%677 = sext i32 %676 to i64
%678 = getelementptr inbounds i64, i64* %674, i64 %677
%679 = load i64, i64* %678
%680 = add i64 %673, %679
store i64 %680, i64* %5
%681 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%682 = load i64, i64* %681
%683 = lshr i64 %682, 28
%684 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%685 = load i64, i64* %684
%686 = shl i64 %685, 36
%687 = or i64 %683, %686
%688 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%689 = load i64, i64* %688
%690 = lshr i64 %689, 34
%691 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%692 = load i64, i64* %691
%693 = shl i64 %692, 30
%694 = or i64 %690, %693
%695 = xor i64 %687, %694
%696 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%697 = load i64, i64* %696
%698 = lshr i64 %697, 39
%699 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%700 = load i64, i64* %699
%701 = shl i64 %700, 25
%702 = or i64 %698, %701
%703 = xor i64 %695, %702
%704 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%705 = load i64, i64* %704
%706 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%707 = load i64, i64* %706
%708 = and i64 %705, %707
%709 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%710 = load i64, i64* %709
%711 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%712 = load i64, i64* %711
%713 = and i64 %710, %712
%714 = xor i64 %708, %713
%715 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%716 = load i64, i64* %715
%717 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%718 = load i64, i64* %717
%719 = and i64 %716, %718
%720 = xor i64 %714, %719
%721 = add i64 %703, %720
store i64 %721, i64* %6
%722 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%723 = load i64, i64* %722
%724 = load i64, i64* %5
%725 = add i64 %723, %724
%726 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
store i64 %725, i64* %726
%727 = load i64, i64* %5
%728 = load i64, i64* %6
%729 = add i64 %727, %728
%730 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
store i64 %729, i64* %730
%731 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%732 = load i64, i64* %731
%733 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%734 = load i64, i64* %733
%735 = lshr i64 %734, 14
%736 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%737 = load i64, i64* %736
%738 = shl i64 %737, 50
%739 = or i64 %735, %738
%740 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%741 = load i64, i64* %740
%742 = lshr i64 %741, 18
%743 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%744 = load i64, i64* %743
%745 = shl i64 %744, 46
%746 = or i64 %742, %745
%747 = xor i64 %739, %746
%748 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%749 = load i64, i64* %748
%750 = lshr i64 %749, 41
%751 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%752 = load i64, i64* %751
%753 = shl i64 %752, 23
%754 = or i64 %750, %753
%755 = xor i64 %747, %754
%756 = add i64 %732, %755
%757 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%758 = load i64, i64* %757
%759 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%760 = load i64, i64* %759
%761 = and i64 %758, %760
%762 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%763 = load i64, i64* %762
%764 = xor i64 %763, -1
%765 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%766 = load i64, i64* %765
%767 = and i64 %764, %766
%768 = xor i64 %761, %767
%769 = add i64 %756, %768
%770 = load i32, i32* %8
%771 = add nsw i32 %770, 7
%772 = sext i32 %771 to i64
%773 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %772
%774 = load i64, i64* %773
%775 = add i64 %769, %774
%776 = load i64*, i64** %4
%777 = load i32, i32* %8
%778 = add nsw i32 %777, 7
%779 = sext i32 %778 to i64
%780 = getelementptr inbounds i64, i64* %776, i64 %779
%781 = load i64, i64* %780
%782 = add i64 %775, %781
store i64 %782, i64* %5
%783 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%784 = load i64, i64* %783
%785 = lshr i64 %784, 28
%786 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%787 = load i64, i64* %786
%788 = shl i64 %787, 36
%789 = or i64 %785, %788
%790 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%791 = load i64, i64* %790
%792 = lshr i64 %791, 34
%793 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%794 = load i64, i64* %793
%795 = shl i64 %794, 30
%796 = or i64 %792, %795
%797 = xor i64 %789, %796
%798 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%799 = load i64, i64* %798
%800 = lshr i64 %799, 39
%801 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%802 = load i64, i64* %801
%803 = shl i64 %802, 25
%804 = or i64 %800, %803
%805 = xor i64 %797, %804
%806 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%807 = load i64, i64* %806
%808 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%809 = load i64, i64* %808
%810 = and i64 %807, %809
%811 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%812 = load i64, i64* %811
%813 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%814 = load i64, i64* %813
%815 = and i64 %812, %814
%816 = xor i64 %810, %815
%817 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%818 = load i64, i64* %817
%819 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%820 = load i64, i64* %819
%821 = and i64 %818, %820
%822 = xor i64 %816, %821
%823 = add i64 %805, %822
store i64 %823, i64* %6
%824 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%825 = load i64, i64* %824
%826 = load i64, i64* %5
%827 = add i64 %825, %826
%828 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
store i64 %827, i64* %828
%829 = load i64, i64* %5
%830 = load i64, i64* %6
%831 = add i64 %829, %830
%832 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
store i64 %831, i64* %832
br label %833
833: ; preds = %16
%834 = load i32, i32* %8
%835 = add nsw i32 %834, 8
store i32 %835, i32* %8
br label %13
836: ; preds = %13
%837 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 0
%838 = load i64, i64* %837
%839 = load i64*, i64** %3
%840 = getelementptr inbounds i64, i64* %839, i64 0
%841 = load i64, i64* %840
%842 = add i64 %841, %838
store i64 %842, i64* %840
%843 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 1
%844 = load i64, i64* %843
%845 = load i64*, i64** %3
%846 = getelementptr inbounds i64, i64* %845, i64 1
%847 = load i64, i64* %846
%848 = add i64 %847, %844
store i64 %848, i64* %846
%849 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 2
%850 = load i64, i64* %849
%851 = load i64*, i64** %3
%852 = getelementptr inbounds i64, i64* %851, i64 2
%853 = load i64, i64* %852
%854 = add i64 %853, %850
store i64 %854, i64* %852
%855 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 3
%856 = load i64, i64* %855
%857 = load i64*, i64** %3
%858 = getelementptr inbounds i64, i64* %857, i64 3
%859 = load i64, i64* %858
%860 = add i64 %859, %856
store i64 %860, i64* %858
%861 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 4
%862 = load i64, i64* %861
%863 = load i64*, i64** %3
%864 = getelementptr inbounds i64, i64* %863, i64 4
%865 = load i64, i64* %864
%866 = add i64 %865, %862
store i64 %866, i64* %864
%867 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 5
%868 = load i64, i64* %867
%869 = load i64*, i64** %3
%870 = getelementptr inbounds i64, i64* %869, i64 5
%871 = load i64, i64* %870
%872 = add i64 %871, %868
store i64 %872, i64* %870
%873 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 6
%874 = load i64, i64* %873
%875 = load i64*, i64** %3
%876 = getelementptr inbounds i64, i64* %875, i64 6
%877 = load i64, i64* %876
%878 = add i64 %877, %874
store i64 %878, i64* %876
%879 = getelementptr inbounds [8 x i64], [8 x i64]* %7, i64 0, i64 7
%880 = load i64, i64* %879
%881 = load i64*, i64** %3
%882 = getelementptr inbounds i64, i64* %881, i64 7
%883 = load i64, i64* %882
%884 = add i64 %883, %880
store i64 %884, i64* %882
ret void
}

LLVM IR (-O2):
@SHA512_transform.K = internal unnamed_addr constant [80 x i64] [i64 4794697086780616226, i64 8158064640168781261, i64 -5349999486874862801, i64 -1606136188198331460, i64 4131703408338449720, i64 6480981068601479193, i64 -7908458776815382629, i64 -6116909921290321640, i64 -2880145864133508542, i64 1334009975649890238, i64 2608012711638119052, i64 6128411473006802146, i64 8268148722764581231, i64 -9160688886553864527, i64 -7215885187991268811, i64 -4495734319001033068, i64 -1973867731355612462, i64 -1171420211273849373, i64 1135362057144423861, i64 2597628984639134821, i64 3308224258029322869, i64 5365058923640841347, i64 6679025012923562964, i64 8573033837759648693, i64 -7476448914759557205, i64 -6327057829258317296, i64 -5763719355590565569, i64 -4658551843659510044, i64 -4116276920077217854, i64 -3051310485924567259, i64 489312712824947311, i64 1452737877330783856, i64 2861767655752347644, i64 3322285676063803686, i64 5560940570517711597, i64 5996557281743188959, i64 7280758554555802590, i64 8532644243296465576, i64 -9096487096722542874, i64 -7894198246740708037, i64 -6719396339535248540, i64 -6333637450476146687, i64 -4446306890439682159, i64 -4076793802049405392, i64 -3345356375505022440, i64 -2983346525034927856, i64 -860691631967231958, i64 1182934255886127544, i64 1847814050463011016, i64 2177327727835720531, i64 2830643537854262169, i64 3796741975233480872, i64 4115178125766777443, i64 5681478168544905931, i64 6601373596472566643, i64 7507060721942968483, i64 8399075790359081724, i64 8693463985226723168, i64 -8878714635349349518, i64 -8302665154208450068, i64 -8016688836872298968, i64 -6606660893046293015, i64 -4685533653050689259, i64 -4147400797238176981, i64 -3880063495543823972, i64 -3348786107499101689, i64 -1523767162380948706, i64 -757361751448694408, i64 500013540394364858, i64 748580250866718886, i64 1242879168328830382, i64 1977374033974150939, i64 2944078676154940804, i64 3659926193048069267, i64 4368137639120453308, i64 4836135668995329356, i64 5532061633213252278, i64 6448918945643986474, i64 6902733635092675308, i64 7801388544844847127]
define void @SHA512_transform(i64* nocapture %0, i64* nocapture %1) {
%3 = load i64, i64* %0
%4 = getelementptr inbounds i64, i64* %0, i64 1
%5 = load i64, i64* %4
%6 = getelementptr inbounds i64, i64* %0, i64 2
%7 = load i64, i64* %6
%8 = getelementptr inbounds i64, i64* %0, i64 3
%9 = load i64, i64* %8
%10 = getelementptr inbounds i64, i64* %0, i64 4
%11 = load i64, i64* %10
%12 = getelementptr inbounds i64, i64* %0, i64 5
%13 = load i64, i64* %12
%14 = getelementptr inbounds i64, i64* %0, i64 6
%15 = load i64, i64* %14
%16 = getelementptr inbounds i64, i64* %0, i64 7
%17 = load i64, i64* %16
br label %18
18: ; preds = %2, %18
%19 = phi i64 [ 0, %2 ], [ %266, %18 ]
%20 = phi i64 [ %3, %2 ], [ %265, %18 ]
%21 = phi i64 [ %5, %2 ], [ %236, %18 ]
%22 = phi i64 [ %7, %2 ], [ %206, %18 ]
%23 = phi i64 [ %9, %2 ], [ %176, %18 ]
%24 = phi i64 [ %11, %2 ], [ %264, %18 ]
%25 = phi i64 [ %13, %2 ], [ %235, %18 ]
%26 = phi i64 [ %15, %2 ], [ %205, %18 ]
%27 = phi i64 [ %17, %2 ], [ %175, %18 ]
%28 = tail call i64 @llvm.fshl.i64(i64 %24, i64 %24, i64 50)
%29 = tail call i64 @llvm.fshl.i64(i64 %24, i64 %24, i64 46)
%30 = xor i64 %28, %29
%31 = tail call i64 @llvm.fshl.i64(i64 %24, i64 %24, i64 23)
%32 = xor i64 %30, %31
%33 = and i64 %24, %25
%34 = xor i64 %24, -1
%35 = and i64 %26, %34
%36 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %19
%37 = load i64, i64* %36
%38 = getelementptr inbounds i64, i64* %1, i64 %19
%39 = load i64, i64* %38
%40 = add i64 %35, %27
%41 = add i64 %40, %33
%42 = add i64 %41, %32
%43 = add i64 %42, %37
%44 = add i64 %43, %39
%45 = tail call i64 @llvm.fshl.i64(i64 %20, i64 %20, i64 36)
%46 = tail call i64 @llvm.fshl.i64(i64 %20, i64 %20, i64 30)
%47 = xor i64 %45, %46
%48 = tail call i64 @llvm.fshl.i64(i64 %20, i64 %20, i64 25)
%49 = xor i64 %47, %48
%50 = and i64 %20, %21
%51 = xor i64 %20, %21
%52 = and i64 %51, %22
%53 = xor i64 %52, %50
%54 = add i64 %49, %53
%55 = add i64 %44, %23
%56 = add i64 %54, %44
%57 = tail call i64 @llvm.fshl.i64(i64 %55, i64 %55, i64 50)
%58 = tail call i64 @llvm.fshl.i64(i64 %55, i64 %55, i64 46)
%59 = xor i64 %57, %58
%60 = tail call i64 @llvm.fshl.i64(i64 %55, i64 %55, i64 23)
%61 = xor i64 %59, %60
%62 = and i64 %55, %24
%63 = xor i64 %55, -1
%64 = and i64 %25, %63
%65 = or i64 %19, 1
%66 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %65
%67 = load i64, i64* %66
%68 = getelementptr inbounds i64, i64* %1, i64 %65
%69 = load i64, i64* %68
%70 = add i64 %67, %26
%71 = add i64 %70, %69
%72 = add i64 %71, %64
%73 = add i64 %72, %62
%74 = add i64 %73, %61
%75 = tail call i64 @llvm.fshl.i64(i64 %56, i64 %56, i64 36)
%76 = tail call i64 @llvm.fshl.i64(i64 %56, i64 %56, i64 30)
%77 = xor i64 %75, %76
%78 = tail call i64 @llvm.fshl.i64(i64 %56, i64 %56, i64 25)
%79 = xor i64 %77, %78
%80 = and i64 %56, %20
%81 = and i64 %56, %21
%82 = xor i64 %81, %50
%83 = xor i64 %82, %80
%84 = add i64 %79, %83
%85 = add i64 %74, %22
%86 = add i64 %84, %74
%87 = tail call i64 @llvm.fshl.i64(i64 %85, i64 %85, i64 50)
%88 = tail call i64 @llvm.fshl.i64(i64 %85, i64 %85, i64 46)
%89 = xor i64 %87, %88
%90 = tail call i64 @llvm.fshl.i64(i64 %85, i64 %85, i64 23)
%91 = xor i64 %89, %90
%92 = and i64 %85, %55
%93 = xor i64 %85, -1
%94 = and i64 %24, %93
%95 = or i64 %19, 2
%96 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %95
%97 = load i64, i64* %96
%98 = getelementptr inbounds i64, i64* %1, i64 %95
%99 = load i64, i64* %98
%100 = add i64 %97, %25
%101 = add i64 %100, %99
%102 = add i64 %101, %94
%103 = add i64 %102, %92
%104 = add i64 %103, %91
%105 = tail call i64 @llvm.fshl.i64(i64 %86, i64 %86, i64 36)
%106 = tail call i64 @llvm.fshl.i64(i64 %86, i64 %86, i64 30)
%107 = xor i64 %105, %106
%108 = tail call i64 @llvm.fshl.i64(i64 %86, i64 %86, i64 25)
%109 = xor i64 %107, %108
%110 = and i64 %86, %56
%111 = and i64 %86, %20
%112 = xor i64 %111, %80
%113 = xor i64 %112, %110
%114 = add i64 %109, %113
%115 = add i64 %104, %21
%116 = add i64 %114, %104
%117 = tail call i64 @llvm.fshl.i64(i64 %115, i64 %115, i64 50)
%118 = tail call i64 @llvm.fshl.i64(i64 %115, i64 %115, i64 46)
%119 = xor i64 %117, %118
%120 = tail call i64 @llvm.fshl.i64(i64 %115, i64 %115, i64 23)
%121 = xor i64 %119, %120
%122 = and i64 %115, %85
%123 = xor i64 %115, -1
%124 = and i64 %55, %123
%125 = or i64 %19, 3
%126 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %125
%127 = load i64, i64* %126
%128 = getelementptr inbounds i64, i64* %1, i64 %125
%129 = load i64, i64* %128
%130 = add i64 %127, %24
%131 = add i64 %130, %129
%132 = add i64 %131, %124
%133 = add i64 %132, %122
%134 = add i64 %133, %121
%135 = tail call i64 @llvm.fshl.i64(i64 %116, i64 %116, i64 36)
%136 = tail call i64 @llvm.fshl.i64(i64 %116, i64 %116, i64 30)
%137 = xor i64 %135, %136
%138 = tail call i64 @llvm.fshl.i64(i64 %116, i64 %116, i64 25)
%139 = xor i64 %137, %138
%140 = and i64 %116, %86
%141 = and i64 %116, %56
%142 = xor i64 %141, %110
%143 = xor i64 %142, %140
%144 = add i64 %139, %143
%145 = add i64 %134, %20
%146 = add i64 %144, %134
%147 = tail call i64 @llvm.fshl.i64(i64 %145, i64 %145, i64 50)
%148 = tail call i64 @llvm.fshl.i64(i64 %145, i64 %145, i64 46)
%149 = xor i64 %147, %148
%150 = tail call i64 @llvm.fshl.i64(i64 %145, i64 %145, i64 23)
%151 = xor i64 %149, %150
%152 = and i64 %145, %115
%153 = xor i64 %145, -1
%154 = and i64 %85, %153
%155 = or i64 %19, 4
%156 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %155
%157 = load i64, i64* %156
%158 = getelementptr inbounds i64, i64* %1, i64 %155
%159 = load i64, i64* %158
%160 = add i64 %157, %55
%161 = add i64 %160, %159
%162 = add i64 %161, %154
%163 = add i64 %162, %152
%164 = add i64 %163, %151
%165 = tail call i64 @llvm.fshl.i64(i64 %146, i64 %146, i64 36)
%166 = tail call i64 @llvm.fshl.i64(i64 %146, i64 %146, i64 30)
%167 = xor i64 %165, %166
%168 = tail call i64 @llvm.fshl.i64(i64 %146, i64 %146, i64 25)
%169 = xor i64 %167, %168
%170 = and i64 %146, %116
%171 = and i64 %146, %86
%172 = xor i64 %171, %140
%173 = xor i64 %172, %170
%174 = add i64 %169, %173
%175 = add i64 %164, %56
%176 = add i64 %174, %164
%177 = tail call i64 @llvm.fshl.i64(i64 %175, i64 %175, i64 50)
%178 = tail call i64 @llvm.fshl.i64(i64 %175, i64 %175, i64 46)
%179 = xor i64 %177, %178
%180 = tail call i64 @llvm.fshl.i64(i64 %175, i64 %175, i64 23)
%181 = xor i64 %179, %180
%182 = and i64 %175, %145
%183 = xor i64 %175, -1
%184 = and i64 %115, %183
%185 = or i64 %19, 5
%186 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %185
%187 = load i64, i64* %186
%188 = getelementptr inbounds i64, i64* %1, i64 %185
%189 = load i64, i64* %188
%190 = add i64 %85, %187
%191 = add i64 %190, %189
%192 = add i64 %191, %184
%193 = add i64 %192, %182
%194 = add i64 %193, %181
%195 = tail call i64 @llvm.fshl.i64(i64 %176, i64 %176, i64 36)
%196 = tail call i64 @llvm.fshl.i64(i64 %176, i64 %176, i64 30)
%197 = xor i64 %195, %196
%198 = tail call i64 @llvm.fshl.i64(i64 %176, i64 %176, i64 25)
%199 = xor i64 %197, %198
%200 = and i64 %176, %146
%201 = and i64 %176, %116
%202 = xor i64 %201, %170
%203 = xor i64 %202, %200
%204 = add i64 %199, %203
%205 = add i64 %194, %86
%206 = add i64 %204, %194
%207 = tail call i64 @llvm.fshl.i64(i64 %205, i64 %205, i64 50)
%208 = tail call i64 @llvm.fshl.i64(i64 %205, i64 %205, i64 46)
%209 = xor i64 %207, %208
%210 = tail call i64 @llvm.fshl.i64(i64 %205, i64 %205, i64 23)
%211 = xor i64 %209, %210
%212 = and i64 %205, %175
%213 = xor i64 %205, -1
%214 = and i64 %145, %213
%215 = or i64 %19, 6
%216 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %215
%217 = load i64, i64* %216
%218 = getelementptr inbounds i64, i64* %1, i64 %215
%219 = load i64, i64* %218
%220 = add i64 %219, %217
%221 = add i64 %220, %115
%222 = add i64 %221, %214
%223 = add i64 %222, %212
%224 = add i64 %223, %211
%225 = tail call i64 @llvm.fshl.i64(i64 %206, i64 %206, i64 36)
%226 = tail call i64 @llvm.fshl.i64(i64 %206, i64 %206, i64 30)
%227 = xor i64 %225, %226
%228 = tail call i64 @llvm.fshl.i64(i64 %206, i64 %206, i64 25)
%229 = xor i64 %227, %228
%230 = and i64 %206, %176
%231 = and i64 %206, %146
%232 = xor i64 %231, %200
%233 = xor i64 %232, %230
%234 = add i64 %229, %233
%235 = add i64 %224, %116
%236 = add i64 %234, %224
%237 = tail call i64 @llvm.fshl.i64(i64 %235, i64 %235, i64 50)
%238 = tail call i64 @llvm.fshl.i64(i64 %235, i64 %235, i64 46)
%239 = xor i64 %237, %238
%240 = tail call i64 @llvm.fshl.i64(i64 %235, i64 %235, i64 23)
%241 = xor i64 %239, %240
%242 = and i64 %235, %205
%243 = xor i64 %235, -1
%244 = and i64 %175, %243
%245 = or i64 %19, 7
%246 = getelementptr inbounds [80 x i64], [80 x i64]* @SHA512_transform.K, i64 0, i64 %245
%247 = load i64, i64* %246
%248 = getelementptr inbounds i64, i64* %1, i64 %245
%249 = load i64, i64* %248
%250 = add i64 %249, %247
%251 = add i64 %250, %145
%252 = add i64 %251, %244
%253 = add i64 %252, %242
%254 = add i64 %253, %241
%255 = tail call i64 @llvm.fshl.i64(i64 %236, i64 %236, i64 36)
%256 = tail call i64 @llvm.fshl.i64(i64 %236, i64 %236, i64 30)
%257 = xor i64 %255, %256
%258 = tail call i64 @llvm.fshl.i64(i64 %236, i64 %236, i64 25)
%259 = xor i64 %257, %258
%260 = xor i64 %206, %176
%261 = and i64 %236, %260
%262 = xor i64 %261, %230
%263 = add i64 %259, %262
%264 = add i64 %254, %146
%265 = add i64 %263, %254
%266 = add nuw nsw i64 %19, 8
%267 = icmp ult i64 %19, 72
br i1 %267, label %18, label %268
268: ; preds = %18
%269 = add i64 %265, %3
store i64 %269, i64* %0
%270 = add i64 %236, %5
store i64 %270, i64* %4
%271 = add i64 %206, %7
store i64 %271, i64* %6
%272 = add i64 %176, %9
store i64 %272, i64* %8
%273 = add i64 %264, %11
store i64 %273, i64* %10
%274 = add i64 %235, %13
store i64 %274, i64* %12
%275 = add i64 %205, %15
store i64 %275, i64* %14
%276 = add i64 %175, %17
store i64 %276, i64* %16
ret void
}