void processBlock(unsigned char old[], unsigned char out[],
                  unsigned char message_block[]) {
  unsigned char K0[] = {0x5A, 0x82, 0x79, 0x99};
  unsigned char K1[] = {0x6E, 0xD9, 0xEB, 0xA1};
  unsigned char K2[] = {0x8F, 0x1B, 0xBC, 0xDC};
  unsigned char K3[] = {0xCA, 0x62, 0xC1, 0xD6};
  unsigned char A[] = {0x0, 0x0, 0x0, 0x0};
  unsigned char B[] = {0x0, 0x0, 0x0, 0x0};
  unsigned char C[] = {0x0, 0x0, 0x0, 0x0};
  unsigned char D[] = {0x0, 0x0, 0x0, 0x0};
  unsigned char E[] = {0x0, 0x0, 0x0, 0x0};
  unsigned char temp[4];
  unsigned char temp2[4];
  unsigned char W[80 * 4];
  unsigned char t;
  for (t = 0; t < 80; t++) {
    assign(&W[(t * 4)], A);
  }
  for (t = 0; t < 64; t++) {
    W[t] = message_block[t];
  }
  for (t = 16; t < 80; t++) {
    xor(&W[t * 4 - 3 * 4], &W[t * 4 - 8 * 4], temp);
    xor(temp, &W[t * 4 - 14 * 4], temp);
    xor(temp, &W[t * 4 - 16 * 4], temp);
    SHA1CircularShift(1, temp, &W[(t * 4)]);
  }
  assign(A, &old[0]);
  assign(B, &old[4]);
  assign(C, &old[8]);
  assign(D, &old[12]);
  assign(E, &old[16]);
  for (t = 0; t < 80; t++) {
    if (t < 20) {
      and(B, C, temp);
      comp(B, temp2);
      and(temp2, D, temp2);
      or (temp, temp2, temp);
      SHA1CircularShift(5, A, temp2);
      sum(temp, temp2, temp);
      sum(temp, E, temp);
      sum(temp, &W[t * 4], temp);
      sum(temp, K0, temp);
    } else if (t < 40) {
      SHA1CircularShift(5, A, temp);
      xor(B, C, temp2);
      xor(temp2, D, temp2);
      sum(temp, temp2, temp);
      sum(temp, E, temp);
      sum(temp, &W[t * 4], temp);
      sum(temp, K1, temp);
    } else if (t < 60) {
      and(B, C, temp);
      and(B, D, temp2);
      or (temp, temp2, temp);
      and(C, D, temp2);
      or (temp, temp2, temp2);
      SHA1CircularShift(5, A, temp);
      sum(temp, temp2, temp);
      sum(temp, E, temp);
      sum(temp, &W[t * 4], temp);
      sum(temp, K2, temp);
    } else if (t < 80) {
      SHA1CircularShift(5, A, temp);
      xor(B, C, temp2);
      xor(temp2, D, temp2);
      sum(temp, temp2, temp);
      sum(temp, E, temp);
      sum(temp, &W[t * 4], temp);
      sum(temp, K3, temp);
    }
    assign(E, D);
    assign(D, C);
    SHA1CircularShift(30, B, C);
    assign(B, A);
    assign(A, temp);
  }
  sum(A, &old[0], &out[0]);
  sum(B, &old[4], &out[4]);
  sum(C, &old[8], &out[8]);
  sum(D, &old[12], &out[12]);
  sum(E, &old[16], &out[16]);
}


x86 assembly (clang, -O0):
<processBlock>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1a0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    0xe63(%rip),%eax
mov    %eax,-0x1c(%rbp)
mov    0xe5e(%rip),%eax
mov    %eax,-0x20(%rbp)
mov    0xe59(%rip),%eax
mov    %eax,-0x24(%rbp)
mov    0xe54(%rip),%eax
mov    %eax,-0x28(%rbp)
lea    -0x2c(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1050 <memset@plt>
lea    -0x30(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1050 <memset@plt>
lea    -0x34(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1050 <memset@plt>
lea    -0x38(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1050 <memset@plt>
lea    -0x3c(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1050 <memset@plt>
movb   $0x0,-0x191(%rbp)
movzbl -0x191(%rbp),%eax
cmp    $0x50,%eax
jge    1256 <processBlock+0xd6>
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
cltq
lea    -0x190(%rbp),%rdi
add    %rax,%rdi
lea    -0x2c(%rbp),%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
mov    -0x191(%rbp),%al
add    $0x1,%al
mov    %al,-0x191(%rbp)
jmp    1212 <processBlock+0x92>
movb   $0x0,-0x191(%rbp)
movzbl -0x191(%rbp),%eax
cmp    $0x40,%eax
jge    129c <processBlock+0x11c>
mov    -0x18(%rbp),%rax
movzbl -0x191(%rbp),%ecx
mov    (%rax,%rcx,1),%cl
movzbl -0x191(%rbp),%eax
mov    %cl,-0x190(%rbp,%rax,1)
mov    -0x191(%rbp),%al
add    $0x1,%al
mov    %al,-0x191(%rbp)
jmp    125d <processBlock+0xdd>
movb   $0x10,-0x191(%rbp)
movzbl -0x191(%rbp),%eax
cmp    $0x50,%eax
jge    1379 <processBlock+0x1f9>
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
sub    $0xc,%eax
cltq
lea    -0x190(%rbp),%rdi
add    %rax,%rdi
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
sub    $0x20,%eax
cltq
lea    -0x190(%rbp),%rsi
add    %rax,%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1080 <xor@plt>
lea    -0x40(%rbp),%rdi
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
sub    $0x38,%eax
cltq
lea    -0x190(%rbp),%rsi
add    %rax,%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1080 <xor@plt>
lea    -0x40(%rbp),%rdi
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
sub    $0x40,%eax
cltq
lea    -0x190(%rbp),%rsi
add    %rax,%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1080 <xor@plt>
lea    -0x40(%rbp),%rsi
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
cltq
lea    -0x190(%rbp),%rdx
add    %rax,%rdx
mov    $0x1,%edi
mov    $0x0,%al
call   1060 <SHA1CircularShift@plt>
mov    -0x191(%rbp),%al
add    $0x1,%al
mov    %al,-0x191(%rbp)
jmp    12a3 <processBlock+0x123>
lea    -0x2c(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
lea    -0x30(%rbp),%rdi
mov    -0x8(%rbp),%rsi
add    $0x4,%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
lea    -0x34(%rbp),%rdi
mov    -0x8(%rbp),%rsi
add    $0x8,%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
lea    -0x38(%rbp),%rdi
mov    -0x8(%rbp),%rsi
add    $0xc,%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
lea    -0x3c(%rbp),%rdi
mov    -0x8(%rbp),%rsi
add    $0x10,%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
movb   $0x0,-0x191(%rbp)
movzbl -0x191(%rbp),%eax
cmp    $0x50,%eax
jge    1767 <processBlock+0x5e7>
movzbl -0x191(%rbp),%eax
cmp    $0x14,%eax
jge    14ba <processBlock+0x33a>
lea    -0x30(%rbp),%rdi
lea    -0x34(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1040 <and@plt>
lea    -0x30(%rbp),%rdi
lea    -0x44(%rbp),%rsi
mov    $0x0,%al
call   1030 <comp@plt>
lea    -0x44(%rbp),%rdi
lea    -0x38(%rbp),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x0,%al
call   1040 <and@plt>
lea    -0x40(%rbp),%rdi
lea    -0x44(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1090 <or@plt>
lea    -0x2c(%rbp),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x5,%edi
mov    $0x0,%al
call   1060 <SHA1CircularShift@plt>
lea    -0x40(%rbp),%rdi
lea    -0x44(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
lea    -0x3c(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
cltq
lea    -0x190(%rbp),%rsi
add    %rax,%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
lea    -0x1c(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
jmp    1704 <processBlock+0x584>
movzbl -0x191(%rbp),%eax
cmp    $0x28,%eax
jge    1567 <processBlock+0x3e7>
lea    -0x2c(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x5,%edi
mov    $0x0,%al
call   1060 <SHA1CircularShift@plt>
lea    -0x30(%rbp),%rdi
lea    -0x34(%rbp),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x0,%al
call   1080 <xor@plt>
lea    -0x44(%rbp),%rdi
lea    -0x38(%rbp),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x0,%al
call   1080 <xor@plt>
lea    -0x40(%rbp),%rdi
lea    -0x44(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
lea    -0x3c(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
cltq
lea    -0x190(%rbp),%rsi
add    %rax,%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
lea    -0x20(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
jmp    16ff <processBlock+0x57f>
movzbl -0x191(%rbp),%eax
cmp    $0x3c,%eax
jge    164d <processBlock+0x4cd>
lea    -0x30(%rbp),%rdi
lea    -0x34(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1040 <and@plt>
lea    -0x30(%rbp),%rdi
lea    -0x38(%rbp),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x0,%al
call   1040 <and@plt>
lea    -0x40(%rbp),%rdi
lea    -0x44(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1090 <or@plt>
lea    -0x34(%rbp),%rdi
lea    -0x38(%rbp),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x0,%al
call   1040 <and@plt>
lea    -0x40(%rbp),%rdi
lea    -0x44(%rbp),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x0,%al
call   1090 <or@plt>
lea    -0x2c(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x5,%edi
mov    $0x0,%al
call   1060 <SHA1CircularShift@plt>
lea    -0x40(%rbp),%rdi
lea    -0x44(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
lea    -0x3c(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
cltq
lea    -0x190(%rbp),%rsi
add    %rax,%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
lea    -0x24(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
jmp    16fa <processBlock+0x57a>
movzbl -0x191(%rbp),%eax
cmp    $0x50,%eax
jge    16f5 <processBlock+0x575>
lea    -0x2c(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x5,%edi
mov    $0x0,%al
call   1060 <SHA1CircularShift@plt>
lea    -0x30(%rbp),%rdi
lea    -0x34(%rbp),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x0,%al
call   1080 <xor@plt>
lea    -0x44(%rbp),%rdi
lea    -0x38(%rbp),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x0,%al
call   1080 <xor@plt>
lea    -0x40(%rbp),%rdi
lea    -0x44(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
lea    -0x3c(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
movzbl -0x191(%rbp),%eax
shl    $0x2,%eax
cltq
lea    -0x190(%rbp),%rsi
add    %rax,%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x40(%rbp),%rdi
lea    -0x28(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
jmp    16fa <processBlock+0x57a>
jmp    16ff <processBlock+0x57f>
jmp    1704 <processBlock+0x584>
lea    -0x3c(%rbp),%rdi
lea    -0x38(%rbp),%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
lea    -0x38(%rbp),%rdi
lea    -0x34(%rbp),%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
lea    -0x30(%rbp),%rsi
lea    -0x34(%rbp),%rdx
mov    $0x1e,%edi
mov    $0x0,%al
call   1060 <SHA1CircularShift@plt>
lea    -0x30(%rbp),%rdi
lea    -0x2c(%rbp),%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
lea    -0x2c(%rbp),%rdi
lea    -0x40(%rbp),%rsi
mov    $0x0,%al
call   10a0 <assign@plt>
mov    -0x191(%rbp),%al
add    $0x1,%al
mov    %al,-0x191(%rbp)
jmp    13db <processBlock+0x25b>
lea    -0x2c(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    -0x10(%rbp),%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x30(%rbp),%rdi
mov    -0x8(%rbp),%rsi
add    $0x4,%rsi
mov    -0x10(%rbp),%rdx
add    $0x4,%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x34(%rbp),%rdi
mov    -0x8(%rbp),%rsi
add    $0x8,%rsi
mov    -0x10(%rbp),%rdx
add    $0x8,%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x38(%rbp),%rdi
mov    -0x8(%rbp),%rsi
add    $0xc,%rsi
mov    -0x10(%rbp),%rdx
add    $0xc,%rdx
mov    $0x0,%al
call   1070 <sum@plt>
lea    -0x3c(%rbp),%rdi
mov    -0x8(%rbp),%rsi
add    $0x10,%rsi
mov    -0x10(%rbp),%rdx
add    $0x10,%rdx
mov    $0x0,%al
call   1070 <sum@plt>
add    $0x1a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<processBlock>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1c8,%rsp
mov    %rdx,%r14
mov    %rsi,0x70(%rsp)
mov    %rdi,%r15
movl   $0x9979825a,0x3c(%rsp)
99
movl   $0xa1ebd96e,0x38(%rsp)
a1
movl   $0xdcbc1b8f,0x34(%rsp)
dc
movl   $0xd6c162ca,0x30(%rsp)
d6
movl   $0x0,0x14(%rsp)
movl   $0x0,0x24(%rsp)
movl   $0x0,0x20(%rsp)
movl   $0x0,0x1c(%rsp)
movl   $0x0,0xc(%rsp)
lea    0x14(%rsp),%rbp
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
lea    (%rsp,%rbx,1),%rdi
add    $0x80,%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1090 <assign@plt>
add    $0x4,%rbx
cmp    $0x140,%rbx
jne    11e0 <processBlock+0x70>
movups (%r14),%xmm0
movups 0x10(%r14),%xmm1
movups 0x20(%r14),%xmm2
movups 0x30(%r14),%xmm3
movaps %xmm3,0xb0(%rsp)
movaps %xmm2,0xa0(%rsp)
movaps %xmm1,0x90(%rsp)
movaps %xmm0,0x80(%rsp)
lea    0x80(%rsp),%rbx
mov    $0x40,%ebp
lea    0x10(%rsp),%r14
nopw   0x0(%rax,%rax,1)
lea    0x34(%rbx),%rdi
lea    0x20(%rbx),%rsi
mov    %r14,%rdx
xor    %eax,%eax
call   1070 <xor@plt>
lea    0x8(%rbx),%rsi
mov    %r14,%rdi
mov    %r14,%rdx
xor    %eax,%eax
call   1070 <xor@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
mov    %r14,%rdx
xor    %eax,%eax
call   1070 <xor@plt>
lea    0x40(%rbx),%rdx
mov    $0x1,%edi
mov    %r14,%rsi
xor    %eax,%eax
call   1050 <SHA1CircularShift@plt>
add    $0x4,%rbx
add    $0xffffffffffffffff,%rbp
jne    1250 <processBlock+0xe0>
lea    0x14(%rsp),%r13
mov    %r13,%rdi
mov    %r15,%rsi
xor    %eax,%eax
call   1090 <assign@plt>
lea    0x4(%r15),%rsi
lea    0x24(%rsp),%r12
mov    %r12,%rdi
mov    %rsi,0x48(%rsp)
xor    %eax,%eax
call   1090 <assign@plt>
lea    0x8(%r15),%rsi
lea    0x20(%rsp),%rbx
mov    %rbx,%rdi
mov    %rsi,0x50(%rsp)
xor    %eax,%eax
call   1090 <assign@plt>
lea    0xc(%r15),%rsi
lea    0x1c(%rsp),%r14
mov    %r14,%rdi
mov    %rsi,0x58(%rsp)
xor    %eax,%eax
call   1090 <assign@plt>
mov    %r15,0x68(%rsp)
lea    0x10(%r15),%rsi
mov    %rbx,%r15
lea    0xc(%rsp),%rdi
mov    %rsi,0x60(%rsp)
xor    %eax,%eax
call   1090 <assign@plt>
lea    0x80(%rsp),%rax
mov    %rax,0x40(%rsp)
xor    %eax,%eax
jmp    1443 <processBlock+0x2d3>
nopl   0x0(%rax,%rax,1)
mov    %r12,%rdi
mov    %r15,%rsi
lea    0x10(%rsp),%rbx
mov    %rbx,%rdx
xor    %eax,%eax
call   1040 <and@plt>
mov    %r12,%rdi
lea    0x18(%rsp),%rbp
mov    %rbp,%rsi
xor    %eax,%eax
call   1030 <comp@plt>
mov    %rbp,%rdi
mov    %r14,%rsi
mov    %rbp,%rdx
xor    %eax,%eax
call   1040 <and@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <or@plt>
mov    $0x5,%edi
mov    %r13,%rsi
mov    %rbp,%rdx
xor    %eax,%eax
call   1050 <SHA1CircularShift@plt>
mov    %rbp,%rsi
mov    %rbx,%rbp
lea    0x3c(%rsp),%rax
mov    %rax,0x28(%rsp)
mov    %rbp,%rdi
mov    %rbp,%rdx
xor    %eax,%eax
call   1060 <sum@plt>
mov    %rbp,%rdi
lea    0xc(%rsp),%rsi
mov    %rbp,%rdx
xor    %eax,%eax
call   1060 <sum@plt>
mov    %rbp,%rdi
mov    0x40(%rsp),%rbx
mov    %rbx,%rsi
mov    %rbp,%rdx
xor    %eax,%eax
call   1060 <sum@plt>
mov    %rbp,%rdi
mov    0x28(%rsp),%rsi
mov    %rbp,%rdx
xor    %eax,%eax
call   1060 <sum@plt>
lea    0xc(%rsp),%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1090 <assign@plt>
mov    %r14,%rdi
mov    %r15,%rsi
xor    %eax,%eax
call   1090 <assign@plt>
mov    $0x1e,%edi
mov    %r12,%rsi
mov    %r15,%rdx
xor    %eax,%eax
call   1050 <SHA1CircularShift@plt>
mov    %r12,%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1090 <assign@plt>
mov    %r13,%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1090 <assign@plt>
mov    0x78(%rsp),%rax
add    $0x1,%rax
add    $0x4,%rbx
mov    %rbx,0x40(%rsp)
cmp    $0x50,%rax
je     1567 <processBlock+0x3f7>
cmp    $0x13,%eax
mov    %rax,0x78(%rsp)
jbe    1330 <processBlock+0x1c0>
cmp    $0x27,%eax
ja     14a0 <processBlock+0x330>
mov    $0x5,%edi
mov    %r13,%rsi
lea    0x10(%rsp),%rbp
mov    %rbp,%rdx
xor    %eax,%eax
call   1050 <SHA1CircularShift@plt>
mov    %r12,%rdi
mov    %r15,%rsi
lea    0x18(%rsp),%rbx
mov    %rbx,%rdx
xor    %eax,%eax
call   1070 <xor@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1070 <xor@plt>
mov    %rbx,%rsi
lea    0x38(%rsp),%rax
jmp    1394 <processBlock+0x224>
nop
cmp    $0x3b,%eax
ja     151e <processBlock+0x3ae>
mov    %r12,%rdi
mov    %r15,%rsi
lea    0x10(%rsp),%rbp
mov    %rbp,%rdx
xor    %eax,%eax
call   1040 <and@plt>
mov    %r12,%rdi
mov    %r14,%rsi
lea    0x18(%rsp),%rbx
mov    %rbx,%rdx
xor    %eax,%eax
call   1040 <and@plt>
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    %rbp,%rdx
xor    %eax,%eax
call   1080 <or@plt>
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1040 <and@plt>
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1080 <or@plt>
mov    $0x5,%edi
mov    %r13,%rsi
mov    %rbp,%rdx
xor    %eax,%eax
call   1050 <SHA1CircularShift@plt>
mov    %rbx,%rsi
lea    0x34(%rsp),%rax
jmp    1394 <processBlock+0x224>
mov    $0x5,%edi
mov    %r13,%rsi
lea    0x10(%rsp),%rbp
mov    %rbp,%rdx
xor    %eax,%eax
call   1050 <SHA1CircularShift@plt>
mov    %r12,%rdi
mov    %r15,%rsi
lea    0x18(%rsp),%rbx
mov    %rbx,%rdx
xor    %eax,%eax
call   1070 <xor@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1070 <xor@plt>
mov    %rbx,%rsi
lea    0x30(%rsp),%rax
jmp    1394 <processBlock+0x224>
lea    0x14(%rsp),%rdi
mov    0x68(%rsp),%rsi
mov    0x70(%rsp),%rbx
mov    %rbx,%rdx
xor    %eax,%eax
call   1060 <sum@plt>
lea    0x4(%rbx),%rdx
lea    0x24(%rsp),%rdi
mov    0x48(%rsp),%rsi
xor    %eax,%eax
call   1060 <sum@plt>
lea    0x8(%rbx),%rdx
lea    0x20(%rsp),%rdi
mov    0x50(%rsp),%rsi
xor    %eax,%eax
call   1060 <sum@plt>
lea    0xc(%rbx),%rdx
lea    0x1c(%rsp),%rdi
mov    0x58(%rsp),%rsi
xor    %eax,%eax
call   1060 <sum@plt>
add    $0x10,%rbx
lea    0xc(%rsp),%rdi
mov    0x60(%rsp),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1060 <sum@plt>
add    $0x1c8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.processBlock.K0 = [4 x i8] c"Z\82y\99"
@__const.processBlock.K1 = [4 x i8] c"n\D9\EB\A1"
@__const.processBlock.K2 = [4 x i8] c"\8F\1B\BC\DC"
@__const.processBlock.K3 = [4 x i8] c"\CAb\C1\D6"
define void @processBlock(i8* %0, i8* %1, i8* %2) {
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca [4 x i8]
%8 = alloca [4 x i8]
%9 = alloca [4 x i8]
%10 = alloca [4 x i8]
%11 = alloca [4 x i8]
%12 = alloca [4 x i8]
%13 = alloca [4 x i8]
%14 = alloca [4 x i8]
%15 = alloca [4 x i8]
%16 = alloca [4 x i8]
%17 = alloca [4 x i8]
%18 = alloca [320 x i8]
%19 = alloca i8
store i8* %0, i8** %4
store i8* %1, i8** %5
store i8* %2, i8** %6
%20 = bitcast [4 x i8]* %7 to i8*
%21 = bitcast [4 x i8]* %8 to i8*
%22 = bitcast [4 x i8]* %9 to i8*
%23 = bitcast [4 x i8]* %10 to i8*
%24 = bitcast [4 x i8]* %11 to i8*
%25 = bitcast [4 x i8]* %12 to i8*
%26 = bitcast [4 x i8]* %13 to i8*
%27 = bitcast [4 x i8]* %14 to i8*
%28 = bitcast [4 x i8]* %15 to i8*
store i8 0, i8* %19
br label %29
29: ; preds = %41, %3
%30 = load i8, i8* %19
%31 = zext i8 %30 to i32
%32 = icmp slt i32 %31, 80
br i1 %32, label %33, label %44
33: ; preds = %29
%34 = load i8, i8* %19
%35 = zext i8 %34 to i32
%36 = mul nsw i32 %35, 4
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %37
%39 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0
%40 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %38, i8* %39)
br label %41
41: ; preds = %33
%42 = load i8, i8* %19
%43 = add i8 %42, 1
store i8 %43, i8* %19
br label %29
44: ; preds = %29
store i8 0, i8* %19
br label %45
45: ; preds = %58, %44
%46 = load i8, i8* %19
%47 = zext i8 %46 to i32
%48 = icmp slt i32 %47, 64
br i1 %48, label %49, label %61
49: ; preds = %45
%50 = load i8*, i8** %6
%51 = load i8, i8* %19
%52 = zext i8 %51 to i64
%53 = getelementptr inbounds i8, i8* %50, i64 %52
%54 = load i8, i8* %53
%55 = load i8, i8* %19
%56 = zext i8 %55 to i64
%57 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %56
store i8 %54, i8* %57
br label %58
58: ; preds = %49
%59 = load i8, i8* %19
%60 = add i8 %59, 1
store i8 %60, i8* %19
br label %45
61: ; preds = %45
store i8 16, i8* %19
br label %62
62: ; preds = %106, %61
%63 = load i8, i8* %19
%64 = zext i8 %63 to i32
%65 = icmp slt i32 %64, 80
br i1 %65, label %66, label %109
66: ; preds = %62
%67 = load i8, i8* %19
%68 = zext i8 %67 to i32
%69 = mul nsw i32 %68, 4
%70 = sub nsw i32 %69, 12
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %71
%73 = load i8, i8* %19
%74 = zext i8 %73 to i32
%75 = mul nsw i32 %74, 4
%76 = sub nsw i32 %75, 32
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %77
%79 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%80 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %72, i8* %78, i8* %79)
%81 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%82 = load i8, i8* %19
%83 = zext i8 %82 to i32
%84 = mul nsw i32 %83, 4
%85 = sub nsw i32 %84, 56
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %86
%88 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%89 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %81, i8* %87, i8* %88)
%90 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%91 = load i8, i8* %19
%92 = zext i8 %91 to i32
%93 = mul nsw i32 %92, 4
%94 = sub nsw i32 %93, 64
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %95
%97 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%98 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %90, i8* %96, i8* %97)
%99 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%100 = load i8, i8* %19
%101 = zext i8 %100 to i32
%102 = mul nsw i32 %101, 4
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %103
%105 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 1, i8* %99, i8* %104)
br label %106
106: ; preds = %66
%107 = load i8, i8* %19
%108 = add i8 %107, 1
store i8 %108, i8* %19
br label %62
109: ; preds = %62
%110 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0
%111 = load i8*, i8** %4
%112 = getelementptr inbounds i8, i8* %111, i64 0
%113 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %110, i8* %112)
%114 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%115 = load i8*, i8** %4
%116 = getelementptr inbounds i8, i8* %115, i64 4
%117 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %114, i8* %116)
%118 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%119 = load i8*, i8** %4
%120 = getelementptr inbounds i8, i8* %119, i64 8
%121 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %118, i8* %120)
%122 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
%123 = load i8*, i8** %4
%124 = getelementptr inbounds i8, i8* %123, i64 12
%125 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %122, i8* %124)
%126 = getelementptr inbounds [4 x i8], [4 x i8]* %15, i64 0, i64 0
%127 = load i8*, i8** %4
%128 = getelementptr inbounds i8, i8* %127, i64 16
%129 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %126, i8* %128)
store i8 0, i8* %19
br label %130
130: ; preds = %316, %109
%131 = load i8, i8* %19
%132 = zext i8 %131 to i32
%133 = icmp slt i32 %132, 80
br i1 %133, label %134, label %319
134: ; preds = %130
%135 = load i8, i8* %19
%136 = zext i8 %135 to i32
%137 = icmp slt i32 %136, 20
br i1 %137, label %138, label %177
138: ; preds = %134
%139 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%140 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%141 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%142 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %139, i8* %140, i8* %141)
%143 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%144 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%145 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @comp to i32 (i8*, i8*, ...)*)(i8* %143, i8* %144)
%146 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%147 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
%148 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%149 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %146, i8* %147, i8* %148)
%150 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%151 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%152 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%153 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @or to i32 (i8*, i8*, i8*, ...)*)(i8* %150, i8* %151, i8* %152)
%154 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0
%155 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%156 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 5, i8* %154, i8* %155)
%157 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%158 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%159 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%160 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %157, i8* %158, i8* %159)
%161 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%162 = getelementptr inbounds [4 x i8], [4 x i8]* %15, i64 0, i64 0
%163 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%164 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %161, i8* %162, i8* %163)
%165 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%166 = load i8, i8* %19
%167 = zext i8 %166 to i32
%168 = mul nsw i32 %167, 4
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %169
%171 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%172 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %165, i8* %170, i8* %171)
%173 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%174 = getelementptr inbounds [4 x i8], [4 x i8]* %7, i64 0, i64 0
%175 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%176 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %173, i8* %174, i8* %175)
br label %300
177: ; preds = %134
%178 = load i8, i8* %19
%179 = zext i8 %178 to i32
%180 = icmp slt i32 %179, 40
br i1 %180, label %181, label %213
181: ; preds = %177
%182 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0
%183 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%184 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 5, i8* %182, i8* %183)
%185 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%186 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%187 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%188 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %185, i8* %186, i8* %187)
%189 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%190 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
%191 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%192 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %189, i8* %190, i8* %191)
%193 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%194 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%195 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%196 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %193, i8* %194, i8* %195)
%197 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%198 = getelementptr inbounds [4 x i8], [4 x i8]* %15, i64 0, i64 0
%199 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%200 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %197, i8* %198, i8* %199)
%201 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%202 = load i8, i8* %19
%203 = zext i8 %202 to i32
%204 = mul nsw i32 %203, 4
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %205
%207 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%208 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %201, i8* %206, i8* %207)
%209 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%210 = getelementptr inbounds [4 x i8], [4 x i8]* %8, i64 0, i64 0
%211 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%212 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %209, i8* %210, i8* %211)
br label %299
213: ; preds = %177
%214 = load i8, i8* %19
%215 = zext i8 %214 to i32
%216 = icmp slt i32 %215, 60
br i1 %216, label %217, label %261
217: ; preds = %213
%218 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%219 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%220 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%221 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %218, i8* %219, i8* %220)
%222 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%223 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
%224 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%225 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %222, i8* %223, i8* %224)
%226 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%227 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%228 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%229 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @or to i32 (i8*, i8*, i8*, ...)*)(i8* %226, i8* %227, i8* %228)
%230 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%231 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
%232 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%233 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %230, i8* %231, i8* %232)
%234 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%235 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%236 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%237 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @or to i32 (i8*, i8*, i8*, ...)*)(i8* %234, i8* %235, i8* %236)
%238 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0
%239 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%240 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 5, i8* %238, i8* %239)
%241 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%242 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%243 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%244 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %241, i8* %242, i8* %243)
%245 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%246 = getelementptr inbounds [4 x i8], [4 x i8]* %15, i64 0, i64 0
%247 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%248 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %245, i8* %246, i8* %247)
%249 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%250 = load i8, i8* %19
%251 = zext i8 %250 to i32
%252 = mul nsw i32 %251, 4
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %253
%255 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%256 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %249, i8* %254, i8* %255)
%257 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%258 = getelementptr inbounds [4 x i8], [4 x i8]* %9, i64 0, i64 0
%259 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%260 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %257, i8* %258, i8* %259)
br label %298
261: ; preds = %213
%262 = load i8, i8* %19
%263 = zext i8 %262 to i32
%264 = icmp slt i32 %263, 80
br i1 %264, label %265, label %297
265: ; preds = %261
%266 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0
%267 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%268 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 5, i8* %266, i8* %267)
%269 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%270 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%271 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%272 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %269, i8* %270, i8* %271)
%273 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%274 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
%275 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%276 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %273, i8* %274, i8* %275)
%277 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%278 = getelementptr inbounds [4 x i8], [4 x i8]* %17, i64 0, i64 0
%279 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%280 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %277, i8* %278, i8* %279)
%281 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%282 = getelementptr inbounds [4 x i8], [4 x i8]* %15, i64 0, i64 0
%283 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%284 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %281, i8* %282, i8* %283)
%285 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%286 = load i8, i8* %19
%287 = zext i8 %286 to i32
%288 = mul nsw i32 %287, 4
%289 = sext i32 %288 to i64
%290 = getelementptr inbounds [320 x i8], [320 x i8]* %18, i64 0, i64 %289
%291 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%292 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %285, i8* %290, i8* %291)
%293 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%294 = getelementptr inbounds [4 x i8], [4 x i8]* %10, i64 0, i64 0
%295 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%296 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %293, i8* %294, i8* %295)
br label %297
297: ; preds = %265, %261
br label %298
298: ; preds = %297, %217
br label %299
299: ; preds = %298, %181
br label %300
300: ; preds = %299, %138
%301 = getelementptr inbounds [4 x i8], [4 x i8]* %15, i64 0, i64 0
%302 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
%303 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %301, i8* %302)
%304 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
%305 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%306 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %304, i8* %305)
%307 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%308 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%309 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 30, i8* %307, i8* %308)
%310 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%311 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0
%312 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %310, i8* %311)
%313 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0
%314 = getelementptr inbounds [4 x i8], [4 x i8]* %16, i64 0, i64 0
%315 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %313, i8* %314)
br label %316
316: ; preds = %300
%317 = load i8, i8* %19
%318 = add i8 %317, 1
store i8 %318, i8* %19
br label %130
319: ; preds = %130
%320 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0
%321 = load i8*, i8** %4
%322 = getelementptr inbounds i8, i8* %321, i64 0
%323 = load i8*, i8** %5
%324 = getelementptr inbounds i8, i8* %323, i64 0
%325 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %320, i8* %322, i8* %324)
%326 = getelementptr inbounds [4 x i8], [4 x i8]* %12, i64 0, i64 0
%327 = load i8*, i8** %4
%328 = getelementptr inbounds i8, i8* %327, i64 4
%329 = load i8*, i8** %5
%330 = getelementptr inbounds i8, i8* %329, i64 4
%331 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %326, i8* %328, i8* %330)
%332 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%333 = load i8*, i8** %4
%334 = getelementptr inbounds i8, i8* %333, i64 8
%335 = load i8*, i8** %5
%336 = getelementptr inbounds i8, i8* %335, i64 8
%337 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %332, i8* %334, i8* %336)
%338 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
%339 = load i8*, i8** %4
%340 = getelementptr inbounds i8, i8* %339, i64 12
%341 = load i8*, i8** %5
%342 = getelementptr inbounds i8, i8* %341, i64 12
%343 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %338, i8* %340, i8* %342)
%344 = getelementptr inbounds [4 x i8], [4 x i8]* %15, i64 0, i64 0
%345 = load i8*, i8** %4
%346 = getelementptr inbounds i8, i8* %345, i64 16
%347 = load i8*, i8** %5
%348 = getelementptr inbounds i8, i8* %347, i64 16
%349 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %344, i8* %346, i8* %348)
ret void
}

LLVM IR (-O2):
define void @processBlock(i8* %0, i8* %1, i8* nocapture %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca [4 x i8]
%14 = alloca [4 x i8]
%15 = alloca [320 x i8]
%16 = getelementptr inbounds [320 x i8], [320 x i8]* %15, i64 0, i64 0
%17 = bitcast i32* %4 to i8*
store i32 -1720090022, i32* %4
%18 = bitcast i32* %5 to i8*
store i32 -1578378898, i32* %5
%19 = bitcast i32* %6 to i8*
store i32 -591651953, i32* %6
%20 = bitcast i32* %7 to i8*
store i32 -691969334, i32* %7
%21 = bitcast i32* %8 to i8*
store i32 0, i32* %8
%22 = bitcast i32* %9 to i8*
store i32 0, i32* %9
%23 = bitcast i32* %10 to i8*
store i32 0, i32* %10
%24 = bitcast i32* %11 to i8*
store i32 0, i32* %11
%25 = bitcast i32* %12 to i8*
store i32 0, i32* %12
%26 = getelementptr inbounds [4 x i8], [4 x i8]* %13, i64 0, i64 0
%27 = getelementptr inbounds [4 x i8], [4 x i8]* %14, i64 0, i64 0
br label %28
28: ; preds = %3, %28
%29 = phi i64 [ 0, %3 ], [ %33, %28 ]
%30 = shl nuw nsw i64 %29, 2
%31 = getelementptr inbounds [320 x i8], [320 x i8]* %15, i64 0, i64 %30
%32 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %31, i8* %21)
%33 = add nuw nsw i64 %29, 1
%34 = icmp eq i64 %33, 80
br i1 %34, label %35, label %28
35: ; preds = %28
br label %36
36: ; preds = %35, %36
%37 = phi i64 [ 16, %35 ], [ %52, %36 ]
%38 = shl nuw nsw i64 %37, 2
%39 = add nsw i64 %38, -12
%40 = getelementptr inbounds [320 x i8], [320 x i8]* %15, i64 0, i64 %39
%41 = add nsw i64 %38, -32
%42 = getelementptr inbounds [320 x i8], [320 x i8]* %15, i64 0, i64 %41
%43 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %40, i8* %42, i8* %26)
%44 = add nsw i64 %38, -56
%45 = getelementptr inbounds [320 x i8], [320 x i8]* %15, i64 0, i64 %44
%46 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %26, i8* %45, i8* %26)
%47 = add nsw i64 %38, -64
%48 = getelementptr inbounds [320 x i8], [320 x i8]* %15, i64 0, i64 %47
%49 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %26, i8* %48, i8* %26)
%50 = getelementptr inbounds [320 x i8], [320 x i8]* %15, i64 0, i64 %38
%51 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 1, i8* %26, i8* %50)
%52 = add nuw nsw i64 %37, 1
%53 = icmp eq i64 %52, 80
br i1 %53, label %54, label %36
54: ; preds = %36
%55 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %21, i8* %0)
%56 = getelementptr inbounds i8, i8* %0, i64 4
%57 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %22, i8* %56)
%58 = getelementptr inbounds i8, i8* %0, i64 8
%59 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %23, i8* %58)
%60 = getelementptr inbounds i8, i8* %0, i64 12
%61 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %24, i8* %60)
%62 = getelementptr inbounds i8, i8* %0, i64 16
%63 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %25, i8* %62)
br label %64
64: ; preds = %54, %93
%65 = phi i64 [ 0, %54 ], [ %106, %93 ]
%66 = trunc i64 %65 to i32
%67 = icmp ult i32 %66, 20
br i1 %67, label %68, label %74
68: ; preds = %64
%69 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %22, i8* %23, i8* %26)
%70 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @comp to i32 (i8*, i8*, ...)*)(i8* %22, i8* %27)
%71 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %27, i8* %24, i8* %27)
%72 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @or to i32 (i8*, i8*, i8*, ...)*)(i8* %26, i8* %27, i8* %26)
%73 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 5, i8* %21, i8* %27)
br label %93
74: ; preds = %64
%75 = icmp ult i32 %66, 40
br i1 %75, label %76, label %80
76: ; preds = %74
%77 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 5, i8* %21, i8* %26)
%78 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %22, i8* %23, i8* %27)
%79 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %27, i8* %24, i8* %27)
br label %93
80: ; preds = %74
%81 = icmp ult i32 %66, 60
br i1 %81, label %82, label %89
82: ; preds = %80
%83 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %22, i8* %23, i8* %26)
%84 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %22, i8* %24, i8* %27)
%85 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @or to i32 (i8*, i8*, i8*, ...)*)(i8* %26, i8* %27, i8* %26)
%86 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @and to i32 (i8*, i8*, i8*, ...)*)(i8* %23, i8* %24, i8* %27)
%87 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @or to i32 (i8*, i8*, i8*, ...)*)(i8* %26, i8* %27, i8* %27)
%88 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 5, i8* %21, i8* %26)
br label %93
89: ; preds = %80
%90 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 5, i8* %21, i8* %26)
%91 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %22, i8* %23, i8* %27)
%92 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @xor to i32 (i8*, i8*, i8*, ...)*)(i8* %27, i8* %24, i8* %27)
br label %93
93: ; preds = %76, %89, %82, %68
%94 = phi i8* [ %18, %76 ], [ %20, %89 ], [ %19, %82 ], [ %17, %68 ]
%95 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %26, i8* %27, i8* %26)
%96 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %26, i8* %25, i8* %26)
%97 = shl nuw nsw i64 %65, 2
%98 = getelementptr inbounds [320 x i8], [320 x i8]* %15, i64 0, i64 %97
%99 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %26, i8* %98, i8* %26)
%100 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %26, i8* %94, i8* %26)
%101 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %25, i8* %24)
%102 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %24, i8* %23)
%103 = call i32 (i32, i8*, i8*, ...) bitcast (i32 (...)* @SHA1CircularShift to i32 (i32, i8*, i8*, ...)*)(i32 30, i8* %22, i8* %23)
%104 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %22, i8* %21)
%105 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @assign to i32 (i8*, i8*, ...)*)(i8* %21, i8* %26)
%106 = add nuw nsw i64 %65, 1
%107 = icmp eq i64 %106, 80
br i1 %107, label %108, label %64
108: ; preds = %93
%109 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %21, i8* %0, i8* %1)
%110 = getelementptr inbounds i8, i8* %1, i64 4
%111 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %22, i8* %56, i8* %110)
%112 = getelementptr inbounds i8, i8* %1, i64 8
%113 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %23, i8* %58, i8* %112)
%114 = getelementptr inbounds i8, i8* %1, i64 12
%115 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %24, i8* %60, i8* %114)
%116 = getelementptr inbounds i8, i8* %1, i64 16
%117 = call i32 (i8*, i8*, i8*, ...) bitcast (i32 (...)* @sum to i32 (i8*, i8*, i8*, ...)*)(i8* %25, i8* %62, i8* %116)
ret void
}