; 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 __1D9A7FA2_corecrt_math@h DB 01H __2E93F1C0_math@h DB 01H __26377312_m@solve@x86@c DB 01H msvcjmc ENDS CONST SEGMENT quality_threshold DD 0358637bdr ; 1e-06 ORG $+12 ?tiny_source@?1??float_kernel_quality_sse@@9@9 DD 0358637bdr ; 1e-06 ; `float_kernel_quality_sse'::`2'::tiny_source DD 0358637bdr ; 1e-06 DD 0358637bdr ; 1e-06 DD 0358637bdr ; 1e-06 CONST ENDS PUBLIC fabsf PUBLIC float_kernel_try_plu_sse PUBLIC float_kernel_quality_sse PUBLIC __JustMyCode_Default PUBLIC __real@00000000 PUBLIC __real@2b8cbccc PUBLIC __real@3f800000 EXTRN fabs: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 EXTRN _fltused:DWORD ; COMDAT pdata pdata SEGMENT $pdata$fabsf DD imagerel $LN3 DD imagerel $LN3+60 DD imagerel $unwind$fabsf pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_try_plu_sse DD imagerel $LN31 DD imagerel $LN31+1633 DD imagerel $unwind$float_kernel_try_plu_sse pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_quality_sse DD imagerel $LN40 DD imagerel $LN40+2560 DD imagerel $unwind$float_kernel_quality_sse pdata ENDS ; COMDAT __real@3f800000 CONST SEGMENT __real@3f800000 DD 03f800000r ; 1 CONST ENDS ; COMDAT __real@2b8cbccc CONST SEGMENT __real@2b8cbccc DD 02b8cbcccr ; 1e-12 CONST ENDS ; COMDAT __real@00000000 CONST SEGMENT __real@00000000 DD 000000000r ; 0 CONST 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 voltbl voltbl SEGMENT _volmd DW 03bH DW 09e7H voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_quality_sse DD 025054219H DD 01132318H DD 0700c017fH DD 0500bH DD imagerel __GSHandlerCheck DD 0be8H xdata ENDS ; COMDAT CONST CONST SEGMENT float_kernel_quality_sse$rtcName$0 DB 073H DB 065H DB 06cH DB 066H DB 05fH DB 064H DB 06fH DB 074H DB 05fH DB 073H DB 072H DB 063H DB 00H ORG $+3 float_kernel_quality_sse$rtcName$1 DB 063H DB 072H DB 06fH DB 073H DB 073H DB 05fH DB 064H DB 06fH DB 074H DB 05fH DB 073H DB 072H DB 063H DB 00H ORG $+2 float_kernel_quality_sse$rtcVarDesc DD 0470H DD 020H DQ FLAT:float_kernel_quality_sse$rtcName$1 DD 0120H DD 010H DQ FLAT:float_kernel_quality_sse$rtcName$0 ORG $+96 float_kernel_quality_sse$rtcFrameData DD 02H DD 00H DQ FLAT:float_kernel_quality_sse$rtcVarDesc CONST ENDS ; COMDAT voltbl voltbl SEGMENT _volmd DW 050H DW 0646H voltbl ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_try_plu_sse DD 02d065719H DD 011f2324H DD 0701800aaH DD 0d0165017H DD imagerel __GSHandlerCheck DD 04ecH DD 060H DD 040H xdata ENDS ; COMDAT CONST CONST SEGMENT float_kernel_try_plu_sse$rtcName$0 DB 061H DB 00H ORG $+14 float_kernel_try_plu_sse$rtcVarDesc DD 0e0H DD 040H DQ FLAT:float_kernel_try_plu_sse$rtcName$0 ORG $+48 float_kernel_try_plu_sse$rtcFrameData DD 01H DD 00H DQ FLAT:float_kernel_try_plu_sse$rtcVarDesc CONST ENDS ; COMDAT xdata xdata SEGMENT $unwind$fabsf DD 035051401H DD 010f3314H DD 07008001fH DD 05007H 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\m.solve.x86.c ; COMDAT float_kernel_quality_sse _TEXT SEGMENT tiny$ = 16 col0$ = 64 col1$ = 112 col2$ = 160 col3$ = 208 self_dot_src$ = 256 _p$5 = 304 _t$6 = 352 _p$7 = 400 _t$8 = 448 _p$9 = 496 _t$10 = 544 _p$11 = 592 _t$12 = 640 self_dot$ = 688 max$ = 736 _t$13 = 784 col_shuff_1$ = 832 col_shuff_2$ = 880 col_shuff_3$ = 928 min$ = 976 min0$ = 1024 quality$ = 1060 cross_dot_src$ = 1104 _p$14 = 1168 _t$15 = 1216 _p$16 = 1264 _t$17 = 1312 _p$18 = 1360 _t$19 = 1408 _p$20 = 1456 _t$21 = 1504 _p$22 = 1552 _t$23 = 1600 _p$24 = 1648 _t$25 = 1696 cross_dot_0$ = 1744 cross_dot_1$ = 1792 base_0$ = 1840 base_1$ = 1888 relation_0$ = 1936 relation_1$ = 1984 _t$26 = 2032 tv142 = 3012 tv164 = 3012 tv186 = 3012 tv208 = 3012 tv255 = 3012 tv286 = 3012 tv311 = 3012 tv368 = 3012 tv393 = 3012 tv418 = 3012 tv443 = 3012 tv514 = 3012 __$ArrayPad$ = 3016 right$ = 3056 ans$ = 3064 float_kernel_quality_sse PROC ; COMDAT ; 115 : { $LN40: 00000 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 00005 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000a 55 push rbp 0000b 57 push rdi 0000c 48 81 ec f8 0b 00 00 sub rsp, 3064 ; 00000bf8H 00013 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 00018 48 8d 7c 24 20 lea rdi, QWORD PTR [rsp+32] 0001d b9 06 02 00 00 mov ecx, 518 ; 00000206H 00022 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH 00027 f3 ab rep stosd 00029 48 8b 8c 24 18 0c 00 00 mov rcx, QWORD PTR [rsp+3096] 00031 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 00038 48 33 c5 xor rax, rbp 0003b 48 89 85 c8 0b 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax 00042 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__26377312_m@solve@x86@c 00049 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 0004e 90 npad 1 ; 116 : static const __m128 tiny_source = { .m128_f32 = { 1e-6f, 1e-6f, 1e-6f, 1e-6f } }; ; 117 : ; 118 : register __m128 tiny = _mm_load_ps(tiny_source.m128_f32); 0004f 0f 28 05 00 00 00 00 movaps xmm0, XMMWORD PTR ?tiny_source@?1??float_kernel_quality_sse@@9@9 00056 0f 29 45 10 movaps XMMWORD PTR tiny$[rbp], xmm0 ; 119 : ; 120 : register __m128 col0 = _mm_load_ps((float *)&right->f32_x[0]); 0005a b8 10 00 00 00 mov eax, 16 0005f 48 6b c0 00 imul rax, rax, 0 00063 48 8b 8d f0 0b 00 00 mov rcx, QWORD PTR right$[rbp] 0006a 48 03 c8 add rcx, rax 0006d 48 8b c1 mov rax, rcx 00070 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00073 0f 29 45 40 movaps XMMWORD PTR col0$[rbp], xmm0 ; 121 : register __m128 col1 = _mm_load_ps((float *)&right->f32_x[1]); 00077 b8 10 00 00 00 mov eax, 16 0007c 48 6b c0 01 imul rax, rax, 1 00080 48 8b 8d f0 0b 00 00 mov rcx, QWORD PTR right$[rbp] 00087 48 03 c8 add rcx, rax 0008a 48 8b c1 mov rax, rcx 0008d 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00090 0f 29 45 70 movaps XMMWORD PTR col1$[rbp], xmm0 ; 122 : register __m128 col2 = _mm_load_ps((float *)&right->f32_x[2]); 00094 b8 10 00 00 00 mov eax, 16 00099 48 6b c0 02 imul rax, rax, 2 0009d 48 8b 8d f0 0b 00 00 mov rcx, QWORD PTR right$[rbp] 000a4 48 03 c8 add rcx, rax 000a7 48 8b c1 mov rax, rcx 000aa 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000ad 0f 29 85 a0 00 00 00 movaps XMMWORD PTR col2$[rbp], xmm0 ; 123 : register __m128 col3 = _mm_load_ps((float *)&right->f32_x[3]); 000b4 b8 10 00 00 00 mov eax, 16 000b9 48 6b c0 03 imul rax, rax, 3 000bd 48 8b 8d f0 0b 00 00 mov rcx, QWORD PTR right$[rbp] 000c4 48 03 c8 add rcx, rax 000c7 48 8b c1 mov rax, rcx 000ca 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000cd 0f 29 85 d0 00 00 00 movaps XMMWORD PTR col3$[rbp], xmm0 ; 124 : ; 125 : __m128 self_dot_src = { 0 }; 000d4 48 8d 85 00 01 00 00 lea rax, QWORD PTR self_dot_src$[rbp] 000db 48 8b f8 mov rdi, rax 000de 33 c0 xor eax, eax 000e0 b9 10 00 00 00 mov ecx, 16 000e5 f3 aa rep stosb $LN4@float_kern: ; 126 : // try in reigister mix later ; 127 : DOT_F32_SSE(col0, col0, self_dot_src.m128_f32[0]); 000e7 0f 28 45 40 movaps xmm0, XMMWORD PTR col0$[rbp] 000eb 0f 59 45 40 mulps xmm0, XMMWORD PTR col0$[rbp] 000ef 0f 29 85 30 01 00 00 movaps XMMWORD PTR _p$5[rbp], xmm0 000f6 0f 28 85 30 01 00 00 movaps xmm0, XMMWORD PTR _p$5[rbp] 000fd 0f c6 85 30 01 00 00 b1 shufps xmm0, XMMWORD PTR _p$5[rbp], 177 ; 000000b1H 00105 0f 29 85 60 01 00 00 movaps XMMWORD PTR _t$6[rbp], xmm0 0010c 0f 28 85 30 01 00 00 movaps xmm0, XMMWORD PTR _p$5[rbp] 00113 0f 58 85 60 01 00 00 addps xmm0, XMMWORD PTR _t$6[rbp] 0011a 0f 29 85 30 01 00 00 movaps XMMWORD PTR _p$5[rbp], xmm0 00121 0f 28 85 30 01 00 00 movaps xmm0, XMMWORD PTR _p$5[rbp] 00128 0f 28 8d 60 01 00 00 movaps xmm1, XMMWORD PTR _t$6[rbp] 0012f 0f 12 c8 movhlps xmm1, xmm0 00132 0f 28 c1 movaps xmm0, xmm1 00135 0f 29 85 60 01 00 00 movaps XMMWORD PTR _t$6[rbp], xmm0 0013c 0f 28 85 30 01 00 00 movaps xmm0, XMMWORD PTR _p$5[rbp] 00143 f3 0f 58 85 60 01 00 00 addss xmm0, DWORD PTR _t$6[rbp] 0014b f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv142[rbp], xmm0 00153 b8 04 00 00 00 mov eax, 4 00158 48 6b c0 00 imul rax, rax, 0 0015c f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv142[rbp] 00164 f3 0f 11 84 05 00 01 00 00 movss DWORD PTR self_dot_src$[rbp+rax], xmm0 0016d 33 c0 xor eax, eax 0016f 85 c0 test eax, eax 00171 0f 85 70 ff ff ff jne $LN4@float_kern $LN7@float_kern: ; 128 : DOT_F32_SSE(col1, col1, self_dot_src.m128_f32[1]); 00177 0f 28 45 70 movaps xmm0, XMMWORD PTR col1$[rbp] 0017b 0f 59 45 70 mulps xmm0, XMMWORD PTR col1$[rbp] 0017f 0f 29 85 90 01 00 00 movaps XMMWORD PTR _p$7[rbp], xmm0 00186 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR _p$7[rbp] 0018d 0f c6 85 90 01 00 00 b1 shufps xmm0, XMMWORD PTR _p$7[rbp], 177 ; 000000b1H 00195 0f 29 85 c0 01 00 00 movaps XMMWORD PTR _t$8[rbp], xmm0 0019c 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR _p$7[rbp] 001a3 0f 58 85 c0 01 00 00 addps xmm0, XMMWORD PTR _t$8[rbp] 001aa 0f 29 85 90 01 00 00 movaps XMMWORD PTR _p$7[rbp], xmm0 001b1 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR _p$7[rbp] 001b8 0f 28 8d c0 01 00 00 movaps xmm1, XMMWORD PTR _t$8[rbp] 001bf 0f 12 c8 movhlps xmm1, xmm0 001c2 0f 28 c1 movaps xmm0, xmm1 001c5 0f 29 85 c0 01 00 00 movaps XMMWORD PTR _t$8[rbp], xmm0 001cc 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR _p$7[rbp] 001d3 f3 0f 58 85 c0 01 00 00 addss xmm0, DWORD PTR _t$8[rbp] 001db f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv164[rbp], xmm0 001e3 b8 04 00 00 00 mov eax, 4 001e8 48 6b c0 01 imul rax, rax, 1 001ec f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv164[rbp] 001f4 f3 0f 11 84 05 00 01 00 00 movss DWORD PTR self_dot_src$[rbp+rax], xmm0 001fd 33 c0 xor eax, eax 001ff 85 c0 test eax, eax 00201 0f 85 70 ff ff ff jne $LN7@float_kern $LN10@float_kern: ; 129 : DOT_F32_SSE(col2, col2, self_dot_src.m128_f32[2]); 00207 0f 28 85 a0 00 00 00 movaps xmm0, XMMWORD PTR col2$[rbp] 0020e 0f 59 85 a0 00 00 00 mulps xmm0, XMMWORD PTR col2$[rbp] 00215 0f 29 85 f0 01 00 00 movaps XMMWORD PTR _p$9[rbp], xmm0 0021c 0f 28 85 f0 01 00 00 movaps xmm0, XMMWORD PTR _p$9[rbp] 00223 0f c6 85 f0 01 00 00 b1 shufps xmm0, XMMWORD PTR _p$9[rbp], 177 ; 000000b1H 0022b 0f 29 85 20 02 00 00 movaps XMMWORD PTR _t$10[rbp], xmm0 00232 0f 28 85 f0 01 00 00 movaps xmm0, XMMWORD PTR _p$9[rbp] 00239 0f 58 85 20 02 00 00 addps xmm0, XMMWORD PTR _t$10[rbp] 00240 0f 29 85 f0 01 00 00 movaps XMMWORD PTR _p$9[rbp], xmm0 00247 0f 28 85 f0 01 00 00 movaps xmm0, XMMWORD PTR _p$9[rbp] 0024e 0f 28 8d 20 02 00 00 movaps xmm1, XMMWORD PTR _t$10[rbp] 00255 0f 12 c8 movhlps xmm1, xmm0 00258 0f 28 c1 movaps xmm0, xmm1 0025b 0f 29 85 20 02 00 00 movaps XMMWORD PTR _t$10[rbp], xmm0 00262 0f 28 85 f0 01 00 00 movaps xmm0, XMMWORD PTR _p$9[rbp] 00269 f3 0f 58 85 20 02 00 00 addss xmm0, DWORD PTR _t$10[rbp] 00271 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv186[rbp], xmm0 00279 b8 04 00 00 00 mov eax, 4 0027e 48 6b c0 02 imul rax, rax, 2 00282 f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv186[rbp] 0028a f3 0f 11 84 05 00 01 00 00 movss DWORD PTR self_dot_src$[rbp+rax], xmm0 00293 33 c0 xor eax, eax 00295 85 c0 test eax, eax 00297 0f 85 6a ff ff ff jne $LN10@float_kern $LN13@float_kern: ; 130 : DOT_F32_SSE(col3, col3, self_dot_src.m128_f32[3]); 0029d 0f 28 85 d0 00 00 00 movaps xmm0, XMMWORD PTR col3$[rbp] 002a4 0f 59 85 d0 00 00 00 mulps xmm0, XMMWORD PTR col3$[rbp] 002ab 0f 29 85 50 02 00 00 movaps XMMWORD PTR _p$11[rbp], xmm0 002b2 0f 28 85 50 02 00 00 movaps xmm0, XMMWORD PTR _p$11[rbp] 002b9 0f c6 85 50 02 00 00 b1 shufps xmm0, XMMWORD PTR _p$11[rbp], 177 ; 000000b1H 002c1 0f 29 85 80 02 00 00 movaps XMMWORD PTR _t$12[rbp], xmm0 002c8 0f 28 85 50 02 00 00 movaps xmm0, XMMWORD PTR _p$11[rbp] 002cf 0f 58 85 80 02 00 00 addps xmm0, XMMWORD PTR _t$12[rbp] 002d6 0f 29 85 50 02 00 00 movaps XMMWORD PTR _p$11[rbp], xmm0 002dd 0f 28 85 50 02 00 00 movaps xmm0, XMMWORD PTR _p$11[rbp] 002e4 0f 28 8d 80 02 00 00 movaps xmm1, XMMWORD PTR _t$12[rbp] 002eb 0f 12 c8 movhlps xmm1, xmm0 002ee 0f 28 c1 movaps xmm0, xmm1 002f1 0f 29 85 80 02 00 00 movaps XMMWORD PTR _t$12[rbp], xmm0 002f8 0f 28 85 50 02 00 00 movaps xmm0, XMMWORD PTR _p$11[rbp] 002ff f3 0f 58 85 80 02 00 00 addss xmm0, DWORD PTR _t$12[rbp] 00307 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv208[rbp], xmm0 0030f b8 04 00 00 00 mov eax, 4 00314 48 6b c0 03 imul rax, rax, 3 00318 f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv208[rbp] 00320 f3 0f 11 84 05 00 01 00 00 movss DWORD PTR self_dot_src$[rbp+rax], xmm0 00329 33 c0 xor eax, eax 0032b 85 c0 test eax, eax 0032d 0f 85 6a ff ff ff jne $LN13@float_kern ; 131 : ; 132 : register __m128 self_dot = _mm_load_ps(self_dot_src.m128_f32); 00333 0f 28 85 00 01 00 00 movaps xmm0, XMMWORD PTR self_dot_src$[rbp] 0033a 0f 29 85 b0 02 00 00 movaps XMMWORD PTR self_dot$[rbp], xmm0 $LN16@float_kern: ; 133 : ; 134 : register __m128 max; ; 135 : FIND_MAX_F32_SSE(self_dot, max); 00341 0f 28 85 b0 02 00 00 movaps xmm0, XMMWORD PTR self_dot$[rbp] 00348 0f 28 8d b0 02 00 00 movaps xmm1, XMMWORD PTR self_dot$[rbp] 0034f 0f 12 c8 movhlps xmm1, xmm0 00352 0f 28 c1 movaps xmm0, xmm1 00355 0f 29 85 10 03 00 00 movaps XMMWORD PTR _t$13[rbp], xmm0 0035c 0f 28 85 b0 02 00 00 movaps xmm0, XMMWORD PTR self_dot$[rbp] 00363 0f 5f 85 10 03 00 00 maxps xmm0, XMMWORD PTR _t$13[rbp] 0036a 0f 29 85 b0 02 00 00 movaps XMMWORD PTR self_dot$[rbp], xmm0 00371 0f 28 85 b0 02 00 00 movaps xmm0, XMMWORD PTR self_dot$[rbp] 00378 0f c6 85 b0 02 00 00 b1 shufps xmm0, XMMWORD PTR self_dot$[rbp], 177 ; 000000b1H 00380 0f 29 85 10 03 00 00 movaps XMMWORD PTR _t$13[rbp], xmm0 00387 0f 28 85 b0 02 00 00 movaps xmm0, XMMWORD PTR self_dot$[rbp] 0038e 0f 5f 85 10 03 00 00 maxps xmm0, XMMWORD PTR _t$13[rbp] 00395 0f 29 85 e0 02 00 00 movaps XMMWORD PTR max$[rbp], xmm0 0039c 33 c0 xor eax, eax 0039e 85 c0 test eax, eax 003a0 75 9f jne SHORT $LN16@float_kern ; 136 : //float norm = _mm_cvtss_f32(max); ; 137 : ; 138 : // min on cross ; 139 : register __m128 col_shuff_1 = _mm_shuffle_ps(col1, col1, _MM_SHUFFLE(0, 3, 2, 1)); 003a2 0f 28 45 70 movaps xmm0, XMMWORD PTR col1$[rbp] 003a6 0f c6 45 70 39 shufps xmm0, XMMWORD PTR col1$[rbp], 57 ; 00000039H 003ab 0f 29 85 40 03 00 00 movaps XMMWORD PTR col_shuff_1$[rbp], xmm0 ; 140 : register __m128 col_shuff_2 = _mm_shuffle_ps(col2, col2, _MM_SHUFFLE(1, 0, 3, 2)); 003b2 0f 28 85 a0 00 00 00 movaps xmm0, XMMWORD PTR col2$[rbp] 003b9 0f c6 85 a0 00 00 00 4e shufps xmm0, XMMWORD PTR col2$[rbp], 78 ; 0000004eH 003c1 0f 29 85 70 03 00 00 movaps XMMWORD PTR col_shuff_2$[rbp], xmm0 ; 141 : register __m128 col_shuff_3 = _mm_shuffle_ps(col3, col3, _MM_SHUFFLE(2, 1, 0, 3)); 003c8 0f 28 85 d0 00 00 00 movaps xmm0, XMMWORD PTR col3$[rbp] 003cf 0f c6 85 d0 00 00 00 93 shufps xmm0, XMMWORD PTR col3$[rbp], 147 ; 00000093H 003d7 0f 29 85 a0 03 00 00 movaps XMMWORD PTR col_shuff_3$[rbp], xmm0 ; 142 : register __m128 min = _mm_min_ps(col0, col_shuff_1); 003de 0f 28 45 40 movaps xmm0, XMMWORD PTR col0$[rbp] 003e2 0f 5d 85 40 03 00 00 minps xmm0, XMMWORD PTR col_shuff_1$[rbp] 003e9 0f 29 85 d0 03 00 00 movaps XMMWORD PTR min$[rbp], xmm0 ; 143 : register __m128 min0 = _mm_min_ps(col_shuff_2, col_shuff_3); 003f0 0f 28 85 70 03 00 00 movaps xmm0, XMMWORD PTR col_shuff_2$[rbp] 003f7 0f 5d 85 a0 03 00 00 minps xmm0, XMMWORD PTR col_shuff_3$[rbp] 003fe 0f 29 85 00 04 00 00 movaps XMMWORD PTR min0$[rbp], xmm0 ; 144 : min = _mm_min_ps(min, min0); 00405 0f 28 85 d0 03 00 00 movaps xmm0, XMMWORD PTR min$[rbp] 0040c 0f 5d 85 00 04 00 00 minps xmm0, XMMWORD PTR min0$[rbp] 00413 0f 29 85 d0 03 00 00 movaps XMMWORD PTR min$[rbp], xmm0 ; 145 : ; 146 : float quality = _mm_cvtss_f32(_mm_div_ps(min, _mm_add_ps(max, tiny))); 0041a 0f 28 85 e0 02 00 00 movaps xmm0, XMMWORD PTR max$[rbp] 00421 0f 58 45 10 addps xmm0, XMMWORD PTR tiny$[rbp] 00425 0f 28 8d d0 03 00 00 movaps xmm1, XMMWORD PTR min$[rbp] 0042c 0f 5e c8 divps xmm1, xmm0 0042f 0f 28 c1 movaps xmm0, xmm1 00432 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv255[rbp], xmm0 0043a f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv255[rbp] 00442 f3 0f 11 85 24 04 00 00 movss DWORD PTR quality$[rbp], xmm0 ; 147 : ans->f32_x[0].m128_f32[0] = quality; 0044a b8 10 00 00 00 mov eax, 16 0044f 48 6b c0 00 imul rax, rax, 0 00453 48 8b 8d f8 0b 00 00 mov rcx, QWORD PTR ans$[rbp] 0045a 48 03 c8 add rcx, rax 0045d 48 8b c1 mov rax, rcx 00460 b9 04 00 00 00 mov ecx, 4 00465 48 6b c9 00 imul rcx, rcx, 0 00469 f3 0f 10 85 24 04 00 00 movss xmm0, DWORD PTR quality$[rbp] 00471 f3 0f 11 04 08 movss DWORD PTR [rax+rcx], xmm0 ; 148 : if (quality < quality_threshold) { 00476 f3 0f 10 05 00 00 00 00 movss xmm0, DWORD PTR quality_threshold 0047e 0f 2f 85 24 04 00 00 comiss xmm0, DWORD PTR quality$[rbp] 00485 76 05 jbe SHORT $LN38@float_kern ; 149 : return; 00487 e9 4b 05 00 00 jmp $LN1@float_kern $LN38@float_kern: $LN19@float_kern: ; 150 : } ; 151 : ; 152 : __m128 cross_dot_src[2]; ; 153 : DOT_F32_SSE(col0, col1, cross_dot_src[0].m128_f32[0]); 0048c 0f 28 45 40 movaps xmm0, XMMWORD PTR col0$[rbp] 00490 0f 59 45 70 mulps xmm0, XMMWORD PTR col1$[rbp] 00494 0f 29 85 90 04 00 00 movaps XMMWORD PTR _p$14[rbp], xmm0 0049b 0f 28 85 90 04 00 00 movaps xmm0, XMMWORD PTR _p$14[rbp] 004a2 0f c6 85 90 04 00 00 b1 shufps xmm0, XMMWORD PTR _p$14[rbp], 177 ; 000000b1H 004aa 0f 29 85 c0 04 00 00 movaps XMMWORD PTR _t$15[rbp], xmm0 004b1 0f 28 85 90 04 00 00 movaps xmm0, XMMWORD PTR _p$14[rbp] 004b8 0f 58 85 c0 04 00 00 addps xmm0, XMMWORD PTR _t$15[rbp] 004bf 0f 29 85 90 04 00 00 movaps XMMWORD PTR _p$14[rbp], xmm0 004c6 0f 28 85 90 04 00 00 movaps xmm0, XMMWORD PTR _p$14[rbp] 004cd 0f 28 8d c0 04 00 00 movaps xmm1, XMMWORD PTR _t$15[rbp] 004d4 0f 12 c8 movhlps xmm1, xmm0 004d7 0f 28 c1 movaps xmm0, xmm1 004da 0f 29 85 c0 04 00 00 movaps XMMWORD PTR _t$15[rbp], xmm0 004e1 0f 28 85 90 04 00 00 movaps xmm0, XMMWORD PTR _p$14[rbp] 004e8 f3 0f 58 85 c0 04 00 00 addss xmm0, DWORD PTR _t$15[rbp] 004f0 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv286[rbp], xmm0 004f8 b8 10 00 00 00 mov eax, 16 004fd 48 6b c0 00 imul rax, rax, 0 00501 48 8d 84 05 50 04 00 00 lea rax, QWORD PTR cross_dot_src$[rbp+rax] 00509 b9 04 00 00 00 mov ecx, 4 0050e 48 6b c9 00 imul rcx, rcx, 0 00512 f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv286[rbp] 0051a f3 0f 11 04 08 movss DWORD PTR [rax+rcx], xmm0 0051f 33 c0 xor eax, eax 00521 85 c0 test eax, eax 00523 0f 85 63 ff ff ff jne $LN19@float_kern $LN22@float_kern: ; 154 : DOT_F32_SSE(col0, col2, cross_dot_src[0].m128_f32[1]); 00529 0f 28 45 40 movaps xmm0, XMMWORD PTR col0$[rbp] 0052d 0f 59 85 a0 00 00 00 mulps xmm0, XMMWORD PTR col2$[rbp] 00534 0f 29 85 f0 04 00 00 movaps XMMWORD PTR _p$16[rbp], xmm0 0053b 0f 28 85 f0 04 00 00 movaps xmm0, XMMWORD PTR _p$16[rbp] 00542 0f c6 85 f0 04 00 00 b1 shufps xmm0, XMMWORD PTR _p$16[rbp], 177 ; 000000b1H 0054a 0f 29 85 20 05 00 00 movaps XMMWORD PTR _t$17[rbp], xmm0 00551 0f 28 85 f0 04 00 00 movaps xmm0, XMMWORD PTR _p$16[rbp] 00558 0f 58 85 20 05 00 00 addps xmm0, XMMWORD PTR _t$17[rbp] 0055f 0f 29 85 f0 04 00 00 movaps XMMWORD PTR _p$16[rbp], xmm0 00566 0f 28 85 f0 04 00 00 movaps xmm0, XMMWORD PTR _p$16[rbp] 0056d 0f 28 8d 20 05 00 00 movaps xmm1, XMMWORD PTR _t$17[rbp] 00574 0f 12 c8 movhlps xmm1, xmm0 00577 0f 28 c1 movaps xmm0, xmm1 0057a 0f 29 85 20 05 00 00 movaps XMMWORD PTR _t$17[rbp], xmm0 00581 0f 28 85 f0 04 00 00 movaps xmm0, XMMWORD PTR _p$16[rbp] 00588 f3 0f 58 85 20 05 00 00 addss xmm0, DWORD PTR _t$17[rbp] 00590 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv311[rbp], xmm0 00598 b8 10 00 00 00 mov eax, 16 0059d 48 6b c0 00 imul rax, rax, 0 005a1 48 8d 84 05 50 04 00 00 lea rax, QWORD PTR cross_dot_src$[rbp+rax] 005a9 b9 04 00 00 00 mov ecx, 4 005ae 48 6b c9 01 imul rcx, rcx, 1 005b2 f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv311[rbp] 005ba f3 0f 11 04 08 movss DWORD PTR [rax+rcx], xmm0 005bf 33 c0 xor eax, eax 005c1 85 c0 test eax, eax 005c3 0f 85 60 ff ff ff jne $LN22@float_kern $LN25@float_kern: ; 155 : DOT_F32_SSE(col0, col3, cross_dot_src[0].m128_f32[2]); 005c9 0f 28 45 40 movaps xmm0, XMMWORD PTR col0$[rbp] 005cd 0f 59 85 d0 00 00 00 mulps xmm0, XMMWORD PTR col3$[rbp] 005d4 0f 29 85 50 05 00 00 movaps XMMWORD PTR _p$18[rbp], xmm0 005db 0f 28 85 50 05 00 00 movaps xmm0, XMMWORD PTR _p$18[rbp] 005e2 0f c6 85 50 05 00 00 b1 shufps xmm0, XMMWORD PTR _p$18[rbp], 177 ; 000000b1H 005ea 0f 29 85 80 05 00 00 movaps XMMWORD PTR _t$19[rbp], xmm0 005f1 0f 28 85 50 05 00 00 movaps xmm0, XMMWORD PTR _p$18[rbp] 005f8 0f 58 85 80 05 00 00 addps xmm0, XMMWORD PTR _t$19[rbp] 005ff 0f 29 85 50 05 00 00 movaps XMMWORD PTR _p$18[rbp], xmm0 00606 0f 28 85 50 05 00 00 movaps xmm0, XMMWORD PTR _p$18[rbp] 0060d 0f 28 8d 80 05 00 00 movaps xmm1, XMMWORD PTR _t$19[rbp] 00614 0f 12 c8 movhlps xmm1, xmm0 00617 0f 28 c1 movaps xmm0, xmm1 0061a 0f 29 85 80 05 00 00 movaps XMMWORD PTR _t$19[rbp], xmm0 00621 0f 28 85 50 05 00 00 movaps xmm0, XMMWORD PTR _p$18[rbp] 00628 f3 0f 58 85 80 05 00 00 addss xmm0, DWORD PTR _t$19[rbp] 00630 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv368[rbp], xmm0 00638 b8 10 00 00 00 mov eax, 16 0063d 48 6b c0 00 imul rax, rax, 0 00641 48 8d 84 05 50 04 00 00 lea rax, QWORD PTR cross_dot_src$[rbp+rax] 00649 b9 04 00 00 00 mov ecx, 4 0064e 48 6b c9 02 imul rcx, rcx, 2 00652 f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv368[rbp] 0065a f3 0f 11 04 08 movss DWORD PTR [rax+rcx], xmm0 0065f 33 c0 xor eax, eax 00661 85 c0 test eax, eax 00663 0f 85 60 ff ff ff jne $LN25@float_kern $LN28@float_kern: ; 156 : DOT_F32_SSE(col1, col2, cross_dot_src[0].m128_f32[3]); 00669 0f 28 45 70 movaps xmm0, XMMWORD PTR col1$[rbp] 0066d 0f 59 85 a0 00 00 00 mulps xmm0, XMMWORD PTR col2$[rbp] 00674 0f 29 85 b0 05 00 00 movaps XMMWORD PTR _p$20[rbp], xmm0 0067b 0f 28 85 b0 05 00 00 movaps xmm0, XMMWORD PTR _p$20[rbp] 00682 0f c6 85 b0 05 00 00 b1 shufps xmm0, XMMWORD PTR _p$20[rbp], 177 ; 000000b1H 0068a 0f 29 85 e0 05 00 00 movaps XMMWORD PTR _t$21[rbp], xmm0 00691 0f 28 85 b0 05 00 00 movaps xmm0, XMMWORD PTR _p$20[rbp] 00698 0f 58 85 e0 05 00 00 addps xmm0, XMMWORD PTR _t$21[rbp] 0069f 0f 29 85 b0 05 00 00 movaps XMMWORD PTR _p$20[rbp], xmm0 006a6 0f 28 85 b0 05 00 00 movaps xmm0, XMMWORD PTR _p$20[rbp] 006ad 0f 28 8d e0 05 00 00 movaps xmm1, XMMWORD PTR _t$21[rbp] 006b4 0f 12 c8 movhlps xmm1, xmm0 006b7 0f 28 c1 movaps xmm0, xmm1 006ba 0f 29 85 e0 05 00 00 movaps XMMWORD PTR _t$21[rbp], xmm0 006c1 0f 28 85 b0 05 00 00 movaps xmm0, XMMWORD PTR _p$20[rbp] 006c8 f3 0f 58 85 e0 05 00 00 addss xmm0, DWORD PTR _t$21[rbp] 006d0 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv393[rbp], xmm0 006d8 b8 10 00 00 00 mov eax, 16 006dd 48 6b c0 00 imul rax, rax, 0 006e1 48 8d 84 05 50 04 00 00 lea rax, QWORD PTR cross_dot_src$[rbp+rax] 006e9 b9 04 00 00 00 mov ecx, 4 006ee 48 6b c9 03 imul rcx, rcx, 3 006f2 f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv393[rbp] 006fa f3 0f 11 04 08 movss DWORD PTR [rax+rcx], xmm0 006ff 33 c0 xor eax, eax 00701 85 c0 test eax, eax 00703 0f 85 60 ff ff ff jne $LN28@float_kern $LN31@float_kern: ; 157 : DOT_F32_SSE(col1, col3, cross_dot_src[1].m128_f32[0]); 00709 0f 28 45 70 movaps xmm0, XMMWORD PTR col1$[rbp] 0070d 0f 59 85 d0 00 00 00 mulps xmm0, XMMWORD PTR col3$[rbp] 00714 0f 29 85 10 06 00 00 movaps XMMWORD PTR _p$22[rbp], xmm0 0071b 0f 28 85 10 06 00 00 movaps xmm0, XMMWORD PTR _p$22[rbp] 00722 0f c6 85 10 06 00 00 b1 shufps xmm0, XMMWORD PTR _p$22[rbp], 177 ; 000000b1H 0072a 0f 29 85 40 06 00 00 movaps XMMWORD PTR _t$23[rbp], xmm0 00731 0f 28 85 10 06 00 00 movaps xmm0, XMMWORD PTR _p$22[rbp] 00738 0f 58 85 40 06 00 00 addps xmm0, XMMWORD PTR _t$23[rbp] 0073f 0f 29 85 10 06 00 00 movaps XMMWORD PTR _p$22[rbp], xmm0 00746 0f 28 85 10 06 00 00 movaps xmm0, XMMWORD PTR _p$22[rbp] 0074d 0f 28 8d 40 06 00 00 movaps xmm1, XMMWORD PTR _t$23[rbp] 00754 0f 12 c8 movhlps xmm1, xmm0 00757 0f 28 c1 movaps xmm0, xmm1 0075a 0f 29 85 40 06 00 00 movaps XMMWORD PTR _t$23[rbp], xmm0 00761 0f 28 85 10 06 00 00 movaps xmm0, XMMWORD PTR _p$22[rbp] 00768 f3 0f 58 85 40 06 00 00 addss xmm0, DWORD PTR _t$23[rbp] 00770 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv418[rbp], xmm0 00778 b8 10 00 00 00 mov eax, 16 0077d 48 6b c0 01 imul rax, rax, 1 00781 48 8d 84 05 50 04 00 00 lea rax, QWORD PTR cross_dot_src$[rbp+rax] 00789 b9 04 00 00 00 mov ecx, 4 0078e 48 6b c9 00 imul rcx, rcx, 0 00792 f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv418[rbp] 0079a f3 0f 11 04 08 movss DWORD PTR [rax+rcx], xmm0 0079f 33 c0 xor eax, eax 007a1 85 c0 test eax, eax 007a3 0f 85 60 ff ff ff jne $LN31@float_kern $LN34@float_kern: ; 158 : DOT_F32_SSE(col2, col3, cross_dot_src[1].m128_f32[1]); 007a9 0f 28 85 a0 00 00 00 movaps xmm0, XMMWORD PTR col2$[rbp] 007b0 0f 59 85 d0 00 00 00 mulps xmm0, XMMWORD PTR col3$[rbp] 007b7 0f 29 85 70 06 00 00 movaps XMMWORD PTR _p$24[rbp], xmm0 007be 0f 28 85 70 06 00 00 movaps xmm0, XMMWORD PTR _p$24[rbp] 007c5 0f c6 85 70 06 00 00 b1 shufps xmm0, XMMWORD PTR _p$24[rbp], 177 ; 000000b1H 007cd 0f 29 85 a0 06 00 00 movaps XMMWORD PTR _t$25[rbp], xmm0 007d4 0f 28 85 70 06 00 00 movaps xmm0, XMMWORD PTR _p$24[rbp] 007db 0f 58 85 a0 06 00 00 addps xmm0, XMMWORD PTR _t$25[rbp] 007e2 0f 29 85 70 06 00 00 movaps XMMWORD PTR _p$24[rbp], xmm0 007e9 0f 28 85 70 06 00 00 movaps xmm0, XMMWORD PTR _p$24[rbp] 007f0 0f 28 8d a0 06 00 00 movaps xmm1, XMMWORD PTR _t$25[rbp] 007f7 0f 12 c8 movhlps xmm1, xmm0 007fa 0f 28 c1 movaps xmm0, xmm1 007fd 0f 29 85 a0 06 00 00 movaps XMMWORD PTR _t$25[rbp], xmm0 00804 0f 28 85 70 06 00 00 movaps xmm0, XMMWORD PTR _p$24[rbp] 0080b f3 0f 58 85 a0 06 00 00 addss xmm0, DWORD PTR _t$25[rbp] 00813 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv443[rbp], xmm0 0081b b8 10 00 00 00 mov eax, 16 00820 48 6b c0 01 imul rax, rax, 1 00824 48 8d 84 05 50 04 00 00 lea rax, QWORD PTR cross_dot_src$[rbp+rax] 0082c b9 04 00 00 00 mov ecx, 4 00831 48 6b c9 01 imul rcx, rcx, 1 00835 f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv443[rbp] 0083d f3 0f 11 04 08 movss DWORD PTR [rax+rcx], xmm0 00842 33 c0 xor eax, eax 00844 85 c0 test eax, eax 00846 0f 85 5d ff ff ff jne $LN34@float_kern ; 159 : ; 160 : register __m128 cross_dot_0 = _mm_load_ps(cross_dot_src[0].m128_f32); 0084c b8 10 00 00 00 mov eax, 16 00851 48 6b c0 00 imul rax, rax, 0 00855 48 8d 84 05 50 04 00 00 lea rax, QWORD PTR cross_dot_src$[rbp+rax] 0085d 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00860 0f 29 85 d0 06 00 00 movaps XMMWORD PTR cross_dot_0$[rbp], xmm0 ; 161 : register __m128 cross_dot_1 = _mm_load_ps(cross_dot_src[1].m128_f32); 00867 b8 10 00 00 00 mov eax, 16 0086c 48 6b c0 01 imul rax, rax, 1 00870 48 8d 84 05 50 04 00 00 lea rax, QWORD PTR cross_dot_src$[rbp+rax] 00878 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0087b 0f 29 85 00 07 00 00 movaps XMMWORD PTR cross_dot_1$[rbp], xmm0 ; 162 : ; 163 : register __m128 base_0 = _mm_shuffle_ps(self_dot, self_dot, _MM_SHUFFLE(1, 0, 0, 0)); 00882 0f 28 85 b0 02 00 00 movaps xmm0, XMMWORD PTR self_dot$[rbp] 00889 0f c6 85 b0 02 00 00 40 shufps xmm0, XMMWORD PTR self_dot$[rbp], 64 ; 00000040H 00891 0f 29 85 30 07 00 00 movaps XMMWORD PTR base_0$[rbp], xmm0 ; 164 : register __m128 base_1 = _mm_shuffle_ps(self_dot, self_dot, _MM_SHUFFLE(3, 3, 2, 1)); 00898 0f 28 85 b0 02 00 00 movaps xmm0, XMMWORD PTR self_dot$[rbp] 0089f 0f c6 85 b0 02 00 00 f9 shufps xmm0, XMMWORD PTR self_dot$[rbp], 249 ; 000000f9H 008a7 0f 29 85 60 07 00 00 movaps XMMWORD PTR base_1$[rbp], xmm0 ; 165 : ; 166 : register __m128 relation_0 = 008ae 0f 28 85 30 07 00 00 movaps xmm0, XMMWORD PTR base_0$[rbp] 008b5 0f 59 85 60 07 00 00 mulps xmm0, XMMWORD PTR base_1$[rbp] 008bc 0f 58 45 10 addps xmm0, XMMWORD PTR tiny$[rbp] 008c0 0f 28 8d d0 06 00 00 movaps xmm1, XMMWORD PTR cross_dot_0$[rbp] 008c7 0f 5e c8 divps xmm1, xmm0 008ca 0f 28 c1 movaps xmm0, xmm1 008cd 0f 29 85 90 07 00 00 movaps XMMWORD PTR relation_0$[rbp], xmm0 ; 167 : _mm_div_ps(cross_dot_0, _mm_add_ps(_mm_mul_ps(base_0, base_1), tiny)); ; 168 : ; 169 : base_0 = _mm_shuffle_ps(self_dot, self_dot, _MM_SHUFFLE(2, 3, 2, 1)); 008d4 0f 28 85 b0 02 00 00 movaps xmm0, XMMWORD PTR self_dot$[rbp] 008db 0f c6 85 b0 02 00 00 b9 shufps xmm0, XMMWORD PTR self_dot$[rbp], 185 ; 000000b9H 008e3 0f 29 85 30 07 00 00 movaps XMMWORD PTR base_0$[rbp], xmm0 ; 170 : base_1 = _mm_shuffle_ps(self_dot, self_dot, _MM_SHUFFLE(3, 3, 3, 3)); 008ea 0f 28 85 b0 02 00 00 movaps xmm0, XMMWORD PTR self_dot$[rbp] 008f1 0f c6 85 b0 02 00 00 ff shufps xmm0, XMMWORD PTR self_dot$[rbp], 255 ; 000000ffH 008f9 0f 29 85 60 07 00 00 movaps XMMWORD PTR base_1$[rbp], xmm0 ; 171 : ; 172 : register __m128 relation_1 = 00900 0f 28 85 30 07 00 00 movaps xmm0, XMMWORD PTR base_0$[rbp] 00907 0f 59 85 60 07 00 00 mulps xmm0, XMMWORD PTR base_1$[rbp] 0090e 0f 58 45 10 addps xmm0, XMMWORD PTR tiny$[rbp] 00912 0f 28 8d d0 06 00 00 movaps xmm1, XMMWORD PTR cross_dot_0$[rbp] 00919 0f 5e c8 divps xmm1, xmm0 0091c 0f 28 c1 movaps xmm0, xmm1 0091f 0f 29 85 c0 07 00 00 movaps XMMWORD PTR relation_1$[rbp], xmm0 ; 173 : _mm_div_ps(cross_dot_0, _mm_add_ps(_mm_mul_ps(base_0, base_1), tiny)); ; 174 : ; 175 : relation_0 = _mm_max_ps(relation_0, relation_1); 00926 0f 28 85 90 07 00 00 movaps xmm0, XMMWORD PTR relation_0$[rbp] 0092d 0f 5f 85 c0 07 00 00 maxps xmm0, XMMWORD PTR relation_1$[rbp] 00934 0f 29 85 90 07 00 00 movaps XMMWORD PTR relation_0$[rbp], xmm0 $LN37@float_kern: ; 176 : FIND_MAX_F32_SSE(relation_0, relation_0); 0093b 0f 28 85 90 07 00 00 movaps xmm0, XMMWORD PTR relation_0$[rbp] 00942 0f 28 8d 90 07 00 00 movaps xmm1, XMMWORD PTR relation_0$[rbp] 00949 0f 12 c8 movhlps xmm1, xmm0 0094c 0f 28 c1 movaps xmm0, xmm1 0094f 0f 29 85 f0 07 00 00 movaps XMMWORD PTR _t$26[rbp], xmm0 00956 0f 28 85 90 07 00 00 movaps xmm0, XMMWORD PTR relation_0$[rbp] 0095d 0f 5f 85 f0 07 00 00 maxps xmm0, XMMWORD PTR _t$26[rbp] 00964 0f 29 85 90 07 00 00 movaps XMMWORD PTR relation_0$[rbp], xmm0 0096b 0f 28 85 90 07 00 00 movaps xmm0, XMMWORD PTR relation_0$[rbp] 00972 0f c6 85 90 07 00 00 b1 shufps xmm0, XMMWORD PTR relation_0$[rbp], 177 ; 000000b1H 0097a 0f 29 85 f0 07 00 00 movaps XMMWORD PTR _t$26[rbp], xmm0 00981 0f 28 85 90 07 00 00 movaps xmm0, XMMWORD PTR relation_0$[rbp] 00988 0f 5f 85 f0 07 00 00 maxps xmm0, XMMWORD PTR _t$26[rbp] 0098f 0f 29 85 90 07 00 00 movaps XMMWORD PTR relation_0$[rbp], xmm0 00996 33 c0 xor eax, eax 00998 85 c0 test eax, eax 0099a 75 9f jne SHORT $LN37@float_kern ; 177 : ans->f32_x[0].m128_f32[1] = _mm_cvtss_f32(relation_0); 0099c 0f 28 85 90 07 00 00 movaps xmm0, XMMWORD PTR relation_0$[rbp] 009a3 f3 0f 11 85 c4 0b 00 00 movss DWORD PTR tv514[rbp], xmm0 009ab b8 10 00 00 00 mov eax, 16 009b0 48 6b c0 00 imul rax, rax, 0 009b4 48 8b 8d f8 0b 00 00 mov rcx, QWORD PTR ans$[rbp] 009bb 48 03 c8 add rcx, rax 009be 48 8b c1 mov rax, rcx 009c1 b9 04 00 00 00 mov ecx, 4 009c6 48 6b c9 01 imul rcx, rcx, 1 009ca f3 0f 10 85 c4 0b 00 00 movss xmm0, DWORD PTR tv514[rbp] 009d2 f3 0f 11 04 08 movss DWORD PTR [rax+rcx], xmm0 $LN1@float_kern: ; 178 : } 009d7 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] 009db 48 8d 15 00 00 00 00 lea rdx, OFFSET FLAT:float_kernel_quality_sse$rtcFrameData 009e2 e8 00 00 00 00 call _RTC_CheckStackVars 009e7 48 8b 8d c8 0b 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] 009ee 48 33 cd xor rcx, rbp 009f1 e8 00 00 00 00 call __security_check_cookie 009f6 48 8d a5 d8 0b 00 00 lea rsp, QWORD PTR [rbp+3032] 009fd 5f pop rdi 009fe 5d pop rbp 009ff c3 ret 0 float_kernel_quality_sse ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.solve.x86.c ; COMDAT float_kernel_try_plu_sse _TEXT SEGMENT upper$ = 8 lower$ = 40 source$ = 72 pivot$ = 104 success$ = 136 a$ = 192 z$ = 288 c$4 = 324 col$5 = 368 eps$ = 404 k$6 = 436 p$7 = 468 maxabs$8 = 500 r$9 = 532 v$10 = 564 c$11 = 596 tmp$12 = 628 tmpi$13 = 660 pivot_val$14 = 692 r$15 = 724 factor$16 = 756 c$17 = 788 c$18 = 820 d$19 = 852 __$ArrayPad$ = 1256 left$ = 1360 right$ = 1368 ans$ = 1376 scalar$ = 1384 float_kernel_try_plu_sse PROC ; COMDAT ; 11 : { $LN31: 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 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 41 55 push r13 00016 55 push rbp 00017 57 push rdi 00018 48 81 ec 50 05 00 00 sub rsp, 1360 ; 00000550H 0001f 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 00024 48 8d 6c 24 60 lea rbp, QWORD PTR [rsp+96] 00029 48 83 e5 c0 and rbp, -64 ; ffffffffffffffc0H 0002d 48 8d 7c 24 20 lea rdi, QWORD PTR [rsp+32] 00032 b9 ec 00 00 00 mov ecx, 236 ; 000000ecH 00037 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH 0003c f3 ab rep stosd 0003e 48 8b 8c 24 78 05 00 00 mov rcx, QWORD PTR [rsp+1400] 00046 48 8b 05 00 00 00 00 mov rax, QWORD PTR __security_cookie 0004d 49 33 c5 xor rax, r13 00050 48 89 85 e8 04 00 00 mov QWORD PTR __$ArrayPad$[rbp], rax 00057 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__26377312_m@solve@x86@c 0005e e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00063 90 npad 1 ; 12 : /* Aliases */ ; 13 : MAT_KERNEL(float) *upper = left; /* U */ 00064 49 8b 85 50 05 00 00 mov rax, QWORD PTR left$[r13] 0006b 48 89 45 08 mov QWORD PTR upper$[rbp], rax ; 14 : MAT_KERNEL(float) *lower = right; /* L (unit diag) */ 0006f 49 8b 85 58 05 00 00 mov rax, QWORD PTR right$[r13] 00076 48 89 45 28 mov QWORD PTR lower$[rbp], rax ; 15 : MAT_KERNEL(float) *source = ans; /* A */ 0007a 49 8b 85 60 05 00 00 mov rax, QWORD PTR ans$[r13] 00081 48 89 45 48 mov QWORD PTR source$[rbp], rax ; 16 : unsigned char *pivot = (unsigned char *)&scalar->data[0]; /* length = 4 */ 00085 b8 08 00 00 00 mov eax, 8 0008a 48 6b c0 00 imul rax, rax, 0 0008e 49 8b 8d 68 05 00 00 mov rcx, QWORD PTR scalar$[r13] 00095 48 03 c8 add rcx, rax 00098 48 8b c1 mov rax, rcx 0009b 48 89 45 68 mov QWORD PTR pivot$[rbp], rax ; 17 : int *success = (int *)&scalar->data[1]; 0009f b8 08 00 00 00 mov eax, 8 000a4 48 6b c0 01 imul rax, rax, 1 000a8 49 8b 8d 68 05 00 00 mov rcx, QWORD PTR scalar$[r13] 000af 48 03 c8 add rcx, rax 000b2 48 8b c1 mov rax, rcx 000b5 48 89 85 88 00 00 00 mov QWORD PTR success$[rbp], rax ; 18 : ; 19 : /* Init permutation and outputs */ ; 20 : pivot[0] = 0; 000bc b8 01 00 00 00 mov eax, 1 000c1 48 6b c0 00 imul rax, rax, 0 000c5 48 8b 4d 68 mov rcx, QWORD PTR pivot$[rbp] 000c9 c6 04 01 00 mov BYTE PTR [rcx+rax], 0 ; 21 : pivot[1] = 1; 000cd b8 01 00 00 00 mov eax, 1 000d2 48 6b c0 01 imul rax, rax, 1 000d6 48 8b 4d 68 mov rcx, QWORD PTR pivot$[rbp] 000da c6 04 01 01 mov BYTE PTR [rcx+rax], 1 ; 22 : pivot[2] = 2; 000de b8 01 00 00 00 mov eax, 1 000e3 48 6b c0 02 imul rax, rax, 2 000e7 48 8b 4d 68 mov rcx, QWORD PTR pivot$[rbp] 000eb c6 04 01 02 mov BYTE PTR [rcx+rax], 2 ; 23 : pivot[3] = 3; 000ef b8 01 00 00 00 mov eax, 1 000f4 48 6b c0 03 imul rax, rax, 3 000f8 48 8b 4d 68 mov rcx, QWORD PTR pivot$[rbp] 000fc c6 04 01 03 mov BYTE PTR [rcx+rax], 3 ; 24 : *success = 1; 00100 48 8b 85 88 00 00 00 mov rax, QWORD PTR success$[rbp] 00107 c7 00 01 00 00 00 mov DWORD PTR [rax], 1 ; 25 : ; 26 : /* Working copy of A in column-major a[col][row], load via SIMD view */ ; 27 : MAT_KERNEL(float) a; ; 28 : const __m128 z = _mm_setzero_ps(); 0010d 0f 57 c0 xorps xmm0, xmm0 00110 0f 29 85 20 01 00 00 movaps XMMWORD PTR z$[rbp], xmm0 ; 29 : for (int c = 0; c < 4; ++c) { 00117 c7 85 44 01 00 00 00 00 00 00 mov DWORD PTR c$4[rbp], 0 00121 eb 0e jmp SHORT $LN4@float_kern $LN2@float_kern: 00123 8b 85 44 01 00 00 mov eax, DWORD PTR c$4[rbp] 00129 ff c0 inc eax 0012b 89 85 44 01 00 00 mov DWORD PTR c$4[rbp], eax $LN4@float_kern: 00131 83 bd 44 01 00 00 04 cmp DWORD PTR c$4[rbp], 4 00138 7d 7f jge SHORT $LN3@float_kern ; 30 : __m128 col = _mm_load_ps((float *)&source->f32_x[c]); 0013a 48 63 85 44 01 00 00 movsxd rax, DWORD PTR c$4[rbp] 00141 48 6b c0 10 imul rax, rax, 16 00145 48 8b 4d 48 mov rcx, QWORD PTR source$[rbp] 00149 48 03 c8 add rcx, rax 0014c 48 8b c1 mov rax, rcx 0014f 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00152 0f 29 85 70 01 00 00 movaps XMMWORD PTR col$5[rbp], xmm0 ; 31 : _mm_storeu_ps((float *)&a.f32_x[c], col); 00159 48 63 85 44 01 00 00 movsxd rax, DWORD PTR c$4[rbp] 00160 48 6b c0 10 imul rax, rax, 16 00164 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 0016c 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR col$5[rbp] 00173 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 32 : _mm_store_ps((float *)&upper->f32_x[c], z); 00176 48 63 85 44 01 00 00 movsxd rax, DWORD PTR c$4[rbp] 0017d 48 6b c0 10 imul rax, rax, 16 00181 48 8b 4d 08 mov rcx, QWORD PTR upper$[rbp] 00185 48 03 c8 add rcx, rax 00188 48 8b c1 mov rax, rcx 0018b 0f 28 85 20 01 00 00 movaps xmm0, XMMWORD PTR z$[rbp] 00192 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 33 : _mm_store_ps((float *)&lower->f32_x[c], z); 00195 48 63 85 44 01 00 00 movsxd rax, DWORD PTR c$4[rbp] 0019c 48 6b c0 10 imul rax, rax, 16 001a0 48 8b 4d 28 mov rcx, QWORD PTR lower$[rbp] 001a4 48 03 c8 add rcx, rax 001a7 48 8b c1 mov rax, rcx 001aa 0f 28 85 20 01 00 00 movaps xmm0, XMMWORD PTR z$[rbp] 001b1 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 34 : } 001b4 e9 6a ff ff ff jmp $LN2@float_kern $LN3@float_kern: ; 35 : ; 36 : const float eps = 1e-12f; 001b9 f3 0f 10 05 00 00 00 00 movss xmm0, DWORD PTR __real@2b8cbccc 001c1 f3 0f 11 85 94 01 00 00 movss DWORD PTR eps$[rbp], xmm0 ; 37 : ; 38 : for (int k = 0; k < 4; ++k) { 001c9 c7 85 b4 01 00 00 00 00 00 00 mov DWORD PTR k$6[rbp], 0 001d3 eb 0e jmp SHORT $LN7@float_kern $LN5@float_kern: 001d5 8b 85 b4 01 00 00 mov eax, DWORD PTR k$6[rbp] 001db ff c0 inc eax 001dd 89 85 b4 01 00 00 mov DWORD PTR k$6[rbp], eax $LN7@float_kern: 001e3 83 bd b4 01 00 00 04 cmp DWORD PTR k$6[rbp], 4 001ea 0f 8d cc 03 00 00 jge $LN6@float_kern ; 39 : /* Pivot search on column k, rows k..3 */ ; 40 : int p = k; 001f0 8b 85 b4 01 00 00 mov eax, DWORD PTR k$6[rbp] 001f6 89 85 d4 01 00 00 mov DWORD PTR p$7[rbp], eax ; 41 : float maxabs = fabsf(a.m[k][p]); 001fc 48 63 85 b4 01 00 00 movsxd rax, DWORD PTR k$6[rbp] 00203 48 6b c0 10 imul rax, rax, 16 00207 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 0020f 48 63 8d d4 01 00 00 movsxd rcx, DWORD PTR p$7[rbp] 00216 f3 0f 10 04 88 movss xmm0, DWORD PTR [rax+rcx*4] 0021b e8 00 00 00 00 call fabsf 00220 f3 0f 11 85 f4 01 00 00 movss DWORD PTR maxabs$8[rbp], xmm0 ; 42 : for (int r = k + 1; r < 4; ++r) { 00228 8b 85 b4 01 00 00 mov eax, DWORD PTR k$6[rbp] 0022e ff c0 inc eax 00230 89 85 14 02 00 00 mov DWORD PTR r$9[rbp], eax 00236 eb 0e jmp SHORT $LN10@float_kern $LN8@float_kern: 00238 8b 85 14 02 00 00 mov eax, DWORD PTR r$9[rbp] 0023e ff c0 inc eax 00240 89 85 14 02 00 00 mov DWORD PTR r$9[rbp], eax $LN10@float_kern: 00246 83 bd 14 02 00 00 04 cmp DWORD PTR r$9[rbp], 4 0024d 7d 5b jge SHORT $LN9@float_kern ; 43 : float v = fabsf(a.m[k][r]); 0024f 48 63 85 b4 01 00 00 movsxd rax, DWORD PTR k$6[rbp] 00256 48 6b c0 10 imul rax, rax, 16 0025a 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 00262 48 63 8d 14 02 00 00 movsxd rcx, DWORD PTR r$9[rbp] 00269 f3 0f 10 04 88 movss xmm0, DWORD PTR [rax+rcx*4] 0026e e8 00 00 00 00 call fabsf 00273 f3 0f 11 85 34 02 00 00 movss DWORD PTR v$10[rbp], xmm0 ; 44 : if (v > maxabs) { 0027b f3 0f 10 85 34 02 00 00 movss xmm0, DWORD PTR v$10[rbp] 00283 0f 2f 85 f4 01 00 00 comiss xmm0, DWORD PTR maxabs$8[rbp] 0028a 76 1c jbe SHORT $LN26@float_kern ; 45 : maxabs = v; 0028c f3 0f 10 85 34 02 00 00 movss xmm0, DWORD PTR v$10[rbp] 00294 f3 0f 11 85 f4 01 00 00 movss DWORD PTR maxabs$8[rbp], xmm0 ; 46 : p = r; 0029c 8b 85 14 02 00 00 mov eax, DWORD PTR r$9[rbp] 002a2 89 85 d4 01 00 00 mov DWORD PTR p$7[rbp], eax $LN26@float_kern: ; 47 : } ; 48 : } 002a8 eb 8e jmp SHORT $LN8@float_kern $LN9@float_kern: ; 49 : ; 50 : if (maxabs < eps) { 002aa f3 0f 10 85 94 01 00 00 movss xmm0, DWORD PTR eps$[rbp] 002b2 0f 2f 85 f4 01 00 00 comiss xmm0, DWORD PTR maxabs$8[rbp] 002b9 76 12 jbe SHORT $LN27@float_kern ; 51 : *success = 0; 002bb 48 8b 85 88 00 00 00 mov rax, QWORD PTR success$[rbp] 002c2 c7 00 00 00 00 00 mov DWORD PTR [rax], 0 ; 52 : /* leave outputs zeroed */ ; 53 : return; 002c8 e9 69 03 00 00 jmp $LN1@float_kern $LN27@float_kern: ; 54 : } ; 55 : ; 56 : /* Swap rows if needed */ ; 57 : if (p != k) { 002cd 8b 85 b4 01 00 00 mov eax, DWORD PTR k$6[rbp] 002d3 39 85 d4 01 00 00 cmp DWORD PTR p$7[rbp], eax 002d9 0f 84 01 01 00 00 je $LN28@float_kern ; 58 : for (int c = 0; c < 4; ++c) { 002df c7 85 54 02 00 00 00 00 00 00 mov DWORD PTR c$11[rbp], 0 002e9 eb 0e jmp SHORT $LN13@float_kern $LN11@float_kern: 002eb 8b 85 54 02 00 00 mov eax, DWORD PTR c$11[rbp] 002f1 ff c0 inc eax 002f3 89 85 54 02 00 00 mov DWORD PTR c$11[rbp], eax $LN13@float_kern: 002f9 83 bd 54 02 00 00 04 cmp DWORD PTR c$11[rbp], 4 00300 0f 8d 92 00 00 00 jge $LN12@float_kern ; 59 : float tmp = a.m[c][k]; 00306 48 63 85 54 02 00 00 movsxd rax, DWORD PTR c$11[rbp] 0030d 48 6b c0 10 imul rax, rax, 16 00311 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 00319 48 63 8d b4 01 00 00 movsxd rcx, DWORD PTR k$6[rbp] 00320 f3 0f 10 04 88 movss xmm0, DWORD PTR [rax+rcx*4] 00325 f3 0f 11 85 74 02 00 00 movss DWORD PTR tmp$12[rbp], xmm0 ; 60 : a.m[c][k] = a.m[c][p]; 0032d 48 63 85 54 02 00 00 movsxd rax, DWORD PTR c$11[rbp] 00334 48 6b c0 10 imul rax, rax, 16 00338 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 00340 48 63 8d d4 01 00 00 movsxd rcx, DWORD PTR p$7[rbp] 00347 48 63 95 54 02 00 00 movsxd rdx, DWORD PTR c$11[rbp] 0034e 48 6b d2 10 imul rdx, rdx, 16 00352 48 8d 94 15 c0 00 00 00 lea rdx, QWORD PTR a$[rbp+rdx] 0035a 4c 63 85 b4 01 00 00 movsxd r8, DWORD PTR k$6[rbp] 00361 f3 0f 10 04 88 movss xmm0, DWORD PTR [rax+rcx*4] 00366 f3 42 0f 11 04 82 movss DWORD PTR [rdx+r8*4], xmm0 ; 61 : a.m[c][p] = tmp; 0036c 48 63 85 54 02 00 00 movsxd rax, DWORD PTR c$11[rbp] 00373 48 6b c0 10 imul rax, rax, 16 00377 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 0037f 48 63 8d d4 01 00 00 movsxd rcx, DWORD PTR p$7[rbp] 00386 f3 0f 10 85 74 02 00 00 movss xmm0, DWORD PTR tmp$12[rbp] 0038e f3 0f 11 04 88 movss DWORD PTR [rax+rcx*4], xmm0 ; 62 : } 00393 e9 53 ff ff ff jmp $LN11@float_kern $LN12@float_kern: ; 63 : unsigned char tmpi = pivot[k]; 00398 48 63 85 b4 01 00 00 movsxd rax, DWORD PTR k$6[rbp] 0039f 48 8b 4d 68 mov rcx, QWORD PTR pivot$[rbp] 003a3 0f b6 04 01 movzx eax, BYTE PTR [rcx+rax] 003a7 88 85 94 02 00 00 mov BYTE PTR tmpi$13[rbp], al ; 64 : pivot[k] = pivot[p]; 003ad 48 63 85 d4 01 00 00 movsxd rax, DWORD PTR p$7[rbp] 003b4 48 63 8d b4 01 00 00 movsxd rcx, DWORD PTR k$6[rbp] 003bb 48 8b 55 68 mov rdx, QWORD PTR pivot$[rbp] 003bf 4c 8b 45 68 mov r8, QWORD PTR pivot$[rbp] 003c3 41 0f b6 04 00 movzx eax, BYTE PTR [r8+rax] 003c8 88 04 0a mov BYTE PTR [rdx+rcx], al ; 65 : pivot[p] = tmpi; 003cb 48 63 85 d4 01 00 00 movsxd rax, DWORD PTR p$7[rbp] 003d2 48 8b 4d 68 mov rcx, QWORD PTR pivot$[rbp] 003d6 0f b6 95 94 02 00 00 movzx edx, BYTE PTR tmpi$13[rbp] 003dd 88 14 01 mov BYTE PTR [rcx+rax], dl $LN28@float_kern: ; 66 : } ; 67 : ; 68 : float pivot_val = a.m[k][k]; 003e0 48 63 85 b4 01 00 00 movsxd rax, DWORD PTR k$6[rbp] 003e7 48 6b c0 10 imul rax, rax, 16 003eb 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 003f3 48 63 8d b4 01 00 00 movsxd rcx, DWORD PTR k$6[rbp] 003fa f3 0f 10 04 88 movss xmm0, DWORD PTR [rax+rcx*4] 003ff f3 0f 11 85 b4 02 00 00 movss DWORD PTR pivot_val$14[rbp], xmm0 ; 69 : ; 70 : /* Eliminate below pivot: store multipliers in L column k */ ; 71 : for (int r = k + 1; r < 4; ++r) { 00407 8b 85 b4 01 00 00 mov eax, DWORD PTR k$6[rbp] 0040d ff c0 inc eax 0040f 89 85 d4 02 00 00 mov DWORD PTR r$15[rbp], eax 00415 eb 0e jmp SHORT $LN16@float_kern $LN14@float_kern: 00417 8b 85 d4 02 00 00 mov eax, DWORD PTR r$15[rbp] 0041d ff c0 inc eax 0041f 89 85 d4 02 00 00 mov DWORD PTR r$15[rbp], eax $LN16@float_kern: 00425 83 bd d4 02 00 00 04 cmp DWORD PTR r$15[rbp], 4 0042c 0f 8d f4 00 00 00 jge $LN15@float_kern ; 72 : float factor = a.m[k][r] / pivot_val; 00432 48 63 85 b4 01 00 00 movsxd rax, DWORD PTR k$6[rbp] 00439 48 6b c0 10 imul rax, rax, 16 0043d 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 00445 48 63 8d d4 02 00 00 movsxd rcx, DWORD PTR r$15[rbp] 0044c f3 0f 10 04 88 movss xmm0, DWORD PTR [rax+rcx*4] 00451 f3 0f 5e 85 b4 02 00 00 divss xmm0, DWORD PTR pivot_val$14[rbp] 00459 f3 0f 11 85 f4 02 00 00 movss DWORD PTR factor$16[rbp], xmm0 ; 73 : lower->m[k][r] = factor; 00461 48 63 85 b4 01 00 00 movsxd rax, DWORD PTR k$6[rbp] 00468 48 6b c0 10 imul rax, rax, 16 0046c 48 8b 4d 28 mov rcx, QWORD PTR lower$[rbp] 00470 48 03 c8 add rcx, rax 00473 48 8b c1 mov rax, rcx 00476 48 63 8d d4 02 00 00 movsxd rcx, DWORD PTR r$15[rbp] 0047d f3 0f 10 85 f4 02 00 00 movss xmm0, DWORD PTR factor$16[rbp] 00485 f3 0f 11 04 88 movss DWORD PTR [rax+rcx*4], xmm0 ; 74 : for (int c = k; c < 4; ++c) { 0048a 8b 85 b4 01 00 00 mov eax, DWORD PTR k$6[rbp] 00490 89 85 14 03 00 00 mov DWORD PTR c$17[rbp], eax 00496 eb 0e jmp SHORT $LN19@float_kern $LN17@float_kern: 00498 8b 85 14 03 00 00 mov eax, DWORD PTR c$17[rbp] 0049e ff c0 inc eax 004a0 89 85 14 03 00 00 mov DWORD PTR c$17[rbp], eax $LN19@float_kern: 004a6 83 bd 14 03 00 00 04 cmp DWORD PTR c$17[rbp], 4 004ad 7d 72 jge SHORT $LN18@float_kern ; 75 : a.m[c][r] -= factor * a.m[c][k]; 004af 48 63 85 14 03 00 00 movsxd rax, DWORD PTR c$17[rbp] 004b6 48 6b c0 10 imul rax, rax, 16 004ba 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 004c2 48 63 8d d4 02 00 00 movsxd rcx, DWORD PTR r$15[rbp] 004c9 48 63 95 14 03 00 00 movsxd rdx, DWORD PTR c$17[rbp] 004d0 48 6b d2 10 imul rdx, rdx, 16 004d4 48 8d 94 15 c0 00 00 00 lea rdx, QWORD PTR a$[rbp+rdx] 004dc 4c 63 85 b4 01 00 00 movsxd r8, DWORD PTR k$6[rbp] 004e3 f3 0f 10 85 f4 02 00 00 movss xmm0, DWORD PTR factor$16[rbp] 004eb f3 42 0f 59 04 82 mulss xmm0, DWORD PTR [rdx+r8*4] 004f1 f3 0f 10 0c 88 movss xmm1, DWORD PTR [rax+rcx*4] 004f6 f3 0f 5c c8 subss xmm1, xmm0 004fa 0f 28 c1 movaps xmm0, xmm1 004fd 48 63 85 d4 02 00 00 movsxd rax, DWORD PTR r$15[rbp] 00504 48 63 8d 14 03 00 00 movsxd rcx, DWORD PTR c$17[rbp] 0050b 48 6b c9 10 imul rcx, rcx, 16 0050f 48 8d 8c 0d c0 00 00 00 lea rcx, QWORD PTR a$[rbp+rcx] 00517 f3 0f 11 04 81 movss DWORD PTR [rcx+rax*4], xmm0 ; 76 : } 0051c e9 77 ff ff ff jmp $LN17@float_kern $LN18@float_kern: ; 77 : } 00521 e9 f1 fe ff ff jmp $LN14@float_kern $LN15@float_kern: ; 78 : ; 79 : /* Set U row k (columns k..3) and L diagonal */ ; 80 : lower->m[k][k] = 1.0f; 00526 48 63 85 b4 01 00 00 movsxd rax, DWORD PTR k$6[rbp] 0052d 48 6b c0 10 imul rax, rax, 16 00531 48 8b 4d 28 mov rcx, QWORD PTR lower$[rbp] 00535 48 03 c8 add rcx, rax 00538 48 8b c1 mov rax, rcx 0053b 48 63 8d b4 01 00 00 movsxd rcx, DWORD PTR k$6[rbp] 00542 f3 0f 10 05 00 00 00 00 movss xmm0, DWORD PTR __real@3f800000 0054a f3 0f 11 04 88 movss DWORD PTR [rax+rcx*4], xmm0 ; 81 : for (int c = k; c < 4; ++c) { 0054f 8b 85 b4 01 00 00 mov eax, DWORD PTR k$6[rbp] 00555 89 85 34 03 00 00 mov DWORD PTR c$18[rbp], eax 0055b eb 0e jmp SHORT $LN22@float_kern $LN20@float_kern: 0055d 8b 85 34 03 00 00 mov eax, DWORD PTR c$18[rbp] 00563 ff c0 inc eax 00565 89 85 34 03 00 00 mov DWORD PTR c$18[rbp], eax $LN22@float_kern: 0056b 83 bd 34 03 00 00 04 cmp DWORD PTR c$18[rbp], 4 00572 7d 43 jge SHORT $LN21@float_kern ; 82 : upper->m[c][k] = a.m[c][k]; 00574 48 63 85 34 03 00 00 movsxd rax, DWORD PTR c$18[rbp] 0057b 48 6b c0 10 imul rax, rax, 16 0057f 48 8d 84 05 c0 00 00 00 lea rax, QWORD PTR a$[rbp+rax] 00587 48 63 8d b4 01 00 00 movsxd rcx, DWORD PTR k$6[rbp] 0058e 48 63 95 34 03 00 00 movsxd rdx, DWORD PTR c$18[rbp] 00595 48 6b d2 10 imul rdx, rdx, 16 00599 4c 8b 45 08 mov r8, QWORD PTR upper$[rbp] 0059d 4c 03 c2 add r8, rdx 005a0 49 8b d0 mov rdx, r8 005a3 4c 63 85 b4 01 00 00 movsxd r8, DWORD PTR k$6[rbp] 005aa f3 0f 10 04 88 movss xmm0, DWORD PTR [rax+rcx*4] 005af f3 42 0f 11 04 82 movss DWORD PTR [rdx+r8*4], xmm0 ; 83 : } 005b5 eb a6 jmp SHORT $LN20@float_kern $LN21@float_kern: ; 84 : } 005b7 e9 19 fc ff ff jmp $LN5@float_kern $LN6@float_kern: ; 85 : ; 86 : /* Ensure remaining diagonal ones for L */ ; 87 : for (int d = 0; d < 4; ++d) { 005bc c7 85 54 03 00 00 00 00 00 00 mov DWORD PTR d$19[rbp], 0 005c6 eb 0e jmp SHORT $LN25@float_kern $LN23@float_kern: 005c8 8b 85 54 03 00 00 mov eax, DWORD PTR d$19[rbp] 005ce ff c0 inc eax 005d0 89 85 54 03 00 00 mov DWORD PTR d$19[rbp], eax $LN25@float_kern: 005d6 83 bd 54 03 00 00 04 cmp DWORD PTR d$19[rbp], 4 005dd 7d 57 jge SHORT $LN24@float_kern ; 88 : if (lower->m[d][d] == 0.0f) 005df 48 63 85 54 03 00 00 movsxd rax, DWORD PTR d$19[rbp] 005e6 48 6b c0 10 imul rax, rax, 16 005ea 48 8b 4d 28 mov rcx, QWORD PTR lower$[rbp] 005ee 48 03 c8 add rcx, rax 005f1 48 8b c1 mov rax, rcx 005f4 48 63 8d 54 03 00 00 movsxd rcx, DWORD PTR d$19[rbp] 005fb f3 0f 10 04 88 movss xmm0, DWORD PTR [rax+rcx*4] 00600 0f 2e 05 00 00 00 00 ucomiss xmm0, DWORD PTR __real@00000000 00607 7a 2b jp SHORT $LN29@float_kern 00609 75 29 jne SHORT $LN29@float_kern ; 89 : lower->m[d][d] = 1.0f; 0060b 48 63 85 54 03 00 00 movsxd rax, DWORD PTR d$19[rbp] 00612 48 6b c0 10 imul rax, rax, 16 00616 48 8b 4d 28 mov rcx, QWORD PTR lower$[rbp] 0061a 48 03 c8 add rcx, rax 0061d 48 8b c1 mov rax, rcx 00620 48 63 8d 54 03 00 00 movsxd rcx, DWORD PTR d$19[rbp] 00627 f3 0f 10 05 00 00 00 00 movss xmm0, DWORD PTR __real@3f800000 0062f f3 0f 11 04 88 movss DWORD PTR [rax+rcx*4], xmm0 $LN29@float_kern: ; 90 : } 00634 eb 92 jmp SHORT $LN23@float_kern $LN24@float_kern: $LN1@float_kern: ; 91 : } 00636 48 8d 4d e0 lea rcx, QWORD PTR [rbp-32] 0063a 48 8d 15 00 00 00 00 lea rdx, OFFSET FLAT:float_kernel_try_plu_sse$rtcFrameData 00641 e8 00 00 00 00 call _RTC_CheckStackVars 00646 48 8b 8d e8 04 00 00 mov rcx, QWORD PTR __$ArrayPad$[rbp] 0064d 49 33 cd xor rcx, r13 00650 e8 00 00 00 00 call __security_check_cookie 00655 49 8d a5 30 05 00 00 lea rsp, QWORD PTR [r13+1328] 0065c 5f pop rdi 0065d 5d pop rbp 0065e 41 5d pop r13 00660 c3 ret 0 float_kernel_try_plu_sse ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\ucrt\corecrt_math.h ; COMDAT fabsf _TEXT SEGMENT _X$ = 224 fabsf PROC ; COMDAT ; 710 : { $LN3: 00000 f3 0f 11 44 24 08 movss DWORD PTR [rsp+8], xmm0 00006 55 push rbp 00007 57 push rdi 00008 48 81 ec f8 00 00 00 sub rsp, 248 ; 000000f8H 0000f 48 8d 6c 24 30 lea rbp, QWORD PTR [rsp+48] 00014 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__1D9A7FA2_corecrt_math@h 0001b e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00020 90 npad 1 ; 711 : return (float)fabs(_X); 00021 f3 0f 5a 85 e0 00 00 00 cvtss2sd xmm0, DWORD PTR _X$[rbp] 00029 e8 00 00 00 00 call fabs 0002e f2 0f 5a c0 cvtsd2ss xmm0, xmm0 ; 712 : } 00032 48 8d a5 c8 00 00 00 lea rsp, QWORD PTR [rbp+200] 00039 5f pop rdi 0003a 5d pop rbp 0003b c3 ret 0 fabsf ENDP _TEXT ENDS END