// File: bakeunbin[P]inverse_mix_column_precalculated/invmc.cpp
// Function: aes::soft::inv_mc_gmul(unsigned char*)
void inv_mc_gmul (uint8_t * data) noexcept
	{
		for (int i = 0 ; i < 4 ; i ++)
		{
			uint8_t a [4];

			memcpy (a, data + i * 4, 4);
			
			data [i * 4 + 0] = gmul (14, a [0]) ^ gmul (11, a [1]) ^ gmul (13, a [2]) ^ gmul (9, a [3]);
			data [i * 4 + 1] = gmul (9, a [0]) ^ gmul (14, a [1]) ^ gmul (11, a [2]) ^ gmul (13, a [3]);
			data [i * 4 + 2] = gmul (13, a [0]) ^ gmul (9, a [1]) ^ gmul (14, a [2]) ^ gmul (11, a [3]);
			data [i * 4 + 3] = gmul (11, a [0]) ^ gmul (13, a [1]) ^ gmul (9, a [2]) ^ gmul (14, a [3]);
		}
	}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movl $0x0, 0x3c(%rsp)
cmpl $0x4, 0x3c(%rsp)
jge 0x298e
movq 0x40(%rsp), %rax
movl 0x3c(%rsp), %ecx
shll $0x2, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx), %eax
movl %eax, 0x38(%rsp)
movl $0xe, %edi
movzbl 0x38(%rsp), %esi
callq 0x2330
movzbl %al, %eax
movl %eax, 0x8(%rsp)
movl $0xb, %edi
movzbl 0x39(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x8(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movl %eax, 0xc(%rsp)
movl $0xd, %edi
movzbl 0x3a(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0xc(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movl %eax, 0x10(%rsp)
movl $0x9, %edi
movzbl 0x3b(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x10(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movb %al, %dl
movq 0x40(%rsp), %rax
movl 0x3c(%rsp), %ecx
shll $0x2, %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl $0x9, %edi
movzbl 0x38(%rsp), %esi
callq 0x2330
movzbl %al, %eax
movl %eax, 0x14(%rsp)
movl $0xe, %edi
movzbl 0x39(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x14(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movl %eax, 0x18(%rsp)
movl $0xb, %edi
movzbl 0x3a(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x18(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movl %eax, 0x1c(%rsp)
movl $0xd, %edi
movzbl 0x3b(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x1c(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movb %al, %dl
movq 0x40(%rsp), %rax
movl 0x3c(%rsp), %ecx
shll $0x2, %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl $0xd, %edi
movzbl 0x38(%rsp), %esi
callq 0x2330
movzbl %al, %eax
movl %eax, 0x20(%rsp)
movl $0x9, %edi
movzbl 0x39(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x20(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movl %eax, 0x24(%rsp)
movl $0xe, %edi
movzbl 0x3a(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x24(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movl %eax, 0x28(%rsp)
movl $0xb, %edi
movzbl 0x3b(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x28(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movb %al, %dl
movq 0x40(%rsp), %rax
movl 0x3c(%rsp), %ecx
shll $0x2, %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl $0xb, %edi
movzbl 0x38(%rsp), %esi
callq 0x2330
movzbl %al, %eax
movl %eax, 0x2c(%rsp)
movl $0xd, %edi
movzbl 0x39(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x2c(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movl %eax, 0x30(%rsp)
movl $0x9, %edi
movzbl 0x3a(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x30(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movl %eax, 0x34(%rsp)
movl $0xe, %edi
movzbl 0x3b(%rsp), %esi
callq 0x2330
movb %al, %cl
movl 0x34(%rsp), %eax
movzbl %cl, %ecx
xorl %ecx, %eax
movb %al, %dl
movq 0x40(%rsp), %rax
movl 0x3c(%rsp), %ecx
shll $0x2, %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl 0x3c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3c(%rsp)
jmp 0x2751
addq $0x48, %rsp
retq
nopw %cs:(%rax,%rax)