// File: /workspace/github_cpp_makefile_star2_O3/mattdibi[P]Programmatore-JTAG-per-Xilinx/svftoserial.cpp
// Function: GenerateBITSTREAMOutput(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>)
vector<string> GenerateBITSTREAMOutput(vector<string> bitstream)
{
	vector<string> decBitstream;
	int indexRow, indexCol, initialCol;
	bool found = false;

	// Ignoriamo tutti i bit della SMASK
	indexRow  = bitstream.size() - 1;

	// Ciclo di ignore fino al carattere ')' che segnala la fine della SMASK
	while(indexRow >= 0 && found == false)
	{
		indexCol = bitstream[indexRow].length();

		while(indexCol >= 0 && found == false)
		{
			if(bitstream[indexRow][indexCol] == ')')
				found = true;

			indexCol--;
		}

		indexRow--;
	}

	indexRow++;

	// Il bitstream va inserito al contrario: dall'ultima riga alla prima
	for(int i = indexRow; i >= 0; i--)
	{
		string str = "";

		// Se è la prima riga dell'istruzione inseriamo la parte iniziale comune a tutte le istruzioni SDR
		// e partiamo con la copia dell'istruzione cominciando dalla posizione della ')'
		if(i == indexRow)
		{
			str += "!*";
			initialCol = indexCol;
		}
		else
		{
			// Se non è la prima riga partiamo dall'ultimo carattere della stringa
			initialCol = bitstream[i].length()-1;
		}

		for (int k = initialCol; k >= 0; k--)
		{
			if(i == 0 && k == 0)
			{
				string binval = hexCharToBin(bitstream[i][k]);

				for (i=binval.length()-1; i>0; i--)
				{
					if (binval[i]=='0') 
						str += ".";
					else if(binval[i]=='1') 
						str += ",";
				}

				if (binval[i]=='0') 
					str += ":";
				else if (binval[i]=='1') 
					str += ";";

				continue;
			}

			if(bitstream[i][k] != '\n' && bitstream[i][k] != '\r')
				str += bitstream[i][k];
		}

		// Se è l'ultima riga immetto la parte finale comune a tutte le istruzioni SDR
		if(i == 0)
			str+= "!*";

		decBitstream.push_back(str);
	}

	return decBitstream;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq %rdi, -0x30(%rbp)
movq $0x0, 0x10(%rdi)
movq (%rsi), %rax
movq %rsi, -0x38(%rbp)
movq 0x8(%rsi), %rbx
subq %rax, %rbx
shrq $0x5, %rbx
movl %ebx, %ecx
decl %ecx
js 0x697c
movl %ecx, %edi
xorl %ecx, %ecx
movl $0x1, %edx
movq %rdi, %rbx
shlq $0x5, %rdi
movl 0x8(%rax,%rdi), %r15d
movl %ecx, %esi
andb $0x1, %sil
testl %r15d, %r15d
js 0x696c
testb %sil, %sil
jne 0x696c
addq %rax, %rdi
movq (%rdi), %rdi
movl %r15d, %esi
cmpb $0x29, (%rdi,%rsi)
movzbl %cl, %ecx
cmovel %edx, %ecx
movl %ecx, %esi
andb $0x1, %sil
addl $-0x1, %r15d
jae 0x696c
testb %sil, %sil
je 0x694e
testq %rbx, %rbx
jle 0x697c
leaq -0x1(%rbx), %rdi
testb %sil, %sil
je 0x692c
jmp 0x697c
testl %ebx, %ebx
js 0x6b23
leaq -0x78(%rbp), %r12
leaq 0xe07(%rip), %r13       # 0x7796
movl %ebx, %r14d
movq %rbx, -0x80(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x78(%rbp)
movq %r12, %rdi
leaq 0x6ce(%rip), %rdx       # 0x7076
movq %rdx, %rsi
callq 0x514e
cmpl %ebx, %r14d
jne 0x69c9
movq %r12, %rdi
leaq 0xde9(%rip), %rsi       # 0x77a8
callq 0x3410
movl %r15d, %eax
jmp 0x69dd
movl %r14d, %eax
movq -0x38(%rbp), %rcx
movq (%rcx), %rcx
shlq $0x5, %rax
movl 0x8(%rcx,%rax), %eax
decl %eax
testl %eax, %eax
js 0x6ad6
movl %eax, %ebx
movl %ebx, %eax
orl %r14d, %eax
je 0x6a26
movslq %r14d, %rax
movq -0x38(%rbp), %rcx
movq (%rcx), %rcx
shlq $0x5, %rax
movq (%rcx,%rax), %rax
movzbl (%rax,%rbx), %eax
cmpl $0xa, %eax
je 0x6ac6
cmpl $0xd, %eax
je 0x6ac6
movsbl %al, %esi
movq %r12, %rdi
callq 0x31f0
jmp 0x6ac6
movq -0x38(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rax
movsbl (%rax), %esi
leaq -0x58(%rbp), %rdi
callq 0x66c5
movl -0x50(%rbp), %r14d
decl %r14d
testl %r14d, %r14d
jle 0x6a80
movl %r14d, %r14d
incq %r14
movq -0x58(%rbp), %rax
movzbl -0x1(%rax,%r14), %eax
movq %r13, %rsi
cmpl $0x31, %eax
je 0x6a6c
cmpl $0x30, %eax
jne 0x6a74
leaq 0xae5(%rip), %rsi       # 0x7551
movq %r12, %rdi
callq 0x3410
decq %r14
cmpq $0x1, %r14
ja 0x6a4e
xorl %r14d, %r14d
movslq %r14d, %rax
movq -0x58(%rbp), %rcx
movzbl (%rcx,%rax), %eax
cmpl $0x31, %eax
je 0x6a9e
leaq 0x691(%rip), %rsi       # 0x7128
cmpl $0x30, %eax
je 0x6aa5
jmp 0x6aad
leaq 0xd0a(%rip), %rsi       # 0x77af
movq %r12, %rdi
callq 0x3410
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x6ac6
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x3250
leaq -0x1(%rbx), %rax
testq %rbx, %rbx
movq %rax, %rbx
jg 0x69e7
testl %r14d, %r14d
movq -0x80(%rbp), %rbx
jne 0x6aee
movq %r12, %rdi
leaq 0xcbf(%rip), %rsi       # 0x77a8
callq 0x3410
movq -0x30(%rbp), %rdi
movq %r12, %rsi
callq 0x5064
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x6b13
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x3250
leal -0x1(%r14), %eax
testl %r14d, %r14d
movl %eax, %r14d
jg 0x6996
movq -0x30(%rbp), %rax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
jmp 0x6b7b
jmp 0x6b41
jmp 0x6b41
jmp 0x6b46
movq %rax, %r14
jmp 0x6b62
movq %rax, %r14
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x6b62
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x3250
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x6b7b
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x3250
movq -0x30(%rbp), %rdi
callq 0x4f54
movq %r14, %rdi
callq 0x33d0