Files
stgsharp/obj/StgSharp.Native/Debug/x64/m.solve.x86.cod
T
2026-02-28 18:08:26 +08:00

2013 lines
60 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
__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