// File: /workspace/github_c_makefile_star2_O1/mjosaarinen[P]brutus/crypto_aead/primatesv1hanuman120/ref/primate.cpp
// Function: MixColumns(unsigned char*)
void MixColumns(unsigned char *state) //MixColumns operation on the state
{
	unsigned char tmp[StateSize];
	for(int p=0; p<NumberRows; p++){
		for(int i=0; i<NumberColumns; i++){
			for(int j=0; j<(NumberRows-1); j++)
				tmp[NumberColumns*j+i]=state[NumberColumns*(j+1)+i];
			tmp[NumberColumns*6+i]=state[i]^T2(state[NumberColumns*1+i])^T15(state[NumberColumns*2+i])^T9(state[NumberColumns*3+i])^T9(state[NumberColumns*4+i])^T15(state[NumberColumns*5+i])^T2(state[NumberColumns*6+i]);
		}
		for(int j=0; j<StateSize; j++)
			state[j]=tmp[j];
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
leaq 0x8(%rdi), %rax
xorl %ecx, %ecx
leaq -0x40(%rsp), %rdx
vpbroadcastw 0x119a(%rip), %xmm0 # 0x3184
vpbroadcastw 0x1193(%rip), %xmm1 # 0x3186
vpbroadcastb 0x1184(%rip), %xmm2 # 0x3180
vpbroadcastb 0x117c(%rip), %xmm3 # 0x3181
vpbroadcastb 0x1174(%rip), %xmm4 # 0x3182
vpbroadcastb 0x116c(%rip), %xmm5 # 0x3183
vmovd 0x1151(%rip), %xmm6     # 0x3170
movq %rax, %rsi
movq %rdx, %r8
xorl %r9d, %r9d
xorl %r10d, %r10d
movb (%rsi,%r10,8), %r11b
movb %r11b, (%r8,%r10,8)
leaq 0x1(%r10), %r11
movq %r11, %r10
cmpq $0x6, %r11
jne 0x202b
movb 0x10(%rdi,%r9), %r10b
movb 0x18(%rdi,%r9), %r14b
leal (,%r14,8), %r11d
andb $0x18, %r11b
vmovd %r14d, %xmm7
vmovd %r10d, %xmm8
movzbl 0x8(%rdi,%r9), %ebx
vmovd %ebx, %xmm9
vpinsrb $0x1, %r10d, %xmm9, %xmm9
xorb %r14b, %r10b
shlb $0x4, %r14b
sarb $0x7, %r14b
andb $0xa, %r14b
movb 0x20(%rdi,%r9), %r12b
leal (,%r12,8), %r15d
vpinsrb $0x1, %r12d, %xmm7, %xmm7
andb $0x18, %r15b
movb 0x28(%rdi,%r9), %bpl
vpinsrb $0x1, %ebp, %xmm8, %xmm8
vpinsrb $0x2, %ebp, %xmm9, %xmm9
xorb %r12b, %bpl
shlb $0x4, %r12b
sarb $0x7, %r12b
andb $0xa, %r12b
vpunpcklbw %xmm7, %xmm7, %xmm7 # xmm7 = xmm7[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
vmovd %r14d, %xmm10
vpinsrb $0x1, %r11d, %xmm10, %xmm10
vpinsrb $0x2, %r12d, %xmm10, %xmm10
vpinsrb $0x3, %r15d, %xmm10, %xmm10
vptestnmb %xmm0, %xmm7, %k1
vpor %xmm1, %xmm10, %xmm7
vmovdqu8 %xmm10, %xmm7 {%k1}
vpaddb %xmm8, %xmm8, %xmm10
vpand %xmm2, %xmm10, %xmm10
vptestnmb %xmm3, %xmm8, %k1
vpxor %xmm4, %xmm10, %xmm11
vmovdqu8 %xmm10, %xmm11 {%k1}
vpaddb %xmm11, %xmm11, %xmm10
vpand %xmm2, %xmm10, %xmm10
vptestnmb %xmm5, %xmm8, %k1
vpxor %xmm4, %xmm10, %xmm8
vmovdqu8 %xmm10, %xmm8 {%k1}
vpaddb %xmm8, %xmm8, %xmm10
vpand %xmm2, %xmm10, %xmm10
movzbl 0x30(%rdi,%r9), %r11d
vpinsrb $0x3, %r11d, %xmm9, %xmm9
vptestmb %xmm6, %xmm9, %k1
vmovdqu8 %xmm4, %xmm9 {%k1} {z}
vpsrld $0x10, %xmm9, %xmm12
vpxor %xmm12, %xmm9, %xmm9
vpsrlw $0x8, %xmm9, %xmm12
vpxor %xmm12, %xmm9, %xmm9
vmovd %xmm9, %r14d
vpsrld $0x10, %xmm7, %xmm9
vpxor %xmm7, %xmm9, %xmm7
vpsrlw $0x8, %xmm7, %xmm9
vpxor %xmm7, %xmm9, %xmm7
vmovd %xmm7, %r15d
xorl %r14d, %r15d
xorb (%rdi,%r9), %r15b
vpxor %xmm8, %xmm11, %xmm7
vpextrb $0x1, %xmm7, %r14d
vmovd %xmm7, %r12d
xorl %r11d, %ebx
addb %bl, %bl
andb $0x1e, %bl
vpsrlw $0x8, %xmm10, %xmm7
vpxor %xmm7, %xmm10, %xmm7
vmovd %xmm7, %r11d
xorb %r12b, %bpl
xorb %r10b, %bpl
xorb %r14b, %bl
xorb %r11b, %bl
xorb %bpl, %bl
xorb %r15b, %bl
movb %bl, -0x10(%rsp,%r9)
incq %r9
incq %r8
incq %rsi
cmpq $0x8, %r9
jne 0x2028
vmovdqu -0x40(%rsp), %ymm7
vmovdqu -0x28(%rsp), %ymm8
vmovdqu %ymm8, 0x18(%rdi)
vmovdqu %ymm7, (%rdi)
incl %ecx
cmpl $0x7, %ecx
jne 0x201f
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
vzeroupper
retq