// File: /workspace/github_c_makefile_star2_O3/calmopyrin[P]tedplay/SIDSoundLib.cpp
// Function: SIDSoundLib::connect()
bool SIDSoundLib::connect()
{
	if (!detected) {
#ifdef _DEBUG
		m_hDll = LOAD_LIBRARY(LIBNAME_DEBUG);
#else
		m_hDll = LOAD_LIBRARY(LIBNAME);
#endif
		//HRESULT r = GetLastError();
		if (m_hDll) {
			sidCreate = (_sidCreate)LOAD_FUNCTION(m_hDll, "sidCreate");
			sidDestroy = (_sidDestroy)LOAD_FUNCTION(m_hDll, "sidDestroy");
			sidSetSampleRate = (_sidSetSampleRate)LOAD_FUNCTION(m_hDll, "sidSetSampleRate");
			sidSetModel = (_sidSetSampleRate)LOAD_FUNCTION(m_hDll, "sidSetModel");
			sidReset = (_sidReset)LOAD_FUNCTION(m_hDll, "sidReset");
			sidPause = (_sidPause)LOAD_FUNCTION(m_hDll, "sidPause");
			sidWriteReg = (_sidWriteReg)LOAD_FUNCTION(m_hDll, "sidWriteReg");
			sidReadReg = (_sidReadReg)LOAD_FUNCTION(m_hDll, "sidReadReg");
			sidCalcSamples = (_sidCalcSamples)LOAD_FUNCTION(m_hDll, "sidCalcSamples");
			sidGetLibVersion = (_sidGetLibVersion)LOAD_FUNCTION(m_hDll, "sidGetLibVersion");
			if (!(sidCreate && sidDestroy && sidSetSampleRate && sidSetModel && sidReset && sidPause
				&& sidWriteReg && sidReadReg && sidCalcSamples && sidGetLibVersion))
				return false;
		} else
			return false;
	}
	detected = true;
	return detected;
}

// Assembly:
pushq %rbx
cmpb $0x0, 0x1cccc(%rip)     # 0x26418
jne 0x992c
leaq 0x6cc8(%rip), %rdi      # 0x10421
xorl %ebx, %ebx
xorl %esi, %esi
callq 0x32b0
movq %rax, 0x1ccb7(%rip)     # 0x26420
testq %rax, %rax
je 0x9935
leaq 0x6caf(%rip), %rsi      # 0x10428
movq %rax, %rdi
callq 0x31f0
movq %rax, 0x1cca0(%rip)     # 0x26428
movq 0x1cc91(%rip), %rdi     # 0x26420
leaq 0x6c9c(%rip), %rsi      # 0x10432
callq 0x31f0
movq %rax, 0x1cc8e(%rip)     # 0x26430
movq 0x1cc77(%rip), %rdi     # 0x26420
leaq 0x6c8d(%rip), %rsi      # 0x1043d
callq 0x31f0
movq %rax, 0x1cc7c(%rip)     # 0x26438
movq 0x1cc5d(%rip), %rdi     # 0x26420
leaq 0x6c84(%rip), %rsi      # 0x1044e
callq 0x31f0
movq %rax, 0x1cc6a(%rip)     # 0x26440
movq 0x1cc43(%rip), %rdi     # 0x26420
leaq 0x6c76(%rip), %rsi      # 0x1045a
callq 0x31f0
movq %rax, 0x1cc58(%rip)     # 0x26448
movq 0x1cc29(%rip), %rdi     # 0x26420
leaq 0x6c65(%rip), %rsi      # 0x10463
callq 0x31f0
movq %rax, 0x1cc46(%rip)     # 0x26450
movq 0x1cc0f(%rip), %rdi     # 0x26420
leaq 0x6c54(%rip), %rsi      # 0x1046c
callq 0x31f0
movq %rax, 0x1cc34(%rip)     # 0x26458
movq 0x1cbf5(%rip), %rdi     # 0x26420
leaq 0x6c46(%rip), %rsi      # 0x10478
callq 0x31f0
movq %rax, 0x1cc22(%rip)     # 0x26460
movq 0x1cbdb(%rip), %rdi     # 0x26420
leaq 0x6c37(%rip), %rsi      # 0x10483
callq 0x31f0
movq %rax, 0x1cc10(%rip)     # 0x26468
movq 0x1cbc1(%rip), %rdi     # 0x26420
leaq 0x6c2c(%rip), %rsi      # 0x10492
callq 0x31f0
movq %rax, 0x1cbfe(%rip)     # 0x26470
movq 0x1cbb6(%rip), %xmm1    # 0x26430
movq 0x1cba6(%rip), %xmm0    # 0x26428
punpcklqdq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0]
movq 0x1cbb2(%rip), %xmm1    # 0x26440
movq 0x1cba2(%rip), %xmm2    # 0x26438
punpcklqdq %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0]
movq 0x1cbae(%rip), %xmm1    # 0x26450
movq 0x1cb9e(%rip), %xmm3    # 0x26448
punpcklqdq %xmm1, %xmm3    # xmm3 = xmm3[0],xmm1[0]
movq 0x1cbaa(%rip), %xmm1    # 0x26460
movq 0x1cb9a(%rip), %xmm4    # 0x26458
punpcklqdq %xmm1, %xmm4    # xmm4 = xmm4[0],xmm1[0]
cmpq $0x0, 0x1cb9e(%rip)     # 0x26468
setne %cl
testq %rax, %rax
setne %al
pxor %xmm1, %xmm1
pcmpeqd %xmm1, %xmm4
pshufd $0xb1, %xmm4, %xmm5     # xmm5 = xmm4[1,0,3,2]
pand %xmm4, %xmm5
pcmpeqd %xmm1, %xmm3
pshufd $0xb1, %xmm3, %xmm4     # xmm4 = xmm3[1,0,3,2]
pand %xmm3, %xmm4
packssdw %xmm5, %xmm4
pcmpeqd %xmm1, %xmm2
pshufd $0xb1, %xmm2, %xmm3     # xmm3 = xmm2[1,0,3,2]
pand %xmm2, %xmm3
pcmpeqd %xmm1, %xmm0
pshufd $0xb1, %xmm0, %xmm1     # xmm1 = xmm0[1,0,3,2]
pand %xmm0, %xmm1
packssdw %xmm3, %xmm1
packssdw %xmm4, %xmm1
pmovmskb %xmm1, %edx
testl $0xaaaa, %edx           # imm = 0xAAAA
sete %dl
andb %cl, %al
andb %dl, %al
cmpb $0x1, %al
jne 0x9939
movb $0x1, 0x1cae5(%rip)     # 0x26418
movb $0x1, %bl
movl %ebx, %eax
popq %rbx
retq
xorl %ebx, %ebx
jmp 0x9935
nop