// File: AndrewAlbert[P]Compiler-Theory/SourceCode/codeGenerator.cpp
// Function: codeGenerator::WriteRuntime()
void codeGenerator::WriteRuntime(){
	fprintf( oFile, "\nGETBOOL:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   iReg[0] = getBool();\n");
	fprintf( oFile, "   MM[FP_reg + 2] = iReg[0];\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");

	fprintf( oFile, "\nGETINTEGER:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   iReg[0] = getInteger();\n");
	fprintf( oFile, "   MM[FP_reg + 2] = iReg[0];\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");

	fprintf( oFile, "\nGETCHAR:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   iReg[0] = getChar();\n");
	fprintf( oFile, "   MM[FP_reg + 2] = iReg[0];\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");

	fprintf( oFile, "\nGETFLOAT:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   fReg[0] = getFloat();\n");
	fprintf( oFile, "   memcpy(&MM[FP_reg + 2], &iReg[0], sizeof(int) );\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");

	fprintf( oFile, "\nGETSTRING:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   iReg[0] = getString(buffer);\n");
	fprintf( oFile, "   HP_reg = HP_reg - iReg[0];\n");
	fprintf( oFile, "   MM[FP_reg + 2] = HP_reg;\n");
	fprintf( oFile, "   strcpy((char*)&MM[HP_reg], buffer);\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");

	fprintf( oFile, "\nPUTBOOL:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   iReg[0] = MM[FP_reg + 2];\n");
	fprintf( oFile, "   putBool(iReg[0]);\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");

	fprintf( oFile, "\nPUTINTEGER:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   iReg[0] = MM[FP_reg + 2];\n");
	fprintf( oFile, "   putInteger(iReg[0]);\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");

	fprintf( oFile, "\nPUTCHAR:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   iReg[0] = MM[FP_reg + 2];\n");
	fprintf( oFile, "   putChar(iReg[0]);\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");

	fprintf( oFile, "\nPUTFLOAT:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   memcpy(&fReg[0],&MM[FP_reg + 2],sizeof(int));\n");
	fprintf( oFile, "   putFloat(fReg[0]);\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");

	fprintf( oFile, "\nPUTSTRING:\n");
	fprintf( oFile, "   FP_reg = SP_reg;\n");
	fprintf( oFile, "   SP_reg = FP_reg + 3;\n");
	fprintf( oFile, "   iReg[0] = MM[FP_reg + 2];\n");
	fprintf( oFile, "   putString((char*)&MM[iReg[0]]);\n");
	fprintf( oFile, "   TP_reg = MM[FP_reg + 1];\n");
	fprintf( oFile, "   FP_reg = MM[FP_reg];\n");
	fprintf( oFile, "   goto BRANCH_TABLE;\n");
	return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x10(%rbp)
movq 0x308(%rax), %rdi
leaq 0xd7cd(%rip), %rsi      # 0x2745f
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd67f(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd7a6(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd7a6(%rip), %rsi      # 0x27483
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd7a6(%rip), %rsi      # 0x2749c
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd6a9(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd6ad(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd6ad(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd760(%rip), %rsi      # 0x274ba
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd5b7(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd6de(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd723(%rip), %rsi      # 0x274c8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd6de(%rip), %rsi      # 0x2749c
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd5e1(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd5e5(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd5e5(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd6c2(%rip), %rsi      # 0x274e4
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd4ef(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd616(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd682(%rip), %rsi      # 0x274ef
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd616(%rip), %rsi      # 0x2749c
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd519(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd51d(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd51d(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd61e(%rip), %rsi      # 0x27508
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd427(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd54e(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd5df(%rip), %rsi      # 0x27514
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd5e0(%rip), %rsi      # 0x2752e
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd451(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd455(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd455(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd5b1(%rip), %rsi      # 0x27563
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd35f(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd486(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd573(%rip), %rsi      # 0x27570
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd57b(%rip), %rsi      # 0x27591
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd581(%rip), %rsi      # 0x275b0
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd585(%rip), %rsi      # 0x275cd
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd357(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd35b(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd35b(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd549(%rip), %rsi      # 0x275f5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd265(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd38c(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd509(%rip), %rsi      # 0x27600
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd50e(%rip), %rsi      # 0x2761e
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd28f(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd293(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd293(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd4c0(%rip), %rsi      # 0x27634
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd19d(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd2c4(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd441(%rip), %rsi      # 0x27600
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd46a(%rip), %rsi      # 0x27642
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd1c7(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd1cb(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd1cb(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd41f(%rip), %rsi      # 0x2765b
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd0d5(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd1fc(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd379(%rip), %rsi      # 0x27600
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd3c6(%rip), %rsi      # 0x27666
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd0ff(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd103(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd103(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd378(%rip), %rsi      # 0x2767c
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd00d(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd134(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd339(%rip), %rsi      # 0x27688
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd352(%rip), %rsi      # 0x276ba
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd037(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd03b(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd03b(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd305(%rip), %rsi      # 0x276d1
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xcf45(%rip), %rsi      # 0x2732a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd06c(%rip), %rsi      # 0x2746a
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd1e9(%rip), %rsi      # 0x27600
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xd2ae(%rip), %rsi      # 0x276de
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xcf6f(%rip), %rsi      # 0x273b8
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xcf73(%rip), %rsi      # 0x273d5
movb $0x0, %al
callq 0x3380
movq -0x10(%rbp), %rax
movq 0x308(%rax), %rdi
leaq 0xcf73(%rip), %rsi      # 0x273ee
movb $0x0, %al
callq 0x3380
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax,%rax)