@@ -43,6 +43,9 @@ size_t length64=sizeof(value64);
4343#ifndef HWCAP_SVE
4444#define HWCAP_SVE (1 << 22)
4545#endif
46+ #if (defined OS_WINDOWS )
47+ #include <winreg.h>
48+ #endif
4649
4750#define get_cpu_ftr (id , var ) ({ \
4851 __asm__ __volatile__ ("mrs %0, "#id : "=r" (var)); \
@@ -385,6 +388,28 @@ int detect(void)
385388 if (value64 == 3660830781 ) return CPU_VORTEX ; //A15/M2
386389 if (value64 == 2271604202 ) return CPU_VORTEX ; //A16/M3
387390 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
388413#endif
389414 return CPU_ARMV8 ;
390415#endif
0 commit comments