// File: /workspace/github_cpp_makefile_star2_O2/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
movq %rsi, %r14
xorps %xmm0, %xmm0
andq $0x0, 0x10(%rdi)
movq %rdi, -0x30(%rbp)
movups %xmm0, (%rdi)
movq (%rsi), %rax
movq 0x8(%rsi), %rcx
subq %rax, %rcx
shrq $0x5, %rcx
movl %ecx, %r9d
xorl %ecx, %ecx
pushq $0x1
popq %rdx
movl %r9d, %esi
decl %esi
js 0x5c2a
movl %ecx, %edi
andb $0x1, %dil
jne 0x5c2a
movl %esi, %edi
shlq $0x5, %rdi
leaq (%rax,%rdi), %rsi
movl 0x8(%rax,%rdi), %ebx
testl %ebx, %ebx
js 0x5c25
movl %ecx, %edi
andb $0x1, %dil
jne 0x5c25
movl %ebx, %edi
movq (%rsi), %r8
cmpb $0x29, (%r8,%rdi)
movzbl %cl, %ecx
cmovel %edx, %ecx
decl %ebx
jmp 0x5c05
decq %r9
jmp 0x5be8
movq %r9, -0x38(%rbp)
movl %r9d, %r13d
testl %r13d, %r13d
js 0x5d97
leaq 0x419(%rip), %rsi       # 0x605a
leaq -0x58(%rbp), %rdi
leaq -0x78(%rbp), %rdx
callq 0x46d0
cmpl -0x38(%rbp), %r13d
jne 0x5c69
leaq 0xb31(%rip), %rsi       # 0x678c
leaq -0x58(%rbp), %rdi
callq 0x33d0
movl %ebx, %r12d
jmp 0x5c7d
movl %r13d, %eax
movq (%r14), %rcx
shlq $0x5, %rax
movl 0x8(%rcx,%rax), %r12d
jmp 0x5d5c
testl %r12d, %r12d
js 0x5d64
movl %r12d, %eax
orl %r13d, %eax
je 0x5cc6
movslq %r13d, %rax
movq (%r14), %rcx
shlq $0x5, %rax
movl %r12d, %edx
movq (%rcx,%rax), %rax
movzbl (%rax,%rdx), %eax
cmpl $0xa, %eax
je 0x5d5c
cmpl $0xd, %eax
je 0x5d5c
movsbl %al, %esi
leaq -0x58(%rbp), %rdi
callq 0x31c0
jmp 0x5d5c
movq (%r14), %rax
movq (%rax), %rax
movsbl (%rax), %esi
leaq -0x78(%rbp), %rdi
callq 0x5a57
movq -0x70(%rbp), %rax
movl %eax, %r15d
decl %eax
movl %eax, %r13d
sarl $0x1f, %r13d
andl %eax, %r13d
decq %r15
movq -0x78(%rbp), %rax
testl %r15d, %r15d
jle 0x5d29
movl %r15d, %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movzbl (%rax,%rcx), %eax
cmpl $0x31, %eax
je 0x5d17
cmpl $0x30, %eax
jne 0x5ceb
leaq 0x820(%rip), %rsi       # 0x6535
jmp 0x5d1e
leaq 0xa5c(%rip), %rsi       # 0x677a
leaq -0x58(%rbp), %rdi
callq 0x33d0
jmp 0x5ceb
movslq %r13d, %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x31, %eax
je 0x5d43
cmpl $0x30, %eax
jne 0x5d53
leaq 0x3cb(%rip), %rsi       # 0x610c
jmp 0x5d4a
leaq 0xa49(%rip), %rsi       # 0x6793
leaq -0x58(%rbp), %rdi
callq 0x33d0
leaq -0x78(%rbp), %rdi
callq 0x30c0
decl %r12d
jmp 0x5c7d
testl %r13d, %r13d
jne 0x5d79
leaq 0xa1c(%rip), %rsi       # 0x678c
leaq -0x58(%rbp), %rdi
callq 0x33d0
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x47a6
leaq -0x58(%rbp), %rdi
callq 0x30c0
decl %r13d
jmp 0x5c31
movq -0x30(%rbp), %rax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
jmp 0x5dcf
jmp 0x5db5
jmp 0x5db5
jmp 0x5dba
movq %rax, %r14
jmp 0x5dc6
movq %rax, %r14
leaq -0x78(%rbp), %rdi
callq 0x30c0
leaq -0x58(%rbp), %rdi
callq 0x30c0
movq -0x30(%rbp), %rdi
callq 0x4718
movq %r14, %rdi
callq 0x3390