// File: /workspace/github_c_makefile_star2_O0/mjosaarinen[P]brutus/crypto_aead/twine80n6t4clocv2/ref/twine.c
// Function: Decode
void Decode(uint8 cipher[8], uint8 text[8])
{
	uint8	i, tmp;
	uint8	data1[16];

	//Set ciphertext
	data1[0] = cipher[0]>>4;
	data1[1] = cipher[0]&0xf;
	data1[2] = cipher[1]>>4;
	data1[3] = cipher[1]&0xf;
	data1[4] = cipher[2]>>4;
	data1[5] = cipher[2]&0xf;
	data1[6] = cipher[3]>>4;
	data1[7] = cipher[3]&0xf;
	data1[8] = cipher[4]>>4;
	data1[9] = cipher[4]&0xf;
	data1[10] = cipher[5]>>4;
	data1[11] = cipher[5]&0xf;
	data1[12] = cipher[6]>>4;
	data1[13] = cipher[6]&0xf;
	data1[14] = cipher[7]>>4;
	data1[15] = cipher[7]&0xf;

	//Round functions
	for(i=ROUND-1; ; i--)
	{
		data1[1] ^= S[data1[0] ^ ek[i][0]];
		data1[3] ^= S[data1[2] ^ ek[i][1]];
		data1[5] ^= S[data1[4] ^ ek[i][2]];
		data1[7] ^= S[data1[6] ^ ek[i][3]];
		data1[9] ^= S[data1[8] ^ ek[i][4]];
		data1[11] ^= S[data1[10] ^ ek[i][5]];
		data1[13] ^= S[data1[12] ^ ek[i][6]];
		data1[15] ^= S[data1[14] ^ ek[i][7]];

		i--;
		data1[0] ^= S[data1[5] ^ ek[i][0]];
		data1[4] ^= S[data1[1] ^ ek[i][1]];
		data1[12] ^= S[data1[7] ^ ek[i][2]];
		data1[8] ^= S[data1[3] ^ ek[i][3]];
		data1[6] ^= S[data1[13] ^ ek[i][4]];
		data1[2] ^= S[data1[9] ^ ek[i][5]];
		data1[10] ^= S[data1[15] ^ ek[i][6]];
		data1[14] ^= S[data1[11] ^ ek[i][7]];

		if(i == 0)
			break;

		tmp = data1[1];
		data1[1] = data1[5];
		data1[5] = data1[15];
		data1[15] = data1[11];
		data1[11] = tmp;

		tmp = data1[3];
		data1[3] = data1[7];
		data1[7] = data1[13];
		data1[13] = data1[9];
		data1[9] = tmp;

		tmp = data1[0];
		data1[0] = data1[12];
		data1[12] = data1[14];
		data1[14] = data1[2];
		data1[2] = tmp;

		tmp = data1[4];
		data1[4] = data1[8];
		data1[8] = data1[10];
		data1[10] = data1[6];
		data1[6] = tmp;
    
	}

	//Set plaintext
	text[0] = (data1[5]<<4) ^ data1[0];
	text[1] = (data1[1]<<4) ^ data1[4];
	text[2] = (data1[7]<<4) ^ data1[12];
	text[3] = (data1[3]<<4) ^ data1[8];
	text[4] = (data1[13]<<4) ^ data1[6];
	text[5] = (data1[9]<<4) ^ data1[2];
	text[6] = (data1[15]<<4) ^ data1[10];
	text[7] = (data1[11]<<4) ^ data1[14];
#ifdef _PRINT
	printf("Twine (decode) output: ");
	pstate(text, 8);
#endif
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq %rsi, -0x10(%rsp)
movq -0x8(%rsp), %rax
movzbl (%rax), %eax
sarl $0x4, %eax
movb %al, -0x28(%rsp)
movq -0x8(%rsp), %rax
movzbl (%rax), %eax
andl $0xf, %eax
movb %al, -0x27(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x1(%rax), %eax
sarl $0x4, %eax
movb %al, -0x26(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x1(%rax), %eax
andl $0xf, %eax
movb %al, -0x25(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x2(%rax), %eax
sarl $0x4, %eax
movb %al, -0x24(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x2(%rax), %eax
andl $0xf, %eax
movb %al, -0x23(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x3(%rax), %eax
sarl $0x4, %eax
movb %al, -0x22(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x3(%rax), %eax
andl $0xf, %eax
movb %al, -0x21(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x4(%rax), %eax
sarl $0x4, %eax
movb %al, -0x20(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x4(%rax), %eax
andl $0xf, %eax
movb %al, -0x1f(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x5(%rax), %eax
sarl $0x4, %eax
movb %al, -0x1e(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x5(%rax), %eax
andl $0xf, %eax
movb %al, -0x1d(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x6(%rax), %eax
sarl $0x4, %eax
movb %al, -0x1c(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x6(%rax), %eax
andl $0xf, %eax
movb %al, -0x1b(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x7(%rax), %eax
sarl $0x4, %eax
movb %al, -0x1a(%rsp)
movq -0x8(%rsp), %rax
movzbl 0x7(%rax), %eax
andl $0xf, %eax
movb %al, -0x19(%rsp)
movb $0x23, -0x11(%rsp)
movzbl -0x28(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x3a20(%rip), %rcx      # 0x5fd0
movzbl (%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x3a30(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x27(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x27(%rsp)
movzbl -0x26(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x39ee(%rip), %rcx      # 0x5fd0
movzbl 0x1(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x39fd(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x25(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x25(%rsp)
movzbl -0x24(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x39bb(%rip), %rcx      # 0x5fd0
movzbl 0x2(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x39ca(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x23(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x23(%rsp)
movzbl -0x22(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x3988(%rip), %rcx      # 0x5fd0
movzbl 0x3(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x3997(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x21(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x21(%rsp)
movzbl -0x20(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x3955(%rip), %rcx      # 0x5fd0
movzbl 0x4(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x3964(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x1f(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x1f(%rsp)
movzbl -0x1e(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x3922(%rip), %rcx      # 0x5fd0
movzbl 0x5(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x3931(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x1d(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x1d(%rsp)
movzbl -0x1c(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x38ef(%rip), %rcx      # 0x5fd0
movzbl 0x6(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x38fe(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x1b(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x1b(%rsp)
movzbl -0x1a(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x38bc(%rip), %rcx      # 0x5fd0
movzbl 0x7(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x38cb(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x19(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x19(%rsp)
movb -0x11(%rsp), %al
addb $-0x1, %al
movb %al, -0x11(%rsp)
movzbl -0x23(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x387f(%rip), %rcx      # 0x5fd0
movzbl (%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x388f(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x28(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x28(%rsp)
movzbl -0x27(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x384d(%rip), %rcx      # 0x5fd0
movzbl 0x1(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x385c(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x24(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x24(%rsp)
movzbl -0x21(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x381a(%rip), %rcx      # 0x5fd0
movzbl 0x2(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x3829(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x1c(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x1c(%rsp)
movzbl -0x25(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x37e7(%rip), %rcx      # 0x5fd0
movzbl 0x3(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x37f6(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x20(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x20(%rsp)
movzbl -0x1b(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x37b4(%rip), %rcx      # 0x5fd0
movzbl 0x4(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x37c3(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x22(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x22(%rsp)
movzbl -0x1f(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x3781(%rip), %rcx      # 0x5fd0
movzbl 0x5(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x3790(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x26(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x26(%rsp)
movzbl -0x19(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x374e(%rip), %rcx      # 0x5fd0
movzbl 0x6(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x375d(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x1e(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x1e(%rsp)
movzbl -0x1d(%rsp), %eax
movzbl -0x11(%rsp), %ecx
movl %ecx, %edx
movq 0x371b(%rip), %rcx      # 0x5fd0
movzbl 0x7(%rcx,%rdx,8), %ecx
xorl %ecx, %eax
movslq %eax, %rcx
movq 0x372a(%rip), %rax      # 0x5ff0
movzbl (%rax,%rcx), %ecx
movzbl -0x1a(%rsp), %eax
xorl %ecx, %eax
movb %al, -0x1a(%rsp)
movzbl -0x11(%rsp), %eax
cmpl $0x0, %eax
jne 0x28e4
jmp 0x2993
movb -0x27(%rsp), %al
movb %al, -0x12(%rsp)
movb -0x23(%rsp), %al
movb %al, -0x27(%rsp)
movb -0x19(%rsp), %al
movb %al, -0x23(%rsp)
movb -0x1d(%rsp), %al
movb %al, -0x19(%rsp)
movb -0x12(%rsp), %al
movb %al, -0x1d(%rsp)
movb -0x25(%rsp), %al
movb %al, -0x12(%rsp)
movb -0x21(%rsp), %al
movb %al, -0x25(%rsp)
movb -0x1b(%rsp), %al
movb %al, -0x21(%rsp)
movb -0x1f(%rsp), %al
movb %al, -0x1b(%rsp)
movb -0x12(%rsp), %al
movb %al, -0x1f(%rsp)
movb -0x28(%rsp), %al
movb %al, -0x12(%rsp)
movb -0x1c(%rsp), %al
movb %al, -0x28(%rsp)
movb -0x1a(%rsp), %al
movb %al, -0x1c(%rsp)
movb -0x26(%rsp), %al
movb %al, -0x1a(%rsp)
movb -0x12(%rsp), %al
movb %al, -0x26(%rsp)
movb -0x24(%rsp), %al
movb %al, -0x12(%rsp)
movb -0x20(%rsp), %al
movb %al, -0x24(%rsp)
movb -0x1e(%rsp), %al
movb %al, -0x20(%rsp)
movb -0x22(%rsp), %al
movb %al, -0x1e(%rsp)
movb -0x12(%rsp), %al
movb %al, -0x22(%rsp)
movb -0x11(%rsp), %al
addb $-0x1, %al
movb %al, -0x11(%rsp)
jmp 0x259d
movzbl -0x23(%rsp), %eax
shll $0x4, %eax
movzbl -0x28(%rsp), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, (%rax)
movzbl -0x27(%rsp), %eax
shll $0x4, %eax
movzbl -0x24(%rsp), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x1(%rax)
movzbl -0x21(%rsp), %eax
shll $0x4, %eax
movzbl -0x1c(%rsp), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x2(%rax)
movzbl -0x25(%rsp), %eax
shll $0x4, %eax
movzbl -0x20(%rsp), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x3(%rax)
movzbl -0x1b(%rsp), %eax
shll $0x4, %eax
movzbl -0x22(%rsp), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x4(%rax)
movzbl -0x1f(%rsp), %eax
shll $0x4, %eax
movzbl -0x26(%rsp), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x5(%rax)
movzbl -0x19(%rsp), %eax
shll $0x4, %eax
movzbl -0x1e(%rsp), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x6(%rax)
movzbl -0x1d(%rsp), %eax
shll $0x4, %eax
movzbl -0x1a(%rsp), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x7(%rax)
retq
nopl (%rax,%rax)