// File: 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
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x88(%rbp)
movq %rdi, %rax
movq %rax, -0x80(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0x10d105
movq -0x20(%rbp), %rax
cmpl $0x4, 0xc(%rax)
je 0x10d141
movq -0x18(%rbp), %rax
cmpl $0x4, 0xc(%rax)
jne 0x10d119
movq -0x20(%rbp), %rax
cmpl $0x5, 0xc(%rax)
je 0x10d141
movq -0x18(%rbp), %rax
cmpl $0x7, 0xc(%rax)
jne 0x10d12d
movq -0x20(%rbp), %rax
cmpl $0x6, 0xc(%rax)
je 0x10d141
movq -0x18(%rbp), %rax
cmpl $0x6, 0xc(%rax)
jne 0x10d160
movq -0x20(%rbp), %rax
cmpl $0x7, 0xc(%rax)
jne 0x10d160
movq -0x78(%rbp), %rsi
movq -0x88(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq (%rsi), %rax
xorl %ecx, %ecx
callq *0x98(%rax)
jmp 0x10d323
movq -0x18(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0x10d178
movq -0x20(%rbp), %rax
cmpl $0xa, 0xc(%rax)
je 0x10d240
movq -0x18(%rbp), %rax
cmpl $0x4, 0xc(%rax)
jne 0x10d190
movq -0x20(%rbp), %rax
cmpl $0xa, 0xc(%rax)
je 0x10d240
movq -0x18(%rbp), %rax
cmpl $0xa, 0xc(%rax)
jne 0x10d1a8
movq -0x20(%rbp), %rax
cmpl $0x5, 0xc(%rax)
je 0x10d240
movq -0x18(%rbp), %rax
cmpl $0xa, 0xc(%rax)
jne 0x10d1c0
movq -0x20(%rbp), %rax
cmpl $0x4, 0xc(%rax)
je 0x10d240
movq -0x18(%rbp), %rax
cmpl $0x6, 0xc(%rax)
jne 0x10d1d4
movq -0x20(%rbp), %rax
cmpl $0xb, 0xc(%rax)
je 0x10d240
movq -0x18(%rbp), %rax
cmpl $0x7, 0xc(%rax)
jne 0x10d1e8
movq -0x20(%rbp), %rax
cmpl $0xb, 0xc(%rax)
je 0x10d240
movq -0x18(%rbp), %rax
cmpl $0xb, 0xc(%rax)
jne 0x10d1fc
movq -0x20(%rbp), %rax
cmpl $0x6, 0xc(%rax)
je 0x10d240
movq -0x18(%rbp), %rax
cmpl $0xb, 0xc(%rax)
jne 0x10d210
movq -0x20(%rbp), %rax
cmpl $0x7, 0xc(%rax)
je 0x10d240
movq -0x18(%rbp), %rax
cmpl $0x9, 0xc(%rax)
jne 0x10d224
movq -0x20(%rbp), %rax
cmpl $0x5, 0xc(%rax)
je 0x10d240
movq -0x18(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0x10d2d5
movq -0x20(%rbp), %rax
cmpl $0x9, 0xc(%rax)
jne 0x10d2d5
movq -0x78(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq (%rsi), %rax
movq 0x98(%rax), %rax
leaq -0x60(%rbp), %rdi
movq %rdi, -0x90(%rbp)
xorl %ecx, %ecx
callq *%rax
movq -0x90(%rbp), %rdx
leaq 0x4068d(%rip), %rsi     # 0x14d8fc
leaq -0x40(%rbp), %rdi
callq 0xa6db0
jmp 0x10d27a
movq -0x88(%rbp), %rdi
leaq 0x30f63(%rip), %rdx     # 0x13e1eb
leaq -0x40(%rbp), %rsi
callq 0x11910
jmp 0x10d293
leaq -0x40(%rbp), %rdi
callq 0x7708
leaq -0x60(%rbp), %rdi
callq 0x7708
jmp 0x10d323
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x10d2ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x7708
leaq -0x60(%rbp), %rdi
callq 0x7708
jmp 0x10d330
leaq -0x6d(%rbp), %rdi
movq %rdi, -0x98(%rbp)
callq 0x7650
movq -0x88(%rbp), %rdi
movq -0x98(%rbp), %rdx
leaq 0x315a4(%rip), %rsi     # 0x13e89e
callq 0x7520
jmp 0x10d301
leaq -0x6d(%rbp), %rdi
callq 0x73d0
jmp 0x10d323
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x6d(%rbp), %rdi
callq 0x73d0
jmp 0x10d330
movq -0x80(%rbp), %rax
addq $0xa0, %rsp
popq %rbp
retq
movq -0x68(%rbp), %rdi
callq 0x7640
nopl (%rax)