x86emitter:windows: Make cpu detection/affinity 64-bit compatible

Use DWORD_PTR since that works on both 32-bit and 64-bit builds. And
remove some empty unused functions.

Fixes a 64-bit compilation issue.
This commit is contained in:
Jonathan Li 2016-07-23 09:38:58 +01:00
parent 043d2926fa
commit ed47dca8a1
2 changed files with 29 additions and 40 deletions

View File

@ -1,5 +1,5 @@
/* Cpudetection lib
* Copyright (C) 2002-2010 PCSX2 Dev Team
* Copyright (C) 2002-2016 PCSX2 Dev Team
*
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found-
@ -19,55 +19,53 @@
void x86capabilities::CountLogicalCores()
{
DWORD vProcessCPUs;
DWORD vSystemCPUs;
DWORD_PTR vProcessCPUs;
DWORD_PTR vSystemCPUs;
LogicalCores = 1;
if( !GetProcessAffinityMask (GetCurrentProcess (),
&vProcessCPUs, &vSystemCPUs) ) return;
if (!GetProcessAffinityMask(GetCurrentProcess(), &vProcessCPUs, &vSystemCPUs))
return;
uint CPUs = 0;
DWORD bit;
for (bit = 1; bit != 0; bit <<= 1)
{
for (DWORD_PTR bit = 1; bit != 0; bit <<= 1)
if (vSystemCPUs & bit)
CPUs++;
}
LogicalCores = CPUs;
}
SingleCoreAffinity::SingleCoreAffinity()
{
s_threadId = NULL;
s_oldmask = ERROR_INVALID_PARAMETER;
s_threadId = nullptr;
s_oldmask = ERROR_INVALID_PARAMETER;
DWORD_PTR availProcCpus, availSysCpus;
if( !GetProcessAffinityMask( GetCurrentProcess(), &availProcCpus, &availSysCpus ) ) return;
DWORD_PTR availProcCpus;
DWORD_PTR availSysCpus;
if (!GetProcessAffinityMask(GetCurrentProcess(), &availProcCpus, &availSysCpus))
return;
int i;
for( i=0; i<32; ++i )
{
if( availProcCpus & (1<<i) ) break;
}
int cpu = 0;
DWORD_PTR affinityMask;
for (affinityMask = 1; affinityMask != 0; affinityMask <<= 1, ++cpu)
if (availProcCpus & affinityMask)
break;
s_threadId = GetCurrentThread();
s_oldmask = SetThreadAffinityMask( s_threadId, (1UL<<i) );
s_oldmask = SetThreadAffinityMask(s_threadId, affinityMask);
if( s_oldmask == ERROR_INVALID_PARAMETER )
{
if (s_oldmask == ERROR_INVALID_PARAMETER) {
const int hexWidth = 2 * sizeof(DWORD_PTR);
Console.Warning(
"CpuDetect: SetThreadAffinityMask failed...\n"
"\tSystem Affinity : 0x%08x"
"\tProcess Affinity: 0x%08x"
"\tAttempted Thread Affinity CPU: i",
availProcCpus, availSysCpus, i
"\tSystem Affinity : 0x%0*x\n"
"\tProcess Affinity: 0x%0*x\n"
"\tAttempted Thread Affinity CPU: %i",
hexWidth, availProcCpus, hexWidth, availSysCpus, cpu
);
}
Sleep( 2 );
Sleep(2);
// Sleep Explained: I arbitrarily pick Core 0 to lock to for running the CPU test. This
// means that the current thread will need to be switched to Core 0 if it's currently
@ -80,15 +78,6 @@ SingleCoreAffinity::SingleCoreAffinity()
SingleCoreAffinity::~SingleCoreAffinity() throw()
{
if( s_oldmask != ERROR_INVALID_PARAMETER )
SetThreadAffinityMask( s_threadId, s_oldmask );
}
void SetSingleAffinity()
{
}
void RestoreAffinity()
{
if (s_oldmask != ERROR_INVALID_PARAMETER)
SetThreadAffinityMask(s_threadId, s_oldmask);
}

View File

@ -29,8 +29,8 @@ class SingleCoreAffinity
protected:
#ifdef _WIN32
HANDLE s_threadId;
DWORD s_oldmask;
HANDLE s_threadId;
DWORD_PTR s_oldmask;
#endif
public: