// File: /workspace/github_cpp_makefile_star2_O2/rossy[P]crossc/SPIRV-Cross/spirv_msl.cpp
// Function: spirv_cross::CompilerMSL::bitcast_glsl_op[abi:cxx11](spirv_cross::SPIRType const&, spirv_cross::SPIRType const&)
string CompilerMSL::bitcast_glsl_op(const SPIRType &out_type, const SPIRType &in_type)
{
	if ((out_type.basetype == SPIRType::UInt && in_type.basetype == SPIRType::Int) ||
	    (out_type.basetype == SPIRType::Int && in_type.basetype == SPIRType::UInt) ||
	    (out_type.basetype == SPIRType::UInt64 && in_type.basetype == SPIRType::Int64) ||
	    (out_type.basetype == SPIRType::Int64 && in_type.basetype == SPIRType::UInt64))
		return type_to_glsl(out_type);

	if ((out_type.basetype == SPIRType::UInt && in_type.basetype == SPIRType::Float) ||
	    (out_type.basetype == SPIRType::Int && in_type.basetype == SPIRType::Float) ||
	    (out_type.basetype == SPIRType::Float && in_type.basetype == SPIRType::UInt) ||
	    (out_type.basetype == SPIRType::Float && in_type.basetype == SPIRType::Int) ||
	    (out_type.basetype == SPIRType::Int64 && in_type.basetype == SPIRType::Double) ||
	    (out_type.basetype == SPIRType::UInt64 && in_type.basetype == SPIRType::Double) ||
	    (out_type.basetype == SPIRType::Double && in_type.basetype == SPIRType::Int64) ||
	    (out_type.basetype == SPIRType::Double && in_type.basetype == SPIRType::UInt64) ||
	    (out_type.basetype == SPIRType::Half && in_type.basetype == SPIRType::UInt) ||
	    (out_type.basetype == SPIRType::UInt && in_type.basetype == SPIRType::Half))
		return "as_type<" + type_to_glsl(out_type) + ">";

	return "";
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x40, %rsp
movq %rdi, %rbx
movl 0xc(%rdx), %edi
movl %edi, %eax
xorl $0x5, %eax
movl 0xc(%rcx), %ecx
movl %ecx, %r8d
xorl $0x4, %r8d
orl %eax, %r8d
je 0x7d0e5
movl %edi, %r9d
xorl $0x4, %r9d
movl %ecx, %r8d
xorl $0x5, %r8d
orl %r8d, %r9d
je 0x7d0e5
movl %edi, %r9d
xorl $0x7, %r9d
movl %ecx, %r10d
xorl $0x6, %r10d
orl %r9d, %r10d
je 0x7d0e5
movl %edi, %r9d
xorl $0x6, %r9d
movl %ecx, %r10d
xorl $0x7, %r10d
orl %r9d, %r10d
jne 0x7d0ff
movq (%rsi), %rax
movq %rbx, %rdi
xorl %ecx, %ecx
callq *0x98(%rax)
movq %rbx, %rax
addq $0x40, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movl %ecx, %r9d
xorl $0xa, %r9d
movl %edi, %r10d
andl $-0x2, %r10d
movl %r10d, %r11d
xorl $0x4, %r11d
orl %r9d, %r11d
je 0x7d142
movl %edi, %r11d
xorl $0xa, %r11d
movl %ecx, %r9d
andl $-0x2, %r9d
movl %r9d, %ebp
xorl $0x4, %ebp
orl %r11d, %ebp
je 0x7d142
movl %ecx, %r11d
xorl $0xb, %r11d
xorl $0x6, %r10d
orl %r11d, %r10d
jne 0x7d190
movq (%rsi), %rax
leaq 0x20(%rsp), %r14
movq %r14, %rdi
xorl %ecx, %ecx
callq *0x98(%rax)
leaq 0x2109c(%rip), %rsi     # 0x9e1f8
movq %rsp, %rdi
movq %r14, %rdx
callq 0x463dd
leaq 0x12066(%rip), %rdx     # 0x8f1d4
movq %rsp, %rsi
movq %rbx, %rdi
callq 0xab3f
movq %rsp, %rdi
callq 0x6548
leaq 0x20(%rsp), %rdi
callq 0x6548
jmp 0x7d0f3
movl %edi, %r10d
xorl $0xb, %r10d
xorl $0x6, %r9d
xorl $0x9, %edi
orl %r8d, %edi
sete %dil
xorl $0x9, %ecx
orl %ecx, %eax
sete %al
orl %r10d, %r9d
je 0x7d142
testb %dil, %dil
jne 0x7d142
testb %al, %al
jne 0x7d142
leaq 0x126c5(%rip), %rsi     # 0x8f887
movq %rsp, %rdx
movq %rbx, %rdi
callq 0x6100
jmp 0x7d0f3
movq %rax, %rbx
movq %rsp, %rdi
callq 0x6548
jmp 0x7d1e2
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x6548
movq %rbx, %rdi
callq 0x64b0