// File: rossy[P]crossc/SPIRV-Cross/spirv_cpp.cpp
// Function: spirv_cross::CompilerCPP::argument_decl[abi:cxx11](spirv_cross::SPIRFunction::Parameter const&)
string CompilerCPP::argument_decl(const SPIRFunction::Parameter &arg)
{
	auto &type = expression_type(arg.id);
	bool constref = !type.pointer || arg.write_count == 0;

	auto &var = get<SPIRVariable>(arg.id);

	string base = type_to_glsl(type);
	string variable_name = to_name(var.self);
	remap_variable_type_name(type, variable_name, base);

	for (uint32_t i = 0; i < type.array.size(); i++)
		base = join("std::array<", base, ", ", to_array_size(type, i), ">");

	return join(constref ? "const " : "", base, " &", variable_name);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0xe8(%rbp)
movq %rdi, %rax
movq %rax, -0xe0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0xd8(%rbp)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %esi
callq 0x1f760
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rcx
movb $0x1, %al
testb $0x1, 0x60(%rcx)
movb %al, -0xc9(%rbp)
je 0xe1b6
movq -0x18(%rbp), %rax
cmpl $0x0, 0xc(%rax)
sete %al
movb %al, -0xc9(%rbp)
movq -0xd8(%rbp), %rdi
movb -0xc9(%rbp), %al
andb $0x1, %al
movb %al, -0x21(%rbp)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %esi
callq 0xfec0
movq -0xd8(%rbp), %rsi
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rdx
movq (%rsi), %rax
movq 0x98(%rax), %rax
leaq -0x50(%rbp), %rdi
xorl %ecx, %ecx
callq *%rax
movq -0xd8(%rbp), %rsi
movq -0x30(%rbp), %rax
movl 0x8(%rax), %edx
movq (%rsi), %rax
movq 0x38(%rax), %rax
leaq -0x70(%rbp), %rdi
movl $0x1, %ecx
callq *%rax
jmp 0xe217
movq -0xd8(%rbp), %rdi
movq -0x20(%rbp), %rsi
leaq -0x70(%rbp), %rdx
leaq -0x50(%rbp), %rcx
callq 0xf3f0
jmp 0xe231
movl $0x0, -0x80(%rbp)
movl -0x80(%rbp), %eax
movq %rax, -0xf0(%rbp)
movq -0x20(%rbp), %rdi
addq $0x20, %rdi
callq 0x8650
movq %rax, %rcx
movq -0xf0(%rbp), %rax
cmpq %rcx, %rax
jae 0xe31b
movq -0xd8(%rbp), %rsi
movq -0x20(%rbp), %rdx
movl -0x80(%rbp), %ecx
leaq -0xc0(%rbp), %rdi
callq 0x85c10
jmp 0xe27e
leaq 0x130329(%rip), %rsi    # 0x13e5ae
leaq 0x136303(%rip), %rcx    # 0x14458f
leaq 0x12ff58(%rip), %r9     # 0x13e1eb
leaq -0xa0(%rbp), %rdi
leaq -0x50(%rbp), %rdx
leaq -0xc0(%rbp), %r8
callq 0x11730
jmp 0xe2ac
leaq -0x50(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x7430
leaq -0xa0(%rbp), %rdi
callq 0x7708
leaq -0xc0(%rbp), %rdi
callq 0x7708
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0xe238
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xe389
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0xe380
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x7708
jmp 0xe380
movq -0xe8(%rbp), %rdi
movb -0x21(%rbp), %dl
leaq 0x13334f(%rip), %rcx    # 0x14167b
leaq 0x13056b(%rip), %rax    # 0x13e89e
testb $0x1, %dl
cmovneq %rcx, %rax
movq %rax, -0xc8(%rbp)
leaq 0x13ea80(%rip), %rcx    # 0x14cdc8
leaq -0xc8(%rbp), %rsi
leaq -0x50(%rbp), %rdx
leaq -0x70(%rbp), %r8
callq 0x11800
jmp 0xe35e
leaq -0x70(%rbp), %rdi
callq 0x7708
leaq -0x50(%rbp), %rdi
callq 0x7708
movq -0xe0(%rbp), %rax
addq $0xf0, %rsp
popq %rbp
retq
leaq -0x70(%rbp), %rdi
callq 0x7708
leaq -0x50(%rbp), %rdi
callq 0x7708
movq -0x78(%rbp), %rdi
callq 0x7640
nopl (%rax,%rax)