mirror of https://github.com/PCSX2/pcsx2.git
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:
parent
043d2926fa
commit
ed47dca8a1
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -29,8 +29,8 @@ class SingleCoreAffinity
|
|||
protected:
|
||||
|
||||
#ifdef _WIN32
|
||||
HANDLE s_threadId;
|
||||
DWORD s_oldmask;
|
||||
HANDLE s_threadId;
|
||||
DWORD_PTR s_oldmask;
|
||||
#endif
|
||||
|
||||
public:
|
||||
|
|
Loading…
Reference in New Issue