// File: /workspace/github_cpp_makefile_star2_O3/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 0xab226(%rip), %r14     # 0xb48af
movq %r14, %rsi
callq 0xa6c4
leaq 0xaad7a(%rip), %rsi     # 0xb4412
movq %rbx, %rdi
callq 0xb9fc
movq %rbx, %rdi
callq 0x281d8
leaq 0x7a0(%rbx), %r15
leaq 0xaad8e(%rip), %rsi     # 0xb4444
leaq 0xb5432(%rip), %rcx     # 0xbeaef
movq %rbx, %rdi
movq %r15, %rdx
callq 0xbb02
movq %rbx, %rdi
callq 0x42d5a
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa6c4
leaq 0xaad6e(%rip), %rsi     # 0xb4450
movq %rbx, %rdi
callq 0xbc64
movq %rbx, %rdi
callq 0x281d8
leaq 0xaad8f(%rip), %rsi     # 0xb4488
leaq 0xaad9c(%rip), %rcx     # 0xb449c
movq %rbx, %rdi
movq %r15, %rdx
callq 0xbd6a
movq %rbx, %rdi
callq 0x42d5a
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa6c4
leaq 0xaad83(%rip), %rsi     # 0xb44a8
movq %rbx, %rdi
callq 0xbecc
movq %rbx, %rdi
callq 0x281d8
leaq 0xaad53(%rip), %rsi     # 0xb448f
leaq 0xaad9b(%rip), %rcx     # 0xb44de
movq %rbx, %rdi
movq %r15, %rdx
callq 0xbfd2
movq %rbx, %rdi
callq 0x42d5a
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa6c4
leaq 0xaad8c(%rip), %rsi     # 0xb44f4
movq %rbx, %rdi
callq 0xc134
movq %rbx, %rdi
callq 0x281d8
leaq 0xaada8(%rip), %rsi     # 0xb4527
movq %rbx, %rdi
callq 0xc23a
leaq 0xaadb0(%rip), %rsi     # 0xb453e
movq %rbx, %rdi
callq 0xc340
leaq 0xaadb7(%rip), %rsi     # 0xb4554
movq %rbx, %rdi
callq 0xc446
movq %rbx, %rdi
callq 0x28270
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa6c4
movq 0x7f0(%rbx), %rdx
leaq 0x10(%rsp), %rax
testq %rdx, %rdx
je 0x97e1
movq %rax, -0x10(%rax)
movq 0x7e8(%rbx), %rsi
addq %rsi, %rdx
movq %rsp, %rdi
callq 0xe456
jmp 0x97fb
movq %rax, -0x10(%rax)
leaq 0xaada1(%rip), %rsi     # 0xb458d
leaq 0xaadb3(%rip), %rdx     # 0xb45a6
movq %rsp, %rdi
callq 0x7be0
leaq 0xaad66(%rip), %rsi     # 0xb4568
leaq 0xaac34(%rip), %rcx     # 0xb443d
movq %rsp, %rdx
movq %rbx, %rdi
callq 0xc54c
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x982f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq %rbx, %rdi
callq 0x281d8
leaq 0xaad69(%rip), %rsi     # 0xb45a7
movq %rbx, %rdi
callq 0xc6ae
movq %rbx, %rdi
callq 0x42d5a
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 0x9876
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq %rbx, %rdi
callq 0x64a0