// File: /workspace/github_cpp_makefile_star2_O1/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 0xa0a0f
movl %edi, %r9d
xorl $0x4, %r9d
movl %ecx, %r8d
xorl $0x5, %r8d
orl %r8d, %r9d
je 0xa0a0f
movl %edi, %r9d
xorl $0x7, %r9d
movl %ecx, %r10d
xorl $0x6, %r10d
orl %r9d, %r10d
je 0xa0a0f
movl %edi, %r9d
xorl $0x6, %r9d
movl %ecx, %r10d
xorl $0x7, %r10d
orl %r9d, %r10d
jne 0xa0a29
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 0xa0a70
movl %edi, %r11d
xorl $0xa, %r11d
movl %ecx, %r9d
andl $-0x2, %r9d
movl %r9d, %ebp
xorl $0x4, %ebp
orl %r11d, %ebp
je 0xa0a70
movl %ecx, %r11d
xorl $0xb, %r11d
xorl $0x6, %r10d
orl %r11d, %r10d
jne 0xa0b68
movq (%rsi), %rax
leaq 0x20(%rsp), %r14
movq %r14, %rdi
xorl %ecx, %ecx
callq *0x98(%rax)
leaq 0x237e6(%rip), %rcx     # 0xc4270
movl $0x8, %r8d
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x62c0
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xa0ac2
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0xa0ac9
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rsp, %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x14712(%rip), %rsi     # 0xb51fc
callq 0x64e0
leaq 0x10(%rbx), %rdx
movq %rdx, (%rbx)
movq (%rax), %rsi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rsi
je 0xa0b11
movq %rsi, (%rbx)
movq (%rcx), %rdx
movq %rdx, 0x10(%rbx)
jmp 0xa0b17
movups (%rcx), %xmm0
movups %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0xa0b44
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa0a1d
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0xa0a1d
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 0xa0a70
testb %dil, %dil
jne 0xa0a70
testb %al, %al
jne 0xa0a70
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x14d02(%rip), %rdx     # 0xb58af
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x7c64
jmp 0xa0a1d
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0xa0bdb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0xa0bdb
movq %rax, %rbx
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa0bf6
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x6260
movq %rbx, %rdi
callq 0x64a0