// File: /workspace/github_cpp_makefile_star2_O2/rossy[P]crossc/SPIRV-Cross/spirv_cpp.cpp
// Function: spirv_cross::CompilerCPP::compile[abi:cxx11]()
string CompilerCPP::compile()
{
	// Force a classic "C" locale, reverts when function returns
	ClassicLocale classic_locale;

	// Do not deal with ES-isms like precision, older extensions and such.
	options.es = false;
	options.version = 450;
	backend.float_literal_suffix = true;
	backend.double_literal_suffix = false;
	backend.long_long_literal_suffix = true;
	backend.uint32_t_literal_suffix = true;
	backend.basic_int_type = "int32_t";
	backend.basic_uint_type = "uint32_t";
	backend.swizzle_is_function = true;
	backend.shared_is_implied = true;
	backend.flexible_member_array_supported = false;
	backend.explicit_struct_type = true;
	backend.use_initializer_list = true;

	build_function_control_flow_graphs_and_analyze();
	update_active_builtins();

	uint32_t pass_count = 0;
	do
	{
		if (pass_count >= 3)
			SPIRV_CROSS_THROW("Over 3 compilation loops detected. Must be a bug!");

		resource_registrations.clear();
		reset();

		// Move constructor for this type is broken on GCC 4.9 ...
		buffer = unique_ptr<ostringstream>(new ostringstream());

		emit_header();
		emit_resources();

		emit_function(get<SPIRFunction>(ir.default_entry_point), Bitset());

		pass_count++;
	} while (force_recompile);

	// Match opening scope of emit_header().
	end_scope_decl();
	// namespace
	end_scope();

	// Emit C entry points
	emit_c_linkage();

	// Entry point in CPP is always main() for the time being.
	get_entry_point().name = "main";

	return buffer->str();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %rsi, %r14
movq %rdi, 0x18(%rsp)
leaq 0x10(%rsp), %rdi
callq 0x9fe2
movb $0x0, 0x43c(%r14)
movl $0x1c2, 0x438(%r14) # imm = 0x1C2
movl $0x1010001, 0x600(%r14) # imm = 0x1010001
leaq 0x86f2f(%rip), %rax     # 0x8f3b0
movq %rax, 0x608(%r14)
leaq 0x86f20(%rip), %rax     # 0x8f3af
movq %rax, 0x610(%r14)
movl $0x1000101, 0x620(%r14) # imm = 0x1000101
movb $0x1, 0x624(%r14)
movq %r14, %rdi
callq 0x162d0
movq %r14, %rdi
callq 0x16086
leaq 0x788(%r14), %r12
leaq 0x28(%rsp), %r15
pushq $0x4
popq %rbx
leaq 0x20(%rsp), %r13
decl %ebx
je 0x85f5
movq %r12, %rdi
callq 0x9e62
movq %r14, %rdi
callq 0x20c2c
movl $0x178, %edi            # imm = 0x178
callq 0x6270
movq %rax, %rbp
movq %rax, %rdi
callq 0x63a0
movq 0x420(%r14), %rdi
movq %rbp, 0x420(%r14)
testq %rdi, %rdi
je 0x8513
movq (%rdi), %rax
callq *0x8(%rax)
movq (%r14), %rax
movq %r14, %rdi
callq *0x78(%rax)
movq %r14, %rdi
callq 0x8034
movl 0x108(%r14), %esi
movq %r14, %rdi
callq 0xa048
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
movaps %xmm0, 0x30(%rsp)
movaps %xmm0, 0x40(%rsp)
leaq 0x58(%rsp), %rcx
movq %rcx, 0x28(%rsp)
movq $0x1, 0x30(%rsp)
movups %xmm0, 0x10(%r15)
movl $0x3f800000, 0x48(%rsp) # imm = 0x3F800000
movups %xmm0, 0x28(%r15)
movq %r14, %rdi
movq %rax, %rsi
movq %r13, %rdx
callq 0x21c20
movq %r15, %rdi
callq 0xb51c
cmpb $0x0, 0x1d0(%r14)
jne 0x84cd
movq %r14, %rdi
callq 0x22dba
movq 0x18(%rsp), %rbx
movq %r14, %rdi
callq 0x3650a
movq %r14, %rdi
callq 0x869a
movq %r14, %rdi
callq 0x12fa4
addq $0x8, %rax
leaq 0x904af(%rip), %rsi     # 0x98a6d
movq %rax, %rdi
callq 0x64e0
movq 0x420(%r14), %rsi
addq $0x8, %rsi
movq %rbx, %rdi
callq 0x6430
leaq 0x10(%rsp), %rdi
callq 0xa05e
movq %rbx, %rax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x86db1(%rip), %rsi     # 0x8f3b8
leaq 0x20(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
leaq 0x20(%rsp), %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xde791(%rip), %rsi     # 0xe6dc0
movq 0xdf9aa(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x8684
jmp 0x8684
movq %rax, %r14
leaq 0x20(%rsp), %rdi
callq 0x6548
testb %bpl, %bpl
jne 0x8659
jmp 0x8687
movq %rax, %r14
movq %rbx, %rdi
callq 0x6200
jmp 0x8687
jmp 0x8684
movq %rax, %r14
movl $0x178, %esi            # imm = 0x178
movq %rbp, %rdi
callq 0x6280
jmp 0x8687
movq %rax, %r14
movq %r15, %rdi
callq 0xb51c
jmp 0x8687
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0xa05e
movq %r14, %rdi
callq 0x64b0
nop