2502 lines
71 KiB
Plaintext
2502 lines
71 KiB
Plaintext
; Listing generated by Microsoft (R) Optimizing Compiler Version 19.44.35220.0
|
|
|
|
include listing.inc
|
|
|
|
INCLUDELIB MSVCRTD
|
|
INCLUDELIB OLDNAMES
|
|
|
|
_DATA SEGMENT
|
|
COMM infolog:BYTE:0200H
|
|
_DATA ENDS
|
|
msvcjmc SEGMENT
|
|
__5C8CA4D3_mmintrin@h DB 01H
|
|
__8C83BECC_concurrencysal@h DB 01H
|
|
__608E3340_sal@h DB 01H
|
|
__FB67E29A_vadefs@h DB 01H
|
|
__1D1B619C_vcruntime@h DB 01H
|
|
__735960E1_corecrt@h DB 01H
|
|
__211DB995_corecrt_malloc@h DB 01H
|
|
__7CD62D9E_malloc@h DB 01H
|
|
__9DCE0DC8_xmmintrin@h DB 01H
|
|
__4C2AD0C7_winpackagefamily@h DB 01H
|
|
__9DED9ED1_winapifamily@h DB 01H
|
|
__12FEDF4E_sdkddkver@h DB 01H
|
|
__9BAEE128_excpt@h DB 01H
|
|
__B7B53233_stdarg@h DB 01H
|
|
__6B04FCB3_specstrings_undef@h DB 01H
|
|
__F4027AF7_specstrings_strict@h DB 01H
|
|
__B90340D4_sdv_driverspecs@h DB 01H
|
|
__BFFF5AD3_driverspecs@h DB 01H
|
|
__32847078_specstrings@h DB 01H
|
|
__108B2620_corecrt_wctype@h DB 01H
|
|
__6CD6613D_ctype@h DB 01H
|
|
__30902A1F_kernelspecs@h DB 01H
|
|
__376FD5CA_basetsd@h DB 01H
|
|
__13DE2371_errno@h DB 01H
|
|
__8C6AE390_vcruntime_string@h DB 01H
|
|
__8ACB2152_corecrt_memcpy_s@h DB 01H
|
|
__EA6C9D17_corecrt_memory@h DB 01H
|
|
__0DF2AF52_corecrt_wstring@h DB 01H
|
|
__6E889ECC_string@h DB 01H
|
|
__9BEDF4DE_guiddef@h DB 01H
|
|
__51BFD2FE_pshpack4@h DB 01H
|
|
__31652CEA_poppack@h DB 01H
|
|
__5532AE4C_pshpack2@h DB 01H
|
|
__58A52B9A_pshpack8@h DB 01H
|
|
__57741015_pshpack1@h DB 01H
|
|
__CDE68C90_apiset@h DB 01H
|
|
__0BF06E8D_ktmtypes@h DB 01H
|
|
__40C200C0_winnt@h DB 01H
|
|
__9336F789_minwindef@h DB 01H
|
|
__55136115_windef@h DB 01H
|
|
__32205BF0_apisetcconv@h DB 01H
|
|
__B48FDEA0_minwinbase@h DB 01H
|
|
__3551B028_apiquery2@h DB 01H
|
|
__65BE04AA_processenv@h DB 01H
|
|
__4767CA46_fileapi@h DB 01H
|
|
__282E6C4B_fileapifromapp@h DB 01H
|
|
__393AF12C_debugapi@h DB 01H
|
|
__EBC502B8_utilapiset@h DB 01H
|
|
__1EAD8C69_handleapi@h DB 01H
|
|
__D8EF9B29_errhandlingapi@h DB 01H
|
|
__97FC1204_fibersapi@h DB 01H
|
|
__27448220_namedpipeapi@h DB 01H
|
|
__6EA33B2A_profileapi@h DB 01H
|
|
__EAC6F673_heapapi@h DB 01H
|
|
__D64EEA5A_ioapiset@h DB 01H
|
|
__144BD4B6_synchapi@h DB 01H
|
|
__03B1C640_interlockedapi@h DB 01H
|
|
__DC64CB38_processthreadsapi@h DB 01H
|
|
__D719B518_sysinfoapi@h DB 01H
|
|
__410385B1_memoryapi@h DB 01H
|
|
__C1AD45EF_enclaveapi@h DB 01H
|
|
__F4C3AA32_threadpoollegacyapiset@h DB 01H
|
|
__AC5A7A9F_threadpoolapiset@h DB 01H
|
|
__F5254B21_jobapi@h DB 01H
|
|
__BCEA6EE8_jobapi2@h DB 01H
|
|
__D18ACE72_wow64apiset@h DB 01H
|
|
__669B0D4A_libloaderapi@h DB 01H
|
|
__645F7034_securitybaseapi@h DB 01H
|
|
__67E58557_namespaceapi@h DB 01H
|
|
__599D9D3A_systemtopologyapi@h DB 01H
|
|
__2337E373_processtopologyapi@h DB 01H
|
|
__02BFF239_securityappcontainer@h DB 01H
|
|
__9C196272_realtimeapiset@h DB 01H
|
|
__5AB313A4_winerror@h DB 01H
|
|
__B7E7187B_timezoneapi@h DB 01H
|
|
__6DE9EB6F_winbase@h DB 01H
|
|
__56B2AFF2_wingdi@h DB 01H
|
|
__BA1161A9_tvout@h DB 01H
|
|
__0501A018_winuser@h DB 01H
|
|
__EF12FA99_datetimeapi@h DB 01H
|
|
__8FA7C3CA_winnls@h DB 01H
|
|
__390F0C47_stringapiset@h DB 01H
|
|
__28605B0A_wincontypes@h DB 01H
|
|
__BFBDE86D_consoleapi@h DB 01H
|
|
__C3CAFBF0_consoleapi2@h DB 01H
|
|
__C20891C7_consoleapi3@h DB 01H
|
|
__717C98B6_wincon@h DB 01H
|
|
__2884C177_verrsrc@h DB 01H
|
|
__A3FD3A34_winver@h DB 01H
|
|
__6F8AD9F1_reason@h DB 01H
|
|
__4C90FD6F_winreg@h DB 01H
|
|
__68AFEBAD_wnnc@h DB 01H
|
|
__5A7AB086_winnetwk@h DB 01H
|
|
__2FE8A10C_stralign@h DB 01H
|
|
__34558472_winsvc@h DB 01H
|
|
__058845F1_mcx@h DB 01H
|
|
__7F16006B_ime_cmodes@h DB 01H
|
|
__0A3AF599_imm@h DB 01H
|
|
__9349FE86_windows@h DB 01H
|
|
__639A050C_sn_internal@h DB 01H
|
|
__836A8CFC_stdint@h DB 01H
|
|
__714FE6D7_sn_target@h DB 01H
|
|
__60B45B40_corecrt_stdio_config@h DB 01H
|
|
__CFA3741E_corecrt_wstdio@h DB 01H
|
|
__B3FE3303_stdio@h DB 01H
|
|
__955456CD_stddef@h DB 01H
|
|
__99AED4FB_corecrt_search@h DB 01H
|
|
__8B813BF6_corecrt_wstdlib@h DB 01H
|
|
__3D1CA2C3_limits@h DB 01H
|
|
__E8FB0A68_stdlib@h DB 01H
|
|
__F562FA57_stb_image@h DB 01H
|
|
__C95DC661_khrplatform@h DB 01H
|
|
__6C577136_gl@h DB 01H
|
|
__EE638A2C_wgl@h DB 01H
|
|
__8EF9E35C_glfw3@h DB 01H
|
|
__F8AC8404_emmintrin@h DB 01H
|
|
__270DEC8D_pmmintrin@h DB 01H
|
|
__97D49F0F_tmmintrin@h DB 01H
|
|
__BEEF8A8C_smmintrin@h DB 01H
|
|
__DB8D0340_nmmintrin@h DB 01H
|
|
__0E36F90E_wmmintrin@h DB 01H
|
|
__C5A2B409_zmmintrin@h DB 01H
|
|
__F2B616C3_immintrin@h DB 01H
|
|
__9FB25DBE_assert@h DB 01H
|
|
__4E664295_glfw_function@h DB 01H
|
|
__64C0EF11_StgSharpNative@h DB 01H
|
|
__E2EC0CAF_sn_matkernel@h DB 01H
|
|
__47E843D2_intrin0@inl@h DB 01H
|
|
__130964FF_setjmp@h DB 01H
|
|
__4875F786_ammintrin@h DB 01H
|
|
__353FD888_intrin@h DB 01H
|
|
__5FE1E9E3_isa_availability@h DB 01H
|
|
__AA840D82_sn_intrinsic@h DB 01H
|
|
__CE29950A_sn_intrincontext@x86@h DB 01H
|
|
__3EBA305F_simdid@x86@c DB 01H
|
|
msvcjmc ENDS
|
|
PUBLIC sn_get_simd_level_global
|
|
PUBLIC sn_get_simd_level_local
|
|
PUBLIC __JustMyCode_Default
|
|
PUBLIC ??_C@_0N@IGLDKOMM@HygonGenuine@ ; `string'
|
|
PUBLIC ??_C@_0N@FFJGBINN@AuthenticAMD@ ; `string'
|
|
PUBLIC ??_C@_0N@BDDFKIGD@GenuineIntel@ ; `string'
|
|
PUBLIC ??_C@_0N@DHAFJCOO@CentaurHauls@ ; `string'
|
|
PUBLIC ??_C@_0N@BDNCIKNF@?5?5Shanghai?5?5@ ; `string'
|
|
EXTRN __report_rangecheckfailure:PROC
|
|
EXTRN memcmp:PROC
|
|
EXTRN strcmp:PROC
|
|
EXTRN _RTC_CheckStackVars:PROC
|
|
EXTRN _RTC_InitBase:PROC
|
|
EXTRN _RTC_Shutdown:PROC
|
|
EXTRN __CheckForDebuggerJustMyCode:PROC
|
|
EXTRN __GSHandlerCheck:PROC
|
|
EXTRN __security_check_cookie:PROC
|
|
EXTRN __security_cookie:QWORD
|
|
_BSS SEGMENT
|
|
global_simdid DQ 01H DUP (?)
|
|
_BSS ENDS
|
|
; COMDAT pdata
|
|
pdata SEGMENT
|
|
$pdata$sn_get_simd_level_global DD imagerel $LN4
|
|
DD imagerel $LN4+76
|
|
DD imagerel $unwind$sn_get_simd_level_global
|
|
pdata ENDS
|
|
; COMDAT pdata
|
|
pdata SEGMENT
|
|
$pdata$sn_get_simd_level_local DD imagerel $LN98
|
|
DD imagerel $LN98+3276
|
|
DD imagerel $unwind$sn_get_simd_level_local
|
|
pdata ENDS
|
|
; COMDAT pdata
|
|
pdata SEGMENT
|
|
$pdata$get_cpuid DD imagerel get_cpuid
|
|
DD imagerel get_cpuid+250
|
|
DD imagerel $unwind$get_cpuid
|
|
pdata ENDS
|
|
; COMDAT pdata
|
|
pdata SEGMENT
|
|
$pdata$xgetbv_has_xmm_ymm DD imagerel xgetbv_has_xmm_ymm
|
|
DD imagerel xgetbv_has_xmm_ymm+99
|
|
DD imagerel $unwind$xgetbv_has_xmm_ymm
|
|
pdata ENDS
|
|
; COMDAT pdata
|
|
pdata SEGMENT
|
|
$pdata$xgetbv_has_avx512_state DD imagerel xgetbv_has_avx512_state
|
|
DD imagerel xgetbv_has_avx512_state+113
|
|
DD imagerel $unwind$xgetbv_has_avx512_state
|
|
pdata ENDS
|
|
; COMDAT pdata
|
|
pdata SEGMENT
|
|
$pdata$amd_avx512_impl DD imagerel amd_avx512_impl
|
|
DD imagerel amd_avx512_impl+75
|
|
DD imagerel $unwind$amd_avx512_impl
|
|
pdata ENDS
|
|
; COMDAT pdata
|
|
pdata SEGMENT
|
|
$pdata$is_amd_glue_ymm DD imagerel is_amd_glue_ymm
|
|
DD imagerel is_amd_glue_ymm+277
|
|
DD imagerel $unwind$is_amd_glue_ymm
|
|
pdata ENDS
|
|
; COMDAT rtc$TMZ
|
|
rtc$TMZ SEGMENT
|
|
_RTC_Shutdown.rtc$TMZ DQ FLAT:_RTC_Shutdown
|
|
rtc$TMZ ENDS
|
|
; COMDAT rtc$IMZ
|
|
rtc$IMZ SEGMENT
|
|
_RTC_InitBase.rtc$IMZ DQ FLAT:_RTC_InitBase
|
|
rtc$IMZ ENDS
|
|
; COMDAT ??_C@_0N@BDNCIKNF@?5?5Shanghai?5?5@
|
|
CONST SEGMENT
|
|
??_C@_0N@BDNCIKNF@?5?5Shanghai?5?5@ DB ' Shanghai ', 00H ; `string'
|
|
CONST ENDS
|
|
; COMDAT ??_C@_0N@DHAFJCOO@CentaurHauls@
|
|
CONST SEGMENT
|
|
??_C@_0N@DHAFJCOO@CentaurHauls@ DB 'CentaurHauls', 00H ; `string'
|
|
CONST ENDS
|
|
; COMDAT ??_C@_0N@BDDFKIGD@GenuineIntel@
|
|
CONST SEGMENT
|
|
??_C@_0N@BDDFKIGD@GenuineIntel@ DB 'GenuineIntel', 00H ; `string'
|
|
CONST ENDS
|
|
; COMDAT ??_C@_0N@FFJGBINN@AuthenticAMD@
|
|
CONST SEGMENT
|
|
??_C@_0N@FFJGBINN@AuthenticAMD@ DB 'AuthenticAMD', 00H ; `string'
|
|
CONST ENDS
|
|
; COMDAT ??_C@_0N@IGLDKOMM@HygonGenuine@
|
|
CONST SEGMENT
|
|
??_C@_0N@IGLDKOMM@HygonGenuine@ DB 'HygonGenuine', 00H ; `string'
|
|
CONST ENDS
|
|
; COMDAT xdata
|
|
xdata SEGMENT
|
|
$unwind$is_amd_glue_ymm DD 025051701H
|
|
DD 01122317H
|
|
DD 0700b0035H
|
|
DD 0500aH
|
|
xdata ENDS
|
|
; COMDAT xdata
|
|
xdata SEGMENT
|
|
$unwind$amd_avx512_impl DD 025051201H
|
|
DD 010d2312H
|
|
DD 07006001dH
|
|
DD 05005H
|
|
xdata ENDS
|
|
; COMDAT xdata
|
|
xdata SEGMENT
|
|
$unwind$xgetbv_has_avx512_state DD 025050f01H
|
|
DD 010a230fH
|
|
DD 070030025H
|
|
DD 05002H
|
|
xdata ENDS
|
|
; COMDAT xdata
|
|
xdata SEGMENT
|
|
$unwind$xgetbv_has_xmm_ymm DD 025050f01H
|
|
DD 010a230fH
|
|
DD 070030021H
|
|
DD 05002H
|
|
xdata ENDS
|
|
; COMDAT voltbl
|
|
voltbl SEGMENT
|
|
_volmd DB 043H
|
|
DB 0e0H
|
|
voltbl ENDS
|
|
; COMDAT xdata
|
|
xdata SEGMENT
|
|
$unwind$get_cpuid DD 025064a19H
|
|
DD 011c2321H
|
|
DD 070150022H
|
|
DD 050133014H
|
|
DD imagerel __GSHandlerCheck
|
|
DD 0108H
|
|
xdata ENDS
|
|
; COMDAT CONST
|
|
CONST SEGMENT
|
|
get_cpuid$rtcName$0 DB 072H
|
|
DB 065H
|
|
DB 067H
|
|
DB 073H
|
|
DB 00H
|
|
ORG $+11
|
|
get_cpuid$rtcVarDesc DD 028H
|
|
DD 010H
|
|
DQ FLAT:get_cpuid$rtcName$0
|
|
ORG $+48
|
|
get_cpuid$rtcFrameData DD 01H
|
|
DD 00H
|
|
DQ FLAT:get_cpuid$rtcVarDesc
|
|
CONST ENDS
|
|
; COMDAT voltbl
|
|
voltbl SEGMENT
|
|
_volmd DW 02aH
|
|
DW 0cb3H
|
|
voltbl ENDS
|
|
; COMDAT xdata
|
|
xdata SEGMENT
|
|
$unwind$sn_get_simd_level_local DD 035053119H
|
|
DD 010a330fH
|
|
DD 070030143H
|
|
DD 05002H
|
|
DD imagerel __GSHandlerCheck
|
|
DD 0a08H
|
|
xdata ENDS
|
|
; COMDAT CONST
|
|
CONST SEGMENT
|
|
sn_get_simd_level_local$rtcName$0 DB 05fH
|
|
DB 073H
|
|
DB 069H
|
|
DB 06dH
|
|
DB 064H
|
|
DB 069H
|
|
DB 064H
|
|
DB 00H
|
|
sn_get_simd_level_local$rtcName$1 DB 065H
|
|
DB 061H
|
|
DB 078H
|
|
DB 00H
|
|
sn_get_simd_level_local$rtcName$2 DB 065H
|
|
DB 062H
|
|
DB 078H
|
|
DB 00H
|
|
sn_get_simd_level_local$rtcName$3 DB 065H
|
|
DB 063H
|
|
DB 078H
|
|
DB 00H
|
|
sn_get_simd_level_local$rtcName$4 DB 065H
|
|
DB 064H
|
|
DB 078H
|
|
DB 00H
|
|
sn_get_simd_level_local$rtcName$5 DB 076H
|
|
DB 065H
|
|
DB 06eH
|
|
DB 064H
|
|
DB 06fH
|
|
DB 072H
|
|
DB 00H
|
|
ORG $+1
|
|
sn_get_simd_level_local$rtcName$6 DB 061H
|
|
DB 031H
|
|
DB 030H
|
|
DB 05fH
|
|
DB 065H
|
|
DB 061H
|
|
DB 078H
|
|
DB 00H
|
|
sn_get_simd_level_local$rtcName$7 DB 061H
|
|
DB 031H
|
|
DB 030H
|
|
DB 05fH
|
|
DB 065H
|
|
DB 062H
|
|
DB 078H
|
|
DB 00H
|
|
sn_get_simd_level_local$rtcName$8 DB 061H
|
|
DB 031H
|
|
DB 030H
|
|
DB 05fH
|
|
DB 065H
|
|
DB 063H
|
|
DB 078H
|
|
DB 00H
|
|
sn_get_simd_level_local$rtcName$9 DB 061H
|
|
DB 031H
|
|
DB 030H
|
|
DB 05fH
|
|
DB 065H
|
|
DB 064H
|
|
DB 078H
|
|
DB 00H
|
|
sn_get_simd_level_local$rtcName$10 DB 068H
|
|
DB 05fH
|
|
DB 065H
|
|
DB 061H
|
|
DB 078H
|
|
DB 00H
|
|
ORG $+2
|
|
sn_get_simd_level_local$rtcName$11 DB 068H
|
|
DB 05fH
|
|
DB 065H
|
|
DB 062H
|
|
DB 078H
|
|
DB 00H
|
|
ORG $+2
|
|
sn_get_simd_level_local$rtcName$12 DB 068H
|
|
DB 05fH
|
|
DB 065H
|
|
DB 063H
|
|
DB 078H
|
|
DB 00H
|
|
ORG $+2
|
|
sn_get_simd_level_local$rtcName$13 DB 068H
|
|
DB 05fH
|
|
DB 065H
|
|
DB 064H
|
|
DB 078H
|
|
DB 00H
|
|
ORG $+2
|
|
sn_get_simd_level_local$rtcVarDesc DD 06a4H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$13
|
|
DD 0684H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$12
|
|
DD 0664H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$11
|
|
DD 0644H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$10
|
|
DD 05e4H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$9
|
|
DD 05c4H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$8
|
|
DD 05a4H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$7
|
|
DD 0584H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$6
|
|
DD 0d8H
|
|
DD 0dH
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$5
|
|
DD 0b4H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$4
|
|
DD 094H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$3
|
|
DD 074H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$2
|
|
DD 054H
|
|
DD 04H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$1
|
|
DD 038H
|
|
DD 08H
|
|
DQ FLAT:sn_get_simd_level_local$rtcName$0
|
|
ORG $+672
|
|
sn_get_simd_level_local$rtcFrameData DD 0eH
|
|
DD 00H
|
|
DQ FLAT:sn_get_simd_level_local$rtcVarDesc
|
|
CONST ENDS
|
|
; COMDAT xdata
|
|
xdata SEGMENT
|
|
$unwind$sn_get_simd_level_global DD 025050f01H
|
|
DD 010a230fH
|
|
DD 07003001dH
|
|
DD 05002H
|
|
xdata ENDS
|
|
; Function compile flags: /Odt
|
|
; COMDAT __JustMyCode_Default
|
|
_TEXT SEGMENT
|
|
__JustMyCode_Default PROC ; COMDAT
|
|
00000 c2 00 00 ret 0
|
|
__JustMyCode_Default ENDP
|
|
_TEXT ENDS
|
|
; Function compile flags: /Odtp /RTCsu /ZI
|
|
; File D:\platform-dev\StgSharp.Native\sn-src\simdid.x86.c
|
|
; COMDAT is_amd_glue_ymm
|
|
_TEXT SEGMENT
|
|
base_fam$ = 4
|
|
ext_fam$ = 36
|
|
disp_fam$ = 68
|
|
base_mdl$ = 100
|
|
ext_mdl$ = 132
|
|
disp_mdl$ = 164
|
|
tv78 = 372
|
|
tv87 = 372
|
|
vendor$ = 416
|
|
cpuid1_eax$ = 424
|
|
is_amd_glue_ymm PROC ; COMDAT
|
|
|
|
; 76 : {
|
|
|
|
00000 89 54 24 10 mov DWORD PTR [rsp+16], edx
|
|
00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
|
|
00009 55 push rbp
|
|
0000a 57 push rdi
|
|
0000b 48 81 ec a8 01
|
|
00 00 sub rsp, 424 ; 000001a8H
|
|
00012 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32]
|
|
00017 48 8d 0d 00 00
|
|
00 00 lea rcx, OFFSET FLAT:__3EBA305F_simdid@x86@c
|
|
0001e e8 00 00 00 00 call __CheckForDebuggerJustMyCode
|
|
00023 90 npad 1
|
|
|
|
; 77 : if (strcmp(vendor, "HygonGenuine") == 0)
|
|
|
|
00024 48 8d 15 00 00
|
|
00 00 lea rdx, OFFSET FLAT:??_C@_0N@IGLDKOMM@HygonGenuine@
|
|
0002b 48 8b 8d a0 01
|
|
00 00 mov rcx, QWORD PTR vendor$[rbp]
|
|
00032 e8 00 00 00 00 call strcmp
|
|
00037 85 c0 test eax, eax
|
|
00039 75 0a jne SHORT $LN2@is_amd_glu
|
|
|
|
; 78 : return 1; /* Hygon is Zen1-based; always split YMM */
|
|
|
|
0003b b8 01 00 00 00 mov eax, 1
|
|
00040 e9 c6 00 00 00 jmp $LN1@is_amd_glu
|
|
$LN2@is_amd_glu:
|
|
|
|
; 79 : if (strcmp(vendor, "AuthenticAMD") != 0)
|
|
|
|
00045 48 8d 15 00 00
|
|
00 00 lea rdx, OFFSET FLAT:??_C@_0N@FFJGBINN@AuthenticAMD@
|
|
0004c 48 8b 8d a0 01
|
|
00 00 mov rcx, QWORD PTR vendor$[rbp]
|
|
00053 e8 00 00 00 00 call strcmp
|
|
00058 85 c0 test eax, eax
|
|
0005a 74 07 je SHORT $LN3@is_amd_glu
|
|
|
|
; 80 : return 0;
|
|
|
|
0005c 33 c0 xor eax, eax
|
|
0005e e9 a8 00 00 00 jmp $LN1@is_amd_glu
|
|
$LN3@is_amd_glu:
|
|
|
|
; 81 : int base_fam = (cpuid1_eax >> 8) & 0xF;
|
|
|
|
00063 8b 85 a8 01 00
|
|
00 mov eax, DWORD PTR cpuid1_eax$[rbp]
|
|
00069 c1 f8 08 sar eax, 8
|
|
0006c 83 e0 0f and eax, 15
|
|
0006f 89 45 04 mov DWORD PTR base_fam$[rbp], eax
|
|
|
|
; 82 : int ext_fam = (cpuid1_eax >> 20) & 0xFF;
|
|
|
|
00072 8b 85 a8 01 00
|
|
00 mov eax, DWORD PTR cpuid1_eax$[rbp]
|
|
00078 c1 f8 14 sar eax, 20
|
|
0007b 25 ff 00 00 00 and eax, 255 ; 000000ffH
|
|
00080 89 45 24 mov DWORD PTR ext_fam$[rbp], eax
|
|
|
|
; 83 : int disp_fam = (base_fam < 0xF) ? base_fam : (base_fam + ext_fam);
|
|
|
|
00083 83 7d 04 0f cmp DWORD PTR base_fam$[rbp], 15
|
|
00087 7d 0b jge SHORT $LN5@is_amd_glu
|
|
00089 8b 45 04 mov eax, DWORD PTR base_fam$[rbp]
|
|
0008c 89 85 74 01 00
|
|
00 mov DWORD PTR tv78[rbp], eax
|
|
00092 eb 10 jmp SHORT $LN6@is_amd_glu
|
|
$LN5@is_amd_glu:
|
|
00094 8b 45 24 mov eax, DWORD PTR ext_fam$[rbp]
|
|
00097 8b 4d 04 mov ecx, DWORD PTR base_fam$[rbp]
|
|
0009a 03 c8 add ecx, eax
|
|
0009c 8b c1 mov eax, ecx
|
|
0009e 89 85 74 01 00
|
|
00 mov DWORD PTR tv78[rbp], eax
|
|
$LN6@is_amd_glu:
|
|
000a4 8b 85 74 01 00
|
|
00 mov eax, DWORD PTR tv78[rbp]
|
|
000aa 89 45 44 mov DWORD PTR disp_fam$[rbp], eax
|
|
|
|
; 84 : int base_mdl = (cpuid1_eax >> 4) & 0xF;
|
|
|
|
000ad 8b 85 a8 01 00
|
|
00 mov eax, DWORD PTR cpuid1_eax$[rbp]
|
|
000b3 c1 f8 04 sar eax, 4
|
|
000b6 83 e0 0f and eax, 15
|
|
000b9 89 45 64 mov DWORD PTR base_mdl$[rbp], eax
|
|
|
|
; 85 : int ext_mdl = (cpuid1_eax >> 16) & 0xF;
|
|
|
|
000bc 8b 85 a8 01 00
|
|
00 mov eax, DWORD PTR cpuid1_eax$[rbp]
|
|
000c2 c1 f8 10 sar eax, 16
|
|
000c5 83 e0 0f and eax, 15
|
|
000c8 89 85 84 00 00
|
|
00 mov DWORD PTR ext_mdl$[rbp], eax
|
|
|
|
; 86 : int disp_mdl = (ext_mdl << 4) | base_mdl;
|
|
|
|
000ce 8b 85 84 00 00
|
|
00 mov eax, DWORD PTR ext_mdl$[rbp]
|
|
000d4 c1 e0 04 shl eax, 4
|
|
000d7 0b 45 64 or eax, DWORD PTR base_mdl$[rbp]
|
|
000da 89 85 a4 00 00
|
|
00 mov DWORD PTR disp_mdl$[rbp], eax
|
|
|
|
; 87 : return (disp_fam == 0x17) && (disp_mdl < 0x30); /* Zen1/Zen+ */
|
|
|
|
000e0 83 7d 44 17 cmp DWORD PTR disp_fam$[rbp], 23
|
|
000e4 75 15 jne SHORT $LN7@is_amd_glu
|
|
000e6 83 bd a4 00 00
|
|
00 30 cmp DWORD PTR disp_mdl$[rbp], 48 ; 00000030H
|
|
000ed 7d 0c jge SHORT $LN7@is_amd_glu
|
|
000ef c7 85 74 01 00
|
|
00 01 00 00 00 mov DWORD PTR tv87[rbp], 1
|
|
000f9 eb 0a jmp SHORT $LN8@is_amd_glu
|
|
$LN7@is_amd_glu:
|
|
000fb c7 85 74 01 00
|
|
00 00 00 00 00 mov DWORD PTR tv87[rbp], 0
|
|
$LN8@is_amd_glu:
|
|
00105 8b 85 74 01 00
|
|
00 mov eax, DWORD PTR tv87[rbp]
|
|
$LN1@is_amd_glu:
|
|
|
|
; 88 : }
|
|
|
|
0010b 48 8d a5 88 01
|
|
00 00 lea rsp, QWORD PTR [rbp+392]
|
|
00112 5f pop rdi
|
|
00113 5d pop rbp
|
|
00114 c3 ret 0
|
|
is_amd_glue_ymm ENDP
|
|
_TEXT ENDS
|
|
; Function compile flags: /Odtp /RTCsu /ZI
|
|
; File D:\platform-dev\StgSharp.Native\sn-src\simdid.x86.c
|
|
; COMDAT amd_avx512_impl
|
|
_TEXT SEGMENT
|
|
family$ = 224
|
|
amd_avx512_impl PROC ; COMDAT
|
|
|
|
; 65 : {
|
|
|
|
00000 89 4c 24 08 mov DWORD PTR [rsp+8], ecx
|
|
00004 55 push rbp
|
|
00005 57 push rdi
|
|
00006 48 81 ec e8 00
|
|
00 00 sub rsp, 232 ; 000000e8H
|
|
0000d 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32]
|
|
00012 48 8d 0d 00 00
|
|
00 00 lea rcx, OFFSET FLAT:__3EBA305F_simdid@x86@c
|
|
00019 e8 00 00 00 00 call __CheckForDebuggerJustMyCode
|
|
0001e 90 npad 1
|
|
|
|
; 66 : if (family == 0x19) return SIMDID_AVX512_IMPL_DUAL;
|
|
|
|
0001f 83 bd e0 00 00
|
|
00 19 cmp DWORD PTR family$[rbp], 25
|
|
00026 75 07 jne SHORT $LN2@amd_avx512
|
|
00028 b8 40 00 00 00 mov eax, 64 ; 00000040H
|
|
0002d eb 12 jmp SHORT $LN1@amd_avx512
|
|
$LN2@amd_avx512:
|
|
|
|
; 67 : if (family >= 0x1A) return SIMDID_AVX512_IMPL_NATIVE;
|
|
|
|
0002f 83 bd e0 00 00
|
|
00 1a cmp DWORD PTR family$[rbp], 26
|
|
00036 7c 07 jl SHORT $LN3@amd_avx512
|
|
00038 b8 80 00 00 00 mov eax, 128 ; 00000080H
|
|
0003d eb 02 jmp SHORT $LN1@amd_avx512
|
|
$LN3@amd_avx512:
|
|
|
|
; 68 : return SIMDID_AVX512_IMPL_UNKNOWN;
|
|
|
|
0003f 33 c0 xor eax, eax
|
|
$LN1@amd_avx512:
|
|
|
|
; 69 : }
|
|
|
|
00041 48 8d a5 c8 00
|
|
00 00 lea rsp, QWORD PTR [rbp+200]
|
|
00048 5f pop rdi
|
|
00049 5d pop rbp
|
|
0004a c3 ret 0
|
|
amd_avx512_impl ENDP
|
|
_TEXT ENDS
|
|
; Function compile flags: /Odtp /RTCsu /ZI
|
|
; File D:\platform-dev\StgSharp.Native\sn-src\simdid.x86.c
|
|
; COMDAT xgetbv_has_avx512_state
|
|
_TEXT SEGMENT
|
|
mask$ = 8
|
|
xcr0$ = 40
|
|
tv68 = 244
|
|
xgetbv_has_avx512_state PROC ; COMDAT
|
|
|
|
; 49 : {
|
|
|
|
00000 40 55 push rbp
|
|
00002 57 push rdi
|
|
00003 48 81 ec 28 01
|
|
00 00 sub rsp, 296 ; 00000128H
|
|
0000a 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32]
|
|
0000f 48 8d 0d 00 00
|
|
00 00 lea rcx, OFFSET FLAT:__3EBA305F_simdid@x86@c
|
|
00016 e8 00 00 00 00 call __CheckForDebuggerJustMyCode
|
|
0001b 90 npad 1
|
|
|
|
; 50 : const unsigned long long mask = (1ull << 0) | (1ull << 1) | (1ull << 2) | (1ull << 5) |
|
|
|
|
0001c 48 c7 45 08 67
|
|
00 00 00 mov QWORD PTR mask$[rbp], 103 ; 00000067H
|
|
|
|
; 51 : (1ull << 6);
|
|
; 52 : #if defined(_MSC_VER)
|
|
; 53 : unsigned __int64 xcr0 = _xgetbv(0);
|
|
|
|
00024 33 c9 xor ecx, ecx
|
|
00026 0f 01 d0 xgetbv
|
|
00029 48 c1 e2 20 shl rdx, 32 ; 00000020H
|
|
0002d 48 0b d0 or rdx, rax
|
|
00030 48 8b c2 mov rax, rdx
|
|
00033 48 89 45 28 mov QWORD PTR xcr0$[rbp], rax
|
|
|
|
; 54 : #else
|
|
; 55 : unsigned long long xcr0 = __builtin_ia32_xgetbv(0);
|
|
; 56 : #endif
|
|
; 57 : return ((xcr0 & mask) == mask);
|
|
|
|
00037 48 8b 45 08 mov rax, QWORD PTR mask$[rbp]
|
|
0003b 48 8b 4d 28 mov rcx, QWORD PTR xcr0$[rbp]
|
|
0003f 48 23 c8 and rcx, rax
|
|
00042 48 8b c1 mov rax, rcx
|
|
00045 48 3b 45 08 cmp rax, QWORD PTR mask$[rbp]
|
|
00049 75 0c jne SHORT $LN3@xgetbv_has
|
|
0004b c7 85 f4 00 00
|
|
00 01 00 00 00 mov DWORD PTR tv68[rbp], 1
|
|
00055 eb 0a jmp SHORT $LN4@xgetbv_has
|
|
$LN3@xgetbv_has:
|
|
00057 c7 85 f4 00 00
|
|
00 00 00 00 00 mov DWORD PTR tv68[rbp], 0
|
|
$LN4@xgetbv_has:
|
|
00061 8b 85 f4 00 00
|
|
00 mov eax, DWORD PTR tv68[rbp]
|
|
|
|
; 58 : }
|
|
|
|
00067 48 8d a5 08 01
|
|
00 00 lea rsp, QWORD PTR [rbp+264]
|
|
0006e 5f pop rdi
|
|
0006f 5d pop rbp
|
|
00070 c3 ret 0
|
|
xgetbv_has_avx512_state ENDP
|
|
_TEXT ENDS
|
|
; Function compile flags: /Odtp /RTCsu /ZI
|
|
; File D:\platform-dev\StgSharp.Native\sn-src\simdid.x86.c
|
|
; COMDAT xgetbv_has_xmm_ymm
|
|
_TEXT SEGMENT
|
|
xcr0$ = 8
|
|
tv68 = 212
|
|
xgetbv_has_xmm_ymm PROC ; COMDAT
|
|
|
|
; 39 : {
|
|
|
|
00000 40 55 push rbp
|
|
00002 57 push rdi
|
|
00003 48 81 ec 08 01
|
|
00 00 sub rsp, 264 ; 00000108H
|
|
0000a 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32]
|
|
0000f 48 8d 0d 00 00
|
|
00 00 lea rcx, OFFSET FLAT:__3EBA305F_simdid@x86@c
|
|
00016 e8 00 00 00 00 call __CheckForDebuggerJustMyCode
|
|
0001b 90 npad 1
|
|
|
|
; 40 : #if defined(_MSC_VER)
|
|
; 41 : unsigned __int64 xcr0 = _xgetbv(0);
|
|
|
|
0001c 33 c9 xor ecx, ecx
|
|
0001e 0f 01 d0 xgetbv
|
|
00021 48 c1 e2 20 shl rdx, 32 ; 00000020H
|
|
00025 48 0b d0 or rdx, rax
|
|
00028 48 8b c2 mov rax, rdx
|
|
0002b 48 89 45 08 mov QWORD PTR xcr0$[rbp], rax
|
|
|
|
; 42 : #else
|
|
; 43 : unsigned long long xcr0 = __builtin_ia32_xgetbv(0);
|
|
; 44 : #endif
|
|
; 45 : return ((xcr0 & 0x6) == 0x6);
|
|
|
|
0002f 48 8b 45 08 mov rax, QWORD PTR xcr0$[rbp]
|
|
00033 48 83 e0 06 and rax, 6
|
|
00037 48 83 f8 06 cmp rax, 6
|
|
0003b 75 0c jne SHORT $LN3@xgetbv_has
|
|
0003d c7 85 d4 00 00
|
|
00 01 00 00 00 mov DWORD PTR tv68[rbp], 1
|
|
00047 eb 0a jmp SHORT $LN4@xgetbv_has
|
|
$LN3@xgetbv_has:
|
|
00049 c7 85 d4 00 00
|
|
00 00 00 00 00 mov DWORD PTR tv68[rbp], 0
|
|
$LN4@xgetbv_has:
|
|
00053 8b 85 d4 00 00
|
|
00 mov eax, DWORD PTR tv68[rbp]
|
|
|
|
; 46 : }
|
|
|
|
00059 48 8d a5 e8 00
|
|
00 00 lea rsp, QWORD PTR [rbp+232]
|
|
00060 5f pop rdi
|
|
00061 5d pop rbp
|
|
00062 c3 ret 0
|
|
xgetbv_has_xmm_ymm ENDP
|
|
_TEXT ENDS
|
|
; Function compile flags: /Odtp /RTCsu /ZI
|
|
; File D:\platform-dev\StgSharp.Native\sn-src\simdid.x86.c
|
|
; COMDAT get_cpuid
|
|
_TEXT SEGMENT
|
|
regs$ = 8
|
|
__$ArrayPad$ = 232
|
|
leaf$ = 272
|
|
subleaf$ = 280
|
|
eax$ = 288
|
|
ebx$ = 296
|
|
ecx$ = 304
|
|
edx$ = 312
|
|
get_cpuid PROC ; COMDAT
|
|
|
|
; 20 : {
|
|
|
|
00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9
|
|
00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8
|
|
0000a 89 54 24 10 mov DWORD PTR [rsp+16], edx
|
|
0000e 89 4c 24 08 mov DWORD PTR [rsp+8], ecx
|
|
00012 55 push rbp
|
|
00013 53 push rbx
|
|
00014 57 push rdi
|
|
00015 48 81 ec 10 01
|
|
00 00 sub rsp, 272 ; 00000110H
|
|
0001c 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32]
|
|
00021 48 8d 7c 24 20 lea rdi, QWORD PTR [rsp+32]
|
|
00026 b9 0c 00 00 00 mov ecx, 12
|
|
0002b b8 cc cc cc cc mov eax, -858993460 ; ccccccccH
|
|
00030 f3 ab rep stosd
|
|
00032 8b 8c 24 38 01
|
|
00 00 mov ecx, DWORD PTR [rsp+312]
|
|
00039 48 8b 05 00 00
|
|
00 00 mov rax, QWORD PTR __security_cookie
|
|
00040 48 33 c5 xor rax, rbp
|
|
00043 48 89 85 e8 00
|
|
00 00 mov QWORD PTR __$ArrayPad$[rbp], rax
|
|
0004a 48 8d 0d 00 00
|
|
00 00 lea rcx, OFFSET FLAT:__3EBA305F_simdid@x86@c
|
|
00051 e8 00 00 00 00 call __CheckForDebuggerJustMyCode
|
|
00056 90 npad 1
|
|
|
|
; 21 : #if defined(_MSC_VER)
|
|
; 22 : int regs[4];
|
|
; 23 : __cpuidex(regs, leaf, subleaf);
|
|
|
|
00057 8b 85 10 01 00
|
|
00 mov eax, DWORD PTR leaf$[rbp]
|
|
0005d 8b 8d 18 01 00
|
|
00 mov ecx, DWORD PTR subleaf$[rbp]
|
|
00063 0f a2 cpuid
|
|
00065 4c 8d 45 08 lea r8, QWORD PTR regs$[rbp]
|
|
00069 41 89 00 mov DWORD PTR [r8], eax
|
|
0006c 41 89 58 04 mov DWORD PTR [r8+4], ebx
|
|
00070 41 89 48 08 mov DWORD PTR [r8+8], ecx
|
|
00074 41 89 50 0c mov DWORD PTR [r8+12], edx
|
|
|
|
; 24 : *eax = regs[0];
|
|
|
|
00078 b8 04 00 00 00 mov eax, 4
|
|
0007d 48 6b c0 00 imul rax, rax, 0
|
|
00081 48 8b 8d 20 01
|
|
00 00 mov rcx, QWORD PTR eax$[rbp]
|
|
00088 8b 44 05 08 mov eax, DWORD PTR regs$[rbp+rax]
|
|
0008c 89 01 mov DWORD PTR [rcx], eax
|
|
|
|
; 25 : *ebx = regs[1];
|
|
|
|
0008e b8 04 00 00 00 mov eax, 4
|
|
00093 48 6b c0 01 imul rax, rax, 1
|
|
00097 48 8b 8d 28 01
|
|
00 00 mov rcx, QWORD PTR ebx$[rbp]
|
|
0009e 8b 44 05 08 mov eax, DWORD PTR regs$[rbp+rax]
|
|
000a2 89 01 mov DWORD PTR [rcx], eax
|
|
|
|
; 26 : *ecx = regs[2];
|
|
|
|
000a4 b8 04 00 00 00 mov eax, 4
|
|
000a9 48 6b c0 02 imul rax, rax, 2
|
|
000ad 48 8b 8d 30 01
|
|
00 00 mov rcx, QWORD PTR ecx$[rbp]
|
|
000b4 8b 44 05 08 mov eax, DWORD PTR regs$[rbp+rax]
|
|
000b8 89 01 mov DWORD PTR [rcx], eax
|
|
|
|
; 27 : *edx = regs[3];
|
|
|
|
000ba b8 04 00 00 00 mov eax, 4
|
|
000bf 48 6b c0 03 imul rax, rax, 3
|
|
000c3 48 8b 8d 38 01
|
|
00 00 mov rcx, QWORD PTR edx$[rbp]
|
|
000ca 8b 44 05 08 mov eax, DWORD PTR regs$[rbp+rax]
|
|
000ce 89 01 mov DWORD PTR [rcx], eax
|
|
|
|
; 28 : #else
|
|
; 29 : unsigned int a, b, c, d;
|
|
; 30 : __cpuid_count((unsigned int)leaf, (unsigned int)subleaf, a, b, c, d);
|
|
; 31 : *eax = (int)a;
|
|
; 32 : *ebx = (int)b;
|
|
; 33 : *ecx = (int)c;
|
|
; 34 : *edx = (int)d;
|
|
; 35 : #endif
|
|
; 36 : }
|
|
|
|
000d0 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32]
|
|
000d4 48 8d 15 00 00
|
|
00 00 lea rdx, OFFSET FLAT:get_cpuid$rtcFrameData
|
|
000db e8 00 00 00 00 call _RTC_CheckStackVars
|
|
000e0 48 8b 8d e8 00
|
|
00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp]
|
|
000e7 48 33 cd xor rcx, rbp
|
|
000ea e8 00 00 00 00 call __security_check_cookie
|
|
000ef 48 8d a5 f0 00
|
|
00 00 lea rsp, QWORD PTR [rbp+240]
|
|
000f6 5f pop rdi
|
|
000f7 5b pop rbx
|
|
000f8 5d pop rbp
|
|
000f9 c3 ret 0
|
|
get_cpuid ENDP
|
|
_TEXT ENDS
|
|
; Function compile flags: /Odtp /RTCsu /ZI
|
|
; File D:\platform-dev\StgSharp.Native\sn-src\simdid.x86.c
|
|
; COMDAT sn_get_simd_level_local
|
|
_TEXT SEGMENT
|
|
_simdid$ = 8
|
|
eax$ = 36
|
|
ebx$ = 68
|
|
ecx$ = 100
|
|
edx$ = 132
|
|
vendor$ = 168
|
|
is_intel$ = 212
|
|
is_amd$ = 244
|
|
is_hygon$ = 276
|
|
is_via$ = 308
|
|
cpuid1_eax$ = 340
|
|
family$ = 372
|
|
model$ = 404
|
|
has_sse42$ = 436
|
|
has_avx$ = 468
|
|
has_osxsave$ = 500
|
|
has_fma$ = 532
|
|
has_f16c$ = 564
|
|
root$ = 600
|
|
manu$ = 632
|
|
main_lvl$ = 664
|
|
avx512_bits$ = 696
|
|
amx_bits$ = 728
|
|
avx_bits$ = 760
|
|
avx10_bits$ = 792
|
|
has_hybrid$ = 820
|
|
has_bmi1$17 = 852
|
|
has_bmi2$18 = 884
|
|
has_avx2$19 = 916
|
|
has_avx512f$20 = 948
|
|
has_avx512dq$21 = 980
|
|
has_avx512bw$22 = 1012
|
|
has_avx512vl$23 = 1044
|
|
has_avx512_vnni$24 = 1076
|
|
has_vbmi$25 = 1108
|
|
has_vbmi2$26 = 1140
|
|
has_amx_tile$27 = 1172
|
|
has_amx_int8$28 = 1204
|
|
has_amx_bf16$29 = 1236
|
|
has_bf16$30 = 1268
|
|
has_fp16$31 = 1300
|
|
has_avx10$32 = 1332
|
|
a10_eax$33 = 1364
|
|
a10_ebx$34 = 1396
|
|
a10_ecx$35 = 1428
|
|
a10_edx$36 = 1460
|
|
avx10_ver$37 = 1492
|
|
uarch_bits$ = 1528
|
|
h_eax$38 = 1556
|
|
h_ebx$39 = 1588
|
|
h_ecx$40 = 1620
|
|
h_edx$41 = 1652
|
|
core_type$42 = 1684
|
|
$T43 = 2488
|
|
tv208 = 2500
|
|
tv282 = 2500
|
|
tv285 = 2500
|
|
tv170 = 2500
|
|
tv167 = 2500
|
|
tv164 = 2500
|
|
tv161 = 2500
|
|
tv158 = 2500
|
|
tv139 = 2500
|
|
tv129 = 2500
|
|
tv87 = 2500
|
|
tv178 = 2500
|
|
tv202 = 2500
|
|
tv205 = 2500
|
|
tv288 = 2500
|
|
tv211 = 2500
|
|
tv214 = 2500
|
|
tv217 = 2500
|
|
tv220 = 2500
|
|
tv223 = 2500
|
|
tv92 = 2500
|
|
tv258 = 2500
|
|
tv261 = 2500
|
|
tv264 = 2500
|
|
tv267 = 2500
|
|
tv270 = 2500
|
|
tv273 = 2500
|
|
tv176 = 2504
|
|
tv174 = 2508
|
|
tv172 = 2512
|
|
__$ArrayPad$ = 2520
|
|
sn_get_simd_level_local PROC ; COMDAT
|
|
|
|
; 91 : {
|
|
|
|
$LN98:
|
|
00000 40 55 push rbp
|
|
00002 57 push rdi
|
|
00003 48 81 ec 18 0a
|
|
00 00 sub rsp, 2584 ; 00000a18H
|
|
0000a 48 8d 6c 24 30 lea rbp, QWORD PTR [rsp+48]
|
|
0000f 48 8d 7c 24 30 lea rdi, QWORD PTR [rsp+48]
|
|
00014 b9 ba 01 00 00 mov ecx, 442 ; 000001baH
|
|
00019 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH
|
|
0001e f3 ab rep stosd
|
|
00020 48 8b 05 00 00
|
|
00 00 mov rax, QWORD PTR __security_cookie
|
|
00027 48 33 c5 xor rax, rbp
|
|
0002a 48 89 85 d8 09
|
|
00 00 mov QWORD PTR __$ArrayPad$[rbp], rax
|
|
00031 48 8d 0d 00 00
|
|
00 00 lea rcx, OFFSET FLAT:__3EBA305F_simdid@x86@c
|
|
00038 e8 00 00 00 00 call __CheckForDebuggerJustMyCode
|
|
0003d 90 npad 1
|
|
|
|
; 92 : SIMDID _simdid = { 0 };
|
|
|
|
0003e 48 8d 45 08 lea rax, QWORD PTR _simdid$[rbp]
|
|
00042 48 8b f8 mov rdi, rax
|
|
00045 33 c0 xor eax, eax
|
|
00047 b9 08 00 00 00 mov ecx, 8
|
|
0004c f3 aa rep stosb
|
|
|
|
; 93 :
|
|
; 94 : int eax = 0, ebx = 0, ecx = 0, edx = 0;
|
|
|
|
0004e c7 45 24 00 00
|
|
00 00 mov DWORD PTR eax$[rbp], 0
|
|
00055 c7 45 44 00 00
|
|
00 00 mov DWORD PTR ebx$[rbp], 0
|
|
0005c c7 45 64 00 00
|
|
00 00 mov DWORD PTR ecx$[rbp], 0
|
|
00063 c7 85 84 00 00
|
|
00 00 00 00 00 mov DWORD PTR edx$[rbp], 0
|
|
|
|
; 95 :
|
|
; 96 : /* Vendor */
|
|
; 97 : get_cpuid(0, 0, &eax, &ebx, &ecx, &edx);
|
|
|
|
0006d 48 8d 85 84 00
|
|
00 00 lea rax, QWORD PTR edx$[rbp]
|
|
00074 48 89 44 24 28 mov QWORD PTR [rsp+40], rax
|
|
00079 48 8d 45 64 lea rax, QWORD PTR ecx$[rbp]
|
|
0007d 48 89 44 24 20 mov QWORD PTR [rsp+32], rax
|
|
00082 4c 8d 4d 44 lea r9, QWORD PTR ebx$[rbp]
|
|
00086 4c 8d 45 24 lea r8, QWORD PTR eax$[rbp]
|
|
0008a 33 d2 xor edx, edx
|
|
0008c 33 c9 xor ecx, ecx
|
|
0008e e8 00 00 00 00 call get_cpuid
|
|
00093 90 npad 1
|
|
|
|
; 98 : char vendor[13];
|
|
; 99 : ((int *)vendor)[0] = ebx;
|
|
|
|
00094 b8 04 00 00 00 mov eax, 4
|
|
00099 48 6b c0 00 imul rax, rax, 0
|
|
0009d 8b 4d 44 mov ecx, DWORD PTR ebx$[rbp]
|
|
000a0 89 8c 05 a8 00
|
|
00 00 mov DWORD PTR vendor$[rbp+rax], ecx
|
|
|
|
; 100 : ((int *)vendor)[1] = edx;
|
|
|
|
000a7 b8 04 00 00 00 mov eax, 4
|
|
000ac 48 6b c0 01 imul rax, rax, 1
|
|
000b0 8b 8d 84 00 00
|
|
00 mov ecx, DWORD PTR edx$[rbp]
|
|
000b6 89 8c 05 a8 00
|
|
00 00 mov DWORD PTR vendor$[rbp+rax], ecx
|
|
|
|
; 101 : ((int *)vendor)[2] = ecx;
|
|
|
|
000bd b8 04 00 00 00 mov eax, 4
|
|
000c2 48 6b c0 02 imul rax, rax, 2
|
|
000c6 8b 4d 64 mov ecx, DWORD PTR ecx$[rbp]
|
|
000c9 89 8c 05 a8 00
|
|
00 00 mov DWORD PTR vendor$[rbp+rax], ecx
|
|
|
|
; 102 : vendor[12] = '\0';
|
|
|
|
000d0 b8 01 00 00 00 mov eax, 1
|
|
000d5 48 6b c0 0c imul rax, rax, 12
|
|
000d9 48 89 85 b8 09
|
|
00 00 mov QWORD PTR $T43[rbp], rax
|
|
000e0 48 83 bd b8 09
|
|
00 00 0d cmp QWORD PTR $T43[rbp], 13
|
|
000e8 73 02 jae SHORT $LN36@sn_get_sim
|
|
000ea eb 06 jmp SHORT $LN37@sn_get_sim
|
|
$LN36@sn_get_sim:
|
|
000ec e8 00 00 00 00 call __report_rangecheckfailure
|
|
000f1 90 npad 1
|
|
$LN37@sn_get_sim:
|
|
000f2 48 8b 85 b8 09
|
|
00 00 mov rax, QWORD PTR $T43[rbp]
|
|
000f9 c6 84 05 a8 00
|
|
00 00 00 mov BYTE PTR vendor$[rbp+rax], 0
|
|
|
|
; 103 : const int is_intel = (strcmp(vendor, "GenuineIntel") == 0);
|
|
|
|
00101 48 8d 15 00 00
|
|
00 00 lea rdx, OFFSET FLAT:??_C@_0N@BDDFKIGD@GenuineIntel@
|
|
00108 48 8d 8d a8 00
|
|
00 00 lea rcx, QWORD PTR vendor$[rbp]
|
|
0010f e8 00 00 00 00 call strcmp
|
|
00114 85 c0 test eax, eax
|
|
00116 75 0c jne SHORT $LN38@sn_get_sim
|
|
00118 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv87[rbp], 1
|
|
00122 eb 0a jmp SHORT $LN39@sn_get_sim
|
|
$LN38@sn_get_sim:
|
|
00124 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv87[rbp], 0
|
|
$LN39@sn_get_sim:
|
|
0012e 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv87[rbp]
|
|
00134 89 85 d4 00 00
|
|
00 mov DWORD PTR is_intel$[rbp], eax
|
|
|
|
; 104 : const int is_amd = (strcmp(vendor, "AuthenticAMD") == 0);
|
|
|
|
0013a 48 8d 15 00 00
|
|
00 00 lea rdx, OFFSET FLAT:??_C@_0N@FFJGBINN@AuthenticAMD@
|
|
00141 48 8d 8d a8 00
|
|
00 00 lea rcx, QWORD PTR vendor$[rbp]
|
|
00148 e8 00 00 00 00 call strcmp
|
|
0014d 85 c0 test eax, eax
|
|
0014f 75 0c jne SHORT $LN40@sn_get_sim
|
|
00151 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv92[rbp], 1
|
|
0015b eb 0a jmp SHORT $LN41@sn_get_sim
|
|
$LN40@sn_get_sim:
|
|
0015d c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv92[rbp], 0
|
|
$LN41@sn_get_sim:
|
|
00167 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv92[rbp]
|
|
0016d 89 85 f4 00 00
|
|
00 mov DWORD PTR is_amd$[rbp], eax
|
|
|
|
; 105 : const int is_hygon = (strcmp(vendor, "HygonGenuine") == 0); /* 海光: separate from AMD */
|
|
|
|
00173 48 8d 15 00 00
|
|
00 00 lea rdx, OFFSET FLAT:??_C@_0N@IGLDKOMM@HygonGenuine@
|
|
0017a 48 8d 8d a8 00
|
|
00 00 lea rcx, QWORD PTR vendor$[rbp]
|
|
00181 e8 00 00 00 00 call strcmp
|
|
00186 85 c0 test eax, eax
|
|
00188 75 0c jne SHORT $LN42@sn_get_sim
|
|
0018a c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv129[rbp], 1
|
|
00194 eb 0a jmp SHORT $LN43@sn_get_sim
|
|
$LN42@sn_get_sim:
|
|
00196 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv129[rbp], 0
|
|
$LN43@sn_get_sim:
|
|
001a0 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv129[rbp]
|
|
001a6 89 85 14 01 00
|
|
00 mov DWORD PTR is_hygon$[rbp], eax
|
|
|
|
; 106 : const int is_via = (strcmp(vendor, "CentaurHauls") == 0) ||
|
|
|
|
001ac 48 8d 15 00 00
|
|
00 00 lea rdx, OFFSET FLAT:??_C@_0N@DHAFJCOO@CentaurHauls@
|
|
001b3 48 8d 8d a8 00
|
|
00 00 lea rcx, QWORD PTR vendor$[rbp]
|
|
001ba e8 00 00 00 00 call strcmp
|
|
001bf 85 c0 test eax, eax
|
|
001c1 74 29 je SHORT $LN44@sn_get_sim
|
|
001c3 41 b8 0c 00 00
|
|
00 mov r8d, 12
|
|
001c9 48 8d 15 00 00
|
|
00 00 lea rdx, OFFSET FLAT:??_C@_0N@BDNCIKNF@?5?5Shanghai?5?5@
|
|
001d0 48 8d 8d a8 00
|
|
00 00 lea rcx, QWORD PTR vendor$[rbp]
|
|
001d7 e8 00 00 00 00 call memcmp
|
|
001dc 85 c0 test eax, eax
|
|
001de 74 0c je SHORT $LN44@sn_get_sim
|
|
001e0 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv139[rbp], 0
|
|
001ea eb 0a jmp SHORT $LN45@sn_get_sim
|
|
$LN44@sn_get_sim:
|
|
001ec c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv139[rbp], 1
|
|
$LN45@sn_get_sim:
|
|
001f6 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv139[rbp]
|
|
001fc 89 85 34 01 00
|
|
00 mov DWORD PTR is_via$[rbp], eax
|
|
|
|
; 107 : (memcmp(vendor, " Shanghai ", 12) == 0); /* VIA / Zhaoxin */
|
|
; 108 :
|
|
; 109 : /* CPUID.1 */
|
|
; 110 : get_cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
|
|
|
00202 48 8d 85 84 00
|
|
00 00 lea rax, QWORD PTR edx$[rbp]
|
|
00209 48 89 44 24 28 mov QWORD PTR [rsp+40], rax
|
|
0020e 48 8d 45 64 lea rax, QWORD PTR ecx$[rbp]
|
|
00212 48 89 44 24 20 mov QWORD PTR [rsp+32], rax
|
|
00217 4c 8d 4d 44 lea r9, QWORD PTR ebx$[rbp]
|
|
0021b 4c 8d 45 24 lea r8, QWORD PTR eax$[rbp]
|
|
0021f 33 d2 xor edx, edx
|
|
00221 b9 01 00 00 00 mov ecx, 1
|
|
00226 e8 00 00 00 00 call get_cpuid
|
|
0022b 90 npad 1
|
|
|
|
; 111 : int cpuid1_eax = eax; /* saved for Zen1/Zen+ glue-YMM detection */
|
|
|
|
0022c 8b 45 24 mov eax, DWORD PTR eax$[rbp]
|
|
0022f 89 85 54 01 00
|
|
00 mov DWORD PTR cpuid1_eax$[rbp], eax
|
|
|
|
; 112 : int family = ((eax >> 8) & 0xF) + ((eax >> 20) & 0xFF0);
|
|
|
|
00235 8b 45 24 mov eax, DWORD PTR eax$[rbp]
|
|
00238 c1 f8 08 sar eax, 8
|
|
0023b 83 e0 0f and eax, 15
|
|
0023e 8b 4d 24 mov ecx, DWORD PTR eax$[rbp]
|
|
00241 c1 f9 14 sar ecx, 20
|
|
00244 81 e1 f0 0f 00
|
|
00 and ecx, 4080 ; 00000ff0H
|
|
0024a 03 c1 add eax, ecx
|
|
0024c 89 85 74 01 00
|
|
00 mov DWORD PTR family$[rbp], eax
|
|
|
|
; 113 : int model = ((eax >> 4) & 0xF) | ((eax >> 12) & 0xF0);
|
|
|
|
00252 8b 45 24 mov eax, DWORD PTR eax$[rbp]
|
|
00255 c1 f8 04 sar eax, 4
|
|
00258 83 e0 0f and eax, 15
|
|
0025b 8b 4d 24 mov ecx, DWORD PTR eax$[rbp]
|
|
0025e c1 f9 0c sar ecx, 12
|
|
00261 81 e1 f0 00 00
|
|
00 and ecx, 240 ; 000000f0H
|
|
00267 0b c1 or eax, ecx
|
|
00269 89 85 94 01 00
|
|
00 mov DWORD PTR model$[rbp], eax
|
|
|
|
; 114 :
|
|
; 115 : int has_sse42 = (ecx & (1 << 20)) != 0;
|
|
|
|
0026f 8b 45 64 mov eax, DWORD PTR ecx$[rbp]
|
|
00272 25 00 00 10 00 and eax, 1048576 ; 00100000H
|
|
00277 85 c0 test eax, eax
|
|
00279 74 0c je SHORT $LN46@sn_get_sim
|
|
0027b c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv158[rbp], 1
|
|
00285 eb 0a jmp SHORT $LN47@sn_get_sim
|
|
$LN46@sn_get_sim:
|
|
00287 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv158[rbp], 0
|
|
$LN47@sn_get_sim:
|
|
00291 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv158[rbp]
|
|
00297 89 85 b4 01 00
|
|
00 mov DWORD PTR has_sse42$[rbp], eax
|
|
|
|
; 116 : int has_avx = (ecx & (1 << 28)) != 0;
|
|
|
|
0029d 8b 45 64 mov eax, DWORD PTR ecx$[rbp]
|
|
002a0 25 00 00 00 10 and eax, 268435456 ; 10000000H
|
|
002a5 85 c0 test eax, eax
|
|
002a7 74 0c je SHORT $LN48@sn_get_sim
|
|
002a9 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv161[rbp], 1
|
|
002b3 eb 0a jmp SHORT $LN49@sn_get_sim
|
|
$LN48@sn_get_sim:
|
|
002b5 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv161[rbp], 0
|
|
$LN49@sn_get_sim:
|
|
002bf 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv161[rbp]
|
|
002c5 89 85 d4 01 00
|
|
00 mov DWORD PTR has_avx$[rbp], eax
|
|
|
|
; 117 : int has_osxsave = (ecx & (1 << 27)) != 0;
|
|
|
|
002cb 8b 45 64 mov eax, DWORD PTR ecx$[rbp]
|
|
002ce 25 00 00 00 08 and eax, 134217728 ; 08000000H
|
|
002d3 85 c0 test eax, eax
|
|
002d5 74 0c je SHORT $LN50@sn_get_sim
|
|
002d7 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv164[rbp], 1
|
|
002e1 eb 0a jmp SHORT $LN51@sn_get_sim
|
|
$LN50@sn_get_sim:
|
|
002e3 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv164[rbp], 0
|
|
$LN51@sn_get_sim:
|
|
002ed 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv164[rbp]
|
|
002f3 89 85 f4 01 00
|
|
00 mov DWORD PTR has_osxsave$[rbp], eax
|
|
|
|
; 118 : int has_fma = (ecx & (1 << 12)) != 0;
|
|
|
|
002f9 8b 45 64 mov eax, DWORD PTR ecx$[rbp]
|
|
002fc 25 00 10 00 00 and eax, 4096 ; 00001000H
|
|
00301 85 c0 test eax, eax
|
|
00303 74 0c je SHORT $LN52@sn_get_sim
|
|
00305 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv167[rbp], 1
|
|
0030f eb 0a jmp SHORT $LN53@sn_get_sim
|
|
$LN52@sn_get_sim:
|
|
00311 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv167[rbp], 0
|
|
$LN53@sn_get_sim:
|
|
0031b 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv167[rbp]
|
|
00321 89 85 14 02 00
|
|
00 mov DWORD PTR has_fma$[rbp], eax
|
|
|
|
; 119 : int has_f16c = (ecx & (1 << 29)) != 0;
|
|
|
|
00327 8b 45 64 mov eax, DWORD PTR ecx$[rbp]
|
|
0032a 25 00 00 00 20 and eax, 536870912 ; 20000000H
|
|
0032f 85 c0 test eax, eax
|
|
00331 74 0c je SHORT $LN54@sn_get_sim
|
|
00333 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv170[rbp], 1
|
|
0033d eb 0a jmp SHORT $LN55@sn_get_sim
|
|
$LN54@sn_get_sim:
|
|
0033f c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv170[rbp], 0
|
|
$LN55@sn_get_sim:
|
|
00349 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv170[rbp]
|
|
0034f 89 85 34 02 00
|
|
00 mov DWORD PTR has_f16c$[rbp], eax
|
|
|
|
; 120 :
|
|
; 121 : uint64_t root = SIMDID_PACK_ROOT(SIMDID_ROOT_X86_64);
|
|
|
|
00355 48 c7 85 58 02
|
|
00 00 01 00 00
|
|
00 mov QWORD PTR root$[rbp], 1
|
|
|
|
; 122 : uint64_t manu = SIMDID_PACK_MANU(is_intel ? SIMDID_MANU_INTEL :
|
|
|
|
00360 83 bd d4 00 00
|
|
00 00 cmp DWORD PTR is_intel$[rbp], 0
|
|
00367 74 0c je SHORT $LN62@sn_get_sim
|
|
00369 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv178[rbp], 1
|
|
00373 eb 6d jmp SHORT $LN63@sn_get_sim
|
|
$LN62@sn_get_sim:
|
|
00375 83 bd f4 00 00
|
|
00 00 cmp DWORD PTR is_amd$[rbp], 0
|
|
0037c 74 0c je SHORT $LN60@sn_get_sim
|
|
0037e c7 85 c8 09 00
|
|
00 02 00 00 00 mov DWORD PTR tv176[rbp], 2
|
|
00388 eb 4c jmp SHORT $LN61@sn_get_sim
|
|
$LN60@sn_get_sim:
|
|
0038a 83 bd 14 01 00
|
|
00 00 cmp DWORD PTR is_hygon$[rbp], 0
|
|
00391 74 0c je SHORT $LN58@sn_get_sim
|
|
00393 c7 85 cc 09 00
|
|
00 04 00 00 00 mov DWORD PTR tv174[rbp], 4
|
|
0039d eb 2b jmp SHORT $LN59@sn_get_sim
|
|
$LN58@sn_get_sim:
|
|
0039f 83 bd 34 01 00
|
|
00 00 cmp DWORD PTR is_via$[rbp], 0
|
|
003a6 74 0c je SHORT $LN56@sn_get_sim
|
|
003a8 c7 85 d0 09 00
|
|
00 03 00 00 00 mov DWORD PTR tv172[rbp], 3
|
|
003b2 eb 0a jmp SHORT $LN57@sn_get_sim
|
|
$LN56@sn_get_sim:
|
|
003b4 c7 85 d0 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv172[rbp], 0
|
|
$LN57@sn_get_sim:
|
|
003be 8b 85 d0 09 00
|
|
00 mov eax, DWORD PTR tv172[rbp]
|
|
003c4 89 85 cc 09 00
|
|
00 mov DWORD PTR tv174[rbp], eax
|
|
$LN59@sn_get_sim:
|
|
003ca 8b 85 cc 09 00
|
|
00 mov eax, DWORD PTR tv174[rbp]
|
|
003d0 89 85 c8 09 00
|
|
00 mov DWORD PTR tv176[rbp], eax
|
|
$LN61@sn_get_sim:
|
|
003d6 8b 85 c8 09 00
|
|
00 mov eax, DWORD PTR tv176[rbp]
|
|
003dc 89 85 c4 09 00
|
|
00 mov DWORD PTR tv178[rbp], eax
|
|
$LN63@sn_get_sim:
|
|
003e2 48 63 85 c4 09
|
|
00 00 movsxd rax, DWORD PTR tv178[rbp]
|
|
003e9 48 83 e0 0f and rax, 15
|
|
003ed 48 c1 e0 04 shl rax, 4
|
|
003f1 48 89 85 78 02
|
|
00 00 mov QWORD PTR manu$[rbp], rax
|
|
|
|
; 123 : is_amd ? SIMDID_MANU_AMD :
|
|
; 124 : is_hygon ? SIMDID_MANU_HYGON :
|
|
; 125 : is_via ? SIMDID_MANU_VIA :
|
|
; 126 : SIMDID_MANU_UNKNOWN);
|
|
; 127 : uint64_t main_lvl = SIMDID_PACK_MAIN(SIMDID_MAIN_LVL_NONE);
|
|
|
|
003f8 48 c7 85 98 02
|
|
00 00 00 00 00
|
|
00 mov QWORD PTR main_lvl$[rbp], 0
|
|
|
|
; 128 : uint64_t avx512_bits = 0;
|
|
|
|
00403 48 c7 85 b8 02
|
|
00 00 00 00 00
|
|
00 mov QWORD PTR avx512_bits$[rbp], 0
|
|
|
|
; 129 : uint64_t amx_bits = 0;
|
|
|
|
0040e 48 c7 85 d8 02
|
|
00 00 00 00 00
|
|
00 mov QWORD PTR amx_bits$[rbp], 0
|
|
|
|
; 130 : uint64_t avx_bits = 0;
|
|
|
|
00419 48 c7 85 f8 02
|
|
00 00 00 00 00
|
|
00 mov QWORD PTR avx_bits$[rbp], 0
|
|
|
|
; 131 : uint64_t avx10_bits = 0;
|
|
|
|
00424 48 c7 85 18 03
|
|
00 00 00 00 00
|
|
00 mov QWORD PTR avx10_bits$[rbp], 0
|
|
|
|
; 132 : int has_hybrid = 0; /* filled from CPUID.7.0 EDX[15] when AVX present */
|
|
|
|
0042f c7 85 34 03 00
|
|
00 00 00 00 00 mov DWORD PTR has_hybrid$[rbp], 0
|
|
|
|
; 133 :
|
|
; 134 : /* Baseline main level */
|
|
; 135 : if (has_sse42)
|
|
|
|
00439 83 bd b4 01 00
|
|
00 00 cmp DWORD PTR has_sse42$[rbp], 0
|
|
00440 74 0b je SHORT $LN2@sn_get_sim
|
|
|
|
; 136 : main_lvl = SIMDID_PACK_MAIN(SIMDID_MAIN_LVL_SSE);
|
|
|
|
00442 48 c7 85 98 02
|
|
00 00 00 01 00
|
|
00 mov QWORD PTR main_lvl$[rbp], 256 ; 00000100H
|
|
$LN2@sn_get_sim:
|
|
|
|
; 137 :
|
|
; 138 : if (has_avx && has_osxsave && xgetbv_has_xmm_ymm()) {
|
|
|
|
0044d 83 bd d4 01 00
|
|
00 00 cmp DWORD PTR has_avx$[rbp], 0
|
|
00454 0f 84 af 06 00
|
|
00 je $LN3@sn_get_sim
|
|
0045a 83 bd f4 01 00
|
|
00 00 cmp DWORD PTR has_osxsave$[rbp], 0
|
|
00461 0f 84 a2 06 00
|
|
00 je $LN3@sn_get_sim
|
|
00467 e8 00 00 00 00 call xgetbv_has_xmm_ymm
|
|
0046c 85 c0 test eax, eax
|
|
0046e 0f 84 95 06 00
|
|
00 je $LN3@sn_get_sim
|
|
|
|
; 139 : avx_bits |= SIMDID_AVX;
|
|
|
|
00474 48 8b 85 f8 02
|
|
00 00 mov rax, QWORD PTR avx_bits$[rbp]
|
|
0047b 48 83 c8 01 or rax, 1
|
|
0047f 48 89 85 f8 02
|
|
00 00 mov QWORD PTR avx_bits$[rbp], rax
|
|
|
|
; 140 :
|
|
; 141 : /* Glued/split-lane YMM: early AMD Zen1/Zen+, Hygon, and VIA/Zhaoxin */
|
|
; 142 : if (is_amd_glue_ymm(vendor, cpuid1_eax) || is_via)
|
|
|
|
00486 8b 95 54 01 00
|
|
00 mov edx, DWORD PTR cpuid1_eax$[rbp]
|
|
0048c 48 8d 8d a8 00
|
|
00 00 lea rcx, QWORD PTR vendor$[rbp]
|
|
00493 e8 00 00 00 00 call is_amd_glue_ymm
|
|
00498 85 c0 test eax, eax
|
|
0049a 75 09 jne SHORT $LN5@sn_get_sim
|
|
0049c 83 bd 34 01 00
|
|
00 00 cmp DWORD PTR is_via$[rbp], 0
|
|
004a3 74 12 je SHORT $LN4@sn_get_sim
|
|
$LN5@sn_get_sim:
|
|
|
|
; 143 : avx_bits |= SIMDID_AVX_DUAL;
|
|
|
|
004a5 48 8b 85 f8 02
|
|
00 00 mov rax, QWORD PTR avx_bits$[rbp]
|
|
004ac 48 83 c8 10 or rax, 16
|
|
004b0 48 89 85 f8 02
|
|
00 00 mov QWORD PTR avx_bits$[rbp], rax
|
|
$LN4@sn_get_sim:
|
|
|
|
; 144 :
|
|
; 145 : /* CPUID.7.0 */
|
|
; 146 : get_cpuid(7, 0, &eax, &ebx, &ecx, &edx);
|
|
|
|
004b7 48 8d 85 84 00
|
|
00 00 lea rax, QWORD PTR edx$[rbp]
|
|
004be 48 89 44 24 28 mov QWORD PTR [rsp+40], rax
|
|
004c3 48 8d 45 64 lea rax, QWORD PTR ecx$[rbp]
|
|
004c7 48 89 44 24 20 mov QWORD PTR [rsp+32], rax
|
|
004cc 4c 8d 4d 44 lea r9, QWORD PTR ebx$[rbp]
|
|
004d0 4c 8d 45 24 lea r8, QWORD PTR eax$[rbp]
|
|
004d4 33 d2 xor edx, edx
|
|
004d6 b9 07 00 00 00 mov ecx, 7
|
|
004db e8 00 00 00 00 call get_cpuid
|
|
004e0 90 npad 1
|
|
|
|
; 147 : const int has_bmi1 = (ebx & (1 << 3)) != 0;
|
|
|
|
004e1 8b 45 44 mov eax, DWORD PTR ebx$[rbp]
|
|
004e4 83 e0 08 and eax, 8
|
|
004e7 85 c0 test eax, eax
|
|
004e9 74 0c je SHORT $LN64@sn_get_sim
|
|
004eb c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv202[rbp], 1
|
|
004f5 eb 0a jmp SHORT $LN65@sn_get_sim
|
|
$LN64@sn_get_sim:
|
|
004f7 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv202[rbp], 0
|
|
$LN65@sn_get_sim:
|
|
00501 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv202[rbp]
|
|
00507 89 85 54 03 00
|
|
00 mov DWORD PTR has_bmi1$17[rbp], eax
|
|
|
|
; 148 : const int has_bmi2 = (ebx & (1 << 8)) != 0;
|
|
|
|
0050d 8b 45 44 mov eax, DWORD PTR ebx$[rbp]
|
|
00510 25 00 01 00 00 and eax, 256 ; 00000100H
|
|
00515 85 c0 test eax, eax
|
|
00517 74 0c je SHORT $LN66@sn_get_sim
|
|
00519 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv205[rbp], 1
|
|
00523 eb 0a jmp SHORT $LN67@sn_get_sim
|
|
$LN66@sn_get_sim:
|
|
00525 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv205[rbp], 0
|
|
$LN67@sn_get_sim:
|
|
0052f 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv205[rbp]
|
|
00535 89 85 74 03 00
|
|
00 mov DWORD PTR has_bmi2$18[rbp], eax
|
|
|
|
; 149 : const int has_avx2 = (ebx & (1 << 5)) != 0;
|
|
|
|
0053b 8b 45 44 mov eax, DWORD PTR ebx$[rbp]
|
|
0053e 83 e0 20 and eax, 32 ; 00000020H
|
|
00541 85 c0 test eax, eax
|
|
00543 74 0c je SHORT $LN68@sn_get_sim
|
|
00545 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv208[rbp], 1
|
|
0054f eb 0a jmp SHORT $LN69@sn_get_sim
|
|
$LN68@sn_get_sim:
|
|
00551 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv208[rbp], 0
|
|
$LN69@sn_get_sim:
|
|
0055b 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv208[rbp]
|
|
00561 89 85 94 03 00
|
|
00 mov DWORD PTR has_avx2$19[rbp], eax
|
|
|
|
; 150 : const int has_avx512f = (ebx & (1 << 16)) != 0;
|
|
|
|
00567 8b 45 44 mov eax, DWORD PTR ebx$[rbp]
|
|
0056a 25 00 00 01 00 and eax, 65536 ; 00010000H
|
|
0056f 85 c0 test eax, eax
|
|
00571 74 0c je SHORT $LN70@sn_get_sim
|
|
00573 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv211[rbp], 1
|
|
0057d eb 0a jmp SHORT $LN71@sn_get_sim
|
|
$LN70@sn_get_sim:
|
|
0057f c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv211[rbp], 0
|
|
$LN71@sn_get_sim:
|
|
00589 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv211[rbp]
|
|
0058f 89 85 b4 03 00
|
|
00 mov DWORD PTR has_avx512f$20[rbp], eax
|
|
|
|
; 151 : const int has_avx512dq = (ebx & (1 << 17)) != 0;
|
|
|
|
00595 8b 45 44 mov eax, DWORD PTR ebx$[rbp]
|
|
00598 25 00 00 02 00 and eax, 131072 ; 00020000H
|
|
0059d 85 c0 test eax, eax
|
|
0059f 74 0c je SHORT $LN72@sn_get_sim
|
|
005a1 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv214[rbp], 1
|
|
005ab eb 0a jmp SHORT $LN73@sn_get_sim
|
|
$LN72@sn_get_sim:
|
|
005ad c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv214[rbp], 0
|
|
$LN73@sn_get_sim:
|
|
005b7 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv214[rbp]
|
|
005bd 89 85 d4 03 00
|
|
00 mov DWORD PTR has_avx512dq$21[rbp], eax
|
|
|
|
; 152 : const int has_avx512bw = (ebx & (1 << 30)) != 0;
|
|
|
|
005c3 8b 45 44 mov eax, DWORD PTR ebx$[rbp]
|
|
005c6 25 00 00 00 40 and eax, 1073741824 ; 40000000H
|
|
005cb 85 c0 test eax, eax
|
|
005cd 74 0c je SHORT $LN74@sn_get_sim
|
|
005cf c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv217[rbp], 1
|
|
005d9 eb 0a jmp SHORT $LN75@sn_get_sim
|
|
$LN74@sn_get_sim:
|
|
005db c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv217[rbp], 0
|
|
$LN75@sn_get_sim:
|
|
005e5 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv217[rbp]
|
|
005eb 89 85 f4 03 00
|
|
00 mov DWORD PTR has_avx512bw$22[rbp], eax
|
|
|
|
; 153 : const int has_avx512vl = (ebx & (1u << 31)) != 0;
|
|
|
|
005f1 8b 45 44 mov eax, DWORD PTR ebx$[rbp]
|
|
005f4 25 00 00 00 80 and eax, -2147483648 ; 80000000H
|
|
005f9 85 c0 test eax, eax
|
|
005fb 74 0c je SHORT $LN76@sn_get_sim
|
|
005fd c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv220[rbp], 1
|
|
00607 eb 0a jmp SHORT $LN77@sn_get_sim
|
|
$LN76@sn_get_sim:
|
|
00609 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv220[rbp], 0
|
|
$LN77@sn_get_sim:
|
|
00613 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv220[rbp]
|
|
00619 89 85 14 04 00
|
|
00 mov DWORD PTR has_avx512vl$23[rbp], eax
|
|
|
|
; 154 : const int has_avx512_vnni = (ebx & (1 << 11)) != 0;
|
|
|
|
0061f 8b 45 44 mov eax, DWORD PTR ebx$[rbp]
|
|
00622 25 00 08 00 00 and eax, 2048 ; 00000800H
|
|
00627 85 c0 test eax, eax
|
|
00629 74 0c je SHORT $LN78@sn_get_sim
|
|
0062b c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv223[rbp], 1
|
|
00635 eb 0a jmp SHORT $LN79@sn_get_sim
|
|
$LN78@sn_get_sim:
|
|
00637 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv223[rbp], 0
|
|
$LN79@sn_get_sim:
|
|
00641 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv223[rbp]
|
|
00647 89 85 34 04 00
|
|
00 mov DWORD PTR has_avx512_vnni$24[rbp], eax
|
|
|
|
; 155 : const int has_vbmi = (ecx & (1 << 1)) != 0;
|
|
|
|
0064d 8b 45 64 mov eax, DWORD PTR ecx$[rbp]
|
|
00650 83 e0 02 and eax, 2
|
|
00653 85 c0 test eax, eax
|
|
00655 74 0c je SHORT $LN80@sn_get_sim
|
|
00657 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv258[rbp], 1
|
|
00661 eb 0a jmp SHORT $LN81@sn_get_sim
|
|
$LN80@sn_get_sim:
|
|
00663 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv258[rbp], 0
|
|
$LN81@sn_get_sim:
|
|
0066d 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv258[rbp]
|
|
00673 89 85 54 04 00
|
|
00 mov DWORD PTR has_vbmi$25[rbp], eax
|
|
|
|
; 156 : const int has_vbmi2 = (ecx & (1 << 6)) != 0;
|
|
|
|
00679 8b 45 64 mov eax, DWORD PTR ecx$[rbp]
|
|
0067c 83 e0 40 and eax, 64 ; 00000040H
|
|
0067f 85 c0 test eax, eax
|
|
00681 74 0c je SHORT $LN82@sn_get_sim
|
|
00683 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv261[rbp], 1
|
|
0068d eb 0a jmp SHORT $LN83@sn_get_sim
|
|
$LN82@sn_get_sim:
|
|
0068f c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv261[rbp], 0
|
|
$LN83@sn_get_sim:
|
|
00699 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv261[rbp]
|
|
0069f 89 85 74 04 00
|
|
00 mov DWORD PTR has_vbmi2$26[rbp], eax
|
|
|
|
; 157 :
|
|
; 158 : /* AMX in leaf 7 subleaf 0 EDX bits 24/25/26 — capture before
|
|
; 159 : overwriting regs with subleaf 1 */
|
|
; 160 : const int has_amx_tile = (edx & (1 << 24)) != 0;
|
|
|
|
006a5 8b 85 84 00 00
|
|
00 mov eax, DWORD PTR edx$[rbp]
|
|
006ab 25 00 00 00 01 and eax, 16777216 ; 01000000H
|
|
006b0 85 c0 test eax, eax
|
|
006b2 74 0c je SHORT $LN84@sn_get_sim
|
|
006b4 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv264[rbp], 1
|
|
006be eb 0a jmp SHORT $LN85@sn_get_sim
|
|
$LN84@sn_get_sim:
|
|
006c0 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv264[rbp], 0
|
|
$LN85@sn_get_sim:
|
|
006ca 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv264[rbp]
|
|
006d0 89 85 94 04 00
|
|
00 mov DWORD PTR has_amx_tile$27[rbp], eax
|
|
|
|
; 161 : const int has_amx_int8 = (edx & (1 << 25)) != 0;
|
|
|
|
006d6 8b 85 84 00 00
|
|
00 mov eax, DWORD PTR edx$[rbp]
|
|
006dc 25 00 00 00 02 and eax, 33554432 ; 02000000H
|
|
006e1 85 c0 test eax, eax
|
|
006e3 74 0c je SHORT $LN86@sn_get_sim
|
|
006e5 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv267[rbp], 1
|
|
006ef eb 0a jmp SHORT $LN87@sn_get_sim
|
|
$LN86@sn_get_sim:
|
|
006f1 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv267[rbp], 0
|
|
$LN87@sn_get_sim:
|
|
006fb 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv267[rbp]
|
|
00701 89 85 b4 04 00
|
|
00 mov DWORD PTR has_amx_int8$28[rbp], eax
|
|
|
|
; 162 : const int has_amx_bf16 = (edx & (1 << 22)) != 0;
|
|
|
|
00707 8b 85 84 00 00
|
|
00 mov eax, DWORD PTR edx$[rbp]
|
|
0070d 25 00 00 40 00 and eax, 4194304 ; 00400000H
|
|
00712 85 c0 test eax, eax
|
|
00714 74 0c je SHORT $LN88@sn_get_sim
|
|
00716 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv270[rbp], 1
|
|
00720 eb 0a jmp SHORT $LN89@sn_get_sim
|
|
$LN88@sn_get_sim:
|
|
00722 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv270[rbp], 0
|
|
$LN89@sn_get_sim:
|
|
0072c 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv270[rbp]
|
|
00732 89 85 d4 04 00
|
|
00 mov DWORD PTR has_amx_bf16$29[rbp], eax
|
|
|
|
; 163 : has_hybrid = (edx & (1 << 15)) != 0; /* Intel hybrid core topology */
|
|
|
|
00738 8b 85 84 00 00
|
|
00 mov eax, DWORD PTR edx$[rbp]
|
|
0073e 25 00 80 00 00 and eax, 32768 ; 00008000H
|
|
00743 85 c0 test eax, eax
|
|
00745 74 0c je SHORT $LN90@sn_get_sim
|
|
00747 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv273[rbp], 1
|
|
00751 eb 0a jmp SHORT $LN91@sn_get_sim
|
|
$LN90@sn_get_sim:
|
|
00753 c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv273[rbp], 0
|
|
$LN91@sn_get_sim:
|
|
0075d 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv273[rbp]
|
|
00763 89 85 34 03 00
|
|
00 mov DWORD PTR has_hybrid$[rbp], eax
|
|
|
|
; 164 :
|
|
; 165 : /* leaf 7, subleaf 1 for BF16/FP16/AVX10 convergence */
|
|
; 166 : get_cpuid(7, 1, &eax, &ebx, &ecx, &edx);
|
|
|
|
00769 48 8d 85 84 00
|
|
00 00 lea rax, QWORD PTR edx$[rbp]
|
|
00770 48 89 44 24 28 mov QWORD PTR [rsp+40], rax
|
|
00775 48 8d 45 64 lea rax, QWORD PTR ecx$[rbp]
|
|
00779 48 89 44 24 20 mov QWORD PTR [rsp+32], rax
|
|
0077e 4c 8d 4d 44 lea r9, QWORD PTR ebx$[rbp]
|
|
00782 4c 8d 45 24 lea r8, QWORD PTR eax$[rbp]
|
|
00786 ba 01 00 00 00 mov edx, 1
|
|
0078b b9 07 00 00 00 mov ecx, 7
|
|
00790 e8 00 00 00 00 call get_cpuid
|
|
00795 90 npad 1
|
|
|
|
; 167 : const int has_bf16 = (eax & (1 << 5)) != 0; /* AVX512_BF16 */
|
|
|
|
00796 8b 45 24 mov eax, DWORD PTR eax$[rbp]
|
|
00799 83 e0 20 and eax, 32 ; 00000020H
|
|
0079c 85 c0 test eax, eax
|
|
0079e 74 0c je SHORT $LN92@sn_get_sim
|
|
007a0 c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv282[rbp], 1
|
|
007aa eb 0a jmp SHORT $LN93@sn_get_sim
|
|
$LN92@sn_get_sim:
|
|
007ac c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv282[rbp], 0
|
|
$LN93@sn_get_sim:
|
|
007b6 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv282[rbp]
|
|
007bc 89 85 f4 04 00
|
|
00 mov DWORD PTR has_bf16$30[rbp], eax
|
|
|
|
; 168 : const int has_fp16 = (eax & (1 << 23)) != 0; /* AVX512_FP16 */
|
|
|
|
007c2 8b 45 24 mov eax, DWORD PTR eax$[rbp]
|
|
007c5 25 00 00 80 00 and eax, 8388608 ; 00800000H
|
|
007ca 85 c0 test eax, eax
|
|
007cc 74 0c je SHORT $LN94@sn_get_sim
|
|
007ce c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv285[rbp], 1
|
|
007d8 eb 0a jmp SHORT $LN95@sn_get_sim
|
|
$LN94@sn_get_sim:
|
|
007da c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv285[rbp], 0
|
|
$LN95@sn_get_sim:
|
|
007e4 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv285[rbp]
|
|
007ea 89 85 14 05 00
|
|
00 mov DWORD PTR has_fp16$31[rbp], eax
|
|
|
|
; 169 : const int has_avx10 = (edx & (1 << 19)) != 0; /* AVX10 convergence */
|
|
|
|
007f0 8b 85 84 00 00
|
|
00 mov eax, DWORD PTR edx$[rbp]
|
|
007f6 25 00 00 08 00 and eax, 524288 ; 00080000H
|
|
007fb 85 c0 test eax, eax
|
|
007fd 74 0c je SHORT $LN96@sn_get_sim
|
|
007ff c7 85 c4 09 00
|
|
00 01 00 00 00 mov DWORD PTR tv288[rbp], 1
|
|
00809 eb 0a jmp SHORT $LN97@sn_get_sim
|
|
$LN96@sn_get_sim:
|
|
0080b c7 85 c4 09 00
|
|
00 00 00 00 00 mov DWORD PTR tv288[rbp], 0
|
|
$LN97@sn_get_sim:
|
|
00815 8b 85 c4 09 00
|
|
00 mov eax, DWORD PTR tv288[rbp]
|
|
0081b 89 85 34 05 00
|
|
00 mov DWORD PTR has_avx10$32[rbp], eax
|
|
|
|
; 170 :
|
|
; 171 : if (has_avx2) {
|
|
|
|
00821 83 bd 94 03 00
|
|
00 00 cmp DWORD PTR has_avx2$19[rbp], 0
|
|
00828 74 53 je SHORT $LN6@sn_get_sim
|
|
|
|
; 172 : avx_bits |= SIMDID_AVX2;
|
|
|
|
0082a 48 8b 85 f8 02
|
|
00 00 mov rax, QWORD PTR avx_bits$[rbp]
|
|
00831 48 83 c8 02 or rax, 2
|
|
00835 48 89 85 f8 02
|
|
00 00 mov QWORD PTR avx_bits$[rbp], rax
|
|
|
|
; 173 : if (has_fma)
|
|
|
|
0083c 83 bd 14 02 00
|
|
00 00 cmp DWORD PTR has_fma$[rbp], 0
|
|
00843 74 12 je SHORT $LN7@sn_get_sim
|
|
|
|
; 174 : avx_bits |= SIMDID_AVX_FMA;
|
|
|
|
00845 48 8b 85 f8 02
|
|
00 00 mov rax, QWORD PTR avx_bits$[rbp]
|
|
0084c 48 83 c8 04 or rax, 4
|
|
00850 48 89 85 f8 02
|
|
00 00 mov QWORD PTR avx_bits$[rbp], rax
|
|
$LN7@sn_get_sim:
|
|
|
|
; 175 : if (has_f16c)
|
|
|
|
00857 83 bd 34 02 00
|
|
00 00 cmp DWORD PTR has_f16c$[rbp], 0
|
|
0085e 74 12 je SHORT $LN8@sn_get_sim
|
|
|
|
; 176 : avx_bits |= SIMDID_AVX_F16C;
|
|
|
|
00860 48 8b 85 f8 02
|
|
00 00 mov rax, QWORD PTR avx_bits$[rbp]
|
|
00867 48 83 c8 08 or rax, 8
|
|
0086b 48 89 85 f8 02
|
|
00 00 mov QWORD PTR avx_bits$[rbp], rax
|
|
$LN8@sn_get_sim:
|
|
|
|
; 177 :
|
|
; 178 : main_lvl = SIMDID_PACK_MAIN(SIMDID_MAIN_LVL_AVX2);
|
|
|
|
00872 48 c7 85 98 02
|
|
00 00 00 02 00
|
|
00 mov QWORD PTR main_lvl$[rbp], 512 ; 00000200H
|
|
$LN6@sn_get_sim:
|
|
|
|
; 179 : }
|
|
; 180 :
|
|
; 181 : if (has_avx512f && xgetbv_has_avx512_state()) {
|
|
|
|
0087d 83 bd b4 03 00
|
|
00 00 cmp DWORD PTR has_avx512f$20[rbp], 0
|
|
00884 0f 84 7f 02 00
|
|
00 je $LN9@sn_get_sim
|
|
0088a e8 00 00 00 00 call xgetbv_has_avx512_state
|
|
0088f 85 c0 test eax, eax
|
|
00891 0f 84 72 02 00
|
|
00 je $LN9@sn_get_sim
|
|
|
|
; 182 : /* Ensure base subset present */
|
|
; 183 : if (has_avx512bw && has_avx512vl && has_avx512dq) {
|
|
|
|
00897 83 bd f4 03 00
|
|
00 00 cmp DWORD PTR has_avx512bw$22[rbp], 0
|
|
0089e 74 24 je SHORT $LN10@sn_get_sim
|
|
008a0 83 bd 14 04 00
|
|
00 00 cmp DWORD PTR has_avx512vl$23[rbp], 0
|
|
008a7 74 1b je SHORT $LN10@sn_get_sim
|
|
008a9 83 bd d4 03 00
|
|
00 00 cmp DWORD PTR has_avx512dq$21[rbp], 0
|
|
008b0 74 12 je SHORT $LN10@sn_get_sim
|
|
|
|
; 184 : avx512_bits |= SIMDID_AVX512_BASE;
|
|
|
|
008b2 48 8b 85 b8 02
|
|
00 00 mov rax, QWORD PTR avx512_bits$[rbp]
|
|
008b9 48 83 c8 10 or rax, 16
|
|
008bd 48 89 85 b8 02
|
|
00 00 mov QWORD PTR avx512_bits$[rbp], rax
|
|
$LN10@sn_get_sim:
|
|
|
|
; 185 : }
|
|
; 186 : if (has_avx512_vnni)
|
|
|
|
008c4 83 bd 34 04 00
|
|
00 00 cmp DWORD PTR has_avx512_vnni$24[rbp], 0
|
|
008cb 74 13 je SHORT $LN11@sn_get_sim
|
|
|
|
; 187 : avx512_bits |= SIMDID_AVX512_VNNI;
|
|
|
|
008cd 48 8b 85 b8 02
|
|
00 00 mov rax, QWORD PTR avx512_bits$[rbp]
|
|
008d4 48 0f ba e8 0b bts rax, 11
|
|
008d9 48 89 85 b8 02
|
|
00 00 mov QWORD PTR avx512_bits$[rbp], rax
|
|
$LN11@sn_get_sim:
|
|
|
|
; 188 : if (has_bf16)
|
|
|
|
008e0 83 bd f4 04 00
|
|
00 00 cmp DWORD PTR has_bf16$30[rbp], 0
|
|
008e7 74 13 je SHORT $LN12@sn_get_sim
|
|
|
|
; 189 : avx512_bits |= SIMDID_AVX512_BF16;
|
|
|
|
008e9 48 8b 85 b8 02
|
|
00 00 mov rax, QWORD PTR avx512_bits$[rbp]
|
|
008f0 48 0f ba e8 0c bts rax, 12
|
|
008f5 48 89 85 b8 02
|
|
00 00 mov QWORD PTR avx512_bits$[rbp], rax
|
|
$LN12@sn_get_sim:
|
|
|
|
; 190 : if (has_fp16)
|
|
|
|
008fc 83 bd 14 05 00
|
|
00 00 cmp DWORD PTR has_fp16$31[rbp], 0
|
|
00903 74 13 je SHORT $LN13@sn_get_sim
|
|
|
|
; 191 : avx512_bits |= SIMDID_AVX512_FP16;
|
|
|
|
00905 48 8b 85 b8 02
|
|
00 00 mov rax, QWORD PTR avx512_bits$[rbp]
|
|
0090c 48 0f ba e8 0d bts rax, 13
|
|
00911 48 89 85 b8 02
|
|
00 00 mov QWORD PTR avx512_bits$[rbp], rax
|
|
$LN13@sn_get_sim:
|
|
|
|
; 192 : if (has_vbmi)
|
|
|
|
00918 83 bd 54 04 00
|
|
00 00 cmp DWORD PTR has_vbmi$25[rbp], 0
|
|
0091f 74 13 je SHORT $LN14@sn_get_sim
|
|
|
|
; 193 : avx512_bits |= SIMDID_AVX512_VBMI;
|
|
|
|
00921 48 8b 85 b8 02
|
|
00 00 mov rax, QWORD PTR avx512_bits$[rbp]
|
|
00928 48 0f ba e8 09 bts rax, 9
|
|
0092d 48 89 85 b8 02
|
|
00 00 mov QWORD PTR avx512_bits$[rbp], rax
|
|
$LN14@sn_get_sim:
|
|
|
|
; 194 : if (has_vbmi2)
|
|
|
|
00934 83 bd 74 04 00
|
|
00 00 cmp DWORD PTR has_vbmi2$26[rbp], 0
|
|
0093b 74 13 je SHORT $LN15@sn_get_sim
|
|
|
|
; 195 : avx512_bits |= SIMDID_AVX512_VBMI2;
|
|
|
|
0093d 48 8b 85 b8 02
|
|
00 00 mov rax, QWORD PTR avx512_bits$[rbp]
|
|
00944 48 0f ba e8 0a bts rax, 10
|
|
00949 48 89 85 b8 02
|
|
00 00 mov QWORD PTR avx512_bits$[rbp], rax
|
|
$LN15@sn_get_sim:
|
|
|
|
; 196 :
|
|
; 197 : /* Execution-width classification:
|
|
; 198 : * Intel all → NATIVE (genuine 512-bit ALU; SKX dual-port is native)
|
|
; 199 : * AMD Zen4 → DUAL (dual-pump 256-bit, Family 0x19)
|
|
; 200 : * AMD Zen5+ → NATIVE (native 512-bit, Family >= 0x1A)
|
|
; 201 : * Hygon/VIA/unknown → UNKNOWN (conservative) */
|
|
; 202 : if (is_intel)
|
|
|
|
00950 83 bd d4 00 00
|
|
00 00 cmp DWORD PTR is_intel$[rbp], 0
|
|
00957 74 15 je SHORT $LN16@sn_get_sim
|
|
|
|
; 203 : avx512_bits |= SIMDID_AVX512_IMPL_NATIVE;
|
|
|
|
00959 48 8b 85 b8 02
|
|
00 00 mov rax, QWORD PTR avx512_bits$[rbp]
|
|
00960 48 0f ba e8 07 bts rax, 7
|
|
00965 48 89 85 b8 02
|
|
00 00 mov QWORD PTR avx512_bits$[rbp], rax
|
|
0096c eb 38 jmp SHORT $LN17@sn_get_sim
|
|
$LN16@sn_get_sim:
|
|
|
|
; 204 : else if (is_amd)
|
|
|
|
0096e 83 bd f4 00 00
|
|
00 00 cmp DWORD PTR is_amd$[rbp], 0
|
|
00975 74 21 je SHORT $LN18@sn_get_sim
|
|
|
|
; 205 : avx512_bits |= amd_avx512_impl(family);
|
|
|
|
00977 8b 8d 74 01 00
|
|
00 mov ecx, DWORD PTR family$[rbp]
|
|
0097d e8 00 00 00 00 call amd_avx512_impl
|
|
00982 48 8b 8d b8 02
|
|
00 00 mov rcx, QWORD PTR avx512_bits$[rbp]
|
|
00989 48 0b c8 or rcx, rax
|
|
0098c 48 8b c1 mov rax, rcx
|
|
0098f 48 89 85 b8 02
|
|
00 00 mov QWORD PTR avx512_bits$[rbp], rax
|
|
00996 eb 0e jmp SHORT $LN19@sn_get_sim
|
|
$LN18@sn_get_sim:
|
|
|
|
; 206 : else
|
|
; 207 : avx512_bits |= SIMDID_AVX512_IMPL_UNKNOWN;
|
|
|
|
00998 48 8b 85 b8 02
|
|
00 00 mov rax, QWORD PTR avx512_bits$[rbp]
|
|
0099f 48 89 85 b8 02
|
|
00 00 mov QWORD PTR avx512_bits$[rbp], rax
|
|
$LN19@sn_get_sim:
|
|
$LN17@sn_get_sim:
|
|
|
|
; 208 :
|
|
; 209 : /* main level for AVX512 */
|
|
; 210 : main_lvl = SIMDID_PACK_MAIN(SIMDID_MAIN_LVL_AVX512);
|
|
|
|
009a6 48 c7 85 98 02
|
|
00 00 00 03 00
|
|
00 mov QWORD PTR main_lvl$[rbp], 768 ; 00000300H
|
|
|
|
; 211 :
|
|
; 212 : /* AMX promotion if present */
|
|
; 213 : if (has_amx_tile) {
|
|
|
|
009b1 83 bd 94 04 00
|
|
00 00 cmp DWORD PTR has_amx_tile$27[rbp], 0
|
|
009b8 74 53 je SHORT $LN20@sn_get_sim
|
|
|
|
; 214 : amx_bits |= SIMDID_AMX_TILE;
|
|
|
|
009ba 48 8b 85 d8 02
|
|
00 00 mov rax, QWORD PTR amx_bits$[rbp]
|
|
009c1 48 83 c8 01 or rax, 1
|
|
009c5 48 89 85 d8 02
|
|
00 00 mov QWORD PTR amx_bits$[rbp], rax
|
|
|
|
; 215 : if (has_amx_int8)
|
|
|
|
009cc 83 bd b4 04 00
|
|
00 00 cmp DWORD PTR has_amx_int8$28[rbp], 0
|
|
009d3 74 12 je SHORT $LN21@sn_get_sim
|
|
|
|
; 216 : amx_bits |= SIMDID_AMX_INT8;
|
|
|
|
009d5 48 8b 85 d8 02
|
|
00 00 mov rax, QWORD PTR amx_bits$[rbp]
|
|
009dc 48 83 c8 02 or rax, 2
|
|
009e0 48 89 85 d8 02
|
|
00 00 mov QWORD PTR amx_bits$[rbp], rax
|
|
$LN21@sn_get_sim:
|
|
|
|
; 217 : if (has_amx_bf16)
|
|
|
|
009e7 83 bd d4 04 00
|
|
00 00 cmp DWORD PTR has_amx_bf16$29[rbp], 0
|
|
009ee 74 12 je SHORT $LN22@sn_get_sim
|
|
|
|
; 218 : amx_bits |= SIMDID_AMX_BF16;
|
|
|
|
009f0 48 8b 85 d8 02
|
|
00 00 mov rax, QWORD PTR amx_bits$[rbp]
|
|
009f7 48 83 c8 04 or rax, 4
|
|
009fb 48 89 85 d8 02
|
|
00 00 mov QWORD PTR amx_bits$[rbp], rax
|
|
$LN22@sn_get_sim:
|
|
|
|
; 219 : main_lvl = SIMDID_PACK_MAIN(SIMDID_MAIN_LVL_AMX);
|
|
|
|
00a02 48 c7 85 98 02
|
|
00 00 00 04 00
|
|
00 mov QWORD PTR main_lvl$[rbp], 1024 ; 00000400H
|
|
$LN20@sn_get_sim:
|
|
|
|
; 220 : }
|
|
; 221 :
|
|
; 222 : /* AVX10 detection — requires AVX10 convergence bit
|
|
; 223 : (leaf 7 subleaf 1 EDX[19]) and leaf 0x24 */
|
|
; 224 : if (has_avx10) {
|
|
|
|
00a0d 83 bd 34 05 00
|
|
00 00 cmp DWORD PTR has_avx10$32[rbp], 0
|
|
00a14 0f 84 ef 00 00
|
|
00 je $LN23@sn_get_sim
|
|
|
|
; 225 : int a10_eax = 0, a10_ebx = 0, a10_ecx = 0, a10_edx = 0;
|
|
|
|
00a1a c7 85 54 05 00
|
|
00 00 00 00 00 mov DWORD PTR a10_eax$33[rbp], 0
|
|
00a24 c7 85 74 05 00
|
|
00 00 00 00 00 mov DWORD PTR a10_ebx$34[rbp], 0
|
|
00a2e c7 85 94 05 00
|
|
00 00 00 00 00 mov DWORD PTR a10_ecx$35[rbp], 0
|
|
00a38 c7 85 b4 05 00
|
|
00 00 00 00 00 mov DWORD PTR a10_edx$36[rbp], 0
|
|
|
|
; 226 : get_cpuid(0x24, 0, &a10_eax, &a10_ebx, &a10_ecx, &a10_edx);
|
|
|
|
00a42 48 8d 85 b4 05
|
|
00 00 lea rax, QWORD PTR a10_edx$36[rbp]
|
|
00a49 48 89 44 24 28 mov QWORD PTR [rsp+40], rax
|
|
00a4e 48 8d 85 94 05
|
|
00 00 lea rax, QWORD PTR a10_ecx$35[rbp]
|
|
00a55 48 89 44 24 20 mov QWORD PTR [rsp+32], rax
|
|
00a5a 4c 8d 8d 74 05
|
|
00 00 lea r9, QWORD PTR a10_ebx$34[rbp]
|
|
00a61 4c 8d 85 54 05
|
|
00 00 lea r8, QWORD PTR a10_eax$33[rbp]
|
|
00a68 33 d2 xor edx, edx
|
|
00a6a b9 24 00 00 00 mov ecx, 36 ; 00000024H
|
|
00a6f e8 00 00 00 00 call get_cpuid
|
|
00a74 90 npad 1
|
|
|
|
; 227 : const int avx10_ver = a10_ebx & 0xFF;
|
|
|
|
00a75 8b 85 74 05 00
|
|
00 mov eax, DWORD PTR a10_ebx$34[rbp]
|
|
00a7b 25 ff 00 00 00 and eax, 255 ; 000000ffH
|
|
00a80 89 85 d4 05 00
|
|
00 mov DWORD PTR avx10_ver$37[rbp], eax
|
|
|
|
; 228 : if (avx10_ver >= 1) {
|
|
|
|
00a86 83 bd d4 05 00
|
|
00 01 cmp DWORD PTR avx10_ver$37[rbp], 1
|
|
00a8d 7c 7a jl SHORT $LN24@sn_get_sim
|
|
|
|
; 229 : avx10_bits |= SIMDID_AVX10 | SIMDID_AVX10_V1;
|
|
|
|
00a8f 48 8b 85 18 03
|
|
00 00 mov rax, QWORD PTR avx10_bits$[rbp]
|
|
00a96 48 83 c8 03 or rax, 3
|
|
00a9a 48 89 85 18 03
|
|
00 00 mov QWORD PTR avx10_bits$[rbp], rax
|
|
|
|
; 230 : if (avx10_ver >= 2)
|
|
|
|
00aa1 83 bd d4 05 00
|
|
00 02 cmp DWORD PTR avx10_ver$37[rbp], 2
|
|
00aa8 7c 12 jl SHORT $LN25@sn_get_sim
|
|
|
|
; 231 : avx10_bits |= SIMDID_AVX10_V2;
|
|
|
|
00aaa 48 8b 85 18 03
|
|
00 00 mov rax, QWORD PTR avx10_bits$[rbp]
|
|
00ab1 48 83 c8 04 or rax, 4
|
|
00ab5 48 89 85 18 03
|
|
00 00 mov QWORD PTR avx10_bits$[rbp], rax
|
|
$LN25@sn_get_sim:
|
|
|
|
; 232 : if (a10_ebx & (1 << 17))
|
|
|
|
00abc 8b 85 74 05 00
|
|
00 mov eax, DWORD PTR a10_ebx$34[rbp]
|
|
00ac2 25 00 00 02 00 and eax, 131072 ; 00020000H
|
|
00ac7 85 c0 test eax, eax
|
|
00ac9 74 12 je SHORT $LN26@sn_get_sim
|
|
|
|
; 233 : avx10_bits |= SIMDID_AVX10_256W;
|
|
|
|
00acb 48 8b 85 18 03
|
|
00 00 mov rax, QWORD PTR avx10_bits$[rbp]
|
|
00ad2 48 83 c8 08 or rax, 8
|
|
00ad6 48 89 85 18 03
|
|
00 00 mov QWORD PTR avx10_bits$[rbp], rax
|
|
$LN26@sn_get_sim:
|
|
|
|
; 234 : if (a10_ebx & (1 << 18))
|
|
|
|
00add 8b 85 74 05 00
|
|
00 mov eax, DWORD PTR a10_ebx$34[rbp]
|
|
00ae3 25 00 00 04 00 and eax, 262144 ; 00040000H
|
|
00ae8 85 c0 test eax, eax
|
|
00aea 74 12 je SHORT $LN27@sn_get_sim
|
|
|
|
; 235 : avx10_bits |= SIMDID_AVX10_512W;
|
|
|
|
00aec 48 8b 85 18 03
|
|
00 00 mov rax, QWORD PTR avx10_bits$[rbp]
|
|
00af3 48 83 c8 10 or rax, 16
|
|
00af7 48 89 85 18 03
|
|
00 00 mov QWORD PTR avx10_bits$[rbp], rax
|
|
$LN27@sn_get_sim:
|
|
|
|
; 236 : main_lvl = SIMDID_PACK_MAIN(SIMDID_MAIN_LVL_AVX10);
|
|
|
|
00afe 48 c7 85 98 02
|
|
00 00 00 05 00
|
|
00 mov QWORD PTR main_lvl$[rbp], 1280 ; 00000500H
|
|
$LN24@sn_get_sim:
|
|
$LN23@sn_get_sim:
|
|
$LN9@sn_get_sim:
|
|
$LN3@sn_get_sim:
|
|
|
|
; 237 : }
|
|
; 238 : }
|
|
; 239 : }
|
|
; 240 : }
|
|
; 241 :
|
|
; 242 : /* uArchHi: hybrid core topology and SIMD-dual summary */
|
|
; 243 : uint64_t uarch_bits = 0;
|
|
|
|
00b09 48 c7 85 f8 05
|
|
00 00 00 00 00
|
|
00 mov QWORD PTR uarch_bits$[rbp], 0
|
|
|
|
; 244 : if (has_hybrid) {
|
|
|
|
00b14 83 bd 34 03 00
|
|
00 00 cmp DWORD PTR has_hybrid$[rbp], 0
|
|
00b1b 0f 84 a9 00 00
|
|
00 je $LN28@sn_get_sim
|
|
|
|
; 245 : int h_eax = 0, h_ebx = 0, h_ecx = 0, h_edx = 0;
|
|
|
|
00b21 c7 85 14 06 00
|
|
00 00 00 00 00 mov DWORD PTR h_eax$38[rbp], 0
|
|
00b2b c7 85 34 06 00
|
|
00 00 00 00 00 mov DWORD PTR h_ebx$39[rbp], 0
|
|
00b35 c7 85 54 06 00
|
|
00 00 00 00 00 mov DWORD PTR h_ecx$40[rbp], 0
|
|
00b3f c7 85 74 06 00
|
|
00 00 00 00 00 mov DWORD PTR h_edx$41[rbp], 0
|
|
|
|
; 246 : get_cpuid(0x1A, 0, &h_eax, &h_ebx, &h_ecx, &h_edx);
|
|
|
|
00b49 48 8d 85 74 06
|
|
00 00 lea rax, QWORD PTR h_edx$41[rbp]
|
|
00b50 48 89 44 24 28 mov QWORD PTR [rsp+40], rax
|
|
00b55 48 8d 85 54 06
|
|
00 00 lea rax, QWORD PTR h_ecx$40[rbp]
|
|
00b5c 48 89 44 24 20 mov QWORD PTR [rsp+32], rax
|
|
00b61 4c 8d 8d 34 06
|
|
00 00 lea r9, QWORD PTR h_ebx$39[rbp]
|
|
00b68 4c 8d 85 14 06
|
|
00 00 lea r8, QWORD PTR h_eax$38[rbp]
|
|
00b6f 33 d2 xor edx, edx
|
|
00b71 b9 1a 00 00 00 mov ecx, 26
|
|
00b76 e8 00 00 00 00 call get_cpuid
|
|
00b7b 90 npad 1
|
|
|
|
; 247 : unsigned core_type = (unsigned)(h_eax >> 24) & 0xFFU;
|
|
|
|
00b7c 8b 85 14 06 00
|
|
00 mov eax, DWORD PTR h_eax$38[rbp]
|
|
00b82 c1 f8 18 sar eax, 24
|
|
00b85 25 ff 00 00 00 and eax, 255 ; 000000ffH
|
|
00b8a 89 85 94 06 00
|
|
00 mov DWORD PTR core_type$42[rbp], eax
|
|
|
|
; 248 : if (core_type == 0x40) /* Intel Core / P-core → 10 */
|
|
|
|
00b90 83 bd 94 06 00
|
|
00 40 cmp DWORD PTR core_type$42[rbp], 64 ; 00000040H
|
|
00b97 75 14 jne SHORT $LN30@sn_get_sim
|
|
|
|
; 249 : uarch_bits |= SIMDID_UARCH_HYBRID_P;
|
|
|
|
00b99 48 8b 85 f8 05
|
|
00 00 mov rax, QWORD PTR uarch_bits$[rbp]
|
|
00ba0 48 83 c8 02 or rax, 2
|
|
00ba4 48 89 85 f8 05
|
|
00 00 mov QWORD PTR uarch_bits$[rbp], rax
|
|
00bab eb 1b jmp SHORT $LN31@sn_get_sim
|
|
$LN30@sn_get_sim:
|
|
|
|
; 250 : else if (core_type == 0x20) /* Intel Atom / E-core → 01 */
|
|
|
|
00bad 83 bd 94 06 00
|
|
00 20 cmp DWORD PTR core_type$42[rbp], 32 ; 00000020H
|
|
00bb4 75 12 jne SHORT $LN32@sn_get_sim
|
|
|
|
; 251 : uarch_bits |= SIMDID_UARCH_HYBRID_E;
|
|
|
|
00bb6 48 8b 85 f8 05
|
|
00 00 mov rax, QWORD PTR uarch_bits$[rbp]
|
|
00bbd 48 83 c8 01 or rax, 1
|
|
00bc1 48 89 85 f8 05
|
|
00 00 mov QWORD PTR uarch_bits$[rbp], rax
|
|
$LN32@sn_get_sim:
|
|
$LN31@sn_get_sim:
|
|
|
|
; 252 : /* else unknown hybrid core type → topology stays 00 */
|
|
; 253 : } else {
|
|
|
|
00bc8 eb 12 jmp SHORT $LN29@sn_get_sim
|
|
$LN28@sn_get_sim:
|
|
|
|
; 254 : /* Confirmed non-hybrid (unified) → set both bits = 11 (numerically strongest) */
|
|
; 255 : uarch_bits |= SIMDID_UARCH_HYBRID_P | SIMDID_UARCH_HYBRID_E;
|
|
|
|
00bca 48 8b 85 f8 05
|
|
00 00 mov rax, QWORD PTR uarch_bits$[rbp]
|
|
00bd1 48 83 c8 03 or rax, 3
|
|
00bd5 48 89 85 f8 05
|
|
00 00 mov QWORD PTR uarch_bits$[rbp], rax
|
|
$LN29@sn_get_sim:
|
|
|
|
; 256 : }
|
|
; 257 : if ((avx_bits & SIMDID_AVX_DUAL) ||
|
|
|
|
00bdc 48 8b 85 f8 02
|
|
00 00 mov rax, QWORD PTR avx_bits$[rbp]
|
|
00be3 48 83 e0 10 and rax, 16
|
|
00be7 48 85 c0 test rax, rax
|
|
00bea 75 13 jne SHORT $LN34@sn_get_sim
|
|
00bec 48 8b 85 b8 02
|
|
00 00 mov rax, QWORD PTR avx512_bits$[rbp]
|
|
00bf3 48 25 c0 00 00
|
|
00 and rax, 192 ; 000000c0H
|
|
00bf9 48 83 f8 40 cmp rax, 64 ; 00000040H
|
|
00bfd 75 12 jne SHORT $LN33@sn_get_sim
|
|
$LN34@sn_get_sim:
|
|
|
|
; 258 : ((avx512_bits & SIMDID_AVX512_IMPL_MASK) == SIMDID_AVX512_IMPL_DUAL))
|
|
; 259 : uarch_bits |= SIMDID_UARCH_SIMD_DUAL;
|
|
|
|
00bff 48 8b 85 f8 05
|
|
00 00 mov rax, QWORD PTR uarch_bits$[rbp]
|
|
00c06 48 83 c8 04 or rax, 4
|
|
00c0a 48 89 85 f8 05
|
|
00 00 mov QWORD PTR uarch_bits$[rbp], rax
|
|
$LN33@sn_get_sim:
|
|
|
|
; 260 :
|
|
; 261 : _simdid.mask = root | manu | main_lvl | SIMDID_PACK_AVX512(avx512_bits) |
|
|
|
|
00c11 48 8b 85 78 02
|
|
00 00 mov rax, QWORD PTR manu$[rbp]
|
|
00c18 48 8b 8d 58 02
|
|
00 00 mov rcx, QWORD PTR root$[rbp]
|
|
00c1f 48 0b c8 or rcx, rax
|
|
00c22 48 8b c1 mov rax, rcx
|
|
00c25 48 0b 85 98 02
|
|
00 00 or rax, QWORD PTR main_lvl$[rbp]
|
|
00c2c 48 8b 8d b8 02
|
|
00 00 mov rcx, QWORD PTR avx512_bits$[rbp]
|
|
00c33 48 81 e1 ff ff
|
|
00 00 and rcx, 65535 ; 0000ffffH
|
|
00c3a 48 c1 e1 10 shl rcx, 16
|
|
00c3e 48 0b c1 or rax, rcx
|
|
00c41 48 8b 8d d8 02
|
|
00 00 mov rcx, QWORD PTR amx_bits$[rbp]
|
|
00c48 48 81 e1 ff 00
|
|
00 00 and rcx, 255 ; 000000ffH
|
|
00c4f 48 c1 e1 20 shl rcx, 32 ; 00000020H
|
|
00c53 48 0b c1 or rax, rcx
|
|
00c56 48 8b 8d f8 02
|
|
00 00 mov rcx, QWORD PTR avx_bits$[rbp]
|
|
00c5d 48 81 e1 ff 00
|
|
00 00 and rcx, 255 ; 000000ffH
|
|
00c64 48 c1 e1 28 shl rcx, 40 ; 00000028H
|
|
00c68 48 0b c1 or rax, rcx
|
|
00c6b 48 8b 8d 18 03
|
|
00 00 mov rcx, QWORD PTR avx10_bits$[rbp]
|
|
00c72 48 81 e1 ff 00
|
|
00 00 and rcx, 255 ; 000000ffH
|
|
00c79 48 c1 e1 30 shl rcx, 48 ; 00000030H
|
|
00c7d 48 0b c1 or rax, rcx
|
|
00c80 48 8b 8d f8 05
|
|
00 00 mov rcx, QWORD PTR uarch_bits$[rbp]
|
|
00c87 48 81 e1 ff 00
|
|
00 00 and rcx, 255 ; 000000ffH
|
|
00c8e 48 c1 e1 38 shl rcx, 56 ; 00000038H
|
|
00c92 48 0b c1 or rax, rcx
|
|
00c95 48 89 45 08 mov QWORD PTR _simdid$[rbp], rax
|
|
|
|
; 262 : SIMDID_PACK_AMX(amx_bits) | SIMDID_PACK_AVX(avx_bits) |
|
|
; 263 : SIMDID_PACK_AVX10(avx10_bits) | SIMDID_PACK_UARCH(uarch_bits);
|
|
; 264 : return _simdid;
|
|
|
|
00c99 48 8b 45 08 mov rax, QWORD PTR _simdid$[rbp]
|
|
$LN35@sn_get_sim:
|
|
|
|
; 265 : }
|
|
|
|
00c9d 48 8b f8 mov rdi, rax
|
|
00ca0 48 8d 4d d0 lea rcx, QWORD PTR [rbp-48]
|
|
00ca4 48 8d 15 00 00
|
|
00 00 lea rdx, OFFSET FLAT:sn_get_simd_level_local$rtcFrameData
|
|
00cab e8 00 00 00 00 call _RTC_CheckStackVars
|
|
00cb0 48 8b c7 mov rax, rdi
|
|
00cb3 48 8b 8d d8 09
|
|
00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp]
|
|
00cba 48 33 cd xor rcx, rbp
|
|
00cbd e8 00 00 00 00 call __security_check_cookie
|
|
00cc2 48 8d a5 e8 09
|
|
00 00 lea rsp, QWORD PTR [rbp+2536]
|
|
00cc9 5f pop rdi
|
|
00cca 5d pop rbp
|
|
00ccb c3 ret 0
|
|
sn_get_simd_level_local ENDP
|
|
_TEXT ENDS
|
|
; Function compile flags: /Odtp /RTCsu /ZI
|
|
; File D:\platform-dev\StgSharp.Native\sn-src\simdid.x86.c
|
|
; COMDAT sn_get_simd_level_global
|
|
_TEXT SEGMENT
|
|
sn_get_simd_level_global PROC ; COMDAT
|
|
|
|
; 268 : {
|
|
|
|
$LN4:
|
|
00000 40 55 push rbp
|
|
00002 57 push rdi
|
|
00003 48 81 ec e8 00
|
|
00 00 sub rsp, 232 ; 000000e8H
|
|
0000a 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32]
|
|
0000f 48 8d 0d 00 00
|
|
00 00 lea rcx, OFFSET FLAT:__3EBA305F_simdid@x86@c
|
|
00016 e8 00 00 00 00 call __CheckForDebuggerJustMyCode
|
|
0001b 90 npad 1
|
|
|
|
; 269 : if (global_simdid.mask) {
|
|
|
|
0001c 48 83 3d 00 00
|
|
00 00 00 cmp QWORD PTR global_simdid, 0
|
|
00024 74 09 je SHORT $LN2@sn_get_sim
|
|
|
|
; 270 : return global_simdid;
|
|
|
|
00026 48 8b 05 00 00
|
|
00 00 mov rax, QWORD PTR global_simdid
|
|
0002d eb 13 jmp SHORT $LN1@sn_get_sim
|
|
$LN2@sn_get_sim:
|
|
|
|
; 271 : }
|
|
; 272 : global_simdid = sn_get_simd_level_local();
|
|
|
|
0002f e8 00 00 00 00 call sn_get_simd_level_local
|
|
00034 48 89 05 00 00
|
|
00 00 mov QWORD PTR global_simdid, rax
|
|
|
|
; 273 : return global_simdid;
|
|
|
|
0003b 48 8b 05 00 00
|
|
00 00 mov rax, QWORD PTR global_simdid
|
|
$LN1@sn_get_sim:
|
|
|
|
; 274 : }
|
|
|
|
00042 48 8d a5 c8 00
|
|
00 00 lea rsp, QWORD PTR [rbp+200]
|
|
00049 5f pop rdi
|
|
0004a 5d pop rbp
|
|
0004b c3 ret 0
|
|
sn_get_simd_level_global ENDP
|
|
_TEXT ENDS
|
|
END
|