void key_schedule_block(unsigned char *ck, unsigned char *kk) {
  static const unsigned char key_perm[0x40] = {
      0x12, 0x24, 0x09, 0x07, 0x2A, 0x31, 0x1D, 0x15, 0x1C, 0x36, 0x3E,
      0x32, 0x13, 0x21, 0x3B, 0x40, 0x18, 0x14, 0x25, 0x27, 0x02, 0x35,
      0x1B, 0x01, 0x22, 0x04, 0x0D, 0x0E, 0x39, 0x28, 0x1A, 0x29, 0x33,
      0x23, 0x34, 0x0C, 0x16, 0x30, 0x1E, 0x3A, 0x2D, 0x1F, 0x08, 0x19,
      0x17, 0x2F, 0x3D, 0x11, 0x3C, 0x05, 0x38, 0x2B, 0x0B, 0x06, 0x0A,
      0x2C, 0x20, 0x3F, 0x2E, 0x0F, 0x03, 0x26, 0x10, 0x37,
  };
  int i, j, k;
  int bit[64];
  int newbit[64];
  int kb[7][8];
  kb[6][0] = ck[0];
  kb[6][1] = ck[1];
  kb[6][2] = ck[2];
  kb[6][3] = ck[3];
  kb[6][4] = ck[4];
  kb[6][5] = ck[5];
  kb[6][6] = ck[6];
  kb[6][7] = ck[7];
  for (i = 5; i >= 0; i--) {
    for (j = 0; j < 8; j++) {
      for (k = 0; k < 8; k++) {
        bit[j * 8 + k] = (kb[i + 1][j] >> (7 - k)) & 1;
        newbit[key_perm[j * 8 + k] - 1] = bit[j * 8 + k];
      }
    }
    for (j = 0; j < 8; j++) {
      kb[i][j] = 0;
      for (k = 0; k < 8; k++) {
        kb[i][j] |= newbit[j * 8 + k] << (7 - k);
      }
    }
  }
  for (i = 0; i < 7; i++) {
    for (j = 0; j < 8; j++) {
      kk[i * 8 + j] = kb[i][j] ^ i;
    }
  }
}


x86 assembly (clang, -O0):
<key_schedule_block>:
push   %rbp
mov    %rsp,%rbp
sub    $0x280,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x240(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    %eax,-0x23c(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    %eax,-0x238(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x3(%rax),%eax
mov    %eax,-0x234(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x4(%rax),%eax
mov    %eax,-0x230(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x5(%rax),%eax
mov    %eax,-0x22c(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x6(%rax),%eax
mov    %eax,-0x228(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x7(%rax),%eax
mov    %eax,-0x224(%rbp)
movl   $0x5,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jl     12f5 <key_schedule_block+0x1f5>
movl   $0x0,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jge    124a <key_schedule_block+0x14a>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x8,-0x1c(%rbp)
jge    1237 <key_schedule_block+0x137>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x300(%rbp),%rax
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    $0x7,%ecx
sub    -0x1c(%rbp),%ecx
sar    %cl,%eax
mov    %eax,%ecx
and    $0x1,%ecx
mov    -0x18(%rbp),%eax
shl    $0x3,%eax
add    -0x1c(%rbp),%eax
cltq
mov    %ecx,-0x120(%rbp,%rax,4)
mov    -0x18(%rbp),%eax
shl    $0x3,%eax
add    -0x1c(%rbp),%eax
cltq
mov    -0x120(%rbp,%rax,4),%ecx
mov    -0x18(%rbp),%eax
shl    $0x3,%eax
add    -0x1c(%rbp),%eax
movslq %eax,%rdx
lea    0xde7(%rip),%rax
movzbl (%rax,%rdx,1),%eax
sub    $0x1,%eax
cltq
mov    %ecx,-0x220(%rbp,%rax,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11ab <key_schedule_block+0xab>
jmp    123c <key_schedule_block+0x13c>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    119a <key_schedule_block+0x9a>
movl   $0x0,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jge    12e2 <key_schedule_block+0x1e2>
movslq -0x14(%rbp),%rcx
lea    -0x300(%rbp),%rax
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x8,-0x1c(%rbp)
jge    12cf <key_schedule_block+0x1cf>
mov    -0x18(%rbp),%eax
shl    $0x3,%eax
add    -0x1c(%rbp),%eax
cltq
mov    -0x220(%rbp,%rax,4),%edx
mov    $0x7,%ecx
sub    -0x1c(%rbp),%ecx
shl    %cl,%edx
movslq -0x14(%rbp),%rcx
lea    -0x300(%rbp),%rax
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
or     (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    127f <key_schedule_block+0x17f>
jmp    12d4 <key_schedule_block+0x1d4>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1251 <key_schedule_block+0x151>
jmp    12e7 <key_schedule_block+0x1e7>
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1189 <key_schedule_block+0x89>
movl   $0x0,-0x14(%rbp)
cmpl   $0x7,-0x14(%rbp)
jge    1369 <key_schedule_block+0x269>
movl   $0x0,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jge    1356 <key_schedule_block+0x256>
movslq -0x14(%rbp),%rcx
lea    -0x300(%rbp),%rax
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
xor    -0x14(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x3,%ecx
add    -0x18(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    130d <key_schedule_block+0x20d>
jmp    135b <key_schedule_block+0x25b>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12fc <key_schedule_block+0x1fc>
add    $0x280,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<key_schedule_block>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x2a8,%rsp
mov    %rsi,0x148(%rsp)
movd   (%rdi),%xmm0
pxor   %xmm1,%xmm1
punpcklbw %xmm1,%xmm0
punpcklwd %xmm1,%xmm0
movdqa %xmm0,0x280(%rsp)
movd   0x4(%rdi),%xmm0
punpcklbw %xmm1,%xmm0
punpcklwd %xmm1,%xmm0
movdqa %xmm0,0x290(%rsp)
mov    $0xdc,%eax
nopl   (%rax)
mov    %rax,-0x80(%rsp)
mov    0x1a4(%rsp,%rax,1),%r15d
mov    0x1ac(%rsp,%rax,1),%ecx
mov    %ecx,-0x6c(%rsp)
mov    %ecx,%r8d
mov    %ecx,%edx
mov    %rdx,-0x38(%rsp)
mov    %rdx,-0x40(%rsp)
mov    %ecx,%ebp
shr    $0x3,%ebp
and    $0x1,%ebp
mov    %rdx,-0x48(%rsp)
mov    %ecx,-0x70(%rsp)
and    $0x1,%ecx
mov    0x1b0(%rsp,%rax,1),%r13d
mov    %r13d,%esi
shr    $0x6,%esi
and    $0x1,%esi
mov    0x1c0(%rsp,%rax,1),%r9d
mov    %r9d,%eax
shr    $0x3,%eax
and    $0x1,%eax
mov    %ecx,0x3c(%rsp)
mov    %ecx,%edi
shl    $0x7,%edi
mov    %ebp,0x34(%rsp)
mov    %ebp,%ecx
shl    $0x6,%ecx
or     %edi,%ecx
mov    %eax,0x28(%rsp)
shl    $0x5,%eax
or     %ecx,%eax
mov    %esi,0x2c(%rsp)
mov    %esi,%ecx
shl    $0x4,%ecx
or     %eax,%ecx
mov    %r15d,%edx
shr    $0x4,%edx
and    $0x1,%edx
mov    -0x80(%rsp),%rax
mov    0x1b8(%rsp,%rax,1),%ebx
mov    %ebx,%ebp
shr    $0x5,%ebp
and    $0x1,%ebp
mov    -0x80(%rsp),%rax
mov    0x1bc(%rsp,%rax,1),%r14d
mov    %r14d,%eax
shr    $0x6,%eax
and    $0x1,%eax
mov    %r14d,%esi
shr    $0x2,%esi
and    $0x1,%esi
mov    %rax,0x1a8(%rsp)
lea    (%rcx,%rax,8),%eax
mov    %rsi,0x1b0(%rsp)
lea    (%rax,%rsi,4),%eax
mov    %rdx,0x198(%rsp)
lea    (%rax,%rdx,2),%eax
mov    %ebp,0x1c(%rsp)
or     %ebp,%eax
mov    -0x80(%rsp),%rcx
mov    0x1a8(%rsp,%rcx,1),%r11d
mov    -0x80(%rsp),%rcx
mov    0x1b4(%rsp,%rcx,1),%r12d
mov    -0x80(%rsp),%rcx
mov    %eax,0x184(%rsp,%rcx,1)
mov    %r15d,%eax
shr    $0x5,%eax
and    $0x1,%eax
mov    %r14d,%ecx
shr    %ecx
and    $0x1,%ecx
mov    %eax,-0x4(%rsp)
shl    $0x7,%eax
mov    %ecx,0x18(%rsp)
shl    $0x6,%ecx
or     %eax,%ecx
mov    %r14d,%eax
shr    $0x3,%eax
and    $0x1,%eax
mov    %eax,0x14(%rsp)
shl    $0x5,%eax
or     %ecx,%eax
mov    %r12d,%ecx
shr    $0x4,%ecx
and    $0x1,%ecx
mov    %ecx,0x8(%rsp)
mov    %ecx,%r10d
shl    $0x4,%r10d
or     %eax,%r10d
mov    %r13d,%edx
shr    $0x5,%edx
and    $0x1,%edx
mov    %r13d,%ecx
shr    $0x4,%ecx
and    $0x1,%ecx
mov    %r9,-0x50(%rsp)
mov    %r9d,%ebp
shr    $0x4,%ebp
and    $0x1,%ebp
mov    %r9d,%esi
shr    %esi
and    $0x1,%esi
mov    %rdx,0x180(%rsp)
lea    (%r10,%rdx,8),%eax
mov    %rcx,0x178(%rsp)
lea    (%rax,%rcx,4),%eax
mov    %rbp,0x1a0(%rsp)
lea    (%rax,%rbp,2),%eax
mov    %esi,0x10(%rsp)
or     %esi,%eax
mov    -0x80(%rsp),%rcx
mov    %eax,0x188(%rsp,%rcx,1)
mov    %r15d,%ecx
shr    $0x7,%ecx
and    $0x1,%ecx
mov    %ebx,%eax
mov    %rax,-0x68(%rsp)
mov    %ebx,%edx
mov    %ebx,%ebp
mov    %ebx,%esi
mov    %rax,-0x60(%rsp)
mov    %rax,-0x58(%rsp)
and    $0x1,%ebx
mov    %ebx,0x20(%rsp)
mov    %ebx,%eax
shl    $0x7,%eax
mov    %ecx,-0x14(%rsp)
shl    $0x6,%ecx
or     %eax,%ecx
mov    %r11d,%eax
shr    $0x3,%eax
and    $0x1,%eax
mov    %eax,-0xc(%rsp)
shl    $0x5,%eax
or     %ecx,%eax
shr    $0x6,%r8d
and    $0x1,%r8d
mov    %r8d,0x38(%rsp)
mov    %r8d,%ecx
shl    $0x4,%ecx
or     %eax,%ecx
mov    %r15,%r8
mov    %r8d,%edi
mov    %r8d,%r10d
mov    %r8d,%ebx
mov    %r8d,-0x74(%rsp)
and    $0x1,%r8d
mov    -0x6c(%rsp),%r9d
shr    $0x7,%r9d
and    $0x1,%r9d
mov    %r12d,%ebx
shr    $0x3,%ebx
and    $0x1,%ebx
shr    $0x3,%esi
and    $0x1,%esi
mov    %r8,0x1b8(%rsp)
lea    (%rcx,%r8,8),%eax
mov    %rbx,0x170(%rsp)
lea    (%rax,%rbx,4),%eax
mov    %rsi,0x190(%rsp)
lea    (%rax,%rsi,2),%eax
mov    %r9d,-0x6c(%rsp)
or     %r9d,%eax
mov    -0x80(%rsp),%rcx
mov    %eax,0x18c(%rsp,%rcx,1)
mov    %r13d,%ecx
shr    %ecx
and    $0x1,%ecx
shr    $0x4,%ebp
and    $0x1,%ebp
mov    %ebp,(%rsp)
mov    %ebp,%eax
shl    $0x7,%eax
mov    %ecx,-0x10(%rsp)
shl    $0x6,%ecx
or     %eax,%ecx
mov    -0x70(%rsp),%eax
shr    %eax
and    $0x1,%eax
mov    %eax,-0x70(%rsp)
shl    $0x5,%eax
or     %ecx,%eax
mov    %r11d,%r8d
mov    %r11d,%ecx
shr    $0x7,%ecx
and    $0x1,%ecx
mov    %ecx,-0x24(%rsp)
shl    $0x4,%ecx
or     %eax,%ecx
shr    %r15d
and    $0x1,%r15d
mov    %r12d,%ebp
shr    %ebp
and    $0x1,%ebp
shr    $0x6,%edx
and    $0x1,%edx
mov    -0x50(%rsp),%rbx
mov    %ebx,%esi
shr    $0x7,%esi
and    $0x1,%esi
mov    %r15,0x158(%rsp)
lea    (%rcx,%r15,8),%eax
mov    %rbp,0x168(%rsp)
lea    (%rax,%rbp,4),%eax
mov    %rdx,0x188(%rsp)
lea    (%rax,%rdx,2),%eax
mov    %esi,-0x8(%rsp)
or     %esi,%eax
mov    -0x80(%rsp),%rcx
mov    %eax,0x190(%rsp,%rcx,1)
mov    %r8d,%r11d
shr    $0x2,%r11d
and    $0x1,%r11d
mov    %r13d,%ecx
shr    $0x7,%ecx
and    $0x1,%ecx
mov    %r11d,%eax
shl    $0x7,%eax
mov    %ecx,-0x28(%rsp)
shl    $0x6,%ecx
or     %eax,%ecx
mov    %r12d,%eax
shr    $0x6,%eax
and    $0x1,%eax
mov    %eax,-0x20(%rsp)
shl    $0x5,%eax
or     %ecx,%eax
shr    $0x6,%edi
and    $0x1,%edi
mov    %edi,-0x1c(%rsp)
mov    %edi,%ecx
shl    $0x4,%ecx
or     %eax,%ecx
mov    -0x38(%rsp),%rax
shr    $0x5,%eax
and    $0x1,%eax
mov    -0x40(%rsp),%rdx
shr    $0x4,%edx
and    $0x1,%edx
mov    %r13d,%edi
shr    $0x2,%edi
and    $0x1,%edi
mov    %ebx,%esi
mov    %rbx,%r15
shr    $0x2,%esi
and    $0x1,%esi
mov    %rax,-0x38(%rsp)
lea    (%rcx,%rax,8),%ecx
mov    %rsi,0x160(%rsp)
lea    (%rcx,%rsi,4),%ecx
mov    %rdx,-0x40(%rsp)
lea    (%rcx,%rdx,2),%ecx
mov    %edi,-0x30(%rsp)
or     %edi,%ecx
mov    -0x80(%rsp),%rax
mov    %ecx,0x194(%rsp,%rax,1)
shr    $0x3,%r10d
and    $0x1,%r10d
mov    %r13d,%ebp
and    $0x1,%r13d
mov    %r13d,0x30(%rsp)
mov    %r13d,%ecx
shl    $0x7,%ecx
mov    %r10d,-0x18(%rsp)
shl    $0x6,%r10d
or     %ecx,%r10d
mov    %r14d,%ecx
shr    $0x4,%ecx
and    $0x1,%ecx
mov    %ecx,-0x2c(%rsp)
shl    $0x5,%ecx
or     %r10d,%ecx
mov    %r14d,%r13d
mov    %r14d,%r10d
and    $0x1,%r14d
mov    %r14d,0x24(%rsp)
mov    %r14d,%edi
shl    $0x4,%edi
or     %ecx,%edi
mov    %r12d,%esi
shr    $0x2,%esi
and    $0x1,%esi
mov    -0x68(%rsp),%rcx
shr    $0x7,%ecx
and    $0x1,%ecx
mov    -0x60(%rsp),%rbx
shr    $0x2,%ebx
and    $0x1,%ebx
mov    %r15,%rdx
mov    %edx,%eax
shr    $0x5,%eax
and    $0x1,%eax
mov    %rcx,-0x68(%rsp)
lea    (%rdi,%rcx,8),%ecx
mov    %rax,0x150(%rsp)
lea    (%rcx,%rax,4),%ecx
mov    %rbx,-0x60(%rsp)
lea    (%rcx,%rbx,2),%ecx
mov    %r10d,%ebx
or     %esi,%ecx
mov    -0x80(%rsp),%rax
mov    %ecx,0x198(%rsp,%rax,1)
mov    -0x74(%rsp),%ecx
shr    $0x2,%ecx
and    $0x1,%ecx
mov    %r8d,%eax
mov    %r8d,%r9d
shr    $0x4,%r9d
and    $0x1,%r9d
mov    %ecx,-0x74(%rsp)
shl    $0x7,%ecx
mov    %r9d,%edi
shl    $0x6,%edi
or     %ecx,%edi
mov    %r12d,%r10d
shr    $0x7,%r10d
and    $0x1,%r10d
mov    %r10d,%ecx
shl    $0x5,%ecx
or     %edi,%ecx
mov    %r12d,%r15d
shr    $0x5,%r15d
and    $0x1,%r15d
mov    %r15d,%edi
shl    $0x4,%edi
or     %ecx,%edi
mov    %r8d,%r14d
shr    $0x6,%r14d
and    $0x1,%r14d
mov    -0x48(%rsp),%rax
shr    $0x2,%eax
and    $0x1,%eax
shr    $0x5,%ebx
and    $0x1,%ebx
mov    %edx,%ecx
and    $0x1,%edx
mov    %rax,-0x48(%rsp)
lea    (%rdi,%rax,8),%edi
lea    (%rdi,%r14,4),%edi
mov    %rdx,%rax
mov    %rdx,-0x50(%rsp)
lea    (%rdi,%rdx,2),%edi
or     %ebx,%edi
mov    -0x80(%rsp),%rax
mov    %edi,0x19c(%rsp,%rax,1)
shr    $0x3,%ebp
and    $0x1,%ebp
and    $0x1,%r12d
mov    %ebp,%edi
shl    $0x7,%edi
mov    %r12d,0xc(%rsp)
shl    $0x6,%r12d
or     %edi,%r12d
mov    %r8d,%edi
shr    %edi
and    $0x1,%edi
mov    %edi,%edx
shl    $0x5,%edx
or     %r12d,%edx
shr    $0x7,%r13d
and    $0x1,%r13d
mov    %r13d,%eax
shl    $0x4,%eax
or     %edx,%eax
mov    %r8d,%edx
mov    %r8d,%r12d
shr    $0x5,%r12d
and    $0x1,%r12d
and    $0x1,%edx
mov    -0x58(%rsp),%r8
shr    %r8d
and    $0x1,%r8d
shr    $0x6,%ecx
and    $0x1,%ecx
mov    %r8,-0x58(%rsp)
lea    (%rax,%r8,8),%eax
lea    (%rax,%r12,4),%eax
lea    (%rax,%rcx,2),%eax
mov    %edx,0x4(%rsp)
or     %edx,%eax
mov    -0x80(%rsp),%rdx
mov    %eax,0x1a0(%rsp,%rdx,1)
mov    -0x80(%rsp),%rax
add    $0xffffffffffffffe0,%rax
cmp    $0x1c,%rax
jne    1150 <key_schedule_block+0x50>
mov    -0x14(%rsp),%eax
mov    %eax,0x84(%rsp)
mov    -0x1c(%rsp),%eax
mov    %eax,0xcc(%rsp)
mov    -0x4(%rsp),%eax
mov    %eax,0x60(%rsp)
mov    0x198(%rsp),%rax
mov    %eax,0x58(%rsp)
mov    -0x18(%rsp),%eax
mov    %eax,0xe4(%rsp)
mov    -0x74(%rsp),%eax
mov    %eax,0x100(%rsp)
mov    0x158(%rsp),%rax
mov    %eax,0xb0(%rsp)
mov    0x1b8(%rsp),%rax
mov    %eax,0x90(%rsp)
mov    -0x24(%rsp),%eax
mov    %eax,0xac(%rsp)
mov    %r14d,0x114(%rsp)
mov    %r12d,0x134(%rsp)
mov    %r9d,0x104(%rsp)
mov    -0xc(%rsp),%eax
mov    %eax,0x88(%rsp)
mov    %r11d,0xc0(%rsp)
mov    %edi,0x128(%rsp)
mov    0x4(%rsp),%eax
mov    %eax,0x13c(%rsp)
mov    -0x6c(%rsp),%eax
mov    %eax,0x9c(%rsp)
mov    0x38(%rsp),%eax
mov    %eax,0x8c(%rsp)
mov    -0x38(%rsp),%rax
mov    %eax,0xd0(%rsp)
mov    -0x40(%rsp),%rax
mov    %eax,0xd8(%rsp)
mov    0x34(%rsp),%eax
mov    %eax,0x44(%rsp)
mov    -0x48(%rsp),%rax
mov    %eax,0x110(%rsp)
mov    -0x70(%rsp),%eax
mov    %eax,0xa8(%rsp)
mov    0x3c(%rsp),%eax
mov    %eax,0x40(%rsp)
mov    -0x28(%rsp),%eax
mov    %eax,0xc4(%rsp)
mov    0x2c(%rsp),%eax
mov    %eax,0x4c(%rsp)
mov    0x180(%rsp),%rax
mov    %eax,0x70(%rsp)
mov    0x178(%rsp),%rax
mov    %eax,0x74(%rsp)
mov    %ebp,0x120(%rsp)
mov    -0x30(%rsp),%eax
mov    %eax,0xdc(%rsp)
mov    -0x10(%rsp),%eax
mov    %eax,0xa4(%rsp)
mov    0x30(%rsp),%eax
mov    %eax,0xe0(%rsp)
mov    %r10d,0x108(%rsp)
mov    -0x20(%rsp),%eax
mov    %eax,0xc8(%rsp)
mov    %r15d,0x10c(%rsp)
mov    0x8(%rsp),%eax
mov    %eax,0x6c(%rsp)
mov    0x170(%rsp),%rax
mov    %eax,0x94(%rsp)
mov    %esi,0xfc(%rsp)
mov    0x168(%rsp),%rax
mov    %eax,0xb4(%rsp)
mov    0xc(%rsp),%eax
mov    %eax,0x124(%rsp)
mov    -0x68(%rsp),%rax
mov    %eax,0xf0(%rsp)
mov    0x188(%rsp),%rax
mov    %eax,0xb8(%rsp)
mov    0x1c(%rsp),%eax
mov    %eax,0x5c(%rsp)
mov    (%rsp),%eax
mov    %eax,0xa0(%rsp)
mov    0x190(%rsp),%rax
mov    %eax,0x98(%rsp)
mov    -0x60(%rsp),%rax
mov    %eax,0xf8(%rsp)
mov    -0x58(%rsp),%rax
mov    %eax,0x130(%rsp)
mov    0x20(%rsp),%eax
mov    %eax,0x80(%rsp)
mov    %r13d,0x12c(%rsp)
mov    0x1a8(%rsp),%rax
mov    %eax,0x50(%rsp)
mov    %ebx,0x11c(%rsp)
mov    -0x2c(%rsp),%eax
mov    %eax,0xe8(%rsp)
mov    0x14(%rsp),%eax
mov    %eax,0x68(%rsp)
mov    0x1b0(%rsp),%rax
mov    %eax,0x54(%rsp)
mov    0x18(%rsp),%eax
mov    %eax,0x64(%rsp)
mov    0x24(%rsp),%eax
mov    %eax,0xec(%rsp)
mov    -0x8(%rsp),%eax
mov    %eax,0xbc(%rsp)
mov    %ecx,0x138(%rsp)
mov    0x150(%rsp),%rax
mov    %eax,0xf4(%rsp)
mov    0x1a0(%rsp),%rax
mov    %eax,0x78(%rsp)
mov    0x28(%rsp),%eax
mov    %eax,0x48(%rsp)
mov    0x160(%rsp),%rax
mov    %eax,0xd4(%rsp)
mov    0x10(%rsp),%eax
mov    %eax,0x7c(%rsp)
mov    -0x50(%rsp),%rax
mov    %eax,0x118(%rsp)
movdqa 0x687(%rip),%xmm0
movdqa 0x1c0(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
mov    0x148(%rsp),%rax
movd   %xmm1,(%rax)
movdqa 0x1d0(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
movd   %xmm1,0x4(%rax)
movdqa 0x1e0(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
movdqa 0x63f(%rip),%xmm2
pxor   %xmm2,%xmm1
movd   %xmm1,0x8(%rax)
movdqa 0x1f0(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
pxor   %xmm2,%xmm1
movd   %xmm1,0xc(%rax)
movdqa 0x200(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
movdqa 0x60b(%rip),%xmm2
pxor   %xmm2,%xmm1
movd   %xmm1,0x10(%rax)
movdqa 0x210(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
pxor   %xmm2,%xmm1
movd   %xmm1,0x14(%rax)
movdqa 0x220(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
movdqa 0x5d7(%rip),%xmm2
pxor   %xmm2,%xmm1
movd   %xmm1,0x18(%rax)
movdqa 0x230(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
pxor   %xmm2,%xmm1
movd   %xmm1,0x1c(%rax)
movdqa 0x240(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
movdqa 0x5a3(%rip),%xmm2
pxor   %xmm2,%xmm1
movd   %xmm1,0x20(%rax)
movdqa 0x250(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
pxor   %xmm2,%xmm1
movd   %xmm1,0x24(%rax)
movdqa 0x260(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
movdqa 0x56f(%rip),%xmm2
pxor   %xmm2,%xmm1
movd   %xmm1,0x28(%rax)
movdqa 0x270(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
pxor   %xmm2,%xmm1
movd   %xmm1,0x2c(%rax)
movdqa 0x280(%rsp),%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm1
movdqa 0x53b(%rip),%xmm2
pxor   %xmm2,%xmm1
movd   %xmm1,0x30(%rax)
pand   0x290(%rsp),%xmm0
packuswb %xmm0,%xmm0
packuswb %xmm0,%xmm0
pxor   %xmm2,%xmm0
movd   %xmm0,0x34(%rax)
add    $0x2a8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@key_schedule_block.key_perm = internal constant [64 x i8] c"\12$\09\07*1\1D\15\1C6>2\13!;@\18\14%'\025\1B\01\22\04\0D\0E9(\1A)3\0C\160\1E:-\1F\08\19\17/=\11<\058+\0B\06\0A, ?.\0F\03&\107"
define void @key_schedule_block(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca [64 x i32]
%9 = alloca [64 x i32]
%10 = alloca [7 x [8 x i32]]
store i8* %0, i8** %3
store i8* %1, i8** %4
%11 = load i8*, i8** %3
%12 = getelementptr inbounds i8, i8* %11, i64 0
%13 = load i8, i8* %12
%14 = zext i8 %13 to i32
%15 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 6
%16 = getelementptr inbounds [8 x i32], [8 x i32]* %15, i64 0, i64 0
store i32 %14, i32* %16
%17 = load i8*, i8** %3
%18 = getelementptr inbounds i8, i8* %17, i64 1
%19 = load i8, i8* %18
%20 = zext i8 %19 to i32
%21 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 6
%22 = getelementptr inbounds [8 x i32], [8 x i32]* %21, i64 0, i64 1
store i32 %20, i32* %22
%23 = load i8*, i8** %3
%24 = getelementptr inbounds i8, i8* %23, i64 2
%25 = load i8, i8* %24
%26 = zext i8 %25 to i32
%27 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 6
%28 = getelementptr inbounds [8 x i32], [8 x i32]* %27, i64 0, i64 2
store i32 %26, i32* %28
%29 = load i8*, i8** %3
%30 = getelementptr inbounds i8, i8* %29, i64 3
%31 = load i8, i8* %30
%32 = zext i8 %31 to i32
%33 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 6
%34 = getelementptr inbounds [8 x i32], [8 x i32]* %33, i64 0, i64 3
store i32 %32, i32* %34
%35 = load i8*, i8** %3
%36 = getelementptr inbounds i8, i8* %35, i64 4
%37 = load i8, i8* %36
%38 = zext i8 %37 to i32
%39 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 6
%40 = getelementptr inbounds [8 x i32], [8 x i32]* %39, i64 0, i64 4
store i32 %38, i32* %40
%41 = load i8*, i8** %3
%42 = getelementptr inbounds i8, i8* %41, i64 5
%43 = load i8, i8* %42
%44 = zext i8 %43 to i32
%45 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 6
%46 = getelementptr inbounds [8 x i32], [8 x i32]* %45, i64 0, i64 5
store i32 %44, i32* %46
%47 = load i8*, i8** %3
%48 = getelementptr inbounds i8, i8* %47, i64 6
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 6
%52 = getelementptr inbounds [8 x i32], [8 x i32]* %51, i64 0, i64 6
store i32 %50, i32* %52
%53 = load i8*, i8** %3
%54 = getelementptr inbounds i8, i8* %53, i64 7
%55 = load i8, i8* %54
%56 = zext i8 %55 to i32
%57 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 6
%58 = getelementptr inbounds [8 x i32], [8 x i32]* %57, i64 0, i64 7
store i32 %56, i32* %58
store i32 5, i32* %5
br label %59
59: ; preds = %155, %2
%60 = load i32, i32* %5
%61 = icmp sge i32 %60, 0
br i1 %61, label %62, label %158
62: ; preds = %59
store i32 0, i32* %6
br label %63
63: ; preds = %111, %62
%64 = load i32, i32* %6
%65 = icmp slt i32 %64, 8
br i1 %65, label %66, label %114
66: ; preds = %63
store i32 0, i32* %7
br label %67
67: ; preds = %107, %66
%68 = load i32, i32* %7
%69 = icmp slt i32 %68, 8
br i1 %69, label %70, label %110
70: ; preds = %67
%71 = load i32, i32* %5
%72 = add nsw i32 %71, 1
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 %73
%75 = load i32, i32* %6
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [8 x i32], [8 x i32]* %74, i64 0, i64 %76
%78 = load i32, i32* %77
%79 = load i32, i32* %7
%80 = sub nsw i32 7, %79
%81 = ashr i32 %78, %80
%82 = and i32 %81, 1
%83 = load i32, i32* %6
%84 = mul nsw i32 %83, 8
%85 = load i32, i32* %7
%86 = add nsw i32 %84, %85
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [64 x i32], [64 x i32]* %8, i64 0, i64 %87
store i32 %82, i32* %88
%89 = load i32, i32* %6
%90 = mul nsw i32 %89, 8
%91 = load i32, i32* %7
%92 = add nsw i32 %90, %91
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds [64 x i32], [64 x i32]* %8, i64 0, i64 %93
%95 = load i32, i32* %94
%96 = load i32, i32* %6
%97 = mul nsw i32 %96, 8
%98 = load i32, i32* %7
%99 = add nsw i32 %97, %98
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds [64 x i8], [64 x i8]* @key_schedule_block.key_perm, i64 0, i64 %100
%102 = load i8, i8* %101
%103 = zext i8 %102 to i32
%104 = sub nsw i32 %103, 1
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [64 x i32], [64 x i32]* %9, i64 0, i64 %105
store i32 %95, i32* %106
br label %107
107: ; preds = %70
%108 = load i32, i32* %7
%109 = add nsw i32 %108, 1
store i32 %109, i32* %7
br label %67
110: ; preds = %67
br label %111
111: ; preds = %110
%112 = load i32, i32* %6
%113 = add nsw i32 %112, 1
store i32 %113, i32* %6
br label %63
114: ; preds = %63
store i32 0, i32* %6
br label %115
115: ; preds = %151, %114
%116 = load i32, i32* %6
%117 = icmp slt i32 %116, 8
br i1 %117, label %118, label %154
118: ; preds = %115
%119 = load i32, i32* %5
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 %120
%122 = load i32, i32* %6
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds [8 x i32], [8 x i32]* %121, i64 0, i64 %123
store i32 0, i32* %124
store i32 0, i32* %7
br label %125
125: ; preds = %147, %118
%126 = load i32, i32* %7
%127 = icmp slt i32 %126, 8
br i1 %127, label %128, label %150
128: ; preds = %125
%129 = load i32, i32* %6
%130 = mul nsw i32 %129, 8
%131 = load i32, i32* %7
%132 = add nsw i32 %130, %131
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds [64 x i32], [64 x i32]* %9, i64 0, i64 %133
%135 = load i32, i32* %134
%136 = load i32, i32* %7
%137 = sub nsw i32 7, %136
%138 = shl i32 %135, %137
%139 = load i32, i32* %5
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 %140
%142 = load i32, i32* %6
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [8 x i32], [8 x i32]* %141, i64 0, i64 %143
%145 = load i32, i32* %144
%146 = or i32 %145, %138
store i32 %146, i32* %144
br label %147
147: ; preds = %128
%148 = load i32, i32* %7
%149 = add nsw i32 %148, 1
store i32 %149, i32* %7
br label %125
150: ; preds = %125
br label %151
151: ; preds = %150
%152 = load i32, i32* %6
%153 = add nsw i32 %152, 1
store i32 %153, i32* %6
br label %115
154: ; preds = %115
br label %155
155: ; preds = %154
%156 = load i32, i32* %5
%157 = add nsw i32 %156, -1
store i32 %157, i32* %5
br label %59
158: ; preds = %59
store i32 0, i32* %5
br label %159
159: ; preds = %188, %158
%160 = load i32, i32* %5
%161 = icmp slt i32 %160, 7
br i1 %161, label %162, label %191
162: ; preds = %159
store i32 0, i32* %6
br label %163
163: ; preds = %184, %162
%164 = load i32, i32* %6
%165 = icmp slt i32 %164, 8
br i1 %165, label %166, label %187
166: ; preds = %163
%167 = load i32, i32* %5
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %10, i64 0, i64 %168
%170 = load i32, i32* %6
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds [8 x i32], [8 x i32]* %169, i64 0, i64 %171
%173 = load i32, i32* %172
%174 = load i32, i32* %5
%175 = xor i32 %173, %174
%176 = trunc i32 %175 to i8
%177 = load i8*, i8** %4
%178 = load i32, i32* %5
%179 = mul nsw i32 %178, 8
%180 = load i32, i32* %6
%181 = add nsw i32 %179, %180
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i8, i8* %177, i64 %182
store i8 %176, i8* %183
br label %184
184: ; preds = %166
%185 = load i32, i32* %6
%186 = add nsw i32 %185, 1
store i32 %186, i32* %6
br label %163
187: ; preds = %163
br label %188
188: ; preds = %187
%189 = load i32, i32* %5
%190 = add nsw i32 %189, 1
store i32 %190, i32* %5
br label %159
191: ; preds = %159
ret void
}

LLVM IR (-O2):
define void @key_schedule_block(i8* nocapture %0, i8* nocapture writeonly %1) {
%3 = alloca [64 x i32]
%4 = alloca [7 x [8 x i32]]
%5 = bitcast [64 x i32]* %3 to i8*
%6 = bitcast [7 x [8 x i32]]* %4 to i8*
%7 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 6, i64 0
%8 = bitcast i8* %0 to <4 x i8>*
%9 = load <4 x i8>, <4 x i8>* %8
%10 = zext <4 x i8> %9 to <4 x i32>
%11 = bitcast i32* %7 to <4 x i32>*
store <4 x i32> %10, <4 x i32>* %11
%12 = getelementptr inbounds i8, i8* %0, i64 4
%13 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 6, i64 4
%14 = bitcast i8* %12 to <4 x i8>*
%15 = load <4 x i8>, <4 x i8>* %14
%16 = zext <4 x i8> %15 to <4 x i32>
%17 = bitcast i32* %13 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %17
%18 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 17
%19 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 35
%20 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 8
%21 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 6
%22 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 41
%23 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 48
%24 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 28
%25 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 20
%26 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 27
%27 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 53
%28 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 61
%29 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 49
%30 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 18
%31 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 32
%32 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 58
%33 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 63
%34 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 23
%35 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 19
%36 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 36
%37 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 38
%38 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 1
%39 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 52
%40 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 26
%41 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 0
%42 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 33
%43 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 3
%44 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 12
%45 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 13
%46 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 56
%47 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 39
%48 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 25
%49 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 40
%50 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 50
%51 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 34
%52 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 51
%53 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 11
%54 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 21
%55 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 47
%56 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 29
%57 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 57
%58 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 44
%59 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 30
%60 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 7
%61 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 24
%62 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 22
%63 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 46
%64 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 60
%65 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 16
%66 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 59
%67 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 4
%68 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 55
%69 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 42
%70 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 10
%71 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 5
%72 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 9
%73 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 43
%74 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 31
%75 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 62
%76 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 45
%77 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 14
%78 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 2
%79 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 37
%80 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 15
%81 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 54
br label %82
82: ; preds = %2, %82
%83 = phi i64 [ 5, %2 ], [ %341, %82 ]
%84 = add nuw nsw i64 %83, 1
%85 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %84, i64 0
%86 = load i32, i32* %85
%87 = lshr i32 %86, 7
%88 = and i32 %87, 1
%89 = lshr i32 %86, 6
%90 = and i32 %89, 1
%91 = lshr i32 %86, 5
%92 = and i32 %91, 1
%93 = lshr i32 %86, 4
%94 = and i32 %93, 1
%95 = lshr i32 %86, 3
%96 = and i32 %95, 1
%97 = lshr i32 %86, 2
%98 = and i32 %97, 1
%99 = lshr i32 %86, 1
%100 = and i32 %99, 1
%101 = and i32 %86, 1
%102 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %84, i64 1
%103 = load i32, i32* %102
%104 = lshr i32 %103, 7
%105 = and i32 %104, 1
%106 = lshr i32 %103, 6
%107 = and i32 %106, 1
%108 = lshr i32 %103, 5
%109 = and i32 %108, 1
%110 = lshr i32 %103, 4
%111 = and i32 %110, 1
%112 = lshr i32 %103, 3
%113 = and i32 %112, 1
%114 = lshr i32 %103, 2
%115 = and i32 %114, 1
%116 = lshr i32 %103, 1
%117 = and i32 %116, 1
%118 = and i32 %103, 1
%119 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %84, i64 2
%120 = load i32, i32* %119
%121 = lshr i32 %120, 7
%122 = and i32 %121, 1
%123 = lshr i32 %120, 6
%124 = and i32 %123, 1
%125 = lshr i32 %120, 5
%126 = and i32 %125, 1
%127 = lshr i32 %120, 4
%128 = and i32 %127, 1
%129 = lshr i32 %120, 3
%130 = and i32 %129, 1
%131 = lshr i32 %120, 2
%132 = and i32 %131, 1
%133 = lshr i32 %120, 1
%134 = and i32 %133, 1
%135 = and i32 %120, 1
%136 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %84, i64 3
%137 = load i32, i32* %136
%138 = lshr i32 %137, 7
%139 = and i32 %138, 1
%140 = lshr i32 %137, 6
%141 = and i32 %140, 1
%142 = lshr i32 %137, 5
%143 = and i32 %142, 1
%144 = lshr i32 %137, 4
%145 = and i32 %144, 1
%146 = lshr i32 %137, 3
%147 = and i32 %146, 1
%148 = lshr i32 %137, 2
%149 = and i32 %148, 1
%150 = lshr i32 %137, 1
%151 = and i32 %150, 1
%152 = and i32 %137, 1
%153 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %84, i64 4
%154 = load i32, i32* %153
%155 = lshr i32 %154, 7
%156 = and i32 %155, 1
%157 = lshr i32 %154, 6
%158 = and i32 %157, 1
%159 = lshr i32 %154, 5
%160 = and i32 %159, 1
%161 = lshr i32 %154, 4
%162 = and i32 %161, 1
%163 = lshr i32 %154, 3
%164 = and i32 %163, 1
%165 = lshr i32 %154, 2
%166 = and i32 %165, 1
%167 = lshr i32 %154, 1
%168 = and i32 %167, 1
%169 = and i32 %154, 1
%170 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %84, i64 5
%171 = load i32, i32* %170
%172 = lshr i32 %171, 7
%173 = and i32 %172, 1
%174 = lshr i32 %171, 6
%175 = and i32 %174, 1
%176 = lshr i32 %171, 5
%177 = and i32 %176, 1
%178 = lshr i32 %171, 4
%179 = and i32 %178, 1
%180 = lshr i32 %171, 3
%181 = and i32 %180, 1
%182 = lshr i32 %171, 2
%183 = and i32 %182, 1
%184 = lshr i32 %171, 1
%185 = and i32 %184, 1
%186 = and i32 %171, 1
%187 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %84, i64 6
%188 = load i32, i32* %187
%189 = lshr i32 %188, 7
%190 = and i32 %189, 1
%191 = lshr i32 %188, 6
%192 = and i32 %191, 1
%193 = lshr i32 %188, 5
%194 = and i32 %193, 1
%195 = lshr i32 %188, 4
%196 = and i32 %195, 1
%197 = lshr i32 %188, 3
%198 = and i32 %197, 1
%199 = lshr i32 %188, 2
%200 = and i32 %199, 1
%201 = lshr i32 %188, 1
%202 = and i32 %201, 1
%203 = and i32 %188, 1
%204 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %84, i64 7
%205 = load i32, i32* %204
%206 = lshr i32 %205, 7
%207 = and i32 %206, 1
%208 = lshr i32 %205, 6
%209 = and i32 %208, 1
%210 = lshr i32 %205, 5
%211 = and i32 %210, 1
%212 = lshr i32 %205, 4
%213 = and i32 %212, 1
%214 = lshr i32 %205, 3
%215 = and i32 %214, 1
%216 = lshr i32 %205, 2
%217 = and i32 %216, 1
%218 = lshr i32 %205, 1
%219 = and i32 %218, 1
%220 = and i32 %205, 1
%221 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %83, i64 0
%222 = shl i32 %135, 7
%223 = shl i32 %130, 6
%224 = or i32 %222, %223
%225 = shl i32 %215, 5
%226 = or i32 %224, %225
%227 = shl i32 %141, 4
%228 = or i32 %226, %227
%229 = shl i32 %192, 3
%230 = or i32 %228, %229
%231 = shl i32 %200, 2
%232 = or i32 %230, %231
%233 = shl i32 %94, 1
%234 = or i32 %232, %233
%235 = or i32 %234, %177
store i32 %235, i32* %221
%236 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %83, i64 1
%237 = shl i32 %92, 7
%238 = shl i32 %202, 6
%239 = or i32 %237, %238
%240 = shl i32 %198, 5
%241 = or i32 %239, %240
%242 = shl i32 %162, 4
%243 = or i32 %241, %242
%244 = shl i32 %143, 3
%245 = or i32 %243, %244
%246 = shl i32 %145, 2
%247 = or i32 %245, %246
%248 = shl i32 %213, 1
%249 = or i32 %247, %248
%250 = or i32 %249, %219
store i32 %250, i32* %236
%251 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %83, i64 2
%252 = shl i32 %186, 7
%253 = shl i32 %88, 6
%254 = or i32 %252, %253
%255 = shl i32 %113, 5
%256 = or i32 %254, %255
%257 = shl i32 %124, 4
%258 = or i32 %256, %257
%259 = shl i32 %101, 3
%260 = or i32 %258, %259
%261 = shl i32 %164, 2
%262 = or i32 %260, %261
%263 = shl i32 %181, 1
%264 = or i32 %262, %263
%265 = or i32 %264, %122
store i32 %265, i32* %251
%266 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %83, i64 3
%267 = shl i32 %179, 7
%268 = shl i32 %151, 6
%269 = or i32 %267, %268
%270 = shl i32 %134, 5
%271 = or i32 %269, %270
%272 = shl i32 %105, 4
%273 = or i32 %271, %272
%274 = shl i32 %100, 3
%275 = or i32 %273, %274
%276 = shl i32 %168, 2
%277 = or i32 %275, %276
%278 = shl i32 %175, 1
%279 = or i32 %277, %278
%280 = or i32 %279, %207
store i32 %280, i32* %266
%281 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %83, i64 4
%282 = shl i32 %115, 7
%283 = shl i32 %139, 6
%284 = or i32 %282, %283
%285 = shl i32 %158, 5
%286 = or i32 %284, %285
%287 = shl i32 %90, 4
%288 = or i32 %286, %287
%289 = shl i32 %126, 3
%290 = or i32 %288, %289
%291 = shl i32 %217, 2
%292 = or i32 %290, %291
%293 = shl i32 %128, 1
%294 = or i32 %292, %293
%295 = or i32 %294, %149
store i32 %295, i32* %281
%296 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %83, i64 5
%297 = shl i32 %152, 7
%298 = shl i32 %96, 6
%299 = or i32 %297, %298
%300 = shl i32 %196, 5
%301 = or i32 %299, %300
%302 = shl i32 %203, 4
%303 = or i32 %301, %302
%304 = shl i32 %173, 3
%305 = or i32 %303, %304
%306 = shl i32 %211, 2
%307 = or i32 %305, %306
%308 = shl i32 %183, 1
%309 = or i32 %307, %308
%310 = or i32 %309, %166
store i32 %310, i32* %296
%311 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %83, i64 6
%312 = shl i32 %98, 7
%313 = shl i32 %111, 6
%314 = or i32 %312, %313
%315 = shl i32 %156, 5
%316 = or i32 %314, %315
%317 = shl i32 %160, 4
%318 = or i32 %316, %317
%319 = shl i32 %132, 3
%320 = or i32 %318, %319
%321 = shl i32 %107, 2
%322 = or i32 %320, %321
%323 = shl i32 %220, 1
%324 = or i32 %322, %323
%325 = or i32 %324, %194
store i32 %325, i32* %311
%326 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 %83, i64 7
%327 = shl i32 %147, 7
%328 = shl i32 %169, 6
%329 = or i32 %327, %328
%330 = shl i32 %117, 5
%331 = or i32 %329, %330
%332 = shl i32 %190, 4
%333 = or i32 %331, %332
%334 = shl i32 %185, 3
%335 = or i32 %333, %334
%336 = shl i32 %109, 2
%337 = or i32 %335, %336
%338 = shl i32 %209, 1
%339 = or i32 %337, %338
%340 = or i32 %339, %118
store i32 %340, i32* %326
%341 = add nsw i64 %83, -1
%342 = icmp eq i64 %83, 0
br i1 %342, label %343, label %82
343: ; preds = %82
store i32 %88, i32* %18
store i32 %90, i32* %19
store i32 %92, i32* %20
store i32 %94, i32* %21
store i32 %96, i32* %22
store i32 %98, i32* %23
store i32 %100, i32* %24
store i32 %101, i32* %25
store i32 %105, i32* %26
store i32 %107, i32* %27
store i32 %109, i32* %28
store i32 %111, i32* %29
store i32 %113, i32* %30
store i32 %115, i32* %31
store i32 %117, i32* %32
store i32 %118, i32* %33
store i32 %122, i32* %34
store i32 %124, i32* %35
store i32 %126, i32* %36
store i32 %128, i32* %37
store i32 %130, i32* %38
store i32 %132, i32* %39
store i32 %134, i32* %40
store i32 %135, i32* %41
store i32 %139, i32* %42
store i32 %141, i32* %43
store i32 %143, i32* %44
store i32 %145, i32* %45
store i32 %147, i32* %46
store i32 %149, i32* %47
store i32 %151, i32* %48
store i32 %152, i32* %49
store i32 %156, i32* %50
store i32 %158, i32* %51
store i32 %160, i32* %52
store i32 %162, i32* %53
store i32 %164, i32* %54
store i32 %166, i32* %55
store i32 %168, i32* %56
store i32 %169, i32* %57
store i32 %173, i32* %58
store i32 %175, i32* %59
store i32 %177, i32* %60
store i32 %179, i32* %61
store i32 %181, i32* %62
store i32 %183, i32* %63
store i32 %185, i32* %64
store i32 %186, i32* %65
store i32 %190, i32* %66
store i32 %192, i32* %67
store i32 %194, i32* %68
store i32 %196, i32* %69
store i32 %198, i32* %70
store i32 %200, i32* %71
store i32 %202, i32* %72
store i32 %203, i32* %73
store i32 %207, i32* %74
store i32 %209, i32* %75
store i32 %211, i32* %76
store i32 %213, i32* %77
store i32 %215, i32* %78
store i32 %217, i32* %79
store i32 %219, i32* %80
store i32 %220, i32* %81
%344 = bitcast [7 x [8 x i32]]* %4 to <4 x i32>*
%345 = load <4 x i32>, <4 x i32>* %344
%346 = trunc <4 x i32> %345 to <4 x i8>
%347 = bitcast i8* %1 to <4 x i8>*
store <4 x i8> %346, <4 x i8>* %347
%348 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 0, i64 4
%349 = getelementptr inbounds i8, i8* %1, i64 4
%350 = bitcast i32* %348 to <4 x i32>*
%351 = load <4 x i32>, <4 x i32>* %350
%352 = trunc <4 x i32> %351 to <4 x i8>
%353 = bitcast i8* %349 to <4 x i8>*
store <4 x i8> %352, <4 x i8>* %353
%354 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 1, i64 0
%355 = getelementptr inbounds i8, i8* %1, i64 8
%356 = bitcast i32* %354 to <4 x i32>*
%357 = load <4 x i32>, <4 x i32>* %356
%358 = trunc <4 x i32> %357 to <4 x i8>
%359 = xor <4 x i8> %358, <i8 1, i8 1, i8 1, i8 1>
%360 = bitcast i8* %355 to <4 x i8>*
store <4 x i8> %359, <4 x i8>* %360
%361 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 1, i64 4
%362 = getelementptr inbounds i8, i8* %1, i64 12
%363 = bitcast i32* %361 to <4 x i32>*
%364 = load <4 x i32>, <4 x i32>* %363
%365 = trunc <4 x i32> %364 to <4 x i8>
%366 = xor <4 x i8> %365, <i8 1, i8 1, i8 1, i8 1>
%367 = bitcast i8* %362 to <4 x i8>*
store <4 x i8> %366, <4 x i8>* %367
%368 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 2, i64 0
%369 = getelementptr inbounds i8, i8* %1, i64 16
%370 = bitcast i32* %368 to <4 x i32>*
%371 = load <4 x i32>, <4 x i32>* %370
%372 = trunc <4 x i32> %371 to <4 x i8>
%373 = xor <4 x i8> %372, <i8 2, i8 2, i8 2, i8 2>
%374 = bitcast i8* %369 to <4 x i8>*
store <4 x i8> %373, <4 x i8>* %374
%375 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 2, i64 4
%376 = getelementptr inbounds i8, i8* %1, i64 20
%377 = bitcast i32* %375 to <4 x i32>*
%378 = load <4 x i32>, <4 x i32>* %377
%379 = trunc <4 x i32> %378 to <4 x i8>
%380 = xor <4 x i8> %379, <i8 2, i8 2, i8 2, i8 2>
%381 = bitcast i8* %376 to <4 x i8>*
store <4 x i8> %380, <4 x i8>* %381
%382 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 3, i64 0
%383 = getelementptr inbounds i8, i8* %1, i64 24
%384 = bitcast i32* %382 to <4 x i32>*
%385 = load <4 x i32>, <4 x i32>* %384
%386 = trunc <4 x i32> %385 to <4 x i8>
%387 = xor <4 x i8> %386, <i8 3, i8 3, i8 3, i8 3>
%388 = bitcast i8* %383 to <4 x i8>*
store <4 x i8> %387, <4 x i8>* %388
%389 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 3, i64 4
%390 = getelementptr inbounds i8, i8* %1, i64 28
%391 = bitcast i32* %389 to <4 x i32>*
%392 = load <4 x i32>, <4 x i32>* %391
%393 = trunc <4 x i32> %392 to <4 x i8>
%394 = xor <4 x i8> %393, <i8 3, i8 3, i8 3, i8 3>
%395 = bitcast i8* %390 to <4 x i8>*
store <4 x i8> %394, <4 x i8>* %395
%396 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 4, i64 0
%397 = getelementptr inbounds i8, i8* %1, i64 32
%398 = bitcast i32* %396 to <4 x i32>*
%399 = load <4 x i32>, <4 x i32>* %398
%400 = trunc <4 x i32> %399 to <4 x i8>
%401 = xor <4 x i8> %400, <i8 4, i8 4, i8 4, i8 4>
%402 = bitcast i8* %397 to <4 x i8>*
store <4 x i8> %401, <4 x i8>* %402
%403 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 4, i64 4
%404 = getelementptr inbounds i8, i8* %1, i64 36
%405 = bitcast i32* %403 to <4 x i32>*
%406 = load <4 x i32>, <4 x i32>* %405
%407 = trunc <4 x i32> %406 to <4 x i8>
%408 = xor <4 x i8> %407, <i8 4, i8 4, i8 4, i8 4>
%409 = bitcast i8* %404 to <4 x i8>*
store <4 x i8> %408, <4 x i8>* %409
%410 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 5, i64 0
%411 = getelementptr inbounds i8, i8* %1, i64 40
%412 = bitcast i32* %410 to <4 x i32>*
%413 = load <4 x i32>, <4 x i32>* %412
%414 = trunc <4 x i32> %413 to <4 x i8>
%415 = xor <4 x i8> %414, <i8 5, i8 5, i8 5, i8 5>
%416 = bitcast i8* %411 to <4 x i8>*
store <4 x i8> %415, <4 x i8>* %416
%417 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 5, i64 4
%418 = getelementptr inbounds i8, i8* %1, i64 44
%419 = bitcast i32* %417 to <4 x i32>*
%420 = load <4 x i32>, <4 x i32>* %419
%421 = trunc <4 x i32> %420 to <4 x i8>
%422 = xor <4 x i8> %421, <i8 5, i8 5, i8 5, i8 5>
%423 = bitcast i8* %418 to <4 x i8>*
store <4 x i8> %422, <4 x i8>* %423
%424 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 6, i64 0
%425 = getelementptr inbounds i8, i8* %1, i64 48
%426 = bitcast i32* %424 to <4 x i32>*
%427 = load <4 x i32>, <4 x i32>* %426
%428 = trunc <4 x i32> %427 to <4 x i8>
%429 = xor <4 x i8> %428, <i8 6, i8 6, i8 6, i8 6>
%430 = bitcast i8* %425 to <4 x i8>*
store <4 x i8> %429, <4 x i8>* %430
%431 = getelementptr inbounds [7 x [8 x i32]], [7 x [8 x i32]]* %4, i64 0, i64 6, i64 4
%432 = getelementptr inbounds i8, i8* %1, i64 52
%433 = bitcast i32* %431 to <4 x i32>*
%434 = load <4 x i32>, <4 x i32>* %433
%435 = trunc <4 x i32> %434 to <4 x i8>
%436 = xor <4 x i8> %435, <i8 6, i8 6, i8 6, i8 6>
%437 = bitcast i8* %432 to <4 x i8>*
store <4 x i8> %436, <4 x i8>* %437
ret void
}