void morus_stateupdate(unsigned int msgblk[], unsigned int state[][4]) {
  unsigned int temp;
  state[0][0] ^= state[3][0];
  state[0][1] ^= state[3][1];
  state[0][2] ^= state[3][2];
  state[0][3] ^= state[3][3];
  state[0][0] ^= state[1][0] & state[2][0];
  state[0][1] ^= state[1][1] & state[2][1];
  state[0][2] ^= state[1][2] & state[2][2];
  state[0][3] ^= state[1][3] & state[2][3];
  state[0][0] = (((state[0][0]) << (5)) | ((state[0][0]) >> (32 - 5)));
  state[0][1] = (((state[0][1]) << (5)) | ((state[0][1]) >> (32 - 5)));
  state[0][2] = (((state[0][2]) << (5)) | ((state[0][2]) >> (32 - 5)));
  state[0][3] = (((state[0][3]) << (5)) | ((state[0][3]) >> (32 - 5)));
  temp = state[3][3];
  state[3][3] = state[3][2];
  state[3][2] = state[3][1];
  state[3][1] = state[3][0];
  state[3][0] = temp;
  state[1][0] ^= msgblk[0];
  state[1][1] ^= msgblk[1];
  state[1][2] ^= msgblk[2];
  state[1][3] ^= msgblk[3];
  state[1][0] ^= state[4][0];
  state[1][1] ^= state[4][1];
  state[1][2] ^= state[4][2];
  state[1][3] ^= state[4][3];
  state[1][0] ^= (state[2][0] & state[3][0]);
  state[1][1] ^= (state[2][1] & state[3][1]);
  state[1][2] ^= (state[2][2] & state[3][2]);
  state[1][3] ^= (state[2][3] & state[3][3]);
  state[1][0] = (((state[1][0]) << (31)) | ((state[1][0]) >> (32 - 31)));
  state[1][1] = (((state[1][1]) << (31)) | ((state[1][1]) >> (32 - 31)));
  state[1][2] = (((state[1][2]) << (31)) | ((state[1][2]) >> (32 - 31)));
  state[1][3] = (((state[1][3]) << (31)) | ((state[1][3]) >> (32 - 31)));
  temp = state[4][3];
  state[4][3] = state[4][1];
  state[4][1] = temp;
  temp = state[4][2];
  state[4][2] = state[4][0];
  state[4][0] = temp;
  state[2][0] ^= msgblk[0];
  state[2][1] ^= msgblk[1];
  state[2][2] ^= msgblk[2];
  state[2][3] ^= msgblk[3];
  state[2][0] ^= state[0][0];
  state[2][1] ^= state[0][1];
  state[2][2] ^= state[0][2];
  state[2][3] ^= state[0][3];
  state[2][0] ^= state[3][0] & state[4][0];
  state[2][1] ^= state[3][1] & state[4][1];
  state[2][2] ^= state[3][2] & state[4][2];
  state[2][3] ^= state[3][3] & state[4][3];
  state[2][0] = (((state[2][0]) << (7)) | ((state[2][0]) >> (32 - 7)));
  state[2][1] = (((state[2][1]) << (7)) | ((state[2][1]) >> (32 - 7)));
  state[2][2] = (((state[2][2]) << (7)) | ((state[2][2]) >> (32 - 7)));
  state[2][3] = (((state[2][3]) << (7)) | ((state[2][3]) >> (32 - 7)));
  temp = state[0][0];
  state[0][0] = state[0][1];
  state[0][1] = state[0][2];
  state[0][2] = state[0][3];
  state[0][3] = temp;
  state[3][0] ^= msgblk[0];
  state[3][1] ^= msgblk[1];
  state[3][2] ^= msgblk[2];
  state[3][3] ^= msgblk[3];
  state[3][0] ^= state[1][0];
  state[3][1] ^= state[1][1];
  state[3][2] ^= state[1][2];
  state[3][3] ^= state[1][3];
  state[3][0] ^= state[4][0] & state[0][0];
  state[3][1] ^= state[4][1] & state[0][1];
  state[3][2] ^= state[4][2] & state[0][2];
  state[3][3] ^= state[4][3] & state[0][3];
  state[3][0] = (((state[3][0]) << (22)) | ((state[3][0]) >> (32 - 22)));
  state[3][1] = (((state[3][1]) << (22)) | ((state[3][1]) >> (32 - 22)));
  state[3][2] = (((state[3][2]) << (22)) | ((state[3][2]) >> (32 - 22)));
  state[3][3] = (((state[3][3]) << (22)) | ((state[3][3]) >> (32 - 22)));
  temp = state[1][3];
  state[1][3] = state[1][1];
  state[1][1] = temp;
  temp = state[1][2];
  state[1][2] = state[1][0];
  state[1][0] = temp;
  state[4][0] ^= msgblk[0];
  state[4][1] ^= msgblk[1];
  state[4][2] ^= msgblk[2];
  state[4][3] ^= msgblk[3];
  state[4][0] ^= state[2][0];
  state[4][1] ^= state[2][1];
  state[4][2] ^= state[2][2];
  state[4][3] ^= state[2][3];
  state[4][0] ^= state[0][0] & state[1][0];
  state[4][1] ^= state[0][1] & state[1][1];
  state[4][2] ^= state[0][2] & state[1][2];
  state[4][3] ^= state[0][3] & state[1][3];
  state[4][0] = (((state[4][0]) << (13)) | ((state[4][0]) >> (32 - 13)));
  state[4][1] = (((state[4][1]) << (13)) | ((state[4][1]) >> (32 - 13)));
  state[4][2] = (((state[4][2]) << (13)) | ((state[4][2]) >> (32 - 13)));
  state[4][3] = (((state[4][3]) << (13)) | ((state[4][3]) >> (32 - 13)));
  temp = state[2][3];
  state[2][3] = state[2][2];
  state[2][2] = state[2][1];
  state[2][1] = state[2][0];
  state[2][0] = temp;
}


x86 assembly (clang, -O0):
<morus_stateupdate>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    0x30(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    (%rax),%ecx
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    0x34(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x4(%rax),%ecx
mov    %ecx,0x4(%rax)
mov    -0x10(%rbp),%rax
mov    0x38(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x8(%rax),%ecx
mov    %ecx,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    0x3c(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0xc(%rax),%ecx
mov    %ecx,0xc(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x20(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    (%rax),%ecx
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x24(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x4(%rax),%ecx
mov    %ecx,0x4(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x28(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x8(%rax),%ecx
mov    %ecx,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    0x1c(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x2c(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0xc(%rax),%ecx
mov    %ecx,0xc(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
shl    $0x5,%ecx
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
shr    $0x1b,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%ecx
shl    $0x5,%ecx
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
shr    $0x1b,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%ecx
shl    $0x5,%ecx
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%eax
shr    $0x1b,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%ecx
shl    $0x5,%ecx
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%eax
shr    $0x1b,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0x10(%rbp),%rax
mov    0x3c(%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x38(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x3c(%rax)
mov    -0x10(%rbp),%rax
mov    0x34(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x38(%rax)
mov    -0x10(%rbp),%rax
mov    0x30(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x34(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x30(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x10(%rax),%ecx
mov    %ecx,0x10(%rax)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x14(%rax),%ecx
mov    %ecx,0x14(%rax)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x18(%rax),%ecx
mov    %ecx,0x18(%rax)
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x1c(%rax),%ecx
mov    %ecx,0x1c(%rax)
mov    -0x10(%rbp),%rax
mov    0x40(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x10(%rax),%ecx
mov    %ecx,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x44(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x14(%rax),%ecx
mov    %ecx,0x14(%rax)
mov    -0x10(%rbp),%rax
mov    0x48(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x18(%rax),%ecx
mov    %ecx,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    0x4c(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x1c(%rax),%ecx
mov    %ecx,0x1c(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x30(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x10(%rax),%ecx
mov    %ecx,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x24(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x34(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x14(%rax),%ecx
mov    %ecx,0x14(%rax)
mov    -0x10(%rbp),%rax
mov    0x28(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x38(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x18(%rax),%ecx
mov    %ecx,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    0x2c(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x3c(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x1c(%rax),%ecx
mov    %ecx,0x1c(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%ecx
shl    $0x1f,%ecx
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%eax
shr    $0x1,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%ecx
shl    $0x1f,%ecx
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%eax
shr    $0x1,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x14(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%ecx
shl    $0x1f,%ecx
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%eax
shr    $0x1,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    0x1c(%rax),%ecx
shl    $0x1f,%ecx
mov    -0x10(%rbp),%rax
mov    0x1c(%rax),%eax
shr    $0x1,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x1c(%rax)
mov    -0x10(%rbp),%rax
mov    0x4c(%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x44(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4c(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x44(%rax)
mov    -0x10(%rbp),%rax
mov    0x48(%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x40(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x48(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x40(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x20(%rax),%ecx
mov    %ecx,0x20(%rax)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x24(%rax),%ecx
mov    %ecx,0x24(%rax)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x28(%rax),%ecx
mov    %ecx,0x28(%rax)
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x2c(%rax),%ecx
mov    %ecx,0x2c(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x20(%rax),%ecx
mov    %ecx,0x20(%rax)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x24(%rax),%ecx
mov    %ecx,0x24(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x28(%rax),%ecx
mov    %ecx,0x28(%rax)
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x2c(%rax),%ecx
mov    %ecx,0x2c(%rax)
mov    -0x10(%rbp),%rax
mov    0x30(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x40(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x20(%rax),%ecx
mov    %ecx,0x20(%rax)
mov    -0x10(%rbp),%rax
mov    0x34(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x44(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x24(%rax),%ecx
mov    %ecx,0x24(%rax)
mov    -0x10(%rbp),%rax
mov    0x38(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x48(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x28(%rax),%ecx
mov    %ecx,0x28(%rax)
mov    -0x10(%rbp),%rax
mov    0x3c(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x4c(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x2c(%rax),%ecx
mov    %ecx,0x2c(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%ecx
shl    $0x7,%ecx
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%eax
shr    $0x19,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x20(%rax)
mov    -0x10(%rbp),%rax
mov    0x24(%rax),%ecx
shl    $0x7,%ecx
mov    -0x10(%rbp),%rax
mov    0x24(%rax),%eax
shr    $0x19,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x24(%rax)
mov    -0x10(%rbp),%rax
mov    0x28(%rax),%ecx
shl    $0x7,%ecx
mov    -0x10(%rbp),%rax
mov    0x28(%rax),%eax
shr    $0x19,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x28(%rax)
mov    -0x10(%rbp),%rax
mov    0x2c(%rax),%ecx
shl    $0x7,%ecx
mov    -0x10(%rbp),%rax
mov    0x2c(%rax),%eax
shr    $0x19,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x2c(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x30(%rax),%ecx
mov    %ecx,0x30(%rax)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x34(%rax),%ecx
mov    %ecx,0x34(%rax)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x38(%rax),%ecx
mov    %ecx,0x38(%rax)
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x3c(%rax),%ecx
mov    %ecx,0x3c(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x30(%rax),%ecx
mov    %ecx,0x30(%rax)
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x34(%rax),%ecx
mov    %ecx,0x34(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x38(%rax),%ecx
mov    %ecx,0x38(%rax)
mov    -0x10(%rbp),%rax
mov    0x1c(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x3c(%rax),%ecx
mov    %ecx,0x3c(%rax)
mov    -0x10(%rbp),%rax
mov    0x40(%rax),%ecx
mov    -0x10(%rbp),%rax
and    (%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x30(%rax),%ecx
mov    %ecx,0x30(%rax)
mov    -0x10(%rbp),%rax
mov    0x44(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x34(%rax),%ecx
mov    %ecx,0x34(%rax)
mov    -0x10(%rbp),%rax
mov    0x48(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x8(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x38(%rax),%ecx
mov    %ecx,0x38(%rax)
mov    -0x10(%rbp),%rax
mov    0x4c(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0xc(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x3c(%rax),%ecx
mov    %ecx,0x3c(%rax)
mov    -0x10(%rbp),%rax
mov    0x30(%rax),%ecx
shl    $0x16,%ecx
mov    -0x10(%rbp),%rax
mov    0x30(%rax),%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x30(%rax)
mov    -0x10(%rbp),%rax
mov    0x34(%rax),%ecx
shl    $0x16,%ecx
mov    -0x10(%rbp),%rax
mov    0x34(%rax),%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x34(%rax)
mov    -0x10(%rbp),%rax
mov    0x38(%rax),%ecx
shl    $0x16,%ecx
mov    -0x10(%rbp),%rax
mov    0x38(%rax),%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x38(%rax)
mov    -0x10(%rbp),%rax
mov    0x3c(%rax),%ecx
shl    $0x16,%ecx
mov    -0x10(%rbp),%rax
mov    0x3c(%rax),%eax
shr    $0xa,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x3c(%rax)
mov    -0x10(%rbp),%rax
mov    0x1c(%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x1c(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x14(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x18(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x10(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x40(%rax),%ecx
mov    %ecx,0x40(%rax)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x44(%rax),%ecx
mov    %ecx,0x44(%rax)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x48(%rax),%ecx
mov    %ecx,0x48(%rax)
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x4c(%rax),%ecx
mov    %ecx,0x4c(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x40(%rax),%ecx
mov    %ecx,0x40(%rax)
mov    -0x10(%rbp),%rax
mov    0x24(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x44(%rax),%ecx
mov    %ecx,0x44(%rax)
mov    -0x10(%rbp),%rax
mov    0x28(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x48(%rax),%ecx
mov    %ecx,0x48(%rax)
mov    -0x10(%rbp),%rax
mov    0x2c(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x4c(%rax),%ecx
mov    %ecx,0x4c(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x10(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x40(%rax),%ecx
mov    %ecx,0x40(%rax)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x14(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x44(%rax),%ecx
mov    %ecx,0x44(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x18(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x48(%rax),%ecx
mov    %ecx,0x48(%rax)
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x10(%rbp),%rax
and    0x1c(%rax),%ecx
mov    -0x10(%rbp),%rax
xor    0x4c(%rax),%ecx
mov    %ecx,0x4c(%rax)
mov    -0x10(%rbp),%rax
mov    0x40(%rax),%ecx
shl    $0xd,%ecx
mov    -0x10(%rbp),%rax
mov    0x40(%rax),%eax
shr    $0x13,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x40(%rax)
mov    -0x10(%rbp),%rax
mov    0x44(%rax),%ecx
shl    $0xd,%ecx
mov    -0x10(%rbp),%rax
mov    0x44(%rax),%eax
shr    $0x13,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x44(%rax)
mov    -0x10(%rbp),%rax
mov    0x48(%rax),%ecx
shl    $0xd,%ecx
mov    -0x10(%rbp),%rax
mov    0x48(%rax),%eax
shr    $0x13,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x48(%rax)
mov    -0x10(%rbp),%rax
mov    0x4c(%rax),%ecx
shl    $0xd,%ecx
mov    -0x10(%rbp),%rax
mov    0x4c(%rax),%eax
shr    $0x13,%eax
or     %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4c(%rax)
mov    -0x10(%rbp),%rax
mov    0x2c(%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    0x28(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x2c(%rax)
mov    -0x10(%rbp),%rax
mov    0x24(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x28(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x24(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x20(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<morus_stateupdate>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdi,%r12
mov    0x30(%rsi),%eax
mov    %eax,-0x20(%rsp)
mov    (%rsi),%ecx
xor    %eax,%ecx
mov    0x34(%rsi),%eax
mov    %eax,-0x28(%rsp)
mov    0x4(%rsi),%ebx
xor    %eax,%ebx
mov    0x38(%rsi),%eax
mov    %eax,-0x24(%rsp)
mov    0x8(%rsi),%r9d
xor    %eax,%r9d
mov    0x20(%rsi),%edi
mov    %edi,-0x4(%rsp)
mov    0x10(%rsi),%ebp
mov    0x14(%rsi),%r15d
and    %ebp,%edi
xor    %ecx,%edi
mov    0x24(%rsi),%r10d
mov    %r10d,%edx
and    %r15d,%edx
xor    %ebx,%edx
mov    0x18(%rsi),%r8d
mov    0x28(%rsi),%r14d
mov    %r14d,%ebx
and    %r8d,%ebx
xor    %r9d,%ebx
mov    %ebx,%r13d
mov    0x3c(%rsi),%r11d
mov    0xc(%rsi),%ebx
xor    %r11d,%ebx
mov    0x1c(%rsi),%r9d
mov    0x2c(%rsi),%eax
mov    %eax,-0x8(%rsp)
and    %r9d,%eax
xor    %ebx,%eax
rol    $0x5,%edi
mov    %edi,-0x1c(%rsp)
mov    %edi,(%rsi)
rol    $0x5,%edx
mov    %edx,-0xc(%rsp)
mov    %edx,0x4(%rsi)
rol    $0x5,%r13d
mov    %r13d,-0x2c(%rsp)
rol    $0x5,%eax
mov    %eax,-0x10(%rsp)
mov    %r13d,0x8(%rsi)
mov    %eax,0xc(%rsi)
mov    -0x24(%rsp),%ecx
mov    %ecx,0x3c(%rsi)
mov    -0x28(%rsp),%edx
mov    %edx,0x38(%rsi)
mov    -0x20(%rsp),%eax
mov    %eax,0x34(%rsi)
mov    %r11d,0x30(%rsi)
xor    (%r12),%ebp
mov    %ebp,0x10(%rsi)
xor    0x4(%r12),%r15d
mov    %r15d,0x14(%rsi)
xor    0x8(%r12),%r8d
mov    %r8d,0x18(%rsi)
mov    0x40(%rsi),%edi
mov    %edi,-0x30(%rsp)
xor    %edi,%ebp
mov    -0x4(%rsp),%r13d
mov    %r13d,%ebx
and    %r11d,%ebx
xor    %ebp,%ebx
mov    0x44(%rsi),%edi
mov    %edi,-0x34(%rsp)
xor    %edi,%r15d
mov    %r10d,%ebp
and    %eax,%ebp
xor    %r15d,%ebp
mov    0x48(%rsi),%eax
xor    %eax,%r8d
mov    %eax,%r15d
mov    %r14d,%edi
and    %edx,%edi
xor    %r8d,%edi
xor    0xc(%r12),%r9d
mov    0x4c(%rsi),%eax
xor    %eax,%r9d
mov    -0x8(%rsp),%edx
and    %ecx,%edx
xor    %r9d,%edx
ror    %ebx
mov    %ebx,0x10(%rsi)
ror    %ebp
mov    %ebp,0x14(%rsi)
ror    %edi
ror    %edx
mov    %edi,0x18(%rsi)
mov    %edx,0x1c(%rsi)
mov    -0x34(%rsp),%r8d
mov    %r8d,0x4c(%rsi)
mov    %eax,%ecx
mov    %eax,-0x18(%rsp)
mov    %eax,0x44(%rsi)
mov    -0x30(%rsp),%r9d
mov    %r9d,0x48(%rsi)
mov    %r15d,-0x14(%rsp)
mov    %r15d,0x40(%rsi)
mov    %r13d,%eax
xor    (%r12),%eax
mov    %eax,0x20(%rsi)
mov    %r15d,%r13d
and    %r11d,%r13d
xor    %eax,%r13d
xor    0x4(%r12),%r10d
mov    %r10d,0x24(%rsi)
mov    %ecx,%r15d
and    -0x20(%rsp),%r15d
xor    %r10d,%r15d
xor    0x8(%r12),%r14d
mov    %r14d,0x28(%rsi)
mov    %r9d,%r10d
and    -0x28(%rsp),%r10d
xor    %r14d,%r10d
mov    -0x8(%rsp),%eax
xor    0xc(%r12),%eax
mov    %r8d,%r9d
and    -0x24(%rsp),%r9d
xor    %eax,%r9d
mov    -0x1c(%rsp),%r14d
xor    %r14d,%r13d
mov    -0xc(%rsp),%eax
xor    %eax,%r15d
mov    -0x2c(%rsp),%r8d
xor    %r8d,%r10d
mov    -0x10(%rsp),%ecx
xor    %ecx,%r9d
rol    $0x7,%r13d
mov    %r13d,0x20(%rsi)
rol    $0x7,%r15d
mov    %r15d,0x24(%rsi)
rol    $0x7,%r10d
rol    $0x7,%r9d
mov    %r10d,0x28(%rsi)
mov    %r9d,0x2c(%rsi)
mov    %eax,(%rsi)
mov    %r8d,0x4(%rsi)
mov    %ecx,0x8(%rsi)
mov    %ecx,%r8d
mov    %r14d,0xc(%rsi)
xor    (%r12),%r11d
mov    %r11d,0x30(%rsi)
xor    %ebx,%r11d
mov    -0x14(%rsp),%r14d
and    %eax,%r14d
xor    %r11d,%r14d
mov    -0x20(%rsp),%eax
xor    0x4(%r12),%eax
mov    %eax,0x34(%rsi)
mov    -0x28(%rsp),%ecx
xor    0x8(%r12),%ecx
xor    %ebp,%eax
mov    -0x18(%rsp),%r11d
and    -0x2c(%rsp),%r11d
xor    %eax,%r11d
mov    %ecx,%eax
mov    %ecx,0x38(%rsi)
xor    %edi,%eax
mov    -0x30(%rsp),%ecx
and    %r8d,%ecx
xor    %eax,%ecx
mov    -0x24(%rsp),%r8d
xor    0xc(%r12),%r8d
xor    %edx,%r8d
mov    -0x34(%rsp),%eax
and    -0x1c(%rsp),%eax
xor    %r8d,%eax
rol    $0x16,%r14d
mov    %r14d,0x30(%rsi)
rol    $0x16,%r11d
mov    %r11d,0x34(%rsi)
rol    $0x16,%ecx
rol    $0x16,%eax
mov    %ecx,0x38(%rsi)
mov    %eax,0x3c(%rsi)
mov    %ebp,0x1c(%rsi)
mov    %edx,0x14(%rsi)
mov    %ebx,0x18(%rsi)
mov    %edi,0x10(%rsi)
mov    -0x14(%rsp),%eax
xor    (%r12),%eax
mov    %eax,0x40(%rsi)
mov    %eax,%r11d
mov    -0x18(%rsp),%eax
xor    0x4(%r12),%eax
mov    %eax,0x44(%rsi)
mov    %eax,%r8d
mov    -0x30(%rsp),%eax
xor    0x8(%r12),%eax
mov    %eax,0x48(%rsi)
mov    -0x34(%rsp),%ecx
xor    0xc(%r12),%ecx
and    -0xc(%rsp),%edi
xor    %r11d,%edi
and    -0x2c(%rsp),%edx
xor    %r8d,%edx
and    -0x10(%rsp),%ebx
xor    %eax,%ebx
and    -0x1c(%rsp),%ebp
xor    %ecx,%ebp
xor    %r13d,%edi
rol    $0xd,%edi
mov    %edi,0x40(%rsi)
xor    %r15d,%edx
rol    $0xd,%edx
mov    %edx,0x44(%rsi)
xor    %r10d,%ebx
rol    $0xd,%ebx
mov    %ebx,0x48(%rsi)
xor    %r9d,%ebp
rol    $0xd,%ebp
mov    %ebp,0x4c(%rsi)
mov    %r10d,0x2c(%rsi)
mov    %r15d,0x28(%rsi)
mov    %r13d,0x24(%rsi)
mov    %r9d,0x20(%rsi)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @morus_stateupdate(i32* %0, [4 x i32]* %1) {
%3 = alloca i32*
%4 = alloca [4 x i32]*
%5 = alloca i32
store i32* %0, i32** %3
store [4 x i32]* %1, [4 x i32]** %4
%6 = load [4 x i32]*, [4 x i32]** %4
%7 = getelementptr inbounds [4 x i32], [4 x i32]* %6, i64 3
%8 = getelementptr inbounds [4 x i32], [4 x i32]* %7, i64 0, i64 0
%9 = load i32, i32* %8
%10 = load [4 x i32]*, [4 x i32]** %4
%11 = getelementptr inbounds [4 x i32], [4 x i32]* %10, i64 0
%12 = getelementptr inbounds [4 x i32], [4 x i32]* %11, i64 0, i64 0
%13 = load i32, i32* %12
%14 = xor i32 %13, %9
store i32 %14, i32* %12
%15 = load [4 x i32]*, [4 x i32]** %4
%16 = getelementptr inbounds [4 x i32], [4 x i32]* %15, i64 3
%17 = getelementptr inbounds [4 x i32], [4 x i32]* %16, i64 0, i64 1
%18 = load i32, i32* %17
%19 = load [4 x i32]*, [4 x i32]** %4
%20 = getelementptr inbounds [4 x i32], [4 x i32]* %19, i64 0
%21 = getelementptr inbounds [4 x i32], [4 x i32]* %20, i64 0, i64 1
%22 = load i32, i32* %21
%23 = xor i32 %22, %18
store i32 %23, i32* %21
%24 = load [4 x i32]*, [4 x i32]** %4
%25 = getelementptr inbounds [4 x i32], [4 x i32]* %24, i64 3
%26 = getelementptr inbounds [4 x i32], [4 x i32]* %25, i64 0, i64 2
%27 = load i32, i32* %26
%28 = load [4 x i32]*, [4 x i32]** %4
%29 = getelementptr inbounds [4 x i32], [4 x i32]* %28, i64 0
%30 = getelementptr inbounds [4 x i32], [4 x i32]* %29, i64 0, i64 2
%31 = load i32, i32* %30
%32 = xor i32 %31, %27
store i32 %32, i32* %30
%33 = load [4 x i32]*, [4 x i32]** %4
%34 = getelementptr inbounds [4 x i32], [4 x i32]* %33, i64 3
%35 = getelementptr inbounds [4 x i32], [4 x i32]* %34, i64 0, i64 3
%36 = load i32, i32* %35
%37 = load [4 x i32]*, [4 x i32]** %4
%38 = getelementptr inbounds [4 x i32], [4 x i32]* %37, i64 0
%39 = getelementptr inbounds [4 x i32], [4 x i32]* %38, i64 0, i64 3
%40 = load i32, i32* %39
%41 = xor i32 %40, %36
store i32 %41, i32* %39
%42 = load [4 x i32]*, [4 x i32]** %4
%43 = getelementptr inbounds [4 x i32], [4 x i32]* %42, i64 1
%44 = getelementptr inbounds [4 x i32], [4 x i32]* %43, i64 0, i64 0
%45 = load i32, i32* %44
%46 = load [4 x i32]*, [4 x i32]** %4
%47 = getelementptr inbounds [4 x i32], [4 x i32]* %46, i64 2
%48 = getelementptr inbounds [4 x i32], [4 x i32]* %47, i64 0, i64 0
%49 = load i32, i32* %48
%50 = and i32 %45, %49
%51 = load [4 x i32]*, [4 x i32]** %4
%52 = getelementptr inbounds [4 x i32], [4 x i32]* %51, i64 0
%53 = getelementptr inbounds [4 x i32], [4 x i32]* %52, i64 0, i64 0
%54 = load i32, i32* %53
%55 = xor i32 %54, %50
store i32 %55, i32* %53
%56 = load [4 x i32]*, [4 x i32]** %4
%57 = getelementptr inbounds [4 x i32], [4 x i32]* %56, i64 1
%58 = getelementptr inbounds [4 x i32], [4 x i32]* %57, i64 0, i64 1
%59 = load i32, i32* %58
%60 = load [4 x i32]*, [4 x i32]** %4
%61 = getelementptr inbounds [4 x i32], [4 x i32]* %60, i64 2
%62 = getelementptr inbounds [4 x i32], [4 x i32]* %61, i64 0, i64 1
%63 = load i32, i32* %62
%64 = and i32 %59, %63
%65 = load [4 x i32]*, [4 x i32]** %4
%66 = getelementptr inbounds [4 x i32], [4 x i32]* %65, i64 0
%67 = getelementptr inbounds [4 x i32], [4 x i32]* %66, i64 0, i64 1
%68 = load i32, i32* %67
%69 = xor i32 %68, %64
store i32 %69, i32* %67
%70 = load [4 x i32]*, [4 x i32]** %4
%71 = getelementptr inbounds [4 x i32], [4 x i32]* %70, i64 1
%72 = getelementptr inbounds [4 x i32], [4 x i32]* %71, i64 0, i64 2
%73 = load i32, i32* %72
%74 = load [4 x i32]*, [4 x i32]** %4
%75 = getelementptr inbounds [4 x i32], [4 x i32]* %74, i64 2
%76 = getelementptr inbounds [4 x i32], [4 x i32]* %75, i64 0, i64 2
%77 = load i32, i32* %76
%78 = and i32 %73, %77
%79 = load [4 x i32]*, [4 x i32]** %4
%80 = getelementptr inbounds [4 x i32], [4 x i32]* %79, i64 0
%81 = getelementptr inbounds [4 x i32], [4 x i32]* %80, i64 0, i64 2
%82 = load i32, i32* %81
%83 = xor i32 %82, %78
store i32 %83, i32* %81
%84 = load [4 x i32]*, [4 x i32]** %4
%85 = getelementptr inbounds [4 x i32], [4 x i32]* %84, i64 1
%86 = getelementptr inbounds [4 x i32], [4 x i32]* %85, i64 0, i64 3
%87 = load i32, i32* %86
%88 = load [4 x i32]*, [4 x i32]** %4
%89 = getelementptr inbounds [4 x i32], [4 x i32]* %88, i64 2
%90 = getelementptr inbounds [4 x i32], [4 x i32]* %89, i64 0, i64 3
%91 = load i32, i32* %90
%92 = and i32 %87, %91
%93 = load [4 x i32]*, [4 x i32]** %4
%94 = getelementptr inbounds [4 x i32], [4 x i32]* %93, i64 0
%95 = getelementptr inbounds [4 x i32], [4 x i32]* %94, i64 0, i64 3
%96 = load i32, i32* %95
%97 = xor i32 %96, %92
store i32 %97, i32* %95
%98 = load [4 x i32]*, [4 x i32]** %4
%99 = getelementptr inbounds [4 x i32], [4 x i32]* %98, i64 0
%100 = getelementptr inbounds [4 x i32], [4 x i32]* %99, i64 0, i64 0
%101 = load i32, i32* %100
%102 = shl i32 %101, 5
%103 = load [4 x i32]*, [4 x i32]** %4
%104 = getelementptr inbounds [4 x i32], [4 x i32]* %103, i64 0
%105 = getelementptr inbounds [4 x i32], [4 x i32]* %104, i64 0, i64 0
%106 = load i32, i32* %105
%107 = lshr i32 %106, 27
%108 = or i32 %102, %107
%109 = load [4 x i32]*, [4 x i32]** %4
%110 = getelementptr inbounds [4 x i32], [4 x i32]* %109, i64 0
%111 = getelementptr inbounds [4 x i32], [4 x i32]* %110, i64 0, i64 0
store i32 %108, i32* %111
%112 = load [4 x i32]*, [4 x i32]** %4
%113 = getelementptr inbounds [4 x i32], [4 x i32]* %112, i64 0
%114 = getelementptr inbounds [4 x i32], [4 x i32]* %113, i64 0, i64 1
%115 = load i32, i32* %114
%116 = shl i32 %115, 5
%117 = load [4 x i32]*, [4 x i32]** %4
%118 = getelementptr inbounds [4 x i32], [4 x i32]* %117, i64 0
%119 = getelementptr inbounds [4 x i32], [4 x i32]* %118, i64 0, i64 1
%120 = load i32, i32* %119
%121 = lshr i32 %120, 27
%122 = or i32 %116, %121
%123 = load [4 x i32]*, [4 x i32]** %4
%124 = getelementptr inbounds [4 x i32], [4 x i32]* %123, i64 0
%125 = getelementptr inbounds [4 x i32], [4 x i32]* %124, i64 0, i64 1
store i32 %122, i32* %125
%126 = load [4 x i32]*, [4 x i32]** %4
%127 = getelementptr inbounds [4 x i32], [4 x i32]* %126, i64 0
%128 = getelementptr inbounds [4 x i32], [4 x i32]* %127, i64 0, i64 2
%129 = load i32, i32* %128
%130 = shl i32 %129, 5
%131 = load [4 x i32]*, [4 x i32]** %4
%132 = getelementptr inbounds [4 x i32], [4 x i32]* %131, i64 0
%133 = getelementptr inbounds [4 x i32], [4 x i32]* %132, i64 0, i64 2
%134 = load i32, i32* %133
%135 = lshr i32 %134, 27
%136 = or i32 %130, %135
%137 = load [4 x i32]*, [4 x i32]** %4
%138 = getelementptr inbounds [4 x i32], [4 x i32]* %137, i64 0
%139 = getelementptr inbounds [4 x i32], [4 x i32]* %138, i64 0, i64 2
store i32 %136, i32* %139
%140 = load [4 x i32]*, [4 x i32]** %4
%141 = getelementptr inbounds [4 x i32], [4 x i32]* %140, i64 0
%142 = getelementptr inbounds [4 x i32], [4 x i32]* %141, i64 0, i64 3
%143 = load i32, i32* %142
%144 = shl i32 %143, 5
%145 = load [4 x i32]*, [4 x i32]** %4
%146 = getelementptr inbounds [4 x i32], [4 x i32]* %145, i64 0
%147 = getelementptr inbounds [4 x i32], [4 x i32]* %146, i64 0, i64 3
%148 = load i32, i32* %147
%149 = lshr i32 %148, 27
%150 = or i32 %144, %149
%151 = load [4 x i32]*, [4 x i32]** %4
%152 = getelementptr inbounds [4 x i32], [4 x i32]* %151, i64 0
%153 = getelementptr inbounds [4 x i32], [4 x i32]* %152, i64 0, i64 3
store i32 %150, i32* %153
%154 = load [4 x i32]*, [4 x i32]** %4
%155 = getelementptr inbounds [4 x i32], [4 x i32]* %154, i64 3
%156 = getelementptr inbounds [4 x i32], [4 x i32]* %155, i64 0, i64 3
%157 = load i32, i32* %156
store i32 %157, i32* %5
%158 = load [4 x i32]*, [4 x i32]** %4
%159 = getelementptr inbounds [4 x i32], [4 x i32]* %158, i64 3
%160 = getelementptr inbounds [4 x i32], [4 x i32]* %159, i64 0, i64 2
%161 = load i32, i32* %160
%162 = load [4 x i32]*, [4 x i32]** %4
%163 = getelementptr inbounds [4 x i32], [4 x i32]* %162, i64 3
%164 = getelementptr inbounds [4 x i32], [4 x i32]* %163, i64 0, i64 3
store i32 %161, i32* %164
%165 = load [4 x i32]*, [4 x i32]** %4
%166 = getelementptr inbounds [4 x i32], [4 x i32]* %165, i64 3
%167 = getelementptr inbounds [4 x i32], [4 x i32]* %166, i64 0, i64 1
%168 = load i32, i32* %167
%169 = load [4 x i32]*, [4 x i32]** %4
%170 = getelementptr inbounds [4 x i32], [4 x i32]* %169, i64 3
%171 = getelementptr inbounds [4 x i32], [4 x i32]* %170, i64 0, i64 2
store i32 %168, i32* %171
%172 = load [4 x i32]*, [4 x i32]** %4
%173 = getelementptr inbounds [4 x i32], [4 x i32]* %172, i64 3
%174 = getelementptr inbounds [4 x i32], [4 x i32]* %173, i64 0, i64 0
%175 = load i32, i32* %174
%176 = load [4 x i32]*, [4 x i32]** %4
%177 = getelementptr inbounds [4 x i32], [4 x i32]* %176, i64 3
%178 = getelementptr inbounds [4 x i32], [4 x i32]* %177, i64 0, i64 1
store i32 %175, i32* %178
%179 = load i32, i32* %5
%180 = load [4 x i32]*, [4 x i32]** %4
%181 = getelementptr inbounds [4 x i32], [4 x i32]* %180, i64 3
%182 = getelementptr inbounds [4 x i32], [4 x i32]* %181, i64 0, i64 0
store i32 %179, i32* %182
%183 = load i32*, i32** %3
%184 = getelementptr inbounds i32, i32* %183, i64 0
%185 = load i32, i32* %184
%186 = load [4 x i32]*, [4 x i32]** %4
%187 = getelementptr inbounds [4 x i32], [4 x i32]* %186, i64 1
%188 = getelementptr inbounds [4 x i32], [4 x i32]* %187, i64 0, i64 0
%189 = load i32, i32* %188
%190 = xor i32 %189, %185
store i32 %190, i32* %188
%191 = load i32*, i32** %3
%192 = getelementptr inbounds i32, i32* %191, i64 1
%193 = load i32, i32* %192
%194 = load [4 x i32]*, [4 x i32]** %4
%195 = getelementptr inbounds [4 x i32], [4 x i32]* %194, i64 1
%196 = getelementptr inbounds [4 x i32], [4 x i32]* %195, i64 0, i64 1
%197 = load i32, i32* %196
%198 = xor i32 %197, %193
store i32 %198, i32* %196
%199 = load i32*, i32** %3
%200 = getelementptr inbounds i32, i32* %199, i64 2
%201 = load i32, i32* %200
%202 = load [4 x i32]*, [4 x i32]** %4
%203 = getelementptr inbounds [4 x i32], [4 x i32]* %202, i64 1
%204 = getelementptr inbounds [4 x i32], [4 x i32]* %203, i64 0, i64 2
%205 = load i32, i32* %204
%206 = xor i32 %205, %201
store i32 %206, i32* %204
%207 = load i32*, i32** %3
%208 = getelementptr inbounds i32, i32* %207, i64 3
%209 = load i32, i32* %208
%210 = load [4 x i32]*, [4 x i32]** %4
%211 = getelementptr inbounds [4 x i32], [4 x i32]* %210, i64 1
%212 = getelementptr inbounds [4 x i32], [4 x i32]* %211, i64 0, i64 3
%213 = load i32, i32* %212
%214 = xor i32 %213, %209
store i32 %214, i32* %212
%215 = load [4 x i32]*, [4 x i32]** %4
%216 = getelementptr inbounds [4 x i32], [4 x i32]* %215, i64 4
%217 = getelementptr inbounds [4 x i32], [4 x i32]* %216, i64 0, i64 0
%218 = load i32, i32* %217
%219 = load [4 x i32]*, [4 x i32]** %4
%220 = getelementptr inbounds [4 x i32], [4 x i32]* %219, i64 1
%221 = getelementptr inbounds [4 x i32], [4 x i32]* %220, i64 0, i64 0
%222 = load i32, i32* %221
%223 = xor i32 %222, %218
store i32 %223, i32* %221
%224 = load [4 x i32]*, [4 x i32]** %4
%225 = getelementptr inbounds [4 x i32], [4 x i32]* %224, i64 4
%226 = getelementptr inbounds [4 x i32], [4 x i32]* %225, i64 0, i64 1
%227 = load i32, i32* %226
%228 = load [4 x i32]*, [4 x i32]** %4
%229 = getelementptr inbounds [4 x i32], [4 x i32]* %228, i64 1
%230 = getelementptr inbounds [4 x i32], [4 x i32]* %229, i64 0, i64 1
%231 = load i32, i32* %230
%232 = xor i32 %231, %227
store i32 %232, i32* %230
%233 = load [4 x i32]*, [4 x i32]** %4
%234 = getelementptr inbounds [4 x i32], [4 x i32]* %233, i64 4
%235 = getelementptr inbounds [4 x i32], [4 x i32]* %234, i64 0, i64 2
%236 = load i32, i32* %235
%237 = load [4 x i32]*, [4 x i32]** %4
%238 = getelementptr inbounds [4 x i32], [4 x i32]* %237, i64 1
%239 = getelementptr inbounds [4 x i32], [4 x i32]* %238, i64 0, i64 2
%240 = load i32, i32* %239
%241 = xor i32 %240, %236
store i32 %241, i32* %239
%242 = load [4 x i32]*, [4 x i32]** %4
%243 = getelementptr inbounds [4 x i32], [4 x i32]* %242, i64 4
%244 = getelementptr inbounds [4 x i32], [4 x i32]* %243, i64 0, i64 3
%245 = load i32, i32* %244
%246 = load [4 x i32]*, [4 x i32]** %4
%247 = getelementptr inbounds [4 x i32], [4 x i32]* %246, i64 1
%248 = getelementptr inbounds [4 x i32], [4 x i32]* %247, i64 0, i64 3
%249 = load i32, i32* %248
%250 = xor i32 %249, %245
store i32 %250, i32* %248
%251 = load [4 x i32]*, [4 x i32]** %4
%252 = getelementptr inbounds [4 x i32], [4 x i32]* %251, i64 2
%253 = getelementptr inbounds [4 x i32], [4 x i32]* %252, i64 0, i64 0
%254 = load i32, i32* %253
%255 = load [4 x i32]*, [4 x i32]** %4
%256 = getelementptr inbounds [4 x i32], [4 x i32]* %255, i64 3
%257 = getelementptr inbounds [4 x i32], [4 x i32]* %256, i64 0, i64 0
%258 = load i32, i32* %257
%259 = and i32 %254, %258
%260 = load [4 x i32]*, [4 x i32]** %4
%261 = getelementptr inbounds [4 x i32], [4 x i32]* %260, i64 1
%262 = getelementptr inbounds [4 x i32], [4 x i32]* %261, i64 0, i64 0
%263 = load i32, i32* %262
%264 = xor i32 %263, %259
store i32 %264, i32* %262
%265 = load [4 x i32]*, [4 x i32]** %4
%266 = getelementptr inbounds [4 x i32], [4 x i32]* %265, i64 2
%267 = getelementptr inbounds [4 x i32], [4 x i32]* %266, i64 0, i64 1
%268 = load i32, i32* %267
%269 = load [4 x i32]*, [4 x i32]** %4
%270 = getelementptr inbounds [4 x i32], [4 x i32]* %269, i64 3
%271 = getelementptr inbounds [4 x i32], [4 x i32]* %270, i64 0, i64 1
%272 = load i32, i32* %271
%273 = and i32 %268, %272
%274 = load [4 x i32]*, [4 x i32]** %4
%275 = getelementptr inbounds [4 x i32], [4 x i32]* %274, i64 1
%276 = getelementptr inbounds [4 x i32], [4 x i32]* %275, i64 0, i64 1
%277 = load i32, i32* %276
%278 = xor i32 %277, %273
store i32 %278, i32* %276
%279 = load [4 x i32]*, [4 x i32]** %4
%280 = getelementptr inbounds [4 x i32], [4 x i32]* %279, i64 2
%281 = getelementptr inbounds [4 x i32], [4 x i32]* %280, i64 0, i64 2
%282 = load i32, i32* %281
%283 = load [4 x i32]*, [4 x i32]** %4
%284 = getelementptr inbounds [4 x i32], [4 x i32]* %283, i64 3
%285 = getelementptr inbounds [4 x i32], [4 x i32]* %284, i64 0, i64 2
%286 = load i32, i32* %285
%287 = and i32 %282, %286
%288 = load [4 x i32]*, [4 x i32]** %4
%289 = getelementptr inbounds [4 x i32], [4 x i32]* %288, i64 1
%290 = getelementptr inbounds [4 x i32], [4 x i32]* %289, i64 0, i64 2
%291 = load i32, i32* %290
%292 = xor i32 %291, %287
store i32 %292, i32* %290
%293 = load [4 x i32]*, [4 x i32]** %4
%294 = getelementptr inbounds [4 x i32], [4 x i32]* %293, i64 2
%295 = getelementptr inbounds [4 x i32], [4 x i32]* %294, i64 0, i64 3
%296 = load i32, i32* %295
%297 = load [4 x i32]*, [4 x i32]** %4
%298 = getelementptr inbounds [4 x i32], [4 x i32]* %297, i64 3
%299 = getelementptr inbounds [4 x i32], [4 x i32]* %298, i64 0, i64 3
%300 = load i32, i32* %299
%301 = and i32 %296, %300
%302 = load [4 x i32]*, [4 x i32]** %4
%303 = getelementptr inbounds [4 x i32], [4 x i32]* %302, i64 1
%304 = getelementptr inbounds [4 x i32], [4 x i32]* %303, i64 0, i64 3
%305 = load i32, i32* %304
%306 = xor i32 %305, %301
store i32 %306, i32* %304
%307 = load [4 x i32]*, [4 x i32]** %4
%308 = getelementptr inbounds [4 x i32], [4 x i32]* %307, i64 1
%309 = getelementptr inbounds [4 x i32], [4 x i32]* %308, i64 0, i64 0
%310 = load i32, i32* %309
%311 = shl i32 %310, 31
%312 = load [4 x i32]*, [4 x i32]** %4
%313 = getelementptr inbounds [4 x i32], [4 x i32]* %312, i64 1
%314 = getelementptr inbounds [4 x i32], [4 x i32]* %313, i64 0, i64 0
%315 = load i32, i32* %314
%316 = lshr i32 %315, 1
%317 = or i32 %311, %316
%318 = load [4 x i32]*, [4 x i32]** %4
%319 = getelementptr inbounds [4 x i32], [4 x i32]* %318, i64 1
%320 = getelementptr inbounds [4 x i32], [4 x i32]* %319, i64 0, i64 0
store i32 %317, i32* %320
%321 = load [4 x i32]*, [4 x i32]** %4
%322 = getelementptr inbounds [4 x i32], [4 x i32]* %321, i64 1
%323 = getelementptr inbounds [4 x i32], [4 x i32]* %322, i64 0, i64 1
%324 = load i32, i32* %323
%325 = shl i32 %324, 31
%326 = load [4 x i32]*, [4 x i32]** %4
%327 = getelementptr inbounds [4 x i32], [4 x i32]* %326, i64 1
%328 = getelementptr inbounds [4 x i32], [4 x i32]* %327, i64 0, i64 1
%329 = load i32, i32* %328
%330 = lshr i32 %329, 1
%331 = or i32 %325, %330
%332 = load [4 x i32]*, [4 x i32]** %4
%333 = getelementptr inbounds [4 x i32], [4 x i32]* %332, i64 1
%334 = getelementptr inbounds [4 x i32], [4 x i32]* %333, i64 0, i64 1
store i32 %331, i32* %334
%335 = load [4 x i32]*, [4 x i32]** %4
%336 = getelementptr inbounds [4 x i32], [4 x i32]* %335, i64 1
%337 = getelementptr inbounds [4 x i32], [4 x i32]* %336, i64 0, i64 2
%338 = load i32, i32* %337
%339 = shl i32 %338, 31
%340 = load [4 x i32]*, [4 x i32]** %4
%341 = getelementptr inbounds [4 x i32], [4 x i32]* %340, i64 1
%342 = getelementptr inbounds [4 x i32], [4 x i32]* %341, i64 0, i64 2
%343 = load i32, i32* %342
%344 = lshr i32 %343, 1
%345 = or i32 %339, %344
%346 = load [4 x i32]*, [4 x i32]** %4
%347 = getelementptr inbounds [4 x i32], [4 x i32]* %346, i64 1
%348 = getelementptr inbounds [4 x i32], [4 x i32]* %347, i64 0, i64 2
store i32 %345, i32* %348
%349 = load [4 x i32]*, [4 x i32]** %4
%350 = getelementptr inbounds [4 x i32], [4 x i32]* %349, i64 1
%351 = getelementptr inbounds [4 x i32], [4 x i32]* %350, i64 0, i64 3
%352 = load i32, i32* %351
%353 = shl i32 %352, 31
%354 = load [4 x i32]*, [4 x i32]** %4
%355 = getelementptr inbounds [4 x i32], [4 x i32]* %354, i64 1
%356 = getelementptr inbounds [4 x i32], [4 x i32]* %355, i64 0, i64 3
%357 = load i32, i32* %356
%358 = lshr i32 %357, 1
%359 = or i32 %353, %358
%360 = load [4 x i32]*, [4 x i32]** %4
%361 = getelementptr inbounds [4 x i32], [4 x i32]* %360, i64 1
%362 = getelementptr inbounds [4 x i32], [4 x i32]* %361, i64 0, i64 3
store i32 %359, i32* %362
%363 = load [4 x i32]*, [4 x i32]** %4
%364 = getelementptr inbounds [4 x i32], [4 x i32]* %363, i64 4
%365 = getelementptr inbounds [4 x i32], [4 x i32]* %364, i64 0, i64 3
%366 = load i32, i32* %365
store i32 %366, i32* %5
%367 = load [4 x i32]*, [4 x i32]** %4
%368 = getelementptr inbounds [4 x i32], [4 x i32]* %367, i64 4
%369 = getelementptr inbounds [4 x i32], [4 x i32]* %368, i64 0, i64 1
%370 = load i32, i32* %369
%371 = load [4 x i32]*, [4 x i32]** %4
%372 = getelementptr inbounds [4 x i32], [4 x i32]* %371, i64 4
%373 = getelementptr inbounds [4 x i32], [4 x i32]* %372, i64 0, i64 3
store i32 %370, i32* %373
%374 = load i32, i32* %5
%375 = load [4 x i32]*, [4 x i32]** %4
%376 = getelementptr inbounds [4 x i32], [4 x i32]* %375, i64 4
%377 = getelementptr inbounds [4 x i32], [4 x i32]* %376, i64 0, i64 1
store i32 %374, i32* %377
%378 = load [4 x i32]*, [4 x i32]** %4
%379 = getelementptr inbounds [4 x i32], [4 x i32]* %378, i64 4
%380 = getelementptr inbounds [4 x i32], [4 x i32]* %379, i64 0, i64 2
%381 = load i32, i32* %380
store i32 %381, i32* %5
%382 = load [4 x i32]*, [4 x i32]** %4
%383 = getelementptr inbounds [4 x i32], [4 x i32]* %382, i64 4
%384 = getelementptr inbounds [4 x i32], [4 x i32]* %383, i64 0, i64 0
%385 = load i32, i32* %384
%386 = load [4 x i32]*, [4 x i32]** %4
%387 = getelementptr inbounds [4 x i32], [4 x i32]* %386, i64 4
%388 = getelementptr inbounds [4 x i32], [4 x i32]* %387, i64 0, i64 2
store i32 %385, i32* %388
%389 = load i32, i32* %5
%390 = load [4 x i32]*, [4 x i32]** %4
%391 = getelementptr inbounds [4 x i32], [4 x i32]* %390, i64 4
%392 = getelementptr inbounds [4 x i32], [4 x i32]* %391, i64 0, i64 0
store i32 %389, i32* %392
%393 = load i32*, i32** %3
%394 = getelementptr inbounds i32, i32* %393, i64 0
%395 = load i32, i32* %394
%396 = load [4 x i32]*, [4 x i32]** %4
%397 = getelementptr inbounds [4 x i32], [4 x i32]* %396, i64 2
%398 = getelementptr inbounds [4 x i32], [4 x i32]* %397, i64 0, i64 0
%399 = load i32, i32* %398
%400 = xor i32 %399, %395
store i32 %400, i32* %398
%401 = load i32*, i32** %3
%402 = getelementptr inbounds i32, i32* %401, i64 1
%403 = load i32, i32* %402
%404 = load [4 x i32]*, [4 x i32]** %4
%405 = getelementptr inbounds [4 x i32], [4 x i32]* %404, i64 2
%406 = getelementptr inbounds [4 x i32], [4 x i32]* %405, i64 0, i64 1
%407 = load i32, i32* %406
%408 = xor i32 %407, %403
store i32 %408, i32* %406
%409 = load i32*, i32** %3
%410 = getelementptr inbounds i32, i32* %409, i64 2
%411 = load i32, i32* %410
%412 = load [4 x i32]*, [4 x i32]** %4
%413 = getelementptr inbounds [4 x i32], [4 x i32]* %412, i64 2
%414 = getelementptr inbounds [4 x i32], [4 x i32]* %413, i64 0, i64 2
%415 = load i32, i32* %414
%416 = xor i32 %415, %411
store i32 %416, i32* %414
%417 = load i32*, i32** %3
%418 = getelementptr inbounds i32, i32* %417, i64 3
%419 = load i32, i32* %418
%420 = load [4 x i32]*, [4 x i32]** %4
%421 = getelementptr inbounds [4 x i32], [4 x i32]* %420, i64 2
%422 = getelementptr inbounds [4 x i32], [4 x i32]* %421, i64 0, i64 3
%423 = load i32, i32* %422
%424 = xor i32 %423, %419
store i32 %424, i32* %422
%425 = load [4 x i32]*, [4 x i32]** %4
%426 = getelementptr inbounds [4 x i32], [4 x i32]* %425, i64 0
%427 = getelementptr inbounds [4 x i32], [4 x i32]* %426, i64 0, i64 0
%428 = load i32, i32* %427
%429 = load [4 x i32]*, [4 x i32]** %4
%430 = getelementptr inbounds [4 x i32], [4 x i32]* %429, i64 2
%431 = getelementptr inbounds [4 x i32], [4 x i32]* %430, i64 0, i64 0
%432 = load i32, i32* %431
%433 = xor i32 %432, %428
store i32 %433, i32* %431
%434 = load [4 x i32]*, [4 x i32]** %4
%435 = getelementptr inbounds [4 x i32], [4 x i32]* %434, i64 0
%436 = getelementptr inbounds [4 x i32], [4 x i32]* %435, i64 0, i64 1
%437 = load i32, i32* %436
%438 = load [4 x i32]*, [4 x i32]** %4
%439 = getelementptr inbounds [4 x i32], [4 x i32]* %438, i64 2
%440 = getelementptr inbounds [4 x i32], [4 x i32]* %439, i64 0, i64 1
%441 = load i32, i32* %440
%442 = xor i32 %441, %437
store i32 %442, i32* %440
%443 = load [4 x i32]*, [4 x i32]** %4
%444 = getelementptr inbounds [4 x i32], [4 x i32]* %443, i64 0
%445 = getelementptr inbounds [4 x i32], [4 x i32]* %444, i64 0, i64 2
%446 = load i32, i32* %445
%447 = load [4 x i32]*, [4 x i32]** %4
%448 = getelementptr inbounds [4 x i32], [4 x i32]* %447, i64 2
%449 = getelementptr inbounds [4 x i32], [4 x i32]* %448, i64 0, i64 2
%450 = load i32, i32* %449
%451 = xor i32 %450, %446
store i32 %451, i32* %449
%452 = load [4 x i32]*, [4 x i32]** %4
%453 = getelementptr inbounds [4 x i32], [4 x i32]* %452, i64 0
%454 = getelementptr inbounds [4 x i32], [4 x i32]* %453, i64 0, i64 3
%455 = load i32, i32* %454
%456 = load [4 x i32]*, [4 x i32]** %4
%457 = getelementptr inbounds [4 x i32], [4 x i32]* %456, i64 2
%458 = getelementptr inbounds [4 x i32], [4 x i32]* %457, i64 0, i64 3
%459 = load i32, i32* %458
%460 = xor i32 %459, %455
store i32 %460, i32* %458
%461 = load [4 x i32]*, [4 x i32]** %4
%462 = getelementptr inbounds [4 x i32], [4 x i32]* %461, i64 3
%463 = getelementptr inbounds [4 x i32], [4 x i32]* %462, i64 0, i64 0
%464 = load i32, i32* %463
%465 = load [4 x i32]*, [4 x i32]** %4
%466 = getelementptr inbounds [4 x i32], [4 x i32]* %465, i64 4
%467 = getelementptr inbounds [4 x i32], [4 x i32]* %466, i64 0, i64 0
%468 = load i32, i32* %467
%469 = and i32 %464, %468
%470 = load [4 x i32]*, [4 x i32]** %4
%471 = getelementptr inbounds [4 x i32], [4 x i32]* %470, i64 2
%472 = getelementptr inbounds [4 x i32], [4 x i32]* %471, i64 0, i64 0
%473 = load i32, i32* %472
%474 = xor i32 %473, %469
store i32 %474, i32* %472
%475 = load [4 x i32]*, [4 x i32]** %4
%476 = getelementptr inbounds [4 x i32], [4 x i32]* %475, i64 3
%477 = getelementptr inbounds [4 x i32], [4 x i32]* %476, i64 0, i64 1
%478 = load i32, i32* %477
%479 = load [4 x i32]*, [4 x i32]** %4
%480 = getelementptr inbounds [4 x i32], [4 x i32]* %479, i64 4
%481 = getelementptr inbounds [4 x i32], [4 x i32]* %480, i64 0, i64 1
%482 = load i32, i32* %481
%483 = and i32 %478, %482
%484 = load [4 x i32]*, [4 x i32]** %4
%485 = getelementptr inbounds [4 x i32], [4 x i32]* %484, i64 2
%486 = getelementptr inbounds [4 x i32], [4 x i32]* %485, i64 0, i64 1
%487 = load i32, i32* %486
%488 = xor i32 %487, %483
store i32 %488, i32* %486
%489 = load [4 x i32]*, [4 x i32]** %4
%490 = getelementptr inbounds [4 x i32], [4 x i32]* %489, i64 3
%491 = getelementptr inbounds [4 x i32], [4 x i32]* %490, i64 0, i64 2
%492 = load i32, i32* %491
%493 = load [4 x i32]*, [4 x i32]** %4
%494 = getelementptr inbounds [4 x i32], [4 x i32]* %493, i64 4
%495 = getelementptr inbounds [4 x i32], [4 x i32]* %494, i64 0, i64 2
%496 = load i32, i32* %495
%497 = and i32 %492, %496
%498 = load [4 x i32]*, [4 x i32]** %4
%499 = getelementptr inbounds [4 x i32], [4 x i32]* %498, i64 2
%500 = getelementptr inbounds [4 x i32], [4 x i32]* %499, i64 0, i64 2
%501 = load i32, i32* %500
%502 = xor i32 %501, %497
store i32 %502, i32* %500
%503 = load [4 x i32]*, [4 x i32]** %4
%504 = getelementptr inbounds [4 x i32], [4 x i32]* %503, i64 3
%505 = getelementptr inbounds [4 x i32], [4 x i32]* %504, i64 0, i64 3
%506 = load i32, i32* %505
%507 = load [4 x i32]*, [4 x i32]** %4
%508 = getelementptr inbounds [4 x i32], [4 x i32]* %507, i64 4
%509 = getelementptr inbounds [4 x i32], [4 x i32]* %508, i64 0, i64 3
%510 = load i32, i32* %509
%511 = and i32 %506, %510
%512 = load [4 x i32]*, [4 x i32]** %4
%513 = getelementptr inbounds [4 x i32], [4 x i32]* %512, i64 2
%514 = getelementptr inbounds [4 x i32], [4 x i32]* %513, i64 0, i64 3
%515 = load i32, i32* %514
%516 = xor i32 %515, %511
store i32 %516, i32* %514
%517 = load [4 x i32]*, [4 x i32]** %4
%518 = getelementptr inbounds [4 x i32], [4 x i32]* %517, i64 2
%519 = getelementptr inbounds [4 x i32], [4 x i32]* %518, i64 0, i64 0
%520 = load i32, i32* %519
%521 = shl i32 %520, 7
%522 = load [4 x i32]*, [4 x i32]** %4
%523 = getelementptr inbounds [4 x i32], [4 x i32]* %522, i64 2
%524 = getelementptr inbounds [4 x i32], [4 x i32]* %523, i64 0, i64 0
%525 = load i32, i32* %524
%526 = lshr i32 %525, 25
%527 = or i32 %521, %526
%528 = load [4 x i32]*, [4 x i32]** %4
%529 = getelementptr inbounds [4 x i32], [4 x i32]* %528, i64 2
%530 = getelementptr inbounds [4 x i32], [4 x i32]* %529, i64 0, i64 0
store i32 %527, i32* %530
%531 = load [4 x i32]*, [4 x i32]** %4
%532 = getelementptr inbounds [4 x i32], [4 x i32]* %531, i64 2
%533 = getelementptr inbounds [4 x i32], [4 x i32]* %532, i64 0, i64 1
%534 = load i32, i32* %533
%535 = shl i32 %534, 7
%536 = load [4 x i32]*, [4 x i32]** %4
%537 = getelementptr inbounds [4 x i32], [4 x i32]* %536, i64 2
%538 = getelementptr inbounds [4 x i32], [4 x i32]* %537, i64 0, i64 1
%539 = load i32, i32* %538
%540 = lshr i32 %539, 25
%541 = or i32 %535, %540
%542 = load [4 x i32]*, [4 x i32]** %4
%543 = getelementptr inbounds [4 x i32], [4 x i32]* %542, i64 2
%544 = getelementptr inbounds [4 x i32], [4 x i32]* %543, i64 0, i64 1
store i32 %541, i32* %544
%545 = load [4 x i32]*, [4 x i32]** %4
%546 = getelementptr inbounds [4 x i32], [4 x i32]* %545, i64 2
%547 = getelementptr inbounds [4 x i32], [4 x i32]* %546, i64 0, i64 2
%548 = load i32, i32* %547
%549 = shl i32 %548, 7
%550 = load [4 x i32]*, [4 x i32]** %4
%551 = getelementptr inbounds [4 x i32], [4 x i32]* %550, i64 2
%552 = getelementptr inbounds [4 x i32], [4 x i32]* %551, i64 0, i64 2
%553 = load i32, i32* %552
%554 = lshr i32 %553, 25
%555 = or i32 %549, %554
%556 = load [4 x i32]*, [4 x i32]** %4
%557 = getelementptr inbounds [4 x i32], [4 x i32]* %556, i64 2
%558 = getelementptr inbounds [4 x i32], [4 x i32]* %557, i64 0, i64 2
store i32 %555, i32* %558
%559 = load [4 x i32]*, [4 x i32]** %4
%560 = getelementptr inbounds [4 x i32], [4 x i32]* %559, i64 2
%561 = getelementptr inbounds [4 x i32], [4 x i32]* %560, i64 0, i64 3
%562 = load i32, i32* %561
%563 = shl i32 %562, 7
%564 = load [4 x i32]*, [4 x i32]** %4
%565 = getelementptr inbounds [4 x i32], [4 x i32]* %564, i64 2
%566 = getelementptr inbounds [4 x i32], [4 x i32]* %565, i64 0, i64 3
%567 = load i32, i32* %566
%568 = lshr i32 %567, 25
%569 = or i32 %563, %568
%570 = load [4 x i32]*, [4 x i32]** %4
%571 = getelementptr inbounds [4 x i32], [4 x i32]* %570, i64 2
%572 = getelementptr inbounds [4 x i32], [4 x i32]* %571, i64 0, i64 3
store i32 %569, i32* %572
%573 = load [4 x i32]*, [4 x i32]** %4
%574 = getelementptr inbounds [4 x i32], [4 x i32]* %573, i64 0
%575 = getelementptr inbounds [4 x i32], [4 x i32]* %574, i64 0, i64 0
%576 = load i32, i32* %575
store i32 %576, i32* %5
%577 = load [4 x i32]*, [4 x i32]** %4
%578 = getelementptr inbounds [4 x i32], [4 x i32]* %577, i64 0
%579 = getelementptr inbounds [4 x i32], [4 x i32]* %578, i64 0, i64 1
%580 = load i32, i32* %579
%581 = load [4 x i32]*, [4 x i32]** %4
%582 = getelementptr inbounds [4 x i32], [4 x i32]* %581, i64 0
%583 = getelementptr inbounds [4 x i32], [4 x i32]* %582, i64 0, i64 0
store i32 %580, i32* %583
%584 = load [4 x i32]*, [4 x i32]** %4
%585 = getelementptr inbounds [4 x i32], [4 x i32]* %584, i64 0
%586 = getelementptr inbounds [4 x i32], [4 x i32]* %585, i64 0, i64 2
%587 = load i32, i32* %586
%588 = load [4 x i32]*, [4 x i32]** %4
%589 = getelementptr inbounds [4 x i32], [4 x i32]* %588, i64 0
%590 = getelementptr inbounds [4 x i32], [4 x i32]* %589, i64 0, i64 1
store i32 %587, i32* %590
%591 = load [4 x i32]*, [4 x i32]** %4
%592 = getelementptr inbounds [4 x i32], [4 x i32]* %591, i64 0
%593 = getelementptr inbounds [4 x i32], [4 x i32]* %592, i64 0, i64 3
%594 = load i32, i32* %593
%595 = load [4 x i32]*, [4 x i32]** %4
%596 = getelementptr inbounds [4 x i32], [4 x i32]* %595, i64 0
%597 = getelementptr inbounds [4 x i32], [4 x i32]* %596, i64 0, i64 2
store i32 %594, i32* %597
%598 = load i32, i32* %5
%599 = load [4 x i32]*, [4 x i32]** %4
%600 = getelementptr inbounds [4 x i32], [4 x i32]* %599, i64 0
%601 = getelementptr inbounds [4 x i32], [4 x i32]* %600, i64 0, i64 3
store i32 %598, i32* %601
%602 = load i32*, i32** %3
%603 = getelementptr inbounds i32, i32* %602, i64 0
%604 = load i32, i32* %603
%605 = load [4 x i32]*, [4 x i32]** %4
%606 = getelementptr inbounds [4 x i32], [4 x i32]* %605, i64 3
%607 = getelementptr inbounds [4 x i32], [4 x i32]* %606, i64 0, i64 0
%608 = load i32, i32* %607
%609 = xor i32 %608, %604
store i32 %609, i32* %607
%610 = load i32*, i32** %3
%611 = getelementptr inbounds i32, i32* %610, i64 1
%612 = load i32, i32* %611
%613 = load [4 x i32]*, [4 x i32]** %4
%614 = getelementptr inbounds [4 x i32], [4 x i32]* %613, i64 3
%615 = getelementptr inbounds [4 x i32], [4 x i32]* %614, i64 0, i64 1
%616 = load i32, i32* %615
%617 = xor i32 %616, %612
store i32 %617, i32* %615
%618 = load i32*, i32** %3
%619 = getelementptr inbounds i32, i32* %618, i64 2
%620 = load i32, i32* %619
%621 = load [4 x i32]*, [4 x i32]** %4
%622 = getelementptr inbounds [4 x i32], [4 x i32]* %621, i64 3
%623 = getelementptr inbounds [4 x i32], [4 x i32]* %622, i64 0, i64 2
%624 = load i32, i32* %623
%625 = xor i32 %624, %620
store i32 %625, i32* %623
%626 = load i32*, i32** %3
%627 = getelementptr inbounds i32, i32* %626, i64 3
%628 = load i32, i32* %627
%629 = load [4 x i32]*, [4 x i32]** %4
%630 = getelementptr inbounds [4 x i32], [4 x i32]* %629, i64 3
%631 = getelementptr inbounds [4 x i32], [4 x i32]* %630, i64 0, i64 3
%632 = load i32, i32* %631
%633 = xor i32 %632, %628
store i32 %633, i32* %631
%634 = load [4 x i32]*, [4 x i32]** %4
%635 = getelementptr inbounds [4 x i32], [4 x i32]* %634, i64 1
%636 = getelementptr inbounds [4 x i32], [4 x i32]* %635, i64 0, i64 0
%637 = load i32, i32* %636
%638 = load [4 x i32]*, [4 x i32]** %4
%639 = getelementptr inbounds [4 x i32], [4 x i32]* %638, i64 3
%640 = getelementptr inbounds [4 x i32], [4 x i32]* %639, i64 0, i64 0
%641 = load i32, i32* %640
%642 = xor i32 %641, %637
store i32 %642, i32* %640
%643 = load [4 x i32]*, [4 x i32]** %4
%644 = getelementptr inbounds [4 x i32], [4 x i32]* %643, i64 1
%645 = getelementptr inbounds [4 x i32], [4 x i32]* %644, i64 0, i64 1
%646 = load i32, i32* %645
%647 = load [4 x i32]*, [4 x i32]** %4
%648 = getelementptr inbounds [4 x i32], [4 x i32]* %647, i64 3
%649 = getelementptr inbounds [4 x i32], [4 x i32]* %648, i64 0, i64 1
%650 = load i32, i32* %649
%651 = xor i32 %650, %646
store i32 %651, i32* %649
%652 = load [4 x i32]*, [4 x i32]** %4
%653 = getelementptr inbounds [4 x i32], [4 x i32]* %652, i64 1
%654 = getelementptr inbounds [4 x i32], [4 x i32]* %653, i64 0, i64 2
%655 = load i32, i32* %654
%656 = load [4 x i32]*, [4 x i32]** %4
%657 = getelementptr inbounds [4 x i32], [4 x i32]* %656, i64 3
%658 = getelementptr inbounds [4 x i32], [4 x i32]* %657, i64 0, i64 2
%659 = load i32, i32* %658
%660 = xor i32 %659, %655
store i32 %660, i32* %658
%661 = load [4 x i32]*, [4 x i32]** %4
%662 = getelementptr inbounds [4 x i32], [4 x i32]* %661, i64 1
%663 = getelementptr inbounds [4 x i32], [4 x i32]* %662, i64 0, i64 3
%664 = load i32, i32* %663
%665 = load [4 x i32]*, [4 x i32]** %4
%666 = getelementptr inbounds [4 x i32], [4 x i32]* %665, i64 3
%667 = getelementptr inbounds [4 x i32], [4 x i32]* %666, i64 0, i64 3
%668 = load i32, i32* %667
%669 = xor i32 %668, %664
store i32 %669, i32* %667
%670 = load [4 x i32]*, [4 x i32]** %4
%671 = getelementptr inbounds [4 x i32], [4 x i32]* %670, i64 4
%672 = getelementptr inbounds [4 x i32], [4 x i32]* %671, i64 0, i64 0
%673 = load i32, i32* %672
%674 = load [4 x i32]*, [4 x i32]** %4
%675 = getelementptr inbounds [4 x i32], [4 x i32]* %674, i64 0
%676 = getelementptr inbounds [4 x i32], [4 x i32]* %675, i64 0, i64 0
%677 = load i32, i32* %676
%678 = and i32 %673, %677
%679 = load [4 x i32]*, [4 x i32]** %4
%680 = getelementptr inbounds [4 x i32], [4 x i32]* %679, i64 3
%681 = getelementptr inbounds [4 x i32], [4 x i32]* %680, i64 0, i64 0
%682 = load i32, i32* %681
%683 = xor i32 %682, %678
store i32 %683, i32* %681
%684 = load [4 x i32]*, [4 x i32]** %4
%685 = getelementptr inbounds [4 x i32], [4 x i32]* %684, i64 4
%686 = getelementptr inbounds [4 x i32], [4 x i32]* %685, i64 0, i64 1
%687 = load i32, i32* %686
%688 = load [4 x i32]*, [4 x i32]** %4
%689 = getelementptr inbounds [4 x i32], [4 x i32]* %688, i64 0
%690 = getelementptr inbounds [4 x i32], [4 x i32]* %689, i64 0, i64 1
%691 = load i32, i32* %690
%692 = and i32 %687, %691
%693 = load [4 x i32]*, [4 x i32]** %4
%694 = getelementptr inbounds [4 x i32], [4 x i32]* %693, i64 3
%695 = getelementptr inbounds [4 x i32], [4 x i32]* %694, i64 0, i64 1
%696 = load i32, i32* %695
%697 = xor i32 %696, %692
store i32 %697, i32* %695
%698 = load [4 x i32]*, [4 x i32]** %4
%699 = getelementptr inbounds [4 x i32], [4 x i32]* %698, i64 4
%700 = getelementptr inbounds [4 x i32], [4 x i32]* %699, i64 0, i64 2
%701 = load i32, i32* %700
%702 = load [4 x i32]*, [4 x i32]** %4
%703 = getelementptr inbounds [4 x i32], [4 x i32]* %702, i64 0
%704 = getelementptr inbounds [4 x i32], [4 x i32]* %703, i64 0, i64 2
%705 = load i32, i32* %704
%706 = and i32 %701, %705
%707 = load [4 x i32]*, [4 x i32]** %4
%708 = getelementptr inbounds [4 x i32], [4 x i32]* %707, i64 3
%709 = getelementptr inbounds [4 x i32], [4 x i32]* %708, i64 0, i64 2
%710 = load i32, i32* %709
%711 = xor i32 %710, %706
store i32 %711, i32* %709
%712 = load [4 x i32]*, [4 x i32]** %4
%713 = getelementptr inbounds [4 x i32], [4 x i32]* %712, i64 4
%714 = getelementptr inbounds [4 x i32], [4 x i32]* %713, i64 0, i64 3
%715 = load i32, i32* %714
%716 = load [4 x i32]*, [4 x i32]** %4
%717 = getelementptr inbounds [4 x i32], [4 x i32]* %716, i64 0
%718 = getelementptr inbounds [4 x i32], [4 x i32]* %717, i64 0, i64 3
%719 = load i32, i32* %718
%720 = and i32 %715, %719
%721 = load [4 x i32]*, [4 x i32]** %4
%722 = getelementptr inbounds [4 x i32], [4 x i32]* %721, i64 3
%723 = getelementptr inbounds [4 x i32], [4 x i32]* %722, i64 0, i64 3
%724 = load i32, i32* %723
%725 = xor i32 %724, %720
store i32 %725, i32* %723
%726 = load [4 x i32]*, [4 x i32]** %4
%727 = getelementptr inbounds [4 x i32], [4 x i32]* %726, i64 3
%728 = getelementptr inbounds [4 x i32], [4 x i32]* %727, i64 0, i64 0
%729 = load i32, i32* %728
%730 = shl i32 %729, 22
%731 = load [4 x i32]*, [4 x i32]** %4
%732 = getelementptr inbounds [4 x i32], [4 x i32]* %731, i64 3
%733 = getelementptr inbounds [4 x i32], [4 x i32]* %732, i64 0, i64 0
%734 = load i32, i32* %733
%735 = lshr i32 %734, 10
%736 = or i32 %730, %735
%737 = load [4 x i32]*, [4 x i32]** %4
%738 = getelementptr inbounds [4 x i32], [4 x i32]* %737, i64 3
%739 = getelementptr inbounds [4 x i32], [4 x i32]* %738, i64 0, i64 0
store i32 %736, i32* %739
%740 = load [4 x i32]*, [4 x i32]** %4
%741 = getelementptr inbounds [4 x i32], [4 x i32]* %740, i64 3
%742 = getelementptr inbounds [4 x i32], [4 x i32]* %741, i64 0, i64 1
%743 = load i32, i32* %742
%744 = shl i32 %743, 22
%745 = load [4 x i32]*, [4 x i32]** %4
%746 = getelementptr inbounds [4 x i32], [4 x i32]* %745, i64 3
%747 = getelementptr inbounds [4 x i32], [4 x i32]* %746, i64 0, i64 1
%748 = load i32, i32* %747
%749 = lshr i32 %748, 10
%750 = or i32 %744, %749
%751 = load [4 x i32]*, [4 x i32]** %4
%752 = getelementptr inbounds [4 x i32], [4 x i32]* %751, i64 3
%753 = getelementptr inbounds [4 x i32], [4 x i32]* %752, i64 0, i64 1
store i32 %750, i32* %753
%754 = load [4 x i32]*, [4 x i32]** %4
%755 = getelementptr inbounds [4 x i32], [4 x i32]* %754, i64 3
%756 = getelementptr inbounds [4 x i32], [4 x i32]* %755, i64 0, i64 2
%757 = load i32, i32* %756
%758 = shl i32 %757, 22
%759 = load [4 x i32]*, [4 x i32]** %4
%760 = getelementptr inbounds [4 x i32], [4 x i32]* %759, i64 3
%761 = getelementptr inbounds [4 x i32], [4 x i32]* %760, i64 0, i64 2
%762 = load i32, i32* %761
%763 = lshr i32 %762, 10
%764 = or i32 %758, %763
%765 = load [4 x i32]*, [4 x i32]** %4
%766 = getelementptr inbounds [4 x i32], [4 x i32]* %765, i64 3
%767 = getelementptr inbounds [4 x i32], [4 x i32]* %766, i64 0, i64 2
store i32 %764, i32* %767
%768 = load [4 x i32]*, [4 x i32]** %4
%769 = getelementptr inbounds [4 x i32], [4 x i32]* %768, i64 3
%770 = getelementptr inbounds [4 x i32], [4 x i32]* %769, i64 0, i64 3
%771 = load i32, i32* %770
%772 = shl i32 %771, 22
%773 = load [4 x i32]*, [4 x i32]** %4
%774 = getelementptr inbounds [4 x i32], [4 x i32]* %773, i64 3
%775 = getelementptr inbounds [4 x i32], [4 x i32]* %774, i64 0, i64 3
%776 = load i32, i32* %775
%777 = lshr i32 %776, 10
%778 = or i32 %772, %777
%779 = load [4 x i32]*, [4 x i32]** %4
%780 = getelementptr inbounds [4 x i32], [4 x i32]* %779, i64 3
%781 = getelementptr inbounds [4 x i32], [4 x i32]* %780, i64 0, i64 3
store i32 %778, i32* %781
%782 = load [4 x i32]*, [4 x i32]** %4
%783 = getelementptr inbounds [4 x i32], [4 x i32]* %782, i64 1
%784 = getelementptr inbounds [4 x i32], [4 x i32]* %783, i64 0, i64 3
%785 = load i32, i32* %784
store i32 %785, i32* %5
%786 = load [4 x i32]*, [4 x i32]** %4
%787 = getelementptr inbounds [4 x i32], [4 x i32]* %786, i64 1
%788 = getelementptr inbounds [4 x i32], [4 x i32]* %787, i64 0, i64 1
%789 = load i32, i32* %788
%790 = load [4 x i32]*, [4 x i32]** %4
%791 = getelementptr inbounds [4 x i32], [4 x i32]* %790, i64 1
%792 = getelementptr inbounds [4 x i32], [4 x i32]* %791, i64 0, i64 3
store i32 %789, i32* %792
%793 = load i32, i32* %5
%794 = load [4 x i32]*, [4 x i32]** %4
%795 = getelementptr inbounds [4 x i32], [4 x i32]* %794, i64 1
%796 = getelementptr inbounds [4 x i32], [4 x i32]* %795, i64 0, i64 1
store i32 %793, i32* %796
%797 = load [4 x i32]*, [4 x i32]** %4
%798 = getelementptr inbounds [4 x i32], [4 x i32]* %797, i64 1
%799 = getelementptr inbounds [4 x i32], [4 x i32]* %798, i64 0, i64 2
%800 = load i32, i32* %799
store i32 %800, i32* %5
%801 = load [4 x i32]*, [4 x i32]** %4
%802 = getelementptr inbounds [4 x i32], [4 x i32]* %801, i64 1
%803 = getelementptr inbounds [4 x i32], [4 x i32]* %802, i64 0, i64 0
%804 = load i32, i32* %803
%805 = load [4 x i32]*, [4 x i32]** %4
%806 = getelementptr inbounds [4 x i32], [4 x i32]* %805, i64 1
%807 = getelementptr inbounds [4 x i32], [4 x i32]* %806, i64 0, i64 2
store i32 %804, i32* %807
%808 = load i32, i32* %5
%809 = load [4 x i32]*, [4 x i32]** %4
%810 = getelementptr inbounds [4 x i32], [4 x i32]* %809, i64 1
%811 = getelementptr inbounds [4 x i32], [4 x i32]* %810, i64 0, i64 0
store i32 %808, i32* %811
%812 = load i32*, i32** %3
%813 = getelementptr inbounds i32, i32* %812, i64 0
%814 = load i32, i32* %813
%815 = load [4 x i32]*, [4 x i32]** %4
%816 = getelementptr inbounds [4 x i32], [4 x i32]* %815, i64 4
%817 = getelementptr inbounds [4 x i32], [4 x i32]* %816, i64 0, i64 0
%818 = load i32, i32* %817
%819 = xor i32 %818, %814
store i32 %819, i32* %817
%820 = load i32*, i32** %3
%821 = getelementptr inbounds i32, i32* %820, i64 1
%822 = load i32, i32* %821
%823 = load [4 x i32]*, [4 x i32]** %4
%824 = getelementptr inbounds [4 x i32], [4 x i32]* %823, i64 4
%825 = getelementptr inbounds [4 x i32], [4 x i32]* %824, i64 0, i64 1
%826 = load i32, i32* %825
%827 = xor i32 %826, %822
store i32 %827, i32* %825
%828 = load i32*, i32** %3
%829 = getelementptr inbounds i32, i32* %828, i64 2
%830 = load i32, i32* %829
%831 = load [4 x i32]*, [4 x i32]** %4
%832 = getelementptr inbounds [4 x i32], [4 x i32]* %831, i64 4
%833 = getelementptr inbounds [4 x i32], [4 x i32]* %832, i64 0, i64 2
%834 = load i32, i32* %833
%835 = xor i32 %834, %830
store i32 %835, i32* %833
%836 = load i32*, i32** %3
%837 = getelementptr inbounds i32, i32* %836, i64 3
%838 = load i32, i32* %837
%839 = load [4 x i32]*, [4 x i32]** %4
%840 = getelementptr inbounds [4 x i32], [4 x i32]* %839, i64 4
%841 = getelementptr inbounds [4 x i32], [4 x i32]* %840, i64 0, i64 3
%842 = load i32, i32* %841
%843 = xor i32 %842, %838
store i32 %843, i32* %841
%844 = load [4 x i32]*, [4 x i32]** %4
%845 = getelementptr inbounds [4 x i32], [4 x i32]* %844, i64 2
%846 = getelementptr inbounds [4 x i32], [4 x i32]* %845, i64 0, i64 0
%847 = load i32, i32* %846
%848 = load [4 x i32]*, [4 x i32]** %4
%849 = getelementptr inbounds [4 x i32], [4 x i32]* %848, i64 4
%850 = getelementptr inbounds [4 x i32], [4 x i32]* %849, i64 0, i64 0
%851 = load i32, i32* %850
%852 = xor i32 %851, %847
store i32 %852, i32* %850
%853 = load [4 x i32]*, [4 x i32]** %4
%854 = getelementptr inbounds [4 x i32], [4 x i32]* %853, i64 2
%855 = getelementptr inbounds [4 x i32], [4 x i32]* %854, i64 0, i64 1
%856 = load i32, i32* %855
%857 = load [4 x i32]*, [4 x i32]** %4
%858 = getelementptr inbounds [4 x i32], [4 x i32]* %857, i64 4
%859 = getelementptr inbounds [4 x i32], [4 x i32]* %858, i64 0, i64 1
%860 = load i32, i32* %859
%861 = xor i32 %860, %856
store i32 %861, i32* %859
%862 = load [4 x i32]*, [4 x i32]** %4
%863 = getelementptr inbounds [4 x i32], [4 x i32]* %862, i64 2
%864 = getelementptr inbounds [4 x i32], [4 x i32]* %863, i64 0, i64 2
%865 = load i32, i32* %864
%866 = load [4 x i32]*, [4 x i32]** %4
%867 = getelementptr inbounds [4 x i32], [4 x i32]* %866, i64 4
%868 = getelementptr inbounds [4 x i32], [4 x i32]* %867, i64 0, i64 2
%869 = load i32, i32* %868
%870 = xor i32 %869, %865
store i32 %870, i32* %868
%871 = load [4 x i32]*, [4 x i32]** %4
%872 = getelementptr inbounds [4 x i32], [4 x i32]* %871, i64 2
%873 = getelementptr inbounds [4 x i32], [4 x i32]* %872, i64 0, i64 3
%874 = load i32, i32* %873
%875 = load [4 x i32]*, [4 x i32]** %4
%876 = getelementptr inbounds [4 x i32], [4 x i32]* %875, i64 4
%877 = getelementptr inbounds [4 x i32], [4 x i32]* %876, i64 0, i64 3
%878 = load i32, i32* %877
%879 = xor i32 %878, %874
store i32 %879, i32* %877
%880 = load [4 x i32]*, [4 x i32]** %4
%881 = getelementptr inbounds [4 x i32], [4 x i32]* %880, i64 0
%882 = getelementptr inbounds [4 x i32], [4 x i32]* %881, i64 0, i64 0
%883 = load i32, i32* %882
%884 = load [4 x i32]*, [4 x i32]** %4
%885 = getelementptr inbounds [4 x i32], [4 x i32]* %884, i64 1
%886 = getelementptr inbounds [4 x i32], [4 x i32]* %885, i64 0, i64 0
%887 = load i32, i32* %886
%888 = and i32 %883, %887
%889 = load [4 x i32]*, [4 x i32]** %4
%890 = getelementptr inbounds [4 x i32], [4 x i32]* %889, i64 4
%891 = getelementptr inbounds [4 x i32], [4 x i32]* %890, i64 0, i64 0
%892 = load i32, i32* %891
%893 = xor i32 %892, %888
store i32 %893, i32* %891
%894 = load [4 x i32]*, [4 x i32]** %4
%895 = getelementptr inbounds [4 x i32], [4 x i32]* %894, i64 0
%896 = getelementptr inbounds [4 x i32], [4 x i32]* %895, i64 0, i64 1
%897 = load i32, i32* %896
%898 = load [4 x i32]*, [4 x i32]** %4
%899 = getelementptr inbounds [4 x i32], [4 x i32]* %898, i64 1
%900 = getelementptr inbounds [4 x i32], [4 x i32]* %899, i64 0, i64 1
%901 = load i32, i32* %900
%902 = and i32 %897, %901
%903 = load [4 x i32]*, [4 x i32]** %4
%904 = getelementptr inbounds [4 x i32], [4 x i32]* %903, i64 4
%905 = getelementptr inbounds [4 x i32], [4 x i32]* %904, i64 0, i64 1
%906 = load i32, i32* %905
%907 = xor i32 %906, %902
store i32 %907, i32* %905
%908 = load [4 x i32]*, [4 x i32]** %4
%909 = getelementptr inbounds [4 x i32], [4 x i32]* %908, i64 0
%910 = getelementptr inbounds [4 x i32], [4 x i32]* %909, i64 0, i64 2
%911 = load i32, i32* %910
%912 = load [4 x i32]*, [4 x i32]** %4
%913 = getelementptr inbounds [4 x i32], [4 x i32]* %912, i64 1
%914 = getelementptr inbounds [4 x i32], [4 x i32]* %913, i64 0, i64 2
%915 = load i32, i32* %914
%916 = and i32 %911, %915
%917 = load [4 x i32]*, [4 x i32]** %4
%918 = getelementptr inbounds [4 x i32], [4 x i32]* %917, i64 4
%919 = getelementptr inbounds [4 x i32], [4 x i32]* %918, i64 0, i64 2
%920 = load i32, i32* %919
%921 = xor i32 %920, %916
store i32 %921, i32* %919
%922 = load [4 x i32]*, [4 x i32]** %4
%923 = getelementptr inbounds [4 x i32], [4 x i32]* %922, i64 0
%924 = getelementptr inbounds [4 x i32], [4 x i32]* %923, i64 0, i64 3
%925 = load i32, i32* %924
%926 = load [4 x i32]*, [4 x i32]** %4
%927 = getelementptr inbounds [4 x i32], [4 x i32]* %926, i64 1
%928 = getelementptr inbounds [4 x i32], [4 x i32]* %927, i64 0, i64 3
%929 = load i32, i32* %928
%930 = and i32 %925, %929
%931 = load [4 x i32]*, [4 x i32]** %4
%932 = getelementptr inbounds [4 x i32], [4 x i32]* %931, i64 4
%933 = getelementptr inbounds [4 x i32], [4 x i32]* %932, i64 0, i64 3
%934 = load i32, i32* %933
%935 = xor i32 %934, %930
store i32 %935, i32* %933
%936 = load [4 x i32]*, [4 x i32]** %4
%937 = getelementptr inbounds [4 x i32], [4 x i32]* %936, i64 4
%938 = getelementptr inbounds [4 x i32], [4 x i32]* %937, i64 0, i64 0
%939 = load i32, i32* %938
%940 = shl i32 %939, 13
%941 = load [4 x i32]*, [4 x i32]** %4
%942 = getelementptr inbounds [4 x i32], [4 x i32]* %941, i64 4
%943 = getelementptr inbounds [4 x i32], [4 x i32]* %942, i64 0, i64 0
%944 = load i32, i32* %943
%945 = lshr i32 %944, 19
%946 = or i32 %940, %945
%947 = load [4 x i32]*, [4 x i32]** %4
%948 = getelementptr inbounds [4 x i32], [4 x i32]* %947, i64 4
%949 = getelementptr inbounds [4 x i32], [4 x i32]* %948, i64 0, i64 0
store i32 %946, i32* %949
%950 = load [4 x i32]*, [4 x i32]** %4
%951 = getelementptr inbounds [4 x i32], [4 x i32]* %950, i64 4
%952 = getelementptr inbounds [4 x i32], [4 x i32]* %951, i64 0, i64 1
%953 = load i32, i32* %952
%954 = shl i32 %953, 13
%955 = load [4 x i32]*, [4 x i32]** %4
%956 = getelementptr inbounds [4 x i32], [4 x i32]* %955, i64 4
%957 = getelementptr inbounds [4 x i32], [4 x i32]* %956, i64 0, i64 1
%958 = load i32, i32* %957
%959 = lshr i32 %958, 19
%960 = or i32 %954, %959
%961 = load [4 x i32]*, [4 x i32]** %4
%962 = getelementptr inbounds [4 x i32], [4 x i32]* %961, i64 4
%963 = getelementptr inbounds [4 x i32], [4 x i32]* %962, i64 0, i64 1
store i32 %960, i32* %963
%964 = load [4 x i32]*, [4 x i32]** %4
%965 = getelementptr inbounds [4 x i32], [4 x i32]* %964, i64 4
%966 = getelementptr inbounds [4 x i32], [4 x i32]* %965, i64 0, i64 2
%967 = load i32, i32* %966
%968 = shl i32 %967, 13
%969 = load [4 x i32]*, [4 x i32]** %4
%970 = getelementptr inbounds [4 x i32], [4 x i32]* %969, i64 4
%971 = getelementptr inbounds [4 x i32], [4 x i32]* %970, i64 0, i64 2
%972 = load i32, i32* %971
%973 = lshr i32 %972, 19
%974 = or i32 %968, %973
%975 = load [4 x i32]*, [4 x i32]** %4
%976 = getelementptr inbounds [4 x i32], [4 x i32]* %975, i64 4
%977 = getelementptr inbounds [4 x i32], [4 x i32]* %976, i64 0, i64 2
store i32 %974, i32* %977
%978 = load [4 x i32]*, [4 x i32]** %4
%979 = getelementptr inbounds [4 x i32], [4 x i32]* %978, i64 4
%980 = getelementptr inbounds [4 x i32], [4 x i32]* %979, i64 0, i64 3
%981 = load i32, i32* %980
%982 = shl i32 %981, 13
%983 = load [4 x i32]*, [4 x i32]** %4
%984 = getelementptr inbounds [4 x i32], [4 x i32]* %983, i64 4
%985 = getelementptr inbounds [4 x i32], [4 x i32]* %984, i64 0, i64 3
%986 = load i32, i32* %985
%987 = lshr i32 %986, 19
%988 = or i32 %982, %987
%989 = load [4 x i32]*, [4 x i32]** %4
%990 = getelementptr inbounds [4 x i32], [4 x i32]* %989, i64 4
%991 = getelementptr inbounds [4 x i32], [4 x i32]* %990, i64 0, i64 3
store i32 %988, i32* %991
%992 = load [4 x i32]*, [4 x i32]** %4
%993 = getelementptr inbounds [4 x i32], [4 x i32]* %992, i64 2
%994 = getelementptr inbounds [4 x i32], [4 x i32]* %993, i64 0, i64 3
%995 = load i32, i32* %994
store i32 %995, i32* %5
%996 = load [4 x i32]*, [4 x i32]** %4
%997 = getelementptr inbounds [4 x i32], [4 x i32]* %996, i64 2
%998 = getelementptr inbounds [4 x i32], [4 x i32]* %997, i64 0, i64 2
%999 = load i32, i32* %998
%1000 = load [4 x i32]*, [4 x i32]** %4
%1001 = getelementptr inbounds [4 x i32], [4 x i32]* %1000, i64 2
%1002 = getelementptr inbounds [4 x i32], [4 x i32]* %1001, i64 0, i64 3
store i32 %999, i32* %1002
%1003 = load [4 x i32]*, [4 x i32]** %4
%1004 = getelementptr inbounds [4 x i32], [4 x i32]* %1003, i64 2
%1005 = getelementptr inbounds [4 x i32], [4 x i32]* %1004, i64 0, i64 1
%1006 = load i32, i32* %1005
%1007 = load [4 x i32]*, [4 x i32]** %4
%1008 = getelementptr inbounds [4 x i32], [4 x i32]* %1007, i64 2
%1009 = getelementptr inbounds [4 x i32], [4 x i32]* %1008, i64 0, i64 2
store i32 %1006, i32* %1009
%1010 = load [4 x i32]*, [4 x i32]** %4
%1011 = getelementptr inbounds [4 x i32], [4 x i32]* %1010, i64 2
%1012 = getelementptr inbounds [4 x i32], [4 x i32]* %1011, i64 0, i64 0
%1013 = load i32, i32* %1012
%1014 = load [4 x i32]*, [4 x i32]** %4
%1015 = getelementptr inbounds [4 x i32], [4 x i32]* %1014, i64 2
%1016 = getelementptr inbounds [4 x i32], [4 x i32]* %1015, i64 0, i64 1
store i32 %1013, i32* %1016
%1017 = load i32, i32* %5
%1018 = load [4 x i32]*, [4 x i32]** %4
%1019 = getelementptr inbounds [4 x i32], [4 x i32]* %1018, i64 2
%1020 = getelementptr inbounds [4 x i32], [4 x i32]* %1019, i64 0, i64 0
store i32 %1017, i32* %1020
ret void
}

LLVM IR (-O2):
define void @morus_stateupdate(i32* nocapture %0, [4 x i32]* nocapture %1) {
%3 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 3, i64 0
%4 = load i32, i32* %3
%5 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 0, i64 0
%6 = load i32, i32* %5
%7 = xor i32 %6, %4
%8 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 3, i64 1
%9 = load i32, i32* %8
%10 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 0, i64 1
%11 = load i32, i32* %10
%12 = xor i32 %11, %9
%13 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 3, i64 2
%14 = load i32, i32* %13
%15 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 0, i64 2
%16 = load i32, i32* %15
%17 = xor i32 %16, %14
%18 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 3, i64 3
%19 = load i32, i32* %18
%20 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 0, i64 3
%21 = load i32, i32* %20
%22 = xor i32 %21, %19
%23 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 1, i64 0
%24 = load i32, i32* %23
%25 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 2, i64 0
%26 = load i32, i32* %25
%27 = and i32 %26, %24
%28 = xor i32 %27, %7
%29 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 1, i64 1
%30 = load i32, i32* %29
%31 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 2, i64 1
%32 = load i32, i32* %31
%33 = and i32 %32, %30
%34 = xor i32 %33, %12
%35 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 1, i64 2
%36 = load i32, i32* %35
%37 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 2, i64 2
%38 = load i32, i32* %37
%39 = and i32 %38, %36
%40 = xor i32 %39, %17
%41 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 1, i64 3
%42 = load i32, i32* %41
%43 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 2, i64 3
%44 = load i32, i32* %43
%45 = and i32 %44, %42
%46 = xor i32 %45, %22
%47 = tail call i32 @llvm.fshl.i32(i32 %28, i32 %28, i32 5)
store i32 %47, i32* %5
%48 = tail call i32 @llvm.fshl.i32(i32 %34, i32 %34, i32 5)
store i32 %48, i32* %10
%49 = tail call i32 @llvm.fshl.i32(i32 %40, i32 %40, i32 5)
store i32 %49, i32* %15
%50 = tail call i32 @llvm.fshl.i32(i32 %46, i32 %46, i32 5)
store i32 %50, i32* %20
store i32 %14, i32* %18
store i32 %9, i32* %13
store i32 %4, i32* %8
store i32 %19, i32* %3
%51 = load i32, i32* %0
%52 = xor i32 %51, %24
store i32 %52, i32* %23
%53 = getelementptr inbounds i32, i32* %0, i64 1
%54 = load i32, i32* %53
%55 = xor i32 %54, %30
store i32 %55, i32* %29
%56 = getelementptr inbounds i32, i32* %0, i64 2
%57 = load i32, i32* %56
%58 = xor i32 %57, %36
store i32 %58, i32* %35
%59 = getelementptr inbounds i32, i32* %0, i64 3
%60 = load i32, i32* %59
%61 = xor i32 %60, %42
%62 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 4, i64 0
%63 = load i32, i32* %62
%64 = xor i32 %63, %52
%65 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 4, i64 1
%66 = load i32, i32* %65
%67 = xor i32 %66, %55
%68 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 4, i64 2
%69 = load i32, i32* %68
%70 = xor i32 %69, %58
%71 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 4, i64 3
%72 = load i32, i32* %71
%73 = xor i32 %72, %61
%74 = and i32 %26, %19
%75 = xor i32 %64, %74
%76 = and i32 %32, %4
%77 = xor i32 %67, %76
%78 = and i32 %38, %9
%79 = xor i32 %70, %78
%80 = and i32 %44, %14
%81 = xor i32 %73, %80
%82 = tail call i32 @llvm.fshl.i32(i32 %75, i32 %75, i32 31)
store i32 %82, i32* %23
%83 = tail call i32 @llvm.fshl.i32(i32 %77, i32 %77, i32 31)
store i32 %83, i32* %29
%84 = tail call i32 @llvm.fshl.i32(i32 %79, i32 %79, i32 31)
store i32 %84, i32* %35
%85 = tail call i32 @llvm.fshl.i32(i32 %81, i32 %81, i32 31)
store i32 %85, i32* %41
store i32 %66, i32* %71
store i32 %72, i32* %65
store i32 %63, i32* %68
store i32 %69, i32* %62
%86 = load i32, i32* %0
%87 = xor i32 %86, %26
store i32 %87, i32* %25
%88 = load i32, i32* %53
%89 = xor i32 %88, %32
store i32 %89, i32* %31
%90 = load i32, i32* %56
%91 = xor i32 %90, %38
store i32 %91, i32* %37
%92 = load i32, i32* %59
%93 = xor i32 %92, %44
%94 = xor i32 %87, %47
%95 = xor i32 %89, %48
%96 = xor i32 %91, %49
%97 = xor i32 %93, %50
%98 = and i32 %69, %19
%99 = xor i32 %94, %98
%100 = and i32 %72, %4
%101 = xor i32 %95, %100
%102 = and i32 %63, %9
%103 = xor i32 %96, %102
%104 = and i32 %66, %14
%105 = xor i32 %97, %104
%106 = tail call i32 @llvm.fshl.i32(i32 %99, i32 %99, i32 7)
store i32 %106, i32* %25
%107 = tail call i32 @llvm.fshl.i32(i32 %101, i32 %101, i32 7)
store i32 %107, i32* %31
%108 = tail call i32 @llvm.fshl.i32(i32 %103, i32 %103, i32 7)
store i32 %108, i32* %37
%109 = tail call i32 @llvm.fshl.i32(i32 %105, i32 %105, i32 7)
store i32 %109, i32* %43
store i32 %48, i32* %5
store i32 %49, i32* %10
store i32 %50, i32* %15
store i32 %47, i32* %20
%110 = load i32, i32* %0
%111 = xor i32 %110, %19
store i32 %111, i32* %3
%112 = load i32, i32* %53
%113 = xor i32 %112, %4
store i32 %113, i32* %8
%114 = load i32, i32* %56
%115 = xor i32 %114, %9
store i32 %115, i32* %13
%116 = load i32, i32* %59
%117 = xor i32 %116, %14
%118 = xor i32 %111, %82
%119 = xor i32 %113, %83
%120 = xor i32 %115, %84
%121 = xor i32 %117, %85
%122 = and i32 %69, %48
%123 = xor i32 %118, %122
%124 = and i32 %72, %49
%125 = xor i32 %119, %124
%126 = and i32 %63, %50
%127 = xor i32 %120, %126
%128 = and i32 %66, %47
%129 = xor i32 %121, %128
%130 = tail call i32 @llvm.fshl.i32(i32 %123, i32 %123, i32 22)
store i32 %130, i32* %3
%131 = tail call i32 @llvm.fshl.i32(i32 %125, i32 %125, i32 22)
store i32 %131, i32* %8
%132 = tail call i32 @llvm.fshl.i32(i32 %127, i32 %127, i32 22)
store i32 %132, i32* %13
%133 = tail call i32 @llvm.fshl.i32(i32 %129, i32 %129, i32 22)
store i32 %133, i32* %18
store i32 %83, i32* %41
store i32 %85, i32* %29
store i32 %82, i32* %35
store i32 %84, i32* %23
%134 = load i32, i32* %0
%135 = xor i32 %134, %69
store i32 %135, i32* %62
%136 = load i32, i32* %53
%137 = xor i32 %136, %72
store i32 %137, i32* %65
%138 = load i32, i32* %56
%139 = xor i32 %138, %63
store i32 %139, i32* %68
%140 = load i32, i32* %59
%141 = xor i32 %140, %66
%142 = xor i32 %135, %106
%143 = xor i32 %137, %107
%144 = xor i32 %139, %108
%145 = xor i32 %141, %109
%146 = and i32 %84, %48
%147 = xor i32 %142, %146
%148 = and i32 %85, %49
%149 = xor i32 %143, %148
%150 = and i32 %82, %50
%151 = xor i32 %144, %150
%152 = and i32 %83, %47
%153 = xor i32 %145, %152
%154 = tail call i32 @llvm.fshl.i32(i32 %147, i32 %147, i32 13)
store i32 %154, i32* %62
%155 = tail call i32 @llvm.fshl.i32(i32 %149, i32 %149, i32 13)
store i32 %155, i32* %65
%156 = tail call i32 @llvm.fshl.i32(i32 %151, i32 %151, i32 13)
store i32 %156, i32* %68
%157 = tail call i32 @llvm.fshl.i32(i32 %153, i32 %153, i32 13)
store i32 %157, i32* %71
store i32 %108, i32* %43
store i32 %107, i32* %37
store i32 %106, i32* %31
store i32 %109, i32* %25
ret void
}