// File: rossy[P]crossc/SPIRV-Cross/spirv_hlsl.cpp
// Function: spirv_cross::CompilerHLSL::bitcast_glsl_op[abi:cxx11](spirv_cross::SPIRType const&, spirv_cross::SPIRType const&)
string CompilerHLSL::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 "asuint";
	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 "asint";
	else if (out_type.basetype == SPIRType::Float && in_type.basetype == SPIRType::UInt)
		return "asfloat";
	else if (out_type.basetype == SPIRType::Float && in_type.basetype == SPIRType::Int)
		return "asfloat";
	else if (out_type.basetype == SPIRType::Int64 && in_type.basetype == SPIRType::Double)
		SPIRV_CROSS_THROW("Double to Int64 is not supported in HLSL.");
	else if (out_type.basetype == SPIRType::UInt64 && in_type.basetype == SPIRType::Double)
		SPIRV_CROSS_THROW("Double to UInt64 is not supported in HLSL.");
	else if (out_type.basetype == SPIRType::Double && in_type.basetype == SPIRType::Int64)
		return "asdouble";
	else if (out_type.basetype == SPIRType::Double && in_type.basetype == SPIRType::UInt64)
		return "asdouble";
	else if (out_type.basetype == SPIRType::Half && in_type.basetype == SPIRType::UInt && in_type.vecsize == 1)
	{
		if (!requires_explicit_fp16_packing)
		{
			requires_explicit_fp16_packing = true;
			force_recompile = true;
		}
		return "SPIRV_Cross_unpackFloat2x16";
	}
	else if (out_type.basetype == SPIRType::UInt && in_type.basetype == SPIRType::Half && in_type.vecsize == 2)
	{
		if (!requires_explicit_fp16_packing)
		{
			requires_explicit_fp16_packing = true;
			force_recompile = true;
		}
		return "SPIRV_Cross_packFloat2x16";
	}
	else
		return "";
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0xa0(%rbp)
movq %rdi, %rax
movq %rax, -0x98(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0xc8e8d
movq -0x20(%rbp), %rax
cmpl $0x4, 0xc(%rax)
jne 0xc8e8d
movq -0x90(%rbp), %rsi
movq -0xa0(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq (%rsi), %rax
xorl %ecx, %ecx
callq *0x98(%rax)
jmp 0xc950d
movq -0x18(%rbp), %rax
cmpl $0x7, 0xc(%rax)
jne 0xc8ec3
movq -0x20(%rbp), %rax
cmpl $0x6, 0xc(%rax)
jne 0xc8ec3
movq -0x90(%rbp), %rsi
movq -0xa0(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq (%rsi), %rax
xorl %ecx, %ecx
callq *0x98(%rax)
jmp 0xc950d
movq -0x18(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0xc8f2b
movq -0x20(%rbp), %rax
cmpl $0xa, 0xc(%rax)
jne 0xc8f2b
leaq -0x21(%rbp), %rdi
movq %rdi, -0xa8(%rbp)
callq 0x7650
movq -0xa0(%rbp), %rdi
movq -0xa8(%rbp), %rdx
leaq 0x7f679(%rip), %rsi     # 0x148575
callq 0x7520
jmp 0xc8f03
leaq -0x21(%rbp), %rdi
callq 0x73d0
jmp 0xc950d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x21(%rbp), %rdi
callq 0x73d0
jmp 0xc951d
movq -0x18(%rbp), %rax
cmpl $0x4, 0xc(%rax)
jne 0xc8f61
movq -0x20(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0xc8f61
movq -0x90(%rbp), %rsi
movq -0xa0(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq (%rsi), %rax
xorl %ecx, %ecx
callq *0x98(%rax)
jmp 0xc950d
movq -0x18(%rbp), %rax
cmpl $0x6, 0xc(%rax)
jne 0xc8f97
movq -0x20(%rbp), %rax
cmpl $0x7, 0xc(%rax)
jne 0xc8f97
movq -0x90(%rbp), %rsi
movq -0xa0(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq (%rsi), %rax
xorl %ecx, %ecx
callq *0x98(%rax)
jmp 0xc950d
movq -0x18(%rbp), %rax
cmpl $0x4, 0xc(%rax)
jne 0xc8fff
movq -0x20(%rbp), %rax
cmpl $0xa, 0xc(%rax)
jne 0xc8fff
leaq -0x35(%rbp), %rdi
movq %rdi, -0xb0(%rbp)
callq 0x7650
movq -0xa0(%rbp), %rdi
movq -0xb0(%rbp), %rdx
leaq 0x7f5ac(%rip), %rsi     # 0x14857c
callq 0x7520
jmp 0xc8fd7
leaq -0x35(%rbp), %rdi
callq 0x73d0
jmp 0xc950d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x35(%rbp), %rdi
callq 0x73d0
jmp 0xc951d
movq -0x18(%rbp), %rax
cmpl $0xa, 0xc(%rax)
jne 0xc9067
movq -0x20(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0xc9067
leaq -0x36(%rbp), %rdi
movq %rdi, -0xb8(%rbp)
callq 0x7650
movq -0xa0(%rbp), %rdi
movq -0xb8(%rbp), %rdx
leaq 0x7f54a(%rip), %rsi     # 0x148582
callq 0x7520
jmp 0xc903f
leaq -0x36(%rbp), %rdi
callq 0x73d0
jmp 0xc950d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x36(%rbp), %rdi
callq 0x73d0
jmp 0xc951d
movq -0x18(%rbp), %rax
cmpl $0xa, 0xc(%rax)
jne 0xc90cf
movq -0x20(%rbp), %rax
cmpl $0x4, 0xc(%rax)
jne 0xc90cf
leaq -0x37(%rbp), %rdi
movq %rdi, -0xc0(%rbp)
callq 0x7650
movq -0xa0(%rbp), %rdi
movq -0xc0(%rbp), %rdx
leaq 0x7f4e2(%rip), %rsi     # 0x148582
callq 0x7520
jmp 0xc90a7
leaq -0x37(%rbp), %rdi
callq 0x73d0
jmp 0xc950d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x37(%rbp), %rdi
callq 0x73d0
jmp 0xc951d
movq -0x18(%rbp), %rax
cmpl $0x6, 0xc(%rax)
jne 0xc91a3
movq -0x20(%rbp), %rax
cmpl $0xb, 0xc(%rax)
jne 0xc91a3
movb $0x1, -0x5a(%rbp)
movl $0x10, %edi
callq 0x71a0
movq %rax, -0xd0(%rbp)
leaq -0x59(%rbp), %rdi
movq %rdi, -0xc8(%rbp)
callq 0x7650
movq -0xc8(%rbp), %rdx
leaq 0x7f46c(%rip), %rsi     # 0x14858a
leaq -0x58(%rbp), %rdi
callq 0x7520
jmp 0xc9129
movq -0xd0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x9c50
jmp 0xc913b
movq -0xd0(%rbp), %rdi
movb $0x0, -0x5a(%rbp)
leaq 0xe4c8b(%rip), %rsi     # 0x1addd8
leaq -0xbf4c4(%rip), %rdx    # 0x9c90
callq 0x7610
jmp 0xc9526
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0xc9181
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x7708
leaq -0x59(%rbp), %rdi
callq 0x73d0
testb $0x1, -0x5a(%rbp)
jne 0xc9192
jmp 0xc919e
movq -0xd0(%rbp), %rdi
callq 0x72c0
jmp 0xc951d
movq -0x18(%rbp), %rax
cmpl $0x7, 0xc(%rax)
jne 0xc9286
movq -0x20(%rbp), %rax
cmpl $0xb, 0xc(%rax)
jne 0xc9286
movb $0x1, -0x82(%rbp)
movl $0x10, %edi
callq 0x71a0
movq %rax, -0xe0(%rbp)
leaq -0x81(%rbp), %rdi
movq %rdi, -0xd8(%rbp)
callq 0x7650
movq -0xd8(%rbp), %rdx
leaq 0x7f3bc(%rip), %rsi     # 0x1485b4
leaq -0x80(%rbp), %rdi
callq 0x7520
jmp 0xc9203
movq -0xe0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x9c50
jmp 0xc9215
movq -0xe0(%rbp), %rdi
movb $0x0, -0x82(%rbp)
leaq 0xe4bae(%rip), %rsi     # 0x1addd8
leaq -0xbf5a1(%rip), %rdx    # 0x9c90
callq 0x7610
jmp 0xc9526
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0xc925e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x7708
leaq -0x81(%rbp), %rdi
callq 0x73d0
testb $0x1, -0x82(%rbp)
jne 0xc9275
jmp 0xc9281
movq -0xe0(%rbp), %rdi
callq 0x72c0
jmp 0xc951d
movq -0x18(%rbp), %rax
cmpl $0xb, 0xc(%rax)
jne 0xc92f7
movq -0x20(%rbp), %rax
cmpl $0x6, 0xc(%rax)
jne 0xc92f7
leaq -0x83(%rbp), %rdi
movq %rdi, -0xe8(%rbp)
callq 0x7650
movq -0xa0(%rbp), %rdi
movq -0xe8(%rbp), %rdx
leaq 0x7f31d(%rip), %rsi     # 0x1485df
callq 0x7520
jmp 0xc92c9
leaq -0x83(%rbp), %rdi
callq 0x73d0
jmp 0xc950d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x83(%rbp), %rdi
callq 0x73d0
jmp 0xc951d
movq -0x18(%rbp), %rax
cmpl $0xb, 0xc(%rax)
jne 0xc9368
movq -0x20(%rbp), %rax
cmpl $0x7, 0xc(%rax)
jne 0xc9368
leaq -0x84(%rbp), %rdi
movq %rdi, -0xf0(%rbp)
callq 0x7650
movq -0xa0(%rbp), %rdi
movq -0xf0(%rbp), %rdx
leaq 0x7f2ac(%rip), %rsi     # 0x1485df
callq 0x7520
jmp 0xc933a
leaq -0x84(%rbp), %rdi
callq 0x73d0
jmp 0xc950d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x84(%rbp), %rdi
callq 0x73d0
jmp 0xc951d
movq -0x18(%rbp), %rax
cmpl $0x9, 0xc(%rax)
jne 0xc9414
movq -0x20(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0xc9414
movq -0x20(%rbp), %rax
cmpl $0x1, 0x14(%rax)
jne 0xc9414
movq -0x90(%rbp), %rax
testb $0x1, 0x793(%rax)
jne 0xc93b7
movq -0x90(%rbp), %rax
movb $0x1, 0x793(%rax)
movb $0x1, 0x1d0(%rax)
leaq -0x85(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq 0x7650
movq -0xa0(%rbp), %rdi
movq -0xf8(%rbp), %rdx
leaq 0x7f209(%rip), %rsi     # 0x1485e8
callq 0x7520
jmp 0xc93e6
leaq -0x85(%rbp), %rdi
callq 0x73d0
jmp 0xc950d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x85(%rbp), %rdi
callq 0x73d0
jmp 0xc951d
movq -0x18(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0xc94b6
movq -0x20(%rbp), %rax
cmpl $0x9, 0xc(%rax)
jne 0xc94b6
movq -0x20(%rbp), %rax
cmpl $0x2, 0x14(%rax)
jne 0xc94b6
movq -0x90(%rbp), %rax
testb $0x1, 0x793(%rax)
jne 0xc945f
movq -0x90(%rbp), %rax
movb $0x1, 0x793(%rax)
movb $0x1, 0x1d0(%rax)
leaq -0x86(%rbp), %rdi
movq %rdi, -0x100(%rbp)
callq 0x7650
movq -0xa0(%rbp), %rdi
movq -0x100(%rbp), %rdx
leaq 0x7f17d(%rip), %rsi     # 0x148604
callq 0x7520
jmp 0xc948e
leaq -0x86(%rbp), %rdi
callq 0x73d0
jmp 0xc950d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x86(%rbp), %rdi
callq 0x73d0
jmp 0xc951d
leaq -0x87(%rbp), %rdi
movq %rdi, -0x108(%rbp)
callq 0x7650
movq -0xa0(%rbp), %rdi
movq -0x108(%rbp), %rdx
leaq 0x753c0(%rip), %rsi     # 0x13e89e
callq 0x7520
jmp 0xc94e5
leaq -0x87(%rbp), %rdi
callq 0x73d0
jmp 0xc950d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x87(%rbp), %rdi
callq 0x73d0
jmp 0xc951d
movq -0x98(%rbp), %rax
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x7640
nopw %cs:(%rax,%rax)