// File: /workspace/github_c_makefile_star2_O3/jogolden[P]ps4flashtool/aes.c
// Function: InvCipher
static void InvCipher(state_t* state,uint8_t* RoundKey)
{
  uint8_t round = 0;

  // Add the First round key to the state before starting the rounds.
  AddRoundKey(Nr, state, RoundKey); 

  // There will be Nr rounds.
  // The first Nr-1 rounds are identical.
  // These Nr-1 rounds are executed in the loop below.
  for (round = (Nr - 1); round > 0; --round)
  {
    InvShiftRows(state);
    InvSubBytes(state);
    AddRoundKey(round, state, RoundKey);
    InvMixColumns(state);
  }
  
  // The last round is given below.
  // The MixColumns function is not here in the last round.
  InvShiftRows(state);
  InvSubBytes(state);
  AddRoundKey(0, state, RoundKey);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
leaq 0xa0(%rsi), %rax
xorl %ecx, %ecx
movq %rdi, %rdx
xorl %esi, %esi
movb (%rax,%rsi), %dil
xorb %dil, (%rdx,%rsi)
incq %rsi
cmpq $0x4, %rsi
jne 0x2679
incq %rcx
addq $0x4, %rdx
addq $0x4, %rax
cmpq $0x4, %rcx
jne 0x2677
leaq 0x90(%rbx), %r12
movl $0x9, %r13d
leaq 0x5a91(%rip), %r15      # 0x8140
movq %r14, %rdi
callq 0x2b71
movq %r14, %rax
xorl %ecx, %ecx
xorl %edx, %edx
movzbl (%rax,%rdx,4), %esi
movb (%rsi,%r15), %sil
movb %sil, (%rax,%rdx,4)
incq %rdx
cmpq $0x4, %rdx
jne 0x26be
incq %rcx
incq %rax
cmpq $0x4, %rcx
jne 0x26bc
movq %r12, %rax
movq %r14, %rcx
xorl %edx, %edx
xorl %esi, %esi
movb (%rax,%rsi), %dil
xorb %dil, (%rcx,%rsi)
incq %rsi
cmpq $0x4, %rsi
jne 0x26e9
incq %rdx
addq $0x4, %rcx
addq $0x4, %rax
cmpq $0x4, %rdx
jne 0x26e7
movzbl (%r14), %eax
movzbl 0x4(%r14), %ecx
movzbl 0x8(%r14), %edx
shll $0x8, %ecx
orl %eax, %ecx
shll $0x10, %edx
orl %ecx, %edx
movzbl 0xc(%r14), %eax
shll $0x18, %eax
orl %edx, %eax
movd %eax, %xmm3
movzbl 0x1(%r14), %eax
movzbl 0x5(%r14), %ecx
movzbl 0x9(%r14), %edx
shll $0x8, %ecx
orl %eax, %ecx
shll $0x10, %edx
orl %ecx, %edx
movzbl 0xd(%r14), %eax
shll $0x18, %eax
orl %edx, %eax
movd %eax, %xmm1
movzbl 0x2(%r14), %eax
movzbl 0x6(%r14), %ecx
movzbl 0xa(%r14), %edx
shll $0x8, %ecx
orl %eax, %ecx
shll $0x10, %edx
orl %ecx, %edx
movzbl 0xe(%r14), %eax
shll $0x18, %eax
orl %edx, %eax
movd %eax, %xmm2
movzbl 0x3(%r14), %eax
movzbl 0x7(%r14), %ecx
movzbl 0xb(%r14), %edx
shll $0x8, %ecx
orl %eax, %ecx
shll $0x10, %edx
orl %ecx, %edx
movzbl 0xf(%r14), %eax
shll $0x18, %eax
orl %edx, %eax
movd %eax, %xmm4
pxor %xmm0, %xmm0
pcmpgtb %xmm3, %xmm0
movdqa %xmm1, %xmm6
pxor %xmm7, %xmm7
pcmpgtb %xmm1, %xmm7
movdqa %xmm2, %xmm5
pxor %xmm1, %xmm5
movdqa %xmm2, %xmm8
pxor %xmm3, %xmm8
pxor %xmm3, %xmm1
paddb %xmm3, %xmm3
movdqa 0x5833(%rip), %xmm13    # 0x8010
pand %xmm13, %xmm0
pxor %xmm3, %xmm0
movdqa %xmm0, %xmm11
paddb %xmm0, %xmm11
pxor %xmm10, %xmm10
pcmpgtb %xmm3, %xmm10
pand %xmm13, %xmm10
pxor %xmm11, %xmm10
pxor %xmm9, %xmm9
pcmpgtb %xmm11, %xmm9
paddb %xmm6, %xmm6
pand %xmm13, %xmm7
pxor %xmm6, %xmm7
pxor %xmm3, %xmm3
pcmpgtb %xmm2, %xmm3
pxor %xmm4, %xmm5
pxor %xmm0, %xmm5
pxor %xmm2, %xmm0
movdqa %xmm2, %xmm11
paddb %xmm2, %xmm11
pand %xmm13, %xmm3
pxor %xmm11, %xmm3
movdqa %xmm3, %xmm12
pxor %xmm2, %xmm2
pcmpgtb %xmm4, %xmm2
pxor %xmm4, %xmm8
pxor %xmm7, %xmm8
pxor %xmm3, %xmm8
pxor %xmm4, %xmm3
paddb %xmm4, %xmm4
pand %xmm13, %xmm2
pxor %xmm4, %xmm2
pxor %xmm7, %xmm5
pxor %xmm10, %xmm5
pxor %xmm2, %xmm1
pxor %xmm1, %xmm3
pxor %xmm10, %xmm3
paddb %xmm10, %xmm10
pand %xmm13, %xmm9
pxor %xmm10, %xmm9
paddb %xmm7, %xmm7
pxor %xmm10, %xmm10
pcmpgtb %xmm6, %xmm10
pand %xmm13, %xmm10
pxor %xmm7, %xmm10
pxor %xmm6, %xmm6
pcmpgtb %xmm7, %xmm6
pxor %xmm1, %xmm0
pxor %xmm10, %xmm8
pxor %xmm10, %xmm0
paddb %xmm10, %xmm10
pand %xmm13, %xmm6
pxor %xmm10, %xmm6
paddb %xmm12, %xmm12
pxor %xmm7, %xmm7
pcmpgtb %xmm11, %xmm7
pand %xmm13, %xmm7
pxor %xmm12, %xmm7
pxor %xmm1, %xmm1
pcmpgtb %xmm12, %xmm1
pxor %xmm7, %xmm5
pxor %xmm7, %xmm3
paddb %xmm7, %xmm7
pand %xmm13, %xmm1
pxor %xmm7, %xmm1
pxor %xmm6, %xmm1
paddb %xmm2, %xmm2
pxor %xmm6, %xmm6
pcmpgtb %xmm4, %xmm6
pand %xmm13, %xmm6
pxor %xmm2, %xmm6
pxor %xmm4, %xmm4
pcmpgtb %xmm2, %xmm4
pxor %xmm6, %xmm8
pxor %xmm6, %xmm0
paddb %xmm6, %xmm6
pand %xmm13, %xmm4
pxor %xmm6, %xmm4
pxor %xmm9, %xmm5
pxor %xmm1, %xmm5
pxor %xmm4, %xmm5
pxor %xmm9, %xmm8
pxor %xmm1, %xmm8
pxor %xmm4, %xmm8
punpckldq %xmm8, %xmm5    # xmm5 = xmm5[0],xmm8[0],xmm5[1],xmm8[1]
pxor %xmm9, %xmm3
pxor %xmm9, %xmm0
pxor %xmm1, %xmm3
pxor %xmm1, %xmm0
pxor %xmm4, %xmm3
pxor %xmm4, %xmm0
punpckldq %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
pxor %xmm2, %xmm2
punpcklbw %xmm2, %xmm3    # xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
pshufd $0xd7, %xmm3, %xmm0     # xmm0 = xmm3[3,1,1,3]
pshuflw $0x24, %xmm0, %xmm0     # xmm0 = xmm0[0,1,2,0,4,5,6,7]
pshufhw $0xd4, %xmm0, %xmm0     # xmm0 = xmm0[0,1,2,3,4,5,5,7]
pshufd $0x28, %xmm3, %xmm1     # xmm1 = xmm3[0,2,2,0]
pshuflw $0x84, %xmm1, %xmm1     # xmm1 = xmm1[0,1,0,2,4,5,6,7]
pshufhw $0x74, %xmm1, %xmm1     # xmm1 = xmm1[0,1,2,3,4,5,7,5]
packuswb %xmm0, %xmm1
movdqa 0x5670(%rip), %xmm3     # 0x8020
movdqa %xmm3, %xmm0
pandn %xmm1, %xmm0
punpcklbw %xmm2, %xmm5    # xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1],xmm5[2],xmm2[2],xmm5[3],xmm2[3],xmm5[4],xmm2[4],xmm5[5],xmm2[5],xmm5[6],xmm2[6],xmm5[7],xmm2[7]
pshufd $0xd7, %xmm5, %xmm1     # xmm1 = xmm5[3,1,1,3]
pshuflw $0xe2, %xmm1, %xmm1     # xmm1 = xmm1[2,0,2,3,4,5,6,7]
pshufhw $0xed, %xmm1, %xmm1     # xmm1 = xmm1[0,1,2,3,5,7,6,7]
pshufd $0x28, %xmm5, %xmm2     # xmm2 = xmm5[0,2,2,0]
pshuflw $0xe8, %xmm2, %xmm2     # xmm2 = xmm2[0,2,2,3,4,5,6,7]
pshufhw $0xe7, %xmm2, %xmm2     # xmm2 = xmm2[0,1,2,3,7,5,6,7]
packuswb %xmm1, %xmm2
pand %xmm3, %xmm2
por %xmm0, %xmm2
movdqu %xmm2, (%r14)
addq $-0x10, %r12
decq %r13
jne 0x26af
movq %r14, %rdi
callq 0x2b71
xorl %eax, %eax
movq %r14, %rcx
xorl %edx, %edx
movzbl (%rcx,%rdx,4), %esi
movb (%rsi,%r15), %sil
movb %sil, (%rcx,%rdx,4)
incq %rdx
cmpq $0x4, %rdx
jne 0x2a07
incq %rax
incq %rcx
cmpq $0x4, %rax
jne 0x2a05
xorl %eax, %eax
xorl %ecx, %ecx
movb (%rbx,%rcx), %dl
xorb %dl, (%r14,%rcx)
incq %rcx
cmpq $0x4, %rcx
jne 0x2a2c
incq %rax
addq $0x4, %r14
addq $0x4, %rbx
cmpq $0x4, %rax
jne 0x2a2a
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq