// File: DiplIngFrankGerlach[P]MST/./aes/aes.c
// Function: MixColumns
void MixColumns(BYTE state[][4])
{
	BYTE col[4];

	// Column 1
	col[0] = state[0][0];
	col[1] = state[1][0];
	col[2] = state[2][0];
	col[3] = state[3][0];
	state[0][0] = gf_mul[col[0]][0];
	state[0][0] ^= gf_mul[col[1]][1];
	state[0][0] ^= col[2];
	state[0][0] ^= col[3];
	state[1][0] = col[0];
	state[1][0] ^= gf_mul[col[1]][0];
	state[1][0] ^= gf_mul[col[2]][1];
	state[1][0] ^= col[3];
	state[2][0] = col[0];
	state[2][0] ^= col[1];
	state[2][0] ^= gf_mul[col[2]][0];
	state[2][0] ^= gf_mul[col[3]][1];
	state[3][0] = gf_mul[col[0]][1];
	state[3][0] ^= col[1];
	state[3][0] ^= col[2];
	state[3][0] ^= gf_mul[col[3]][0];
	// Column 2
	col[0] = state[0][1];
	col[1] = state[1][1];
	col[2] = state[2][1];
	col[3] = state[3][1];
	state[0][1] = gf_mul[col[0]][0];
	state[0][1] ^= gf_mul[col[1]][1];
	state[0][1] ^= col[2];
	state[0][1] ^= col[3];
	state[1][1] = col[0];
	state[1][1] ^= gf_mul[col[1]][0];
	state[1][1] ^= gf_mul[col[2]][1];
	state[1][1] ^= col[3];
	state[2][1] = col[0];
	state[2][1] ^= col[1];
	state[2][1] ^= gf_mul[col[2]][0];
	state[2][1] ^= gf_mul[col[3]][1];
	state[3][1] = gf_mul[col[0]][1];
	state[3][1] ^= col[1];
	state[3][1] ^= col[2];
	state[3][1] ^= gf_mul[col[3]][0];
	// Column 3
	col[0] = state[0][2];
	col[1] = state[1][2];
	col[2] = state[2][2];
	col[3] = state[3][2];
	state[0][2] = gf_mul[col[0]][0];
	state[0][2] ^= gf_mul[col[1]][1];
	state[0][2] ^= col[2];
	state[0][2] ^= col[3];
	state[1][2] = col[0];
	state[1][2] ^= gf_mul[col[1]][0];
	state[1][2] ^= gf_mul[col[2]][1];
	state[1][2] ^= col[3];
	state[2][2] = col[0];
	state[2][2] ^= col[1];
	state[2][2] ^= gf_mul[col[2]][0];
	state[2][2] ^= gf_mul[col[3]][1];
	state[3][2] = gf_mul[col[0]][1];
	state[3][2] ^= col[1];
	state[3][2] ^= col[2];
	state[3][2] ^= gf_mul[col[3]][0];
	// Column 4
	col[0] = state[0][3];
	col[1] = state[1][3];
	col[2] = state[2][3];
	col[3] = state[3][3];
	state[0][3] = gf_mul[col[0]][0];
	state[0][3] ^= gf_mul[col[1]][1];
	state[0][3] ^= col[2];
	state[0][3] ^= col[3];
	state[1][3] = col[0];
	state[1][3] ^= gf_mul[col[1]][0];
	state[1][3] ^= gf_mul[col[2]][1];
	state[1][3] ^= col[3];
	state[2][3] = col[0];
	state[2][3] ^= col[1];
	state[2][3] ^= gf_mul[col[2]][0];
	state[2][3] ^= gf_mul[col[3]][1];
	state[3][3] = gf_mul[col[0]][1];
	state[3][3] ^= col[1];
	state[3][3] ^= col[2];
	state[3][3] ^= gf_mul[col[3]][0];
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movb (%rax), %al
movb %al, -0xc(%rbp)
movq -0x8(%rbp), %rax
movb 0x4(%rax), %al
movb %al, -0xb(%rbp)
movq -0x8(%rbp), %rax
movb 0x8(%rax), %al
movb %al, -0xa(%rbp)
movq -0x8(%rbp), %rax
movb 0xc(%rax), %al
movb %al, -0x9(%rbp)
movzbl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0x3bc4(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movb (%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, (%rax)
movzbl -0xb(%rbp), %eax
movl %eax, %ecx
leaq 0x3ba8(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl (%rax), %ecx
xorl %edx, %ecx
movb %cl, (%rax)
movzbl -0xa(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl (%rax), %ecx
xorl %edx, %ecx
movb %cl, (%rax)
movzbl -0x9(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl (%rax), %ecx
xorl %edx, %ecx
movb %cl, (%rax)
movb -0xc(%rbp), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x4(%rax)
movzbl -0xb(%rbp), %eax
movl %eax, %ecx
leaq 0x3b5d(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x4(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x4(%rax)
movzbl -0xa(%rbp), %eax
movl %eax, %ecx
leaq 0x3b39(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x4(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x4(%rax)
movzbl -0x9(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x4(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x4(%rax)
movb -0xc(%rbp), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x8(%rax)
movzbl -0xb(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x8(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x8(%rax)
movzbl -0xa(%rbp), %eax
movl %eax, %ecx
leaq 0x3ae8(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x8(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x8(%rax)
movzbl -0x9(%rbp), %eax
movl %eax, %ecx
leaq 0x3ac4(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x8(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x8(%rax)
movzbl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0x3a9f(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movb 0x1(%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, 0xc(%rax)
movzbl -0xb(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xc(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xc(%rax)
movzbl -0xa(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xc(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xc(%rax)
movzbl -0x9(%rbp), %eax
movl %eax, %ecx
leaq 0x3a5f(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0xc(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xc(%rax)
movq -0x8(%rbp), %rax
movb 0x1(%rax), %al
movb %al, -0xc(%rbp)
movq -0x8(%rbp), %rax
movb 0x5(%rax), %al
movb %al, -0xb(%rbp)
movq -0x8(%rbp), %rax
movb 0x9(%rax), %al
movb %al, -0xa(%rbp)
movq -0x8(%rbp), %rax
movb 0xd(%rax), %al
movb %al, -0x9(%rbp)
movzbl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0x3a13(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movb (%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x1(%rax)
movzbl -0xb(%rbp), %eax
movl %eax, %ecx
leaq 0x39f6(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x1(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x1(%rax)
movzbl -0xa(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x1(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x1(%rax)
movzbl -0x9(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x1(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x1(%rax)
movb -0xc(%rbp), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x5(%rax)
movzbl -0xb(%rbp), %eax
movl %eax, %ecx
leaq 0x39a5(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x5(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x5(%rax)
movzbl -0xa(%rbp), %eax
movl %eax, %ecx
leaq 0x3981(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x5(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x5(%rax)
movzbl -0x9(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x5(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x5(%rax)
movb -0xc(%rbp), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x9(%rax)
movzbl -0xb(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x9(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x9(%rax)
movzbl -0xa(%rbp), %eax
movl %eax, %ecx
leaq 0x3930(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x9(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x9(%rax)
movzbl -0x9(%rbp), %eax
movl %eax, %ecx
leaq 0x390c(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x9(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x9(%rax)
movzbl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0x38e7(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movb 0x1(%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, 0xd(%rax)
movzbl -0xb(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xd(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xd(%rax)
movzbl -0xa(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xd(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xd(%rax)
movzbl -0x9(%rbp), %eax
movl %eax, %ecx
leaq 0x38a7(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0xd(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xd(%rax)
movq -0x8(%rbp), %rax
movb 0x2(%rax), %al
movb %al, -0xc(%rbp)
movq -0x8(%rbp), %rax
movb 0x6(%rax), %al
movb %al, -0xb(%rbp)
movq -0x8(%rbp), %rax
movb 0xa(%rax), %al
movb %al, -0xa(%rbp)
movq -0x8(%rbp), %rax
movb 0xe(%rax), %al
movb %al, -0x9(%rbp)
movzbl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0x385b(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movb (%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x2(%rax)
movzbl -0xb(%rbp), %eax
movl %eax, %ecx
leaq 0x383e(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x2(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x2(%rax)
movzbl -0xa(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x2(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x2(%rax)
movzbl -0x9(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x2(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x2(%rax)
movb -0xc(%rbp), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x6(%rax)
movzbl -0xb(%rbp), %eax
movl %eax, %ecx
leaq 0x37ed(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x6(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x6(%rax)
movzbl -0xa(%rbp), %eax
movl %eax, %ecx
leaq 0x37c9(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x6(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x6(%rax)
movzbl -0x9(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x6(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x6(%rax)
movb -0xc(%rbp), %cl
movq -0x8(%rbp), %rax
movb %cl, 0xa(%rax)
movzbl -0xb(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xa(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xa(%rax)
movzbl -0xa(%rbp), %eax
movl %eax, %ecx
leaq 0x3778(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0xa(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xa(%rax)
movzbl -0x9(%rbp), %eax
movl %eax, %ecx
leaq 0x3754(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0xa(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xa(%rax)
movzbl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0x372f(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movb 0x1(%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, 0xe(%rax)
movzbl -0xb(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xe(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xe(%rax)
movzbl -0xa(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xe(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xe(%rax)
movzbl -0x9(%rbp), %eax
movl %eax, %ecx
leaq 0x36ef(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0xe(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xe(%rax)
movq -0x8(%rbp), %rax
movb 0x3(%rax), %al
movb %al, -0xc(%rbp)
movq -0x8(%rbp), %rax
movb 0x7(%rax), %al
movb %al, -0xb(%rbp)
movq -0x8(%rbp), %rax
movb 0xb(%rax), %al
movb %al, -0xa(%rbp)
movq -0x8(%rbp), %rax
movb 0xf(%rax), %al
movb %al, -0x9(%rbp)
movzbl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0x36a3(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movb (%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x3(%rax)
movzbl -0xb(%rbp), %eax
movl %eax, %ecx
leaq 0x3686(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x3(%rax)
movzbl -0xa(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x3(%rax)
movzbl -0x9(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x3(%rax)
movb -0xc(%rbp), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x7(%rax)
movzbl -0xb(%rbp), %eax
movl %eax, %ecx
leaq 0x3635(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x7(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x7(%rax)
movzbl -0xa(%rbp), %eax
movl %eax, %ecx
leaq 0x3611(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0x7(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x7(%rax)
movzbl -0x9(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0x7(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0x7(%rax)
movb -0xc(%rbp), %cl
movq -0x8(%rbp), %rax
movb %cl, 0xb(%rax)
movzbl -0xb(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xb(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xb(%rax)
movzbl -0xa(%rbp), %eax
movl %eax, %ecx
leaq 0x35c0(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0xb(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xb(%rax)
movzbl -0x9(%rbp), %eax
movl %eax, %ecx
leaq 0x359c(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl 0x1(%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0xb(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xb(%rax)
movzbl -0xc(%rbp), %eax
movl %eax, %ecx
leaq 0x3577(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movb 0x1(%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, 0xf(%rax)
movzbl -0xb(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xf(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xf(%rax)
movzbl -0xa(%rbp), %edx
movq -0x8(%rbp), %rax
movzbl 0xf(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xf(%rax)
movzbl -0x9(%rbp), %eax
movl %eax, %ecx
leaq 0x3537(%rip), %rax      # 0x8250
imulq $0x6, %rcx, %rcx
addq %rcx, %rax
movzbl (%rax), %edx
movq -0x8(%rbp), %rax
movzbl 0xf(%rax), %ecx
xorl %edx, %ecx
movb %cl, 0xf(%rax)
popq %rbp
retq
nopw %cs:(%rax,%rax)