// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cpp.cpp
// Function: spirv_cross::CompilerCPP::emit_c_linkage()
void CompilerCPP::emit_c_linkage()
{
	statement("");

	statement("spirv_cross_shader_t *spirv_cross_construct(void)");
	begin_scope();
	statement("return new ", impl_type, "();");
	end_scope();

	statement("");
	statement("void spirv_cross_destruct(spirv_cross_shader_t *shader)");
	begin_scope();
	statement("delete static_cast<", impl_type, "*>(shader);");
	end_scope();

	statement("");
	statement("void spirv_cross_invoke(spirv_cross_shader_t *shader)");
	begin_scope();
	statement("static_cast<", impl_type, "*>(shader)->invoke();");
	end_scope();

	statement("");
	statement("static const struct spirv_cross_interface vtable =");
	begin_scope();
	statement("spirv_cross_construct,");
	statement("spirv_cross_destruct,");
	statement("spirv_cross_invoke,");
	end_scope_decl();

	statement("");
	statement("const struct spirv_cross_interface *",
	          interface_name.empty() ? string("spirv_cross_get_interface") : interface_name, "(void)");
	begin_scope();
	statement("return &vtable;");
	end_scope();
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x20, %rsp
movq %rdi, %rbx
leaq 0xac1d2(%rip), %r14     # 0xb58af
movq %r14, %rsi
callq 0xa700
leaq 0xabd26(%rip), %rsi     # 0xb5412
movq %rbx, %rdi
callq 0xba3c
movq %rbx, %rdi
callq 0x28804
leaq 0x7a0(%rbx), %r15
leaq 0xabd3a(%rip), %rsi     # 0xb5444
leaq 0xb63d6(%rip), %rcx     # 0xbfae7
movq %rbx, %rdi
movq %r15, %rdx
callq 0xbb42
movq %rbx, %rdi
callq 0x4358a
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa700
leaq 0xabd1a(%rip), %rsi     # 0xb5450
movq %rbx, %rdi
callq 0xbca4
movq %rbx, %rdi
callq 0x28804
leaq 0xabd3b(%rip), %rsi     # 0xb5488
leaq 0xabd48(%rip), %rcx     # 0xb549c
movq %rbx, %rdi
movq %r15, %rdx
callq 0xbdaa
movq %rbx, %rdi
callq 0x4358a
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa700
leaq 0xabd2f(%rip), %rsi     # 0xb54a8
movq %rbx, %rdi
callq 0xbf0c
movq %rbx, %rdi
callq 0x28804
leaq 0xabcff(%rip), %rsi     # 0xb548f
leaq 0xabd47(%rip), %rcx     # 0xb54de
movq %rbx, %rdi
movq %r15, %rdx
callq 0xc012
movq %rbx, %rdi
callq 0x4358a
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa700
leaq 0xabd38(%rip), %rsi     # 0xb54f4
movq %rbx, %rdi
callq 0xc174
movq %rbx, %rdi
callq 0x28804
leaq 0xabd54(%rip), %rsi     # 0xb5527
movq %rbx, %rdi
callq 0xc27a
leaq 0xabd5c(%rip), %rsi     # 0xb553e
movq %rbx, %rdi
callq 0xc380
leaq 0xabd63(%rip), %rsi     # 0xb5554
movq %rbx, %rdi
callq 0xc486
movq %rbx, %rdi
callq 0x2889c
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa700
movq 0x7f0(%rbx), %rdx
leaq 0x10(%rsp), %rax
testq %rdx, %rdx
je 0x9835
movq %rax, -0x10(%rax)
movq 0x7e8(%rbx), %rsi
addq %rsi, %rdx
movq %rsp, %rdi
callq 0xe480
jmp 0x984f
movq %rax, -0x10(%rax)
leaq 0xabd4d(%rip), %rsi     # 0xb558d
leaq 0xabd5f(%rip), %rdx     # 0xb55a6
movq %rsp, %rdi
callq 0x7c64
leaq 0xabd12(%rip), %rsi     # 0xb5568
leaq 0xabbe0(%rip), %rcx     # 0xb543d
movq %rsp, %rdx
movq %rbx, %rdi
callq 0xc58c
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x9883
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq %rbx, %rdi
callq 0x28804
leaq 0xabd15(%rip), %rsi     # 0xb55a7
movq %rbx, %rdi
callq 0xc6ee
movq %rbx, %rdi
callq 0x4358a
addq $0x20, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x98ca
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq %rbx, %rdi
callq 0x64a0