@@ -43,6 +43,9 @@ size_t length64=sizeof(value64);
43
43
#ifndef HWCAP_SVE
44
44
#define HWCAP_SVE (1 << 22)
45
45
#endif
46
+ #if (defined OS_WINDOWS )
47
+ #include <winreg.h>
48
+ #endif
46
49
47
50
#define get_cpu_ftr (id , var ) ({ \
48
51
__asm__ __volatile__ ("mrs %0, "#id : "=r" (var)); \
@@ -385,6 +388,28 @@ int detect(void)
385
388
if (value64 == 3660830781 ) return CPU_VORTEX ; //A15/M2
386
389
if (value64 == 2271604202 ) return CPU_VORTEX ; //A16/M3
387
390
if (value64 == 1867590060 ) return CPU_VORTEX ; //M4
391
+ #else
392
+ #ifdef OS_WINDOWS
393
+ HKEY reghandle ;
394
+ HKEY hklm = HKEY_LOCAL_MACHINE ;
395
+ WCHAR valstring [512 ];
396
+ PVOID pvalstring = valstring ;
397
+ DWORD size = sizeof (valstring );
398
+ DWORD type = RRF_RT_ANY ;
399
+ DWORD flags = 0 ;
400
+ LPCWSTR subkey = L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0" ;
401
+ LPCWSTR field = L"ProcessorNameString" ;
402
+ LONG errcode = RegOpenKeyEx (HKEY_LOCAL_MACHINE ,TEXT ("Hardware\\Description\\System\\CentralProcessor\\0" ), 0 , KEY_READ , & reghandle );
403
+ if (errcode != NO_ERROR ) wprintf (L"Could not open registry key for proc0: %x\n" ,errcode );
404
+ errcode = RegQueryValueEx (reghandle , "ProcessorNameString" , NULL ,NULL ,pvalstring ,& size );
405
+ if (errcode != ERROR_SUCCESS ) wprintf (L"Error reading cpuname from registry:%x\n" ,errcode );
406
+ //wprintf(stderr,L"%s\n",(PWSTR)valstring);
407
+ RegCloseKey (reghandle );
408
+ if (strstr (valstring , "Snapdragon(R) X Elite" )) return CPU_NEOVERSEN1 ;
409
+ if (strstr (valstring , "Ampere(R) Altra" )) return CPU_NEOVERSEN1 ;
410
+ if (strstr (valstring , "Snapdragon (TM) 8cx Gen 3" )) return CPU_CORTEXX1 ;
411
+ if (strstr (valstring , "Snapdragon Compute Platform" )) return CPU_CORTEXX1 ;
412
+ #endif
388
413
#endif
389
414
return CPU_ARMV8 ;
390
415
#endif
0 commit comments