// File: bakeunbin[P]inverse_mix_column_precalculated/invmc.cpp
// Function: aes::soft::inv_mc_pre(unsigned char*)
void inv_mc_pre (uint8_t * data) noexcept
	{
		for (int i = 0 ; i < 4 ; i ++)
		{	// b=2*a, c=4*a, d=9*a
			uint8_t a [4], b [4], c [4], d [4], h;

			for (int j = 0 ; j < 4 ; j ++)
			{
				a [j] = data [4 * i + j];

				h = (uint8_t) ((signed char) a [j] >> 7);
				b [j] = (a [j] << 1) ^ (0x1b & h);

				h = (uint8_t) ((signed char) b [j] >> 7);
				c [j] = (b [j] << 1) ^ (0x1b & h);

				h = (uint8_t) ((signed char) c [j] >> 7);
				d [j] = (c [j] << 1) ^ (0x1b & h) ^ a [j];
			}
			
			data [4 * i + 0] = (d [0] ^ c [0] ^ b[0] ^ a [0]) ^ (d [1] ^ b [1]) ^ (d [2] ^ c [2]) ^ d [3];
			data [4 * i + 1] = d [0] ^ (d [1] ^ c [1] ^ b [1] ^ a [1]) ^ (d [2] ^ b [2]) ^ (d [3] ^ c [3]);
			data [4 * i + 2] = (d [0] ^ c [0]) ^ d [1] ^ (d [2] ^ c [2] ^ b [2] ^ a [2]) ^ (d [3] ^ b [3]);
			data [4 * i + 3] = (d [0] ^ b [0]) ^ (d [1] ^ c [1]) ^ d [2] ^ (d [3] ^ c [3] ^ b [3] ^ a [3]);
		}
	}

// Assembly:
movq %rdi, -0x8(%rsp)
movl $0x0, -0xc(%rsp)
cmpl $0x4, -0xc(%rsp)
jge 0x273c
movl $0x0, -0x24(%rsp)
cmpl $0x4, -0x24(%rsp)
jge 0x25dc
movq -0x8(%rsp), %rax
movl -0xc(%rsp), %ecx
shll $0x2, %ecx
addl -0x24(%rsp), %ecx
movslq %ecx, %rcx
movb (%rax,%rcx), %cl
movslq -0x24(%rsp), %rax
movb %cl, -0x10(%rsp,%rax)
movslq -0x24(%rsp), %rax
movsbl -0x10(%rsp,%rax), %eax
sarl $0x7, %eax
movb %al, -0x1d(%rsp)
movslq -0x24(%rsp), %rax
movzbl -0x10(%rsp,%rax), %eax
shll %eax
movzbl -0x1d(%rsp), %ecx
andl $0x1b, %ecx
xorl %ecx, %eax
movb %al, %cl
movslq -0x24(%rsp), %rax
movb %cl, -0x14(%rsp,%rax)
movslq -0x24(%rsp), %rax
movsbl -0x14(%rsp,%rax), %eax
sarl $0x7, %eax
movb %al, -0x1d(%rsp)
movslq -0x24(%rsp), %rax
movzbl -0x14(%rsp,%rax), %eax
shll %eax
movzbl -0x1d(%rsp), %ecx
andl $0x1b, %ecx
xorl %ecx, %eax
movb %al, %cl
movslq -0x24(%rsp), %rax
movb %cl, -0x18(%rsp,%rax)
movslq -0x24(%rsp), %rax
movsbl -0x18(%rsp,%rax), %eax
sarl $0x7, %eax
movb %al, -0x1d(%rsp)
movslq -0x24(%rsp), %rax
movzbl -0x18(%rsp,%rax), %eax
shll %eax
movzbl -0x1d(%rsp), %ecx
andl $0x1b, %ecx
xorl %ecx, %eax
movslq -0x24(%rsp), %rcx
movzbl -0x10(%rsp,%rcx), %ecx
xorl %ecx, %eax
movb %al, %cl
movslq -0x24(%rsp), %rax
movb %cl, -0x1c(%rsp,%rax)
movl -0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rsp)
jmp 0x2500
movzbl -0x1c(%rsp), %eax
movzbl -0x18(%rsp), %ecx
xorl %ecx, %eax
movzbl -0x14(%rsp), %ecx
xorl %ecx, %eax
movzbl -0x10(%rsp), %ecx
xorl %ecx, %eax
movzbl -0x1b(%rsp), %ecx
movzbl -0x13(%rsp), %edx
xorl %edx, %ecx
xorl %ecx, %eax
movzbl -0x1a(%rsp), %ecx
movzbl -0x16(%rsp), %edx
xorl %edx, %ecx
xorl %ecx, %eax
movzbl -0x19(%rsp), %ecx
xorl %ecx, %eax
movb %al, %dl
movq -0x8(%rsp), %rax
movl -0xc(%rsp), %ecx
shll $0x2, %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movzbl -0x1c(%rsp), %eax
movzbl -0x1b(%rsp), %ecx
movzbl -0x17(%rsp), %edx
xorl %edx, %ecx
movzbl -0x13(%rsp), %edx
xorl %edx, %ecx
movzbl -0xf(%rsp), %edx
xorl %edx, %ecx
xorl %ecx, %eax
movzbl -0x1a(%rsp), %ecx
movzbl -0x12(%rsp), %edx
xorl %edx, %ecx
xorl %ecx, %eax
movzbl -0x19(%rsp), %ecx
movzbl -0x15(%rsp), %edx
xorl %edx, %ecx
xorl %ecx, %eax
movb %al, %dl
movq -0x8(%rsp), %rax
movl -0xc(%rsp), %ecx
shll $0x2, %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movzbl -0x1c(%rsp), %eax
movzbl -0x18(%rsp), %ecx
xorl %ecx, %eax
movzbl -0x1b(%rsp), %ecx
xorl %ecx, %eax
movzbl -0x1a(%rsp), %ecx
movzbl -0x16(%rsp), %edx
xorl %edx, %ecx
movzbl -0x12(%rsp), %edx
xorl %edx, %ecx
movzbl -0xe(%rsp), %edx
xorl %edx, %ecx
xorl %ecx, %eax
movzbl -0x19(%rsp), %ecx
movzbl -0x11(%rsp), %edx
xorl %edx, %ecx
xorl %ecx, %eax
movb %al, %dl
movq -0x8(%rsp), %rax
movl -0xc(%rsp), %ecx
shll $0x2, %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movzbl -0x1c(%rsp), %eax
movzbl -0x14(%rsp), %ecx
xorl %ecx, %eax
movzbl -0x1b(%rsp), %ecx
movzbl -0x17(%rsp), %edx
xorl %edx, %ecx
xorl %ecx, %eax
movzbl -0x1a(%rsp), %ecx
xorl %ecx, %eax
movzbl -0x19(%rsp), %ecx
movzbl -0x15(%rsp), %edx
xorl %edx, %ecx
movzbl -0x11(%rsp), %edx
xorl %edx, %ecx
movzbl -0xd(%rsp), %edx
xorl %edx, %ecx
xorl %ecx, %eax
movb %al, %dl
movq -0x8(%rsp), %rax
movl -0xc(%rsp), %ecx
shll $0x2, %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl -0xc(%rsp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rsp)
jmp 0x24ed
retq
nopl (%rax)