// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_hlsl.cpp
// Function: spirv_cross::CompilerHLSL::compile[abi:cxx11]()
string CompilerHLSL::compile()
{
	// Do not deal with ES-isms like precision, older extensions and such.
	options.es = false;
	options.version = 450;
	options.vulkan_semantics = true;
	backend.float_literal_suffix = true;
	backend.double_literal_suffix = false;
	backend.half_literal_suffix = nullptr;
	backend.long_long_literal_suffix = true;
	backend.uint32_t_literal_suffix = true;
	backend.basic_int_type = "int";
	backend.basic_uint_type = "uint";
	backend.swizzle_is_function = false;
	backend.shared_is_implied = true;
	backend.flexible_member_array_supported = false;
	backend.explicit_struct_type = false;
	backend.use_initializer_list = true;
	backend.use_constructor_splatting = false;
	backend.boolean_mix_support = false;
	backend.can_swizzle_scalar = true;
	backend.can_declare_struct_inline = false;
	backend.can_declare_arrays_inline = false;
	backend.can_return_array = false;

	build_function_control_flow_graphs_and_analyze();
	update_active_builtins();
	analyze_image_and_sampler_usage();

	// Subpass input needs SV_Position.
	if (need_subpass_input)
		active_input_builtins.set(BuiltInFragCoord);

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

		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());
		emit_hlsl_entry_point();

		pass_count++;
	} while (force_recompile);

	// Entry point in HLSL 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 $0x58, %rsp
movq %rsi, %r14
movq %rdi, 0x8(%rsp)
xorl %eax, %eax
movb %al, 0x43c(%rsi)
movl $0x1c2, 0x438(%rsi)     # imm = 0x1C2
movb $0x1, %bl
movb %bl, 0x43e(%rsi)
movl $0x1010001, 0x600(%rsi) # imm = 0x1010001
movq $0x0, 0x618(%rsi)
leaq 0x44541(%rip), %rcx     # 0xb835f
movq %rcx, 0x608(%rsi)
leaq 0x4fc2a(%rip), %rcx     # 0xc3a56
movq %rcx, 0x610(%rsi)
movl $0x100, 0x620(%rsi)     # imm = 0x100
movb %bl, 0x624(%rsi)
movw %ax, 0x629(%rsi)
movb %bl, 0x62c(%rsi)
movw %ax, 0x626(%rsi)
movb %al, 0x62e(%rsi)
movq %rsi, %rdi
callq 0x1aa86
movq %r14, %rdi
callq 0x1a798
movq %r14, %rdi
callq 0x1a85c
cmpb %bl, 0x398(%r14)
jne 0x73e86
orb $-0x80, 0x2d1(%r14)
leaq 0x18(%rsp), %r15
leaq 0x48(%rsp), %rbp
movl $0x4, %ebx
leaq 0x10(%rsp), %r12
decl %ebx
je 0x73fa9
movq %r14, %rdi
callq 0x260dc
movl $0x178, %edi            # imm = 0x178
callq 0x6250
movq %rax, %r13
movq %rax, %rdi
callq 0x6370
movq 0x420(%r14), %rdi
movq %r13, 0x420(%r14)
testq %rdi, %rdi
je 0x73ed8
movq (%rdi), %rax
callq *0x8(%rax)
movq (%r14), %rax
movq %r14, %rdi
callq *0x78(%rax)
movq %r14, %rdi
callq 0x6638c
movl 0x108(%r14), %esi
movq %r14, %rdi
callq 0xb9ca
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movaps %xmm0, 0x20(%rsp)
movaps %xmm0, 0x40(%rsp)
movaps %xmm0, 0x30(%rsp)
movq %rbp, 0x18(%rsp)
movq $0x1, 0x20(%rsp)
movups %xmm0, 0x10(%r15)
movl $0x3f800000, 0x38(%rsp) # imm = 0x3F800000
movups %xmm0, 0x28(%r15)
movq %r14, %rdi
movq %rax, %rsi
movq %r12, %rdx
callq 0x2736e
movq %r15, %rdi
callq 0xd5b0
movq %r14, %rdi
callq 0x69e44
cmpb $0x0, 0x1d0(%r14)
jne 0x73e9a
movq %r14, %rdi
callq 0x16254
movq 0x10(%rax), %rdx
leaq 0x8(%rax), %rdi
leaq 0x4ab63(%rip), %rcx     # 0xbead5
movl $0x4, %r8d
xorl %esi, %esi
callq 0x63f0
movq 0x420(%r14), %rsi
addq $0x8, %rsi
movq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x6410
movq %rbx, %rax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x4141a(%rip), %rsi     # 0xb53e0
leaq 0x41444(%rip), %rdx     # 0xb5411
leaq 0x10(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0x88daa(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0x88d82(%rip), %rsi     # 0xfcd80
movq 0x89fd3(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
movq %rax, %r14
movq 0x10(%rsp), %rdi
cmpq %r15, %rdi
je 0x7402f
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x7402f
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0x7405b
movq %rbx, %rdi
callq 0x6200
jmp 0x7405b
movq %rax, %r14
movl $0x178, %esi            # imm = 0x178
movq %r13, %rdi
callq 0x6260
jmp 0x7405b
movq %rax, %r14
movq %r15, %rdi
callq 0xd5b0
movq %r14, %rdi
callq 0x64a0
nop