CCpuID::CCpuID() { VDCPUTest(); long lEnableFlags = CPUGetEnabledExtensions(); int flags = 0; flags |= !!(lEnableFlags & CPUF_SUPPORTS_MMX) ? mmx : 0; // STD MMX flags |= !!(lEnableFlags & CPUF_SUPPORTS_INTEGER_SSE) ? ssemmx : 0; // SSE MMX flags |= !!(lEnableFlags & CPUF_SUPPORTS_SSE) ? ssefpu : 0; // STD SSE flags |= !!(lEnableFlags & CPUF_SUPPORTS_SSE2) ? sse2 : 0; // SSE2 flags |= !!(lEnableFlags & CPUF_SUPPORTS_3DNOW) ? _3dnow : 0; // 3DNow // result m_flags = (flag_t)flags; }
void VDFastMemcpyAutodetect() { long exts = CPUGetEnabledExtensions(); if (exts & CPUF_SUPPORTS_SSE) { VDFastMemcpyPartial = VDFastMemcpyPartialMMX2; VDFastMemcpyFinish = VDFastMemcpyFinishMMX2; VDSwapMemory = VDSwapMemorySSE; } else if (exts & CPUF_SUPPORTS_INTEGER_SSE) { VDFastMemcpyPartial = VDFastMemcpyPartialMMX2; VDFastMemcpyFinish = VDFastMemcpyFinishMMX2; VDSwapMemory = VDSwapMemoryScalar; } else if (exts & CPUF_SUPPORTS_MMX) { VDFastMemcpyPartial = VDFastMemcpyPartialMMX; VDFastMemcpyFinish = VDFastMemcpyFinishMMX; VDSwapMemory = VDSwapMemoryScalar; } else { VDFastMemcpyPartial = VDFastMemcpyPartialScalar; VDFastMemcpyFinish = VDFastMemcpyFinishScalar; VDSwapMemory = VDSwapMemoryScalar; } }
static long VDFilterCallbackGetCPUFlags() { return CPUGetEnabledExtensions(); }