// File: /workspace/github_cpp_makefile_star2_O3/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::bitcast_glsl_op[abi:cxx11](spirv_cross::SPIRType const&, spirv_cross::SPIRType const&)
string CompilerGLSL::bitcast_glsl_op(const SPIRType &out_type, const SPIRType &in_type)
{
	if (out_type.basetype == SPIRType::UInt && in_type.basetype == SPIRType::Int)
		return type_to_glsl(out_type);
	else if (out_type.basetype == SPIRType::UInt64 && in_type.basetype == SPIRType::Int64)
		return type_to_glsl(out_type);
	else if (out_type.basetype == SPIRType::UInt && in_type.basetype == SPIRType::Float)
		return "floatBitsToUint";
	else if (out_type.basetype == SPIRType::Int && in_type.basetype == SPIRType::UInt)
		return type_to_glsl(out_type);
	else if (out_type.basetype == SPIRType::Int64 && in_type.basetype == SPIRType::UInt64)
		return type_to_glsl(out_type);
	else if (out_type.basetype == SPIRType::Int && in_type.basetype == SPIRType::Float)
		return "floatBitsToInt";
	else if (out_type.basetype == SPIRType::Float && in_type.basetype == SPIRType::UInt)
		return "uintBitsToFloat";
	else if (out_type.basetype == SPIRType::Float && in_type.basetype == SPIRType::Int)
		return "intBitsToFloat";
	else if (out_type.basetype == SPIRType::Int64 && in_type.basetype == SPIRType::Double)
		return "doubleBitsToInt64";
	else if (out_type.basetype == SPIRType::UInt64 && in_type.basetype == SPIRType::Double)
		return "doubleBitsToUint64";
	else if (out_type.basetype == SPIRType::Double && in_type.basetype == SPIRType::Int64)
		return "int64BitsToDouble";
	else if (out_type.basetype == SPIRType::Double && in_type.basetype == SPIRType::UInt64)
		return "uint64BitsToDouble";
	else if (out_type.basetype == SPIRType::UInt64 && in_type.basetype == SPIRType::UInt && in_type.vecsize == 2)
		return "packUint2x32";
	else if (out_type.basetype == SPIRType::Half && in_type.basetype == SPIRType::UInt && in_type.vecsize == 1)
		return "unpackFloat2x16";
	else if (out_type.basetype == SPIRType::UInt && in_type.basetype == SPIRType::Half && in_type.vecsize == 2)
		return "packFloat2x16";
	else
		return "";
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movl 0xc(%rdx), %r8d
movl %r8d, %eax
xorl $0x5, %eax
movl 0xc(%rcx), %edi
movl %edi, %ebp
xorl $0x4, %ebp
movl %eax, %r9d
orl %ebp, %r9d
je 0x3ff0c
movl %r8d, %r9d
xorl $0x7, %r9d
movl %edi, %r11d
xorl $0x6, %r11d
movl %r9d, %r10d
orl %r11d, %r10d
jne 0x3ff2c
movq (%rsi), %rax
movq %rbx, %rdi
xorl %ecx, %ecx
callq *0x98(%rax)
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl %edi, %r12d
xorl $0xa, %r12d
movl %eax, %r10d
orl %r12d, %r10d
jne 0x3ff5a
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x773fa(%rip), %rsi     # 0xb7343
leaq 0x77402(%rip), %rdx     # 0xb7352
movq %rbx, %rdi
callq 0x7be0
jmp 0x3ff1a
movl %r8d, %r13d
xorl $0x4, %r13d
movl %edi, %r10d
xorl $0x5, %r10d
movl %r13d, %r14d
orl %r10d, %r14d
je 0x3ff0c
movl %r8d, %r15d
xorl $0x6, %r15d
movl %edi, %r14d
xorl $0x7, %r14d
movl %r15d, 0x4(%rsp)
movl %r14d, (%rsp)
orl %r14d, %r15d
je 0x3ff0c
orl %r12d, %r13d
jne 0x3ffa8
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x77395(%rip), %rsi     # 0xb7334
leaq 0x7739c(%rip), %rdx     # 0xb7342
jmp 0x3ff50
movl %r8d, %edx
xorl $0xa, %edx
movl %edx, %esi
orl %r10d, %esi
jne 0x3ffcc
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x7778d(%rip), %rsi     # 0xb7750
leaq 0x77795(%rip), %rdx     # 0xb775f
jmp 0x3ff50
orl %ebp, %edx
jne 0x3ffea
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x77773(%rip), %rsi     # 0xb7751
leaq 0x7777a(%rip), %rdx     # 0xb775f
jmp 0x3ff50
movl %edi, %edx
xorl $0xb, %edx
orl %edx, 0x4(%rsp)
jne 0x4000f
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x78f14(%rip), %rsi     # 0xb8f17
leaq 0x78f1e(%rip), %rdx     # 0xb8f28
jmp 0x3ff50
orl %r9d, %edx
jne 0x4002e
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x78f07(%rip), %rsi     # 0xb8f29
leaq 0x78f12(%rip), %rdx     # 0xb8f3b
jmp 0x3ff50
movl %r8d, %edx
xorl $0xb, %edx
orl %edx, %r11d
jne 0x40053
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x78ef6(%rip), %rsi     # 0xb8f3d
leaq 0x78f00(%rip), %rdx     # 0xb8f4e
jmp 0x3ff50
orl (%rsp), %edx
jne 0x40072
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x78ed6(%rip), %rsi     # 0xb8f3c
leaq 0x78ee1(%rip), %rdx     # 0xb8f4e
jmp 0x3ff50
orl %r10d, %r9d
movl 0x14(%rcx), %edx
movl %edx, %ecx
xorl $0x2, %ecx
orl %ecx, %r9d
jne 0x4009c
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x78ebf(%rip), %rsi     # 0xb8f4f
leaq 0x78ec4(%rip), %rdx     # 0xb8f5b
jmp 0x3ff50
xorl $0x9, %r8d
orl %r10d, %r8d
xorl $0x1, %edx
orl %r8d, %edx
jne 0x400c5
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x7dfd4(%rip), %rsi     # 0xbe08d
leaq 0x7dfdc(%rip), %rdx     # 0xbe09c
jmp 0x3ff50
xorl $0x9, %edi
orl %edi, %eax
leaq 0x10(%rbx), %rdx
movq %rdx, (%rbx)
orl %ecx, %eax
jne 0x400e8
leaq 0x7dfcd(%rip), %rsi     # 0xbe0a9
leaq 0x7dfd3(%rip), %rdx     # 0xbe0b6
jmp 0x3ff50
leaq 0x747c0(%rip), %rdx     # 0xb48af
movq %rbx, %rdi
movq %rdx, %rsi
jmp 0x3ff53