mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-09 19:10:38 +00:00
(svn r26207) -Codechange: move the CPUID flag detection into cpu.cpp
This commit is contained in:
parent
e6f83028f6
commit
ee73015e8f
14
src/cpu.cpp
14
src/cpu.cpp
@ -7,9 +7,10 @@
|
|||||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file cpu.cpp OS/CPU/compiler dependant real time tick sampling. */
|
/** @file cpu.cpp OS/CPU/compiler dependant CPU specific calls. */
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
#include "core/bitmath_func.hpp"
|
||||||
|
|
||||||
#undef RDTSC_AVAILABLE
|
#undef RDTSC_AVAILABLE
|
||||||
|
|
||||||
@ -107,3 +108,14 @@ void ottd_cpuid(int info[4], int type)
|
|||||||
info[0] = info[1] = info[2] = info[3] = 0;
|
info[0] = info[1] = info[2] = info[3] = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool HasCPUIDFlag(uint type, uint index, uint bit)
|
||||||
|
{
|
||||||
|
int cpu_info[4] = {-1};
|
||||||
|
ottd_cpuid(cpu_info, 0);
|
||||||
|
uint max_info_type = cpu_info[0];
|
||||||
|
if (max_info_type < type) return false;
|
||||||
|
|
||||||
|
ottd_cpuid(cpu_info, type);
|
||||||
|
return HasBit(cpu_info[index], bit);
|
||||||
|
}
|
||||||
|
@ -25,4 +25,13 @@ uint64 ottd_rdtsc();
|
|||||||
*/
|
*/
|
||||||
void ottd_cpuid(int info[4], int type);
|
void ottd_cpuid(int info[4], int type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the current CPU has the given flag.
|
||||||
|
* @param type The type to be passing to cpuid (usually 1).
|
||||||
|
* @param index The index in the returned info array.
|
||||||
|
* @param bit The bit index that needs to be set.
|
||||||
|
* @return The value of the bit, or false when there is no CPUID or the type is not available.
|
||||||
|
*/
|
||||||
|
bool HasCPUIDFlag(uint type, uint index, uint bit);
|
||||||
|
|
||||||
#endif /* CPU_H */
|
#endif /* CPU_H */
|
||||||
|
@ -97,13 +97,7 @@ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv)
|
|||||||
*/
|
*/
|
||||||
bool ViewportSortParentSpritesSSE41Checker()
|
bool ViewportSortParentSpritesSSE41Checker()
|
||||||
{
|
{
|
||||||
int cpu_info[4] = {-1};
|
return HasCPUIDFlag(1, 2, 19);
|
||||||
ottd_cpuid(cpu_info, 0);
|
|
||||||
unsigned int max_info_type = cpu_info[0];
|
|
||||||
if (max_info_type < 1) return false;
|
|
||||||
|
|
||||||
ottd_cpuid(cpu_info, 1);
|
|
||||||
return (cpu_info[2] & (1 << 19)) != 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* WITH_SSE */
|
#endif /* WITH_SSE */
|
||||||
|
Loading…
Reference in New Issue
Block a user