blob: 6856e97c85096f42fdb0459d56042356546b52a9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
// stdafx.cpp : source file that includes just the standard includes
// MMXSwarm.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
// Also includes utility functions that rarely change.
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
//
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
static bool _IsMMX();
bool IsMMX()
{
static bool bMMX = _IsMMX();
return(bMMX);
}
static bool _IsMMX()
{
// This bit flag can get set on calling cpuid
// with register eax set to 1
const int _MMX_FEATURE_BIT = 0x00800000;
DWORD dwFeature = 0;
__try {
_asm {
mov eax,1
cpuid
mov dwFeature,edx
}
} __except ( EXCEPTION_EXECUTE_HANDLER) {
return false;
}
if (dwFeature & _MMX_FEATURE_BIT) {
__try {
__asm {
pxor mm0, mm0
emms
}
} __except (EXCEPTION_EXECUTE_HANDLER) {
return (0);
}
return(true);
}
return false;
}
|