LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cross_parsed_ir.cpp
// Function: spirv_cross::ParsedIR::get_member_decoration_bitset(unsigned int, unsigned int) const
const Bitset &ParsedIR::get_member_decoration_bitset(uint32_t id, uint32_t index) const
{
	auto &m = meta[id];
	if (index >= m.members.size())
	{
		static const Bitset cleared = {};
		return cleared;
	}

	return m.members[index].decoration_flags;
}

// Assembly:
movl %esi, %ecx
movq 0x30(%rdi), %rsi
movl %edx, %eax
imulq $0x148, %rcx, %rdx      # imm = 0x148
movq 0xd0(%rsi,%rdx), %rcx
movq 0xd8(%rsi,%rdx), %rdx
subq %rcx, %rdx
sarq $0x4, %rdx
movabsq $0x4ec4ec4ec4ec4ec5, %rsi # imm = 0x4EC4EC4EC4EC4EC5
imulq %rdx, %rsi
cmpq %rax, %rsi
jbe 0x24f8e
imulq $0xd0, %rax, %rax
addq %rcx, %rax
addq $0x60, %rax
retq
movb 0xd95bc(%rip), %al      # 0xfe550
testb %al, %al
je 0x24fa0
leaq 0xd9571(%rip), %rax     # 0xfe510
retq
pushq %rbx
subq $0x10, %rsp
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x6b85
movq (%rbx), %rax
addq $0x10, %rsp
popq %rbx
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cross_parsed_ir.cpp
// Function: spirv_cross::ParsedIR::get_decoration(unsigned int, spv::Decoration) const
uint32_t ParsedIR::get_decoration(uint32_t id, Decoration decoration) const
{
	auto &dec = meta[id].decoration;
	if (!dec.decoration_flags.get(decoration))
		return 0;

	switch (decoration)
	{
	case DecorationBuiltIn:
		return dec.builtin_type;
	case DecorationLocation:
		return dec.location;
	case DecorationComponent:
		return dec.component;
	case DecorationOffset:
		return dec.offset;
	case DecorationBinding:
		return dec.binding;
	case DecorationDescriptorSet:
		return dec.set;
	case DecorationInputAttachmentIndex:
		return dec.input_attachment;
	case DecorationSpecId:
		return dec.spec_id;
	case DecorationArrayStride:
		return dec.array_stride;
	case DecorationMatrixStride:
		return dec.matrix_stride;
	case DecorationIndex:
		return dec.index;
	default:
		return 1;
	}
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebx
movl %esi, %eax
imulq $0x148, %rax, %r14      # imm = 0x148
addq 0x30(%rdi), %r14
movl %edx, 0x4(%rsp)
cmpl $0x3f, %edx
ja 0x25042
movl $0x1, %eax
movl %ebx, %ecx
shlq %cl, %rax
andq 0x60(%r14), %rax
jmp 0x25050
leaq 0x68(%r14), %rdi
leaq 0x4(%rsp), %rsi
callq 0x1fbce
testq %rax, %rax
je 0x25080
movl $0x1, %eax
cmpl $0xa, %ebx
jle 0x2508a
leal -0x1e(%rbx), %ecx
cmpl $0xd, %ecx
ja 0x250b4
leaq 0x9145a(%rip), %rdx     # 0xb64c8
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movl 0xa4(%r14), %eax
jmp 0x25082
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
cmpl $0x1, %ebx
je 0x250a2
cmpl $0x6, %ebx
je 0x250ab
cmpl $0x7, %ebx
jne 0x25082
movl 0xbc(%r14), %eax
jmp 0x25082
movl 0xc4(%r14), %eax
jmp 0x25082
movl 0xb8(%r14), %eax
jmp 0x25082
cmpl $0xb, %ebx
jne 0x25082
movl 0xa0(%r14), %eax
jmp 0x25082
movl 0xb4(%r14), %eax
jmp 0x25082
movl 0xac(%r14), %eax
jmp 0x25082
movl 0xc8(%r14), %eax
jmp 0x25082
movl 0xb0(%r14), %eax
jmp 0x25082
movl 0xa8(%r14), %eax
jmp 0x25082
movl 0xc0(%r14), %eax
jmp 0x25082
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cross_parsed_ir.cpp
// Function: spirv_cross::ParsedIR::get_decoration_string[abi:cxx11](unsigned int, spv::Decoration) const
const string &ParsedIR::get_decoration_string(uint32_t id, Decoration decoration) const
{
	auto &dec = meta[id].decoration;
	static const string empty;

	if (!dec.decoration_flags.get(decoration))
		return empty;

	switch (decoration)
	{
	case DecorationHlslSemanticGOOGLE:
		return dec.hlsl_semantic;

	default:
		return empty;
	}
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %edx, %ebx
movl %esi, %eax
imulq $0x148, %rax, %r14      # imm = 0x148
addq 0x30(%rdi), %r14
movb 0xd9467(%rip), %al      # 0xfe578
testb %al, %al
je 0x25163
movl %ebx, 0x4(%rsp)
cmpl $0x3f, %ebx
ja 0x2512e
movl $0x1, %eax
movl %ebx, %ecx
shlq %cl, %rax
andq 0x60(%r14), %rax
jmp 0x2513c
leaq 0x68(%r14), %rdi
leaq 0x4(%rsp), %rsi
callq 0x1fbce
addq $0x40, %r14
testq %rax, %rax
leaq 0xd940e(%rip), %rax     # 0xfe558
cmoveq %rax, %r14
cmpl $0x1603, %ebx           # imm = 0x1603
cmovneq %rax, %r14
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
callq 0x6c14
jmp 0x25115
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cross_parsed_ir.cpp
// Function: spirv_cross::ParsedIR::unset_decoration(unsigned int, spv::Decoration)
void ParsedIR::unset_decoration(uint32_t id, Decoration decoration)
{
	auto &dec = meta[id].decoration;
	dec.decoration_flags.clear(decoration);
	switch (decoration)
	{
	case DecorationBuiltIn:
		dec.builtin = false;
		break;

	case DecorationLocation:
		dec.location = 0;
		break;

	case DecorationComponent:
		dec.component = 0;
		break;

	case DecorationOffset:
		dec.offset = 0;
		break;

	case DecorationBinding:
		dec.binding = 0;
		break;

	case DecorationDescriptorSet:
		dec.set = 0;
		break;

	case DecorationInputAttachmentIndex:
		dec.input_attachment = 0;
		break;

	case DecorationSpecId:
		dec.spec_id = 0;
		break;

	case DecorationHlslSemanticGOOGLE:
		dec.hlsl_semantic.clear();
		break;

	case DecorationHlslCounterBufferGOOGLE:
	{
		auto &counter = meta[id].hlsl_magic_counter_buffer;
		if (counter)
		{
			meta[counter].hlsl_is_magic_counter_buffer = false;
			counter = 0;
		}
		break;
	}

	default:
		break;
	}
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movl %edx, %ebx
movq %rdi, %r14
movl %esi, %eax
imulq $0x148, %rax, %r12      # imm = 0x148
movq 0x30(%rdi), %r15
addq %r12, %r15
movl %edx, 0x4(%rsp)
cmpl $0x3f, %edx
ja 0x251a2
movq $-0x2, %rax
movl %ebx, %ecx
rolq %cl, %rax
andq %rax, 0x60(%r15)
jmp 0x251b0
leaq 0x68(%r15), %rdi
leaq 0x4(%rsp), %rsi
callq 0x1f038
cmpl $0x1d, %ebx
jle 0x251dd
leal -0x1e(%rbx), %eax
cmpl $0xd, %eax
ja 0x251f8
leaq 0x9133c(%rip), %rcx     # 0xb6500
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x0, 0xa4(%r15)
jmp 0x2529c
cmpl $0x1, %ebx
je 0x2525e
cmpl $0xb, %ebx
jne 0x2529c
movb $0x0, 0xcc(%r15)
jmp 0x2529c
cmpl $0x1602, %ebx           # imm = 0x1602
je 0x2526b
cmpl $0x1603, %ebx           # imm = 0x1603
jne 0x2529c
movq $0x0, 0x48(%r15)
movq 0x40(%r15), %rax
movb $0x0, (%rax)
jmp 0x2529c
movl $0x0, 0xb0(%r15)
jmp 0x2529c
movl $0x0, 0xc0(%r15)
jmp 0x2529c
movl $0x0, 0xa8(%r15)
jmp 0x2529c
movl $0x0, 0xb4(%r15)
jmp 0x2529c
movl $0x0, 0xac(%r15)
jmp 0x2529c
movl $0x0, 0xc4(%r15)
jmp 0x2529c
movq 0x30(%r14), %rax
movl 0x144(%rax,%r12), %ecx
testq %rcx, %rcx
je 0x2529c
leaq (%rax,%r12), %rdx
addq $0x144, %rdx            # imm = 0x144
imulq $0x148, %rcx, %rcx      # imm = 0x148
movb $0x0, 0x141(%rax,%rcx)
movl $0x0, (%rdx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cross_parsed_ir.cpp
// Function: spirv_cross::ParsedIR::get_member_decoration(unsigned int, unsigned int, spv::Decoration) const
uint32_t ParsedIR::get_member_decoration(uint32_t id, uint32_t index, Decoration decoration) const
{
	auto &m = meta[id];
	if (index >= m.members.size())
		return 0;

	auto &dec = m.members[index];
	if (!dec.decoration_flags.get(decoration))
		return 0;

	switch (decoration)
	{
	case DecorationBuiltIn:
		return dec.builtin_type;
	case DecorationLocation:
		return dec.location;
	case DecorationComponent:
		return dec.component;
	case DecorationBinding:
		return dec.binding;
	case DecorationOffset:
		return dec.offset;
	case DecorationSpecId:
		return dec.spec_id;
	case DecorationIndex:
		return dec.index;
	default:
		return 1;
	}
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movl %ecx, %r14d
movl %esi, %ecx
movq 0x30(%rdi), %rsi
movl %edx, %eax
imulq $0x148, %rcx, %rcx      # imm = 0x148
movq 0xd0(%rsi,%rcx), %r15
movq 0xd8(%rsi,%rcx), %rcx
subq %r15, %rcx
sarq $0x4, %rcx
movabsq $0x4ec4ec4ec4ec4ec5, %rdx # imm = 0x4EC4EC4EC4EC4EC5
imulq %rcx, %rdx
xorl %ebx, %ebx
cmpq %rax, %rdx
jbe 0x253d7
imulq $0xd0, %rax, %rax
addq %rax, %r15
movl %r14d, 0xc(%rsp)
cmpl $0x3f, %r14d
ja 0x2535d
movl $0x1, %eax
movl %r14d, %ecx
shlq %cl, %rax
andq 0x60(%r15), %rax
jmp 0x2536b
leaq 0x68(%r15), %rdi
leaq 0xc(%rsp), %rsi
callq 0x1fbce
testq %rax, %rax
je 0x253d7
movl $0x1, %ebx
leal -0x1e(%r14), %eax
cmpl $0x5, %eax
ja 0x25397
leaq 0x911b3(%rip), %rcx     # 0xb6538
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xa4(%r15), %ebx
jmp 0x253d7
cmpl $0x1, %r14d
je 0x253d0
cmpl $0xb, %r14d
jne 0x253d7
movl 0xa0(%r15), %ebx
jmp 0x253d7
movl 0xa8(%r15), %ebx
jmp 0x253d7
movl 0xc8(%r15), %ebx
jmp 0x253d7
movl 0xb0(%r15), %ebx
jmp 0x253d7
movl 0xb4(%r15), %ebx
jmp 0x253d7
movl 0xc4(%r15), %ebx
movl %ebx, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cross_parsed_ir.cpp
// Function: spirv_cross::ParsedIR::set_member_decoration_string(unsigned int, unsigned int, spv::Decoration, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void ParsedIR::set_member_decoration_string(uint32_t id, uint32_t index, Decoration decoration, const string &argument)
{
	meta[id].members.resize(max(meta[id].members.size(), size_t(index) + 1));
	auto &dec = meta[id].members[index];
	dec.decoration_flags.set(decoration);

	switch (decoration)
	{
	case DecorationHlslSemanticGOOGLE:
		dec.hlsl_semantic = argument;
		break;

	default:
		break;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %r8, %rbx
movl %ecx, %ebp
movq %rdi, %r14
movl %esi, %eax
movq 0x30(%rdi), %rcx
imulq $0x148, %rax, %r15      # imm = 0x148
leaq 0xd0(%r15), %rdi
addq %rcx, %rdi
movq 0xd8(%rcx,%r15), %rax
subq 0xd0(%rcx,%r15), %rax
sarq $0x4, %rax
movabsq $0x4ec4ec4ec4ec4ec5, %rsi # imm = 0x4EC4EC4EC4EC4EC5
imulq %rax, %rsi
movl %edx, %r12d
leaq 0x1(%r12), %rax
cmpq %rax, %rsi
cmovbeq %rax, %rsi
callq 0x1bf8e
movq 0x30(%r14), %rax
imulq $0xd0, %r12, %r14
addq 0xd0(%rax,%r15), %r14
movl %ebp, 0x4(%rsp)
cmpl $0x3f, %ebp
ja 0x25471
movl $0x1, %eax
movl %ebp, %ecx
shlq %cl, %rax
orq %rax, 0x60(%r14)
jmp 0x25487
leaq 0x68(%r14), %rdi
leaq 0x8(%rsp), %rdx
movq %rdi, (%rdx)
leaq 0x4(%rsp), %rsi
callq 0x1fc02
cmpl $0x1603, %ebp           # imm = 0x1603
jne 0x2549e
addq $0x40, %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x6170
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cross_parsed_ir.cpp
// Function: spirv_cross::ParsedIR::get_member_decoration_string[abi:cxx11](unsigned int, unsigned int, spv::Decoration) const
const string &ParsedIR::get_member_decoration_string(uint32_t id, uint32_t index, Decoration decoration) const
{
	static const string empty;
	auto &m = meta[id];

	if (!has_member_decoration(id, index, decoration))
		return empty;

	auto &dec = m.members[index];

	switch (decoration)
	{
	case DecorationHlslSemanticGOOGLE:
		return dec.hlsl_semantic;

	default:
		return empty;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %ecx, %ebx
movl %edx, %ebp
movl %esi, %r14d
movq %rdi, %r15
movb 0xd90dc(%rip), %al      # 0xfe5a0
testb %al, %al
je 0x25522
movq 0x30(%r15), %r12
movq %r15, %rdi
movl %r14d, %esi
movl %ebp, %edx
movl %ebx, %ecx
callq 0x252a8
testb %al, %al
je 0x25512
movl %r14d, %eax
imulq $0x148, %rax, %rax      # imm = 0x148
movl %ebp, %ecx
movq 0xd0(%r12,%rax), %rax
imulq $0xd0, %rcx, %rcx
cmpl $0x1603, %ebx           # imm = 0x1603
leaq 0x40(%rax,%rcx), %rcx
leaq 0xd9074(%rip), %rax     # 0xfe580
cmoveq %rcx, %rax
jmp 0x25519
leaq 0xd9067(%rip), %rax     # 0xfe580
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
callq 0x6c6b
jmp 0x254c8
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cross_parsed_ir.cpp
// Function: spirv_cross::ParsedIR::unset_member_decoration(unsigned int, unsigned int, spv::Decoration)
void ParsedIR::unset_member_decoration(uint32_t id, uint32_t index, Decoration decoration)
{
	auto &m = meta[id];
	if (index >= m.members.size())
		return;

	auto &dec = m.members[index];

	dec.decoration_flags.clear(decoration);
	switch (decoration)
	{
	case DecorationBuiltIn:
		dec.builtin = false;
		break;

	case DecorationLocation:
		dec.location = 0;
		break;

	case DecorationComponent:
		dec.component = 0;
		break;

	case DecorationOffset:
		dec.offset = 0;
		break;

	case DecorationSpecId:
		dec.spec_id = 0;
		break;

	case DecorationHlslSemanticGOOGLE:
		dec.hlsl_semantic.clear();
		break;

	default:
		break;
	}
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %ecx, %ebx
movl %esi, %ecx
movq 0x30(%rdi), %rsi
movl %edx, %eax
imulq $0x148, %rcx, %rcx      # imm = 0x148
movq 0xd0(%rsi,%rcx), %r14
movq 0xd8(%rsi,%rcx), %rcx
subq %r14, %rcx
sarq $0x4, %rcx
movabsq $0x4ec4ec4ec4ec4ec5, %rdx # imm = 0x4EC4EC4EC4EC4EC5
imulq %rcx, %rdx
cmpq %rax, %rdx
jbe 0x25613
imulq $0xd0, %rax, %rax
addq %rax, %r14
movl %ebx, 0x4(%rsp)
cmpl $0x3f, %ebx
ja 0x25592
movq $-0x2, %rax
movl %ebx, %ecx
rolq %cl, %rax
andq %rax, 0x60(%r14)
jmp 0x255a0
leaq 0x68(%r14), %rdi
leaq 0x4(%rsp), %rsi
callq 0x1f038
cmpl $0x1e, %ebx
jg 0x255c1
cmpl $0x1, %ebx
je 0x255e4
cmpl $0xb, %ebx
je 0x255fe
cmpl $0x1e, %ebx
jne 0x25613
movl $0x0, 0xa4(%r14)
jmp 0x25613
cmpl $0x1f, %ebx
je 0x255f1
cmpl $0x23, %ebx
je 0x25608
cmpl $0x1603, %ebx           # imm = 0x1603
jne 0x25613
movq $0x0, 0x48(%r14)
movq 0x40(%r14), %rax
movb $0x0, (%rax)
jmp 0x25613
movl $0x0, 0xc4(%r14)
jmp 0x25613
movl $0x0, 0xa8(%r14)
jmp 0x25613
movb $0x0, 0xcc(%r14)
jmp 0x25613
movl $0x0, 0xb4(%r14)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_cross_parsed_ir.cpp
// Function: spirv_cross::ParsedIR::increase_bound_by(unsigned int)
uint32_t ParsedIR::increase_bound_by(uint32_t incr_amount)
{
	auto curr_bound = ids.size();
	auto new_bound = curr_bound + incr_amount;
	ids.resize(new_bound);
	meta.resize(new_bound);
	block_meta.resize(new_bound);
	return uint32_t(curr_bound);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq 0x20(%rdi), %r14
subq 0x18(%rdi), %r14
addq $0x18, %rdi
sarq $0x4, %r14
movl %esi, %r15d
addq %r14, %r15
movq %r15, %rsi
callq 0x25666
leaq 0x30(%rbx), %rdi
movq %r15, %rsi
callq 0x256e2
addq $0x78, %rbx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x25762
movl %r14d, %eax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::sanitize_underscores(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
string CompilerGLSL::sanitize_underscores(const string &str)
{
	string res;
	res.reserve(str.size());

	bool last_underscore = false;
	for (auto c : str)
	{
		if (c == '_')
		{
			if (last_underscore)
				continue;

			res += c;
			last_underscore = true;
		}
		else
		{
			res += c;
			last_underscore = false;
		}
	}
	return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x10(%rdi), %r15
movq %r15, (%rdi)
movq $0x0, 0x8(%rdi)
movb $0x0, 0x10(%rdi)
movq 0x8(%rsi), %rsi
callq 0x6400
movq 0x8(%r14), %r12
testq %r12, %r12
je 0x260a9
movq (%r14), %r14
xorl %r13d, %r13d
xorl %ebp, %ebp
movb (%r14,%r13), %al
cmpb $0x5f, %al
jne 0x26094
testb $0x1, %bpl
jne 0x260a1
movb $0x1, %bpl
movsbl %al, %esi
movq %rbx, %rdi
callq 0x6230
jmp 0x260a1
movsbl %al, %esi
movq %rbx, %rdi
callq 0x6230
xorl %ebp, %ebp
incq %r13
cmpq %r13, %r12
jne 0x26076
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x260bd
movq %rax, %r14
movq (%rbx), %rdi
cmpq %r15, %rdi
je 0x260d3
movq (%r15), %rsi
incq %rsi
callq 0x6260
movq %r14, %rdi
callq 0x64a0
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::reset()
void CompilerGLSL::reset()
{
	// We do some speculative optimizations which should pretty much always work out,
	// but just in case the SPIR-V is rather weird, recompile until it's happy.
	// This typically only means one extra pass.
	force_recompile = false;

	// Clear invalid expression tracking.
	invalid_expressions.clear();
	current_function = nullptr;

	// Clear temporary usage tracking.
	expression_usage_counts.clear();
	forwarded_temporaries.clear();

	resource_names.clear();
	block_input_names.clear();
	block_output_names.clear();
	block_ubo_names.clear();
	block_ssbo_names.clear();
	function_overloads.clear();

	for (auto &id : ir.ids)
	{
		if (id.get_type() == TypeVariable)
		{
			// Clear unflushed dependees.
			id.get<SPIRVariable>().dependees.clear();
		}
		else if (id.get_type() == TypeExpression)
		{
			// And remove all expressions.
			id.reset();
		}
		else if (id.get_type() == TypeFunction)
		{
			// Reset active state for all functions.
			id.get<SPIRFunction>().active = false;
			id.get<SPIRFunction>().flush_undeclared = true;
		}
	}

	statement_count = 0;
	indent = 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
movb $0x0, 0x1d0(%rdi)
addq $0x198, %rdi            # imm = 0x198
callq 0xd540
movq $0x0, 0x148(%rbx)
leaq 0x6e8(%rbx), %rdi
callq 0xdd36
leaq 0x260(%rbx), %rdi
callq 0xd540
leaq 0x488(%rbx), %rdi
callq 0xd978
leaq 0x4c0(%rbx), %rdi
callq 0xd978
leaq 0x4f8(%rbx), %rdi
callq 0xd978
leaq 0x530(%rbx), %rdi
callq 0xd978
leaq 0x568(%rbx), %rdi
callq 0xd978
leaq 0x5a0(%rbx), %rdi
callq 0xdda6
movq 0x20(%rbx), %r14
movq 0x28(%rbx), %r15
cmpq %r15, %r14
je 0x261dd
movl 0x8(%r14), %eax
cmpl $0x9, %eax
je 0x261ba
cmpl $0x4, %eax
je 0x2619a
cmpl $0x2, %eax
jne 0x261d7
movq %r14, %rdi
callq 0xb2e2
movq 0x40(%rax), %rcx
cmpq %rcx, 0x48(%rax)
je 0x261d7
movq %rcx, 0x48(%rax)
jmp 0x261d7
movq %r14, %rdi
callq 0x10298
movb $0x0, 0xc8(%rax)
movq %r14, %rdi
callq 0x10298
movb $0x1, 0xc9(%rax)
jmp 0x261d7
movq (%r14), %rdi
movq $0x0, (%r14)
testq %rdi, %rdi
je 0x261cf
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x0, 0x8(%r14)
addq $0x10, %r14
jmp 0x2616a
xorl %eax, %eax
movl %eax, 0x750(%rbx)
movl %eax, 0x638(%rbx)
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::remap_pls_variables()
void CompilerGLSL::remap_pls_variables()
{
	for (auto &input : pls_inputs)
	{
		auto &var = get<SPIRVariable>(input.id);

		bool input_is_target = false;
		if (var.storage == StorageClassUniformConstant)
		{
			auto &type = get<SPIRType>(var.basetype);
			input_is_target = type.image.dim == DimSubpassData;
		}

		if (var.storage != StorageClassInput && !input_is_target)
			SPIRV_CROSS_THROW("Can only use in and target variables for PLS inputs.");
		var.remapped_variable = true;
	}

	for (auto &output : pls_outputs)
	{
		auto &var = get<SPIRVariable>(output.id);
		if (var.storage != StorageClassOutput)
			SPIRV_CROSS_THROW("Can only use out variables for PLS outputs.");
		var.remapped_variable = true;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x20, %rsp
movq %rdi, %rbx
movq 0x758(%rdi), %r15
movq 0x760(%rdi), %r12
cmpq %r12, %r15
je 0x26258
movl (%r15), %esi
movq %rbx, %rdi
callq 0xb40a
movq %rax, %r14
cmpl $0x0, 0x10(%rax)
je 0x2622c
xorl %eax, %eax
jmp 0x26242
movl 0xc(%r14), %esi
movq %rbx, %rdi
callq 0xa426
cmpl $0x6, 0x84(%rax)
sete %al
cmpl $0x1, 0x10(%r14)
je 0x2624d
testb %al, %al
je 0x26293
movb $0x1, 0x5b(%r14)
addq $0x8, %r15
jmp 0x2620f
movq 0x770(%rbx), %r14
movq 0x778(%rbx), %r15
cmpq %r15, %r14
je 0x26286
movl (%r14), %esi
movq %rbx, %rdi
callq 0xb40a
cmpl $0x3, 0x10(%rax)
jne 0x262f5
movb $0x1, 0x5b(%rax)
addq $0x8, %r14
jmp 0x26266
addq $0x20, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x91230(%rip), %rsi     # 0xb74e0
leaq 0x9125d(%rip), %rdx     # 0xb7514
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd6ac4(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd6a9c(%rip), %rsi     # 0xfcd80
movq 0xd7ced(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x26355
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x91203(%rip), %rsi     # 0xb7515
leaq 0x91227(%rip), %rdx     # 0xb7540
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd6a62(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd6a3a(%rip), %rsi     # 0xfcd80
movq 0xd7c8b(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x26359
jmp 0x26374
movq %rax, %r14
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x2637a
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2637a
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0x26387
movq %rbx, %rdi
callq 0x6200
movq %r14, %rdi
callq 0x64a0
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::add_member_name(spirv_cross::SPIRType&, unsigned int)
void CompilerGLSL::add_member_name(SPIRType &type, uint32_t index)
{
	auto &memb = ir.meta[type.self].members;
	if (index < memb.size() && !memb[index].alias.empty())
	{
		auto &name = memb[index].alias;
		if (name.empty())
			return;

		// Reserved for temporaries.
		if (name[0] == '_' && name.size() >= 2 && isdigit(name[1]))
		{
			name.clear();
			return;
		}

		update_name_cache(type.member_name_cache, name);
	}
}

// Assembly:
movl 0x8(%rsi), %eax
movq 0x38(%rdi), %rcx
imulq $0x148, %rax, %r8       # imm = 0x148
movl %edx, %eax
movq 0xd0(%rcx,%r8), %rdx
movq 0xd8(%rcx,%r8), %rcx
subq %rdx, %rcx
sarq $0x4, %rcx
movabsq $0x4ec4ec4ec4ec4ec5, %r8 # imm = 0x4EC4EC4EC4EC4EC5
imulq %rcx, %r8
cmpq %rax, %r8
jbe 0x2888f
imulq $0xd0, %rax, %rcx
movq 0x8(%rdx,%rcx), %rax
testq %rax, %rax
je 0x2888f
addq %rcx, %rdx
cmpq $0x1, %rax
je 0x28890
movq (%rdx), %rax
cmpb $0x5f, (%rax)
jne 0x28890
movsbl 0x1(%rax), %ecx
addl $-0x30, %ecx
cmpl $0x9, %ecx
ja 0x28890
movq $0x0, 0x8(%rdx)
movb $0x0, (%rax)
retq
addq $0xa0, %rsi
jmp 0x1489e
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::end_scope_decl()
void CompilerGLSL::end_scope_decl()
{
	if (!indent)
		SPIRV_CROSS_THROW("Popping empty indent stack.");
	indent--;
	statement("};");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x28, %rsp
movl 0x638(%rdi), %eax
testl %eax, %eax
je 0x288ce
decl %eax
movl %eax, 0x638(%rdi)
leaq 0x9a203(%rip), %rsi     # 0xc2ac2
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x59cce
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x932fe(%rip), %rsi     # 0xbbbe9
leaq 0x93312(%rip), %rdx     # 0xbbc04
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd4485(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd445d(%rip), %rsi     # 0xfcd80
movq 0xd56ae(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
movq %rax, %r14
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x28954
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x28954
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0x28961
movq %rbx, %rdi
callq 0x6200
movq %r14, %rdi
callq 0x64a0
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::to_interpolation_qualifiers[abi:cxx11](spirv_cross::Bitset const&)
string CompilerGLSL::to_interpolation_qualifiers(const Bitset &flags)
{
	string res;
	//if (flags & (1ull << DecorationSmooth))
	//    res += "smooth ";
	if (flags.get(DecorationFlat))
		res += "flat ";
	if (flags.get(DecorationNoPerspective))
		res += "noperspective ";
	if (flags.get(DecorationCentroid))
		res += "centroid ";
	if (flags.get(DecorationPatch))
		res += "patch ";
	if (flags.get(DecorationSample))
		res += "sample ";
	if (flags.get(DecorationInvariant))
		res += "invariant ";
	if (flags.get(DecorationExplicitInterpAMD))
		res += "__explicitInterpAMD ";

	return res;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdx, %r14
movq %rdi, %rbx
leaq 0x10(%rdi), %r15
movq %r15, (%rdi)
movq $0x0, 0x8(%rdi)
movb $0x0, 0x10(%rdi)
testb $0x40, 0x1(%rdx)
je 0x289a1
leaq 0x8f0ef(%rip), %rsi     # 0xb7a88
movq %rbx, %rdi
callq 0x64e0
testb $0x20, 0x1(%r14)
je 0x289b7
leaq 0x8f0df(%rip), %rsi     # 0xb7a8e
movq %rbx, %rdi
callq 0x64e0
testb $0x1, 0x2(%r14)
je 0x289cd
leaq 0x8f0d8(%rip), %rsi     # 0xb7a9d
movq %rbx, %rdi
callq 0x64e0
testb $-0x80, 0x1(%r14)
je 0x289e3
leaq 0x8f0cc(%rip), %rsi     # 0xb7aa7
movq %rbx, %rdi
callq 0x64e0
testb $0x2, 0x2(%r14)
je 0x289f9
leaq 0x8f0bd(%rip), %rsi     # 0xb7aae
movq %rbx, %rdi
callq 0x64e0
testb $0x4, 0x2(%r14)
je 0x28a0f
leaq 0x8f0af(%rip), %rsi     # 0xb7ab6
movq %rbx, %rdi
callq 0x64e0
leaq 0xc(%rsp), %rsi
movl $0x1387, (%rsi)         # imm = 0x1387
addq $0x8, %r14
movq %r14, %rdi
callq 0x1fbce
testq %rax, %rax
je 0x28a3a
leaq 0x8f08f(%rip), %rsi     # 0xb7ac1
movq %rbx, %rdi
callq 0x64e0
movq %rbx, %rax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %r14
movq (%rbx), %rdi
cmpq %r15, %rdi
je 0x28a5d
movq (%r15), %rsi
incq %rsi
callq 0x6260
movq %r14, %rdi
callq 0x64a0
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::can_use_io_location(spv::StorageClass, bool)
bool CompilerGLSL::can_use_io_location(StorageClass storage, bool block)
{
	// Location specifiers are must have in SPIR-V, but they aren't really supported in earlier versions of GLSL.
	// Be very explicit here about how to solve the issue.
	if ((get_execution_model() != ExecutionModelVertex && storage == StorageClassInput) ||
	    (get_execution_model() != ExecutionModelFragment && storage == StorageClassOutput))
	{
		uint32_t minimum_desktop_version = block ? 440 : 410;
		// ARB_enhanced_layouts vs ARB_separate_shader_objects ...

		if (!options.es && options.version < minimum_desktop_version && !options.separate_shader_objects)
			return false;
		else if (options.es && options.version < 310)
			return false;
	}

	if ((get_execution_model() == ExecutionModelVertex && storage == StorageClassInput) ||
	    (get_execution_model() == ExecutionModelFragment && storage == StorageClassOutput))
	{
		if (options.es && options.version < 300)
			return false;
		else if (!options.es && options.version < 330)
			return false;
	}

	if (storage == StorageClassUniform || storage == StorageClassUniformConstant)
	{
		if (options.es && options.version < 310)
			return false;
		else if (!options.es && options.version < 430)
			return false;
	}

	return true;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movl %edx, %r14d
movl %esi, %ebp
movq %rdi, %rbx
callq 0x1646e
cmpl $0x1, %ebp
jne 0x28fce
testl %eax, %eax
jne 0x28fe0
movq %rbx, %rdi
callq 0x1646e
cmpl $0x3, %ebp
jne 0x2901b
cmpl $0x4, %eax
je 0x2901b
movb 0x43c(%rbx), %al
testb %al, %al
jne 0x2900b
testb %r14b, %r14b
movl $0x1b8, %ecx            # imm = 0x1B8
movl $0x19a, %edx            # imm = 0x19A
cmovnel %ecx, %edx
cmpl %edx, 0x438(%rbx)
jae 0x2900b
cmpb $0x1, 0x43f(%rbx)
jne 0x29087
testb %al, %al
je 0x2901b
cmpl $0x136, 0x438(%rbx)     # imm = 0x136
jb 0x29087
movl %ebp, %r14d
xorl $0x1, %r14d
movq %rbx, %rdi
callq 0x1646e
orl %r14d, %eax
je 0x29043
movq %rbx, %rdi
callq 0x1646e
xorl $0x4, %eax
movl %ebp, %ecx
xorl $0x3, %ecx
orl %eax, %ecx
jne 0x2905f
cmpb $0x0, 0x43c(%rbx)
movl $0x12b, %eax            # imm = 0x12B
movl $0x149, %ecx            # imm = 0x149
cmovnel %eax, %ecx
cmpl %ecx, 0x438(%rbx)
jbe 0x29087
testl $0xfffffffd, %ebp       # imm = 0xFFFFFFFD
jne 0x29083
cmpb $0x0, 0x43c(%rbx)
movl $0x135, %eax            # imm = 0x135
movl $0x1ad, %ecx            # imm = 0x1AD
cmovnel %eax, %ecx
cmpl %ecx, 0x438(%rbx)
jbe 0x29087
movb $0x1, %al
jmp 0x29089
xorl %eax, %eax
popq %rbx
popq %r14
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::type_to_packed_base_size(spirv_cross::SPIRType const&, spirv_cross::BufferPackingStandard)
uint32_t CompilerGLSL::type_to_packed_base_size(const SPIRType &type, BufferPackingStandard)
{
	switch (type.basetype)
	{
	case SPIRType::Double:
	case SPIRType::Int64:
	case SPIRType::UInt64:
		return 8;
	case SPIRType::Float:
	case SPIRType::Int:
	case SPIRType::UInt:
		return 4;
	case SPIRType::Half:
		return 2;

	default:
		SPIRV_CROSS_THROW("Unrecognized type in type_to_packed_base_size.");
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x28, %rsp
movl 0xc(%rsi), %eax
addl $-0x4, %eax
cmpl $0x8, %eax
jae 0x291a6
movl $0xef, %ecx
btl %eax, %ecx
jae 0x291a6
movl %eax, %eax
leaq 0x92e04(%rip), %rcx     # 0xbbf9c
movl (%rcx,%rax,4), %eax
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x8eb27(%rip), %rsi     # 0xb7cea
leaq 0x8eb4e(%rip), %rdx     # 0xb7d18
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd3bad(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd3b85(%rip), %rsi     # 0xfcd80
movq 0xd4dd6(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
movq %rax, %r14
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x2922c
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2922c
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0x29239
movq %rbx, %rdi
callq 0x6200
movq %r14, %rdi
callq 0x64a0
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::type_to_packed_array_stride(spirv_cross::SPIRType const&, spirv_cross::Bitset const&, spirv_cross::BufferPackingStandard)
uint32_t CompilerGLSL::type_to_packed_array_stride(const SPIRType &type, const Bitset &flags,
                                                   BufferPackingStandard packing)
{
	// Array stride is equal to aligned size of the underlying type.
	uint32_t parent = type.parent_type;
	assert(parent);

	auto &tmp = get<SPIRType>(parent);

	uint32_t size = type_to_packed_size(tmp, flags, packing);
	if (tmp.array.empty())
	{
		uint32_t alignment = type_to_packed_alignment(type, flags, packing);
		return (size + alignment - 1) & ~(alignment - 1);
	}
	else
	{
		// For multidimensional arrays, array stride always matches size of subtype.
		// The alignment cannot change because multidimensional arrays are basically N * M array elements.
		return size;
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r15
movl 0x9c(%rsi), %esi
testl %esi, %esi
je 0x295ee
movl %ecx, %ebx
movq %rdx, %r14
movq %rdi, %r12
callq 0xa426
movq %rax, %rbp
movq %r12, %rdi
movq %rax, %rsi
movq %r14, %rdx
movl %ebx, %ecx
callq 0x2960e
movl %eax, %r13d
movq 0x20(%rbp), %rax
cmpq 0x28(%rbp), %rax
jne 0x295dc
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rdx
movl %ebx, %ecx
callq 0x29242
leal (%rax,%r13), %ecx
decl %ecx
negl %eax
andl %ecx, %eax
movl %eax, %r13d
movl %r13d, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x8e75c(%rip), %rdi     # 0xb7d51
leaq 0x8e75c(%rip), %rsi     # 0xb7d58
leaq 0x8e770(%rip), %rcx     # 0xb7d73
movl $0x3f4, %edx            # imm = 0x3F4
callq 0x61b0
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::to_array_size_literal(spirv_cross::SPIRType const&, unsigned int) const
uint32_t CompilerGLSL::to_array_size_literal(const SPIRType &type, uint32_t index) const
{
	assert(type.array.size() == type.array_size_literal.size());

	if (type.array_size_literal[index])
	{
		return type.array[index];
	}
	else
	{
		// Use the default spec constant value.
		// This is the best we can do.
		uint32_t array_size_id = type.array[index];
		uint32_t array_size = get<SPIRConstant>(array_size_id).scalar();
		return array_size;
	}
}

// Assembly:
pushq %rax
movq 0x20(%rsi), %rax
movq 0x28(%rsi), %r8
subq %rax, %r8
sarq $0x2, %r8
movq 0x48(%rsi), %r9
movl 0x50(%rsi), %r10d
movq 0x38(%rsi), %rcx
subq %rcx, %r9
leaq (%r10,%r9,8), %rsi
cmpq %rsi, %r8
jne 0x29918
movl %edx, %esi
movl %edx, %r8d
shrl $0x6, %r8d
movq (%rcx,%r8,8), %rcx
btq %rdx, %rcx
leaq (%rax,%rsi,4), %rax
jb 0x29914
movl (%rax), %esi
callq 0x1bb22
addq $0x10, %rax
movl (%rax), %eax
popq %rcx
retq
leaq 0x91cb9(%rip), %rdi     # 0xbb5d8
leaq 0x8e432(%rip), %rsi     # 0xb7d58
leaq 0x91cdf(%rip), %rcx     # 0xbb60c
movl $0x2138, %edx           # imm = 0x2138
callq 0x61b0
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::emit_push_constant_block(spirv_cross::SPIRVariable const&)
void CompilerGLSL::emit_push_constant_block(const SPIRVariable &var)
{
	if (flattened_buffer_blocks.count(var.self))
		emit_buffer_block_flattened(var);
	else if (options.vulkan_semantics)
		emit_push_constant_block_vulkan(var);
	else
		emit_push_constant_block_glsl(var);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
addq $0x678, %rdi            # imm = 0x678
addq $0x8, %rsi
callq 0x1fbce
testq %rax, %rax
je 0x2adc5
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x2adfa
cmpb $0x1, 0x43e(%r14)
jne 0x2ade8
movq (%r14), %rax
movq 0xe8(%rax), %rax
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmpq *%rax
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x2b22a
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::emit_push_constant_block_glsl(spirv_cross::SPIRVariable const&)
void CompilerGLSL::emit_push_constant_block_glsl(const SPIRVariable &var)
{
	// OpenGL has no concept of push constant blocks, implement it as a uniform struct.
	auto &type = get<SPIRType>(var.basetype);

	auto &flags = ir.meta[var.self].decoration.decoration_flags;
	flags.clear(DecorationBinding);
	flags.clear(DecorationDescriptorSet);

#if 0
    if (flags & ((1ull << DecorationBinding) | (1ull << DecorationDescriptorSet)))
        SPIRV_CROSS_THROW("Push constant blocks cannot be compiled to GLSL with Binding or Set syntax. "
                            "Remap to location with reflection API first or disable these decorations.");
#endif

	// We're emitting the push constant block as a regular struct, so disable the block qualifier temporarily.
	// Otherwise, we will end up emitting layout() qualifiers on naked structs which is not allowed.
	auto &block_flags = ir.meta[type.self].decoration.decoration_flags;
	bool block_flag = block_flags.get(DecorationBlock);
	block_flags.clear(DecorationBlock);

	emit_struct(type);

	if (block_flag)
		block_flags.set(DecorationBlock);

	emit_uniform(var);
	statement("");
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
movl 0xc(%rsi), %esi
callq 0xa426
movl 0x8(%r14), %ecx
movq 0x38(%rbx), %r15
imulq $0x148, %rcx, %rcx      # imm = 0x148
movabsq $-0x600000001, %rdx     # imm = 0xFFFFFFF9FFFFFFFF
andq %rdx, 0x60(%r15,%rcx)
movl 0x8(%rax), %ecx
imulq $0x148, %rcx, %r12      # imm = 0x148
movq 0x60(%r15,%r12), %r13
movq %r13, %rcx
andq $-0x5, %rcx
movq %rcx, 0x60(%r15,%r12)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x285ee
testb $0x4, %r13b
je 0x2b296
leaq (%r15,%r12), %rax
addq $0x60, %rax
orb $0x4, (%rax)
movq (%rbx), %rax
movq %rbx, %rdi
movq %r14, %rsi
callq *0xf8(%rax)
leaq 0x8a603(%rip), %rsi     # 0xb58af
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0xa700
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::emit_buffer_block(spirv_cross::SPIRVariable const&)
void CompilerGLSL::emit_buffer_block(const SPIRVariable &var)
{
	if (flattened_buffer_blocks.count(var.self))
		emit_buffer_block_flattened(var);
	else if (is_legacy() || (!options.es && options.version == 130))
		emit_buffer_block_legacy(var);
	else
		emit_buffer_block_native(var);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
addq $0x678, %rdi            # imm = 0x678
addq $0x8, %rsi
callq 0x1fbce
testq %rax, %rax
je 0x2b2ef
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x2adfa
movb 0x43c(%r14), %al
testb %al, %al
movl $0x12b, %ecx            # imm = 0x12B
movl $0x81, %edx
cmovnel %ecx, %edx
movl 0x438(%r14), %ecx
cmpl %edx, %ecx
seta %dl
cmpl $0x82, %ecx
setne %cl
orb %al, %cl
movq %r14, %rdi
movq %rbx, %rsi
addq $0x8, %rsp
testb %cl, %dl
je 0x2b332
popq %rbx
popq %r14
jmp 0x2b45e
popq %rbx
popq %r14
jmp 0x2b33a
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::emit_buffer_block_legacy(spirv_cross::SPIRVariable const&)
void CompilerGLSL::emit_buffer_block_legacy(const SPIRVariable &var)
{
	auto &type = get<SPIRType>(var.basetype);
	bool ssbo = var.storage == StorageClassStorageBuffer ||
	            ir.meta[type.self].decoration.decoration_flags.get(DecorationBufferBlock);
	if (ssbo)
		SPIRV_CROSS_THROW("SSBOs not supported in legacy targets.");

	// We're emitting the push constant block as a regular struct, so disable the block qualifier temporarily.
	// Otherwise, we will end up emitting layout() qualifiers on naked structs which is not allowed.
	auto &block_flags = ir.meta[type.self].decoration.decoration_flags;
	bool block_flag = block_flags.get(DecorationBlock);
	block_flags.clear(DecorationBlock);
	emit_struct(type);
	if (block_flag)
		block_flags.set(DecorationBlock);
	emit_uniform(var);
	statement("");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x20, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movl 0xc(%rsi), %esi
callq 0xa426
cmpl $0xc, 0x10(%r14)
je 0x2b3c7
movl 0x8(%rax), %edx
movq 0x38(%rbx), %rcx
imulq $0x148, %rdx, %rdx      # imm = 0x148
movq 0x60(%rcx,%rdx), %r15
testb $0x8, %r15b
jne 0x2b3c7
leaq (%rcx,%rdx), %r12
addq $0x60, %r12
movq %r15, %rcx
andq $-0xd, %rcx
movq %rcx, (%r12)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x285ee
testb $0x4, %r15b
je 0x2b39d
orb $0x4, (%r12)
movq (%rbx), %rax
movq %rbx, %rdi
movq %r14, %rsi
callq *0xf8(%rax)
leaq 0x8a4fc(%rip), %rsi     # 0xb58af
movq %rbx, %rdi
addq $0x20, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0xa700
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x8cbfe(%rip), %rsi     # 0xb7fe2
leaq 0x8cc1d(%rip), %rdx     # 0xb8008
movq %rsp, %rdi
callq 0x7c64
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd1990(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd1968(%rip), %rsi     # 0xfcd80
movq 0xd2bb9(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
movq %rax, %r14
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x2b448
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2b448
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0x2b455
movq %rbx, %rdi
callq 0x6200
movq %r14, %rdi
callq 0x64a0
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::end_scope_decl(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void CompilerGLSL::end_scope_decl(const string &decl)
{
	if (!indent)
		SPIRV_CROSS_THROW("Popping empty indent stack.");
	indent--;
	statement("} ", decl, ";");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x28, %rsp
movl 0x638(%rdi), %eax
testl %eax, %eax
je 0x2baca
movq %rsi, %rdx
decl %eax
movl %eax, 0x638(%rdi)
leaq 0x90151(%rip), %rsi     # 0xbbc05
leaq 0x9402e(%rip), %rcx     # 0xbfae9
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x5a702
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x90102(%rip), %rsi     # 0xbbbe9
leaq 0x90116(%rip), %rdx     # 0xbbc04
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd1289(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd1261(%rip), %rsi     # 0xfcd80
movq 0xd24b2(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
movq %rax, %r14
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x2bb50
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2bb50
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0x2bb5d
movq %rbx, %rdi
callq 0x6200
movq %r14, %rdi
callq 0x64a0
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::to_storage_qualifiers_glsl(spirv_cross::SPIRVariable const&)
const char *CompilerGLSL::to_storage_qualifiers_glsl(const SPIRVariable &var)
{
	auto &execution = get_entry_point();

	if (var.storage == StorageClassInput || var.storage == StorageClassOutput)
	{
		if (is_legacy() && execution.model == ExecutionModelVertex)
			return var.storage == StorageClassInput ? "attribute " : "varying ";
		else if (is_legacy() && execution.model == ExecutionModelFragment)
			return "varying "; // Fragment outputs are renamed so they never hit this case.
		else
			return var.storage == StorageClassInput ? "in " : "out ";
	}
	else if (var.storage == StorageClassUniformConstant || var.storage == StorageClassUniform ||
	         var.storage == StorageClassPushConstant)
	{
		return "uniform ";
	}

	return "";
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
callq 0x16254
movl 0x10(%r14), %ecx
cmpl $0x9, %ecx
ja 0x2c0d3
movl $0x205, %edx            # imm = 0x205
btl %ecx, %edx
jae 0x2c03e
leaq 0x8bfef(%rip), %rax     # 0xb8028
jmp 0x2c0f1
movl $0xa, %edx
btl %ecx, %edx
jae 0x2c0d3
movb 0x43c(%rbx), %dl
movl 0x438(%rbx), %esi
cmpl $0x12c, %esi            # imm = 0x12C
setb %dil
movb $0x1, %r8b
andb %dl, %dil
jne 0x2c07d
cmpl $0x82, %esi
setb %r9b
movl %edx, %r8d
notb %r8b
andb %r9b, %r8b
movl 0xb8(%rax), %eax
testl %eax, %eax
sete %r9b
andb %r8b, %r9b
cmpb $0x1, %r9b
jne 0x2c0a5
cmpl $0x1, %ecx
leaq 0x8c007(%rip), %rcx     # 0xb80a3
leaq 0x8c00b(%rip), %rax     # 0xb80ae
jmp 0x2c0ed
movb $0x1, %r8b
testb %dil, %dil
jne 0x2c0bf
cmpl $0x82, %esi
setb %sil
notb %dl
andb %sil, %dl
movl %edx, %r8d
cmpl $0x4, %eax
sete %al
testb %al, %r8b
je 0x2c0dc
leaq 0x8bfdd(%rip), %rax     # 0xb80ae
jmp 0x2c0f1
leaq 0x897d5(%rip), %rax     # 0xb58af
jmp 0x2c0f1
cmpl $0x1, %ecx
leaq 0x8bfd1(%rip), %rcx     # 0xb80b7
leaq 0x8f4e6(%rip), %rax     # 0xbb5d3
cmoveq %rcx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::to_member_name[abi:cxx11](spirv_cross::SPIRType const&, unsigned int)
string CompilerGLSL::to_member_name(const SPIRType &type, uint32_t index)
{
	auto &memb = ir.meta[type.self].members;
	if (index < memb.size() && !memb[index].alias.empty())
		return memb[index].alias;
	else
		return join("_m", index);
}

// Assembly:
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
movl %ecx, 0xc(%rsp)
movl 0x8(%rdx), %eax
movq 0x38(%rsi), %rdx
imulq $0x148, %rax, %rsi      # imm = 0x148
movl %ecx, %ecx
movq 0xd0(%rdx,%rsi), %rax
movq 0xd8(%rdx,%rsi), %rdx
subq %rax, %rdx
sarq $0x4, %rdx
movabsq $0x4ec4ec4ec4ec4ec5, %rsi # imm = 0x4EC4EC4EC4EC4EC5
imulq %rdx, %rsi
cmpq %rcx, %rsi
jbe 0x2c70d
imulq $0xd0, %rcx, %rcx
movq 0x8(%rax,%rcx), %rdx
testq %rdx, %rdx
je 0x2c70d
addq %rcx, %rax
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
movq (%rax), %rsi
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xe480
jmp 0x2c721
leaq 0x8ee63(%rip), %rsi     # 0xbb577
leaq 0xc(%rsp), %rdx
movq %rbx, %rdi
callq 0x5852c
movq %rbx, %rax
addq $0x10, %rsp
popq %rbx
retq
// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::emit_uniform(spirv_cross::SPIRVariable const&)
void CompilerGLSL::emit_uniform(const SPIRVariable &var)
{
	auto &type = get<SPIRType>(var.basetype);
	if (type.basetype == SPIRType::Image && type.image.sampled == 2)
	{
		if (!options.es && options.version < 420)
			require_extension_internal("GL_ARB_shader_image_load_store");
		else if (options.es && options.version < 310)
			SPIRV_CROSS_THROW("At least ESSL 3.10 required for shader image load store.");
	}

	add_resource_name(var.self);
	statement(layout_for_variable(var), variable_decl(var), ";");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x48, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movl 0xc(%rsi), %esi
callq 0xa426
cmpl $0xd, 0xc(%rax)
jne 0x2d188
cmpl $0x2, 0x8c(%rax)
jne 0x2d188
movb 0x43c(%rbx), %al
movl 0x438(%rbx), %ecx
cmpl $0x1a4, %ecx            # imm = 0x1A4
setae %dl
orb %al, %dl
je 0x2d143
cmpl $0x136, %ecx            # imm = 0x136
setb %cl
andb %cl, %al
cmpb $0x1, %al
jne 0x2d188
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x8b05a(%rip), %rsi     # 0xb8156
leaq 0x8b08b(%rip), %rdx     # 0xb818e
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xcfc74(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xcfc4c(%rip), %rsi     # 0xfcd80
movq 0xd0e9d(%rip), %rdx     # 0xfdfd8
movq %r14, %rdi
callq 0x6470
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x8a61c(%rip), %rsi     # 0xb776f
leaq 0x8a633(%rip), %rdx     # 0xb778d
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x26a0a
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x2d188
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x8(%r14), %eax
leaq 0x488(%rbx), %rsi
imulq $0x148, %rax, %rdx      # imm = 0x148
addq 0x38(%rbx), %rdx
movq %rbx, %rdi
callq 0x2b9f6
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x29c10
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x2ce16
leaq 0x9291c(%rip), %rcx     # 0xbfae9
leaq 0x8(%rsp), %rsi
leaq 0x28(%rsp), %rdx
movq %rbx, %rdi
callq 0x529c8
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d1fa
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d215
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
addq $0x48, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x2d242
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2d242
movq %rax, %rbx
movb $0x1, %bpl
testb %bpl, %bpl
je 0x2d2a3
movq %r14, %rdi
callq 0x6200
jmp 0x2d2a3
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
jne 0x2d296
jmp 0x2d2a3
movq %rax, %rbx
jmp 0x2d2a3
movq %rax, %rbx
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d288
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2d288
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d2a3
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movq %rbx, %rdi
callq 0x64a0
nop