You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.0 KiB
149 lines
4.0 KiB
|
|
#include "types.h"
|
|
#include "string.h"
|
|
#include "print.h"
|
|
|
|
|
|
static const char* szFeatures[] = {
|
|
"x87 FPU On Chip",
|
|
"Virtual-8086 Mode Enhancement",
|
|
"Debugging Extensions",
|
|
"Page Size Extensions",
|
|
"Time Stamp Counter",
|
|
"RDMR and WRMSR Support",
|
|
"Physical Address Extensions",
|
|
"Machine Check Exception",
|
|
"CMPXCHG8B Instruction",
|
|
"APIC On Chip",
|
|
"Unknown1",
|
|
"SYSENTER and SYSEXIT",
|
|
"Memory Type Range Registers",
|
|
"PTE Global Bit",
|
|
"Machine Check Architecture",
|
|
"Conditional Move/Compare Instruction",
|
|
"Page Attribute Table",
|
|
"36-bit Page Size Extension",
|
|
"Processor Serial Number",
|
|
"CFLUSH Extension",
|
|
"Unknown2",
|
|
"Debug Store",
|
|
"ThermalMonitor and Clock Ctrl",
|
|
"MMX Technology",
|
|
"FXSAVE/FXRSTOR",
|
|
"SSE Extensions",
|
|
"SSE2 Extensions",
|
|
"Self Snoop",
|
|
"Multithreading Technology",
|
|
"Thermal Monitor",
|
|
"Unknown4",
|
|
"Pending Break Enable"
|
|
|
|
};
|
|
|
|
#if defined(_WIN32)
|
|
// implementation originally from:
|
|
// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2008/hskdteyh(v=vs.90)?redirectedfrom=MSDN
|
|
#include <intrin.h>
|
|
void cpuid() {
|
|
ULE_TYPES_H_FTAG;
|
|
int nSteppingID = 0;
|
|
int nModel = 0;
|
|
int nFamily = 0;
|
|
int nProcessorType = 0;
|
|
int nExtendedmodel = 0;
|
|
int nExtendedfamily = 0;
|
|
int nBrandIndex = 0;
|
|
int nCLFLUSHcachelinesize = 0;
|
|
int nLogicalProcessors = 0;
|
|
int nAPICPhysicalID = 0;
|
|
int nFeatureInfo = 0;
|
|
int nCacheLineSize = 0;
|
|
int nL2Associativity = 0;
|
|
int nCacheSizeK = 0;
|
|
int nPhysicalAddress = 0;
|
|
int nVirtualAddress = 0;
|
|
int nRet = 0;
|
|
|
|
int nCores = 0;
|
|
int nCacheType = 0;
|
|
int nCacheLevel = 0;
|
|
int nMaxThread = 0;
|
|
int nSysLineSize = 0;
|
|
int nPhysicalLinePartitions = 0;
|
|
int nWaysAssociativity = 0;
|
|
int nNumberSets = 0;
|
|
|
|
unsigned nIds, nExIds, i;
|
|
|
|
bool bSSE3Instructions = false;
|
|
bool bMONITOR_MWAIT = false;
|
|
bool bCPLQualifiedDebugStore = false;
|
|
bool bVirtualMachineExtensions = false;
|
|
bool bEnhancedIntelSpeedStepTechnology = false;
|
|
bool bThermalMonitor2 = false;
|
|
bool bSupplementalSSE3 = false;
|
|
bool bL1ContextID = false;
|
|
bool bCMPXCHG16B = false;
|
|
bool bxTPRUpdateControl = false;
|
|
bool bPerfDebugCapabilityMSR = false;
|
|
bool bSSE41Extensions = false;
|
|
bool bSSE42Extensions = false;
|
|
bool bPOPCNT = false;
|
|
|
|
bool bMultithreading = false;
|
|
|
|
bool bLAHF_SAHFAvailable = false;
|
|
bool bCmpLegacy = false;
|
|
bool bSVM = false;
|
|
bool bExtApicSpace = false;
|
|
bool bAltMovCr8 = false;
|
|
bool bLZCNT = false;
|
|
bool bSSE4A = false;
|
|
bool bMisalignedSSE = false;
|
|
bool bPREFETCH = false;
|
|
bool bSKINITandDEV = false;
|
|
bool bSYSCALL_SYSRETAvailable = false;
|
|
bool bExecuteDisableBitAvailable = false;
|
|
bool bMMXExtensions = false;
|
|
bool bFFXSR = false;
|
|
bool b1GBSupport = false;
|
|
bool bRDTSCP = false;
|
|
bool b64Available = false;
|
|
bool b3DNowExt = false;
|
|
bool b3DNow = false;
|
|
bool bNestedPaging = false;
|
|
bool bLBRVisualization = false;
|
|
bool bFP128 = false;
|
|
bool bMOVOptimization = false;
|
|
|
|
bool bSelfInit = false;
|
|
bool bFullyAssociative = false;
|
|
|
|
int cpuinfo[4] = { -1 };
|
|
__cpuid(cpuinfo, 0);
|
|
unsigned count = cpuinfo[0];
|
|
|
|
char cpustring[0x20];
|
|
String::memset((void*) cpustring, '\0', sizeof(cpustring));
|
|
*((int*) cpustring) = cpuinfo[1];
|
|
*((int*) (cpustring + 4)) = cpuinfo[3];
|
|
*((int*) (cpustring + 8)) = cpuinfo[2];
|
|
println("CPU Identification String: %s", cpustring);
|
|
|
|
//for (s32 i = 0; i < count; i++) {
|
|
// __cpuid(cpuinfo, i);
|
|
// println("info type: %d", i);
|
|
// println("cpuinfo[0] = 0x%x", cpuinfo[0]);
|
|
// println("cpuinfo[1] = 0x%x", cpuinfo[1]);
|
|
// println("cpuinfo[2] = 0x%x", cpuinfo[2]);
|
|
// println("cpuinfo[3] = 0x%x", cpuinfo[3]);
|
|
//}
|
|
}
|
|
|
|
#else
|
|
void cpuid() {
|
|
ULE_TYPES_H_FTAG;
|
|
}
|
|
|
|
#endif
|
|
|