; Listing generated by Microsoft (R) Optimizing Compiler Version 19.44.35220.0 include listing.inc INCLUDELIB MSVCRTD INCLUDELIB OLDNAMES _DATA SEGMENT COMM infolog:BYTE:0200H _DATA ENDS msvcjmc SEGMENT __5C8CA4D3_mmintrin@h DB 01H __8C83BECC_concurrencysal@h DB 01H __608E3340_sal@h DB 01H __FB67E29A_vadefs@h DB 01H __1D1B619C_vcruntime@h DB 01H __735960E1_corecrt@h DB 01H __211DB995_corecrt_malloc@h DB 01H __7CD62D9E_malloc@h DB 01H __9DCE0DC8_xmmintrin@h DB 01H __4C2AD0C7_winpackagefamily@h DB 01H __9DED9ED1_winapifamily@h DB 01H __12FEDF4E_sdkddkver@h DB 01H __9BAEE128_excpt@h DB 01H __B7B53233_stdarg@h DB 01H __6B04FCB3_specstrings_undef@h DB 01H __F4027AF7_specstrings_strict@h DB 01H __B90340D4_sdv_driverspecs@h DB 01H __BFFF5AD3_driverspecs@h DB 01H __32847078_specstrings@h DB 01H __108B2620_corecrt_wctype@h DB 01H __6CD6613D_ctype@h DB 01H __30902A1F_kernelspecs@h DB 01H __376FD5CA_basetsd@h DB 01H __13DE2371_errno@h DB 01H __8C6AE390_vcruntime_string@h DB 01H __8ACB2152_corecrt_memcpy_s@h DB 01H __EA6C9D17_corecrt_memory@h DB 01H __0DF2AF52_corecrt_wstring@h DB 01H __6E889ECC_string@h DB 01H __9BEDF4DE_guiddef@h DB 01H __51BFD2FE_pshpack4@h DB 01H __31652CEA_poppack@h DB 01H __5532AE4C_pshpack2@h DB 01H __58A52B9A_pshpack8@h DB 01H __57741015_pshpack1@h DB 01H __CDE68C90_apiset@h DB 01H __0BF06E8D_ktmtypes@h DB 01H __40C200C0_winnt@h DB 01H __9336F789_minwindef@h DB 01H __55136115_windef@h DB 01H __32205BF0_apisetcconv@h DB 01H __B48FDEA0_minwinbase@h DB 01H __3551B028_apiquery2@h DB 01H __65BE04AA_processenv@h DB 01H __4767CA46_fileapi@h DB 01H __282E6C4B_fileapifromapp@h DB 01H __393AF12C_debugapi@h DB 01H __EBC502B8_utilapiset@h DB 01H __1EAD8C69_handleapi@h DB 01H __D8EF9B29_errhandlingapi@h DB 01H __97FC1204_fibersapi@h DB 01H __27448220_namedpipeapi@h DB 01H __6EA33B2A_profileapi@h DB 01H __EAC6F673_heapapi@h DB 01H __D64EEA5A_ioapiset@h DB 01H __144BD4B6_synchapi@h DB 01H __03B1C640_interlockedapi@h DB 01H __DC64CB38_processthreadsapi@h DB 01H __D719B518_sysinfoapi@h DB 01H __410385B1_memoryapi@h DB 01H __C1AD45EF_enclaveapi@h DB 01H __F4C3AA32_threadpoollegacyapiset@h DB 01H __AC5A7A9F_threadpoolapiset@h DB 01H __F5254B21_jobapi@h DB 01H __BCEA6EE8_jobapi2@h DB 01H __D18ACE72_wow64apiset@h DB 01H __669B0D4A_libloaderapi@h DB 01H __645F7034_securitybaseapi@h DB 01H __67E58557_namespaceapi@h DB 01H __599D9D3A_systemtopologyapi@h DB 01H __2337E373_processtopologyapi@h DB 01H __02BFF239_securityappcontainer@h DB 01H __9C196272_realtimeapiset@h DB 01H __5AB313A4_winerror@h DB 01H __B7E7187B_timezoneapi@h DB 01H __6DE9EB6F_winbase@h DB 01H __56B2AFF2_wingdi@h DB 01H __BA1161A9_tvout@h DB 01H __0501A018_winuser@h DB 01H __EF12FA99_datetimeapi@h DB 01H __8FA7C3CA_winnls@h DB 01H __390F0C47_stringapiset@h DB 01H __28605B0A_wincontypes@h DB 01H __BFBDE86D_consoleapi@h DB 01H __C3CAFBF0_consoleapi2@h DB 01H __C20891C7_consoleapi3@h DB 01H __717C98B6_wincon@h DB 01H __2884C177_verrsrc@h DB 01H __A3FD3A34_winver@h DB 01H __6F8AD9F1_reason@h DB 01H __4C90FD6F_winreg@h DB 01H __68AFEBAD_wnnc@h DB 01H __5A7AB086_winnetwk@h DB 01H __2FE8A10C_stralign@h DB 01H __34558472_winsvc@h DB 01H __058845F1_mcx@h DB 01H __7F16006B_ime_cmodes@h DB 01H __0A3AF599_imm@h DB 01H __9349FE86_windows@h DB 01H __639A050C_sn_internal@h DB 01H __836A8CFC_stdint@h DB 01H __714FE6D7_sn_target@h DB 01H __60B45B40_corecrt_stdio_config@h DB 01H __CFA3741E_corecrt_wstdio@h DB 01H __B3FE3303_stdio@h DB 01H __955456CD_stddef@h DB 01H __99AED4FB_corecrt_search@h DB 01H __8B813BF6_corecrt_wstdlib@h DB 01H __3D1CA2C3_limits@h DB 01H __E8FB0A68_stdlib@h DB 01H __F562FA57_stb_image@h DB 01H __C95DC661_khrplatform@h DB 01H __6C577136_gl@h DB 01H __EE638A2C_wgl@h DB 01H __8EF9E35C_glfw3@h DB 01H __F8AC8404_emmintrin@h DB 01H __270DEC8D_pmmintrin@h DB 01H __97D49F0F_tmmintrin@h DB 01H __BEEF8A8C_smmintrin@h DB 01H __DB8D0340_nmmintrin@h DB 01H __0E36F90E_wmmintrin@h DB 01H __C5A2B409_zmmintrin@h DB 01H __F2B616C3_immintrin@h DB 01H __9FB25DBE_assert@h DB 01H __4E664295_glfw_function@h DB 01H __64C0EF11_StgSharpNative@h DB 01H __E2EC0CAF_sn_matkernel@h DB 01H __47E843D2_intrin0@inl@h DB 01H __130964FF_setjmp@h DB 01H __4875F786_ammintrin@h DB 01H __353FD888_intrin@h DB 01H __5FE1E9E3_isa_availability@h DB 01H __AA840D82_sn_intrinsic@h DB 01H __CE29950A_sn_intrincontext@x86@h DB 01H __F8387F23_m@fma@x86@c DB 01H msvcjmc ENDS CONST SEGMENT ?b01_shift@?1??float_kernel_fma_avx@@9@9 DD 00H ; `float_kernel_fma_avx'::`2'::b01_shift DD 01H DD 02H DD 03H DD 05H DD 06H DD 07H DD 04H ?b23_shift@?1??float_kernel_fma_avx@@9@9 DD 02H ; `float_kernel_fma_avx'::`2'::b23_shift DD 03H DD 00H DD 01H DD 07H DD 04H DD 05H DD 06H ?b01_shift@?1??float_kernel_fma_avx_fma@@9@9 DD 00H ; `float_kernel_fma_avx_fma'::`2'::b01_shift DD 01H DD 02H DD 03H DD 05H DD 06H DD 07H DD 04H ?b23_shift@?1??float_kernel_fma_avx_fma@@9@9 DD 02H ; `float_kernel_fma_avx_fma'::`2'::b23_shift DD 03H DD 00H DD 01H DD 07H DD 04H DD 05H DD 06H ?b_shift@?1??float_kernel_fma_512@@9@9 DD 00H ; `float_kernel_fma_512'::`2'::b_shift DD 01H DD 02H DD 03H DD 05H DD 06H DD 07H DD 04H DD 0aH DD 0bH DD 08H DD 09H DD 0fH DD 0cH DD 0dH DD 0eH ?b01_shift@?1??double_kernel_fma_512@@9@9 DQ 0000000000000000H ; `double_kernel_fma_512'::`2'::b01_shift DQ 0000000000000001H DQ 0000000000000002H DQ 0000000000000003H DQ 0000000000000005H DQ 0000000000000006H DQ 0000000000000007H DQ 0000000000000004H ?b23_shift@?1??double_kernel_fma_512@@9@9 DQ 0000000000000002H ; `double_kernel_fma_512'::`2'::b23_shift DQ 0000000000000003H DQ 0000000000000000H DQ 0000000000000001H DQ 0000000000000007H DQ 0000000000000004H DQ 0000000000000005H DQ 0000000000000006H CONST ENDS PUBLIC float_kernel_fma_sse PUBLIC float_kernel_fma_avx PUBLIC float_kernel_fma_avx_fma PUBLIC float_kernel_fma_512 PUBLIC double_kernel_fma_sse PUBLIC double_kernel_fma_avx PUBLIC double_kernel_fma_avx_fma PUBLIC double_kernel_fma_512 PUBLIC __JustMyCode_Default EXTRN _RTC_InitBase:PROC EXTRN _RTC_Shutdown:PROC EXTRN __CheckForDebuggerJustMyCode:PROC ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_fma_sse DD imagerel $LN3 DD imagerel $LN3+1287 DD imagerel $unwind$float_kernel_fma_sse pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_fma_avx DD imagerel $LN3 DD imagerel $LN3+855 DD imagerel $unwind$float_kernel_fma_avx pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_fma_avx_fma DD imagerel $LN3 DD imagerel $LN3+863 DD imagerel $unwind$float_kernel_fma_avx_fma pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_fma_512 DD imagerel $LN3 DD imagerel $LN3+429 DD imagerel $unwind$float_kernel_fma_512 pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$double_kernel_fma_sse DD imagerel $LN6 DD imagerel $LN6+788 DD imagerel $unwind$double_kernel_fma_sse pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$double_kernel_fma_avx DD imagerel $LN3 DD imagerel $LN3+1251 DD imagerel $unwind$double_kernel_fma_avx pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$double_kernel_fma_avx_fma DD imagerel $LN3 DD imagerel $LN3+1203 DD imagerel $unwind$double_kernel_fma_avx_fma pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$double_kernel_fma_512 DD imagerel $LN3 DD imagerel $LN3+837 DD imagerel $unwind$double_kernel_fma_512 pdata ENDS ; COMDAT rtc$TMZ rtc$TMZ SEGMENT _RTC_Shutdown.rtc$TMZ DQ FLAT:_RTC_Shutdown rtc$TMZ ENDS ; COMDAT rtc$IMZ rtc$IMZ SEGMENT _RTC_InitBase.rtc$IMZ DQ FLAT:_RTC_InitBase rtc$IMZ ENDS ; COMDAT xdata xdata SEGMENT $unwind$double_kernel_fma_512 DD 02d062801H DD 011a231fH DD 0701300f6H DD 0d0115012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$double_kernel_fma_avx_fma DD 02d062801H DD 011a231fH DD 070130082H DD 0d0115012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$double_kernel_fma_avx DD 02d062801H DD 011a231fH DD 070130082H DD 0d0115012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$double_kernel_fma_sse DD 025051d01H DD 0118231dH DD 07011004bH DD 05010H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_fma_512 DD 02d062801H DD 011a231fH DD 070130106H DD 0d0115012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_fma_avx_fma DD 02d062801H DD 011a231fH DD 07013008aH DD 0d0115012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_fma_avx DD 02d062801H DD 011a231fH DD 07013008aH DD 0d0115012H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_fma_sse DD 025051d01H DD 0118231dH DD 070110053H DD 05010H 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.fma.x86.c ; COMDAT double_kernel_fma_512 _TEXT SEGMENT a01$ = 64 a23$ = 192 b01$ = 320 b23$ = 448 c01$ = 576 c23$ = 704 b01_perm$ = 832 b23_perm$ = 960 a12$ = 1088 a30$ = 1216 left$ = 1968 right$ = 1976 ans$ = 1984 double_kernel_fma_512 PROC ; COMDAT ; 321 : { $LN3: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f 41 55 push r13 00011 55 push rbp 00012 57 push rdi 00013 48 81 ec b0 07 00 00 sub rsp, 1968 ; 000007b0H 0001a 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 0001f 48 8d 6c 24 60 lea rbp, QWORD PTR [rsp+96] 00024 48 83 e5 c0 and rbp, -64 ; ffffffffffffffc0H 00028 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__F8387F23_m@fma@x86@c 0002f e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00034 90 npad 1 ; 322 : static const __m512i b01_shift = { .m512i_i64 = { 0, 1, 2, 3, 5, 6, 7, 4 } }; ; 323 : static const __m512i b23_shift = { .m512i_i64 = { 2, 3, 0, 1, 7, 4, 5, 6 } }; ; 324 : ; 325 : register __m512d a01 = _mm512_load_pd((double *)&left->f64_z[0]); 00035 b8 40 00 00 00 mov eax, 64 ; 00000040H 0003a 48 6b c0 00 imul rax, rax, 0 0003e 49 8b 8d b0 07 00 00 mov rcx, QWORD PTR left$[r13] 00045 48 03 c8 add rcx, rax 00048 48 8b c1 mov rax, rcx 0004b 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 00051 62 f1 fd 48 11 45 01 vmovupd ZMMWORD PTR a01$[rbp], zmm0 ; 326 : register __m512d a23 = _mm512_load_pd((double *)&left->f64_z[1]); 00058 b8 40 00 00 00 mov eax, 64 ; 00000040H 0005d 48 6b c0 01 imul rax, rax, 1 00061 49 8b 8d b0 07 00 00 mov rcx, QWORD PTR left$[r13] 00068 48 03 c8 add rcx, rax 0006b 48 8b c1 mov rax, rcx 0006e 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 00074 62 f1 fd 48 11 45 03 vmovupd ZMMWORD PTR a23$[rbp], zmm0 ; 327 : ; 328 : register __m512d b01 = _mm512_load_pd((double *)&right->f64_z[0]); 0007b b8 40 00 00 00 mov eax, 64 ; 00000040H 00080 48 6b c0 00 imul rax, rax, 0 00084 49 8b 8d b8 07 00 00 mov rcx, QWORD PTR right$[r13] 0008b 48 03 c8 add rcx, rax 0008e 48 8b c1 mov rax, rcx 00091 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 00097 62 f1 fd 48 11 45 05 vmovupd ZMMWORD PTR b01$[rbp], zmm0 ; 329 : register __m512d b23 = _mm512_load_pd((double *)&right->f64_z[1]); 0009e b8 40 00 00 00 mov eax, 64 ; 00000040H 000a3 48 6b c0 01 imul rax, rax, 1 000a7 49 8b 8d b8 07 00 00 mov rcx, QWORD PTR right$[r13] 000ae 48 03 c8 add rcx, rax 000b1 48 8b c1 mov rax, rcx 000b4 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 000ba 62 f1 fd 48 11 45 07 vmovupd ZMMWORD PTR b23$[rbp], zmm0 ; 330 : b01 = _mm512_permutexvar_pd(b01_shift, b01); 000c1 62 f1 7e 48 6f 05 00 00 00 00 vmovdqu32 zmm0, ZMMWORD PTR ?b01_shift@?1??double_kernel_fma_512@@9@9 000cb 62 f2 fd 48 16 45 05 vpermpd zmm0, zmm0, ZMMWORD PTR b01$[rbp] 000d2 62 f1 fd 48 11 45 05 vmovupd ZMMWORD PTR b01$[rbp], zmm0 ; 331 : b23 = _mm512_permutexvar_pd(b23_shift, b23); 000d9 62 f1 7e 48 6f 05 00 00 00 00 vmovdqu32 zmm0, ZMMWORD PTR ?b23_shift@?1??double_kernel_fma_512@@9@9 000e3 62 f2 fd 48 16 45 07 vpermpd zmm0, zmm0, ZMMWORD PTR b23$[rbp] 000ea 62 f1 fd 48 11 45 07 vmovupd ZMMWORD PTR b23$[rbp], zmm0 ; 332 : ; 333 : register __m512d c01 = _mm512_load_pd((float *)&ans->f64_z[0]); 000f1 b8 40 00 00 00 mov eax, 64 ; 00000040H 000f6 48 6b c0 00 imul rax, rax, 0 000fa 49 8b 8d c0 07 00 00 mov rcx, QWORD PTR ans$[r13] 00101 48 03 c8 add rcx, rax 00104 48 8b c1 mov rax, rcx 00107 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 0010d 62 f1 fd 48 11 45 09 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 334 : register __m512d c23 = _mm512_load_pd((float *)&ans->f64_z[1]); 00114 b8 40 00 00 00 mov eax, 64 ; 00000040H 00119 48 6b c0 01 imul rax, rax, 1 0011d 49 8b 8d c0 07 00 00 mov rcx, QWORD PTR ans$[r13] 00124 48 03 c8 add rcx, rax 00127 48 8b c1 mov rax, rcx 0012a 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 00130 62 f1 fd 48 11 45 0b vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 335 : ; 336 : //group 0 ; 337 : register __m512d b01_perm = _mm512_shuffle_pd(b01, b01, _FMA_SELECT(0)); 00137 62 f1 fd 48 10 45 05 vmovupd zmm0, ZMMWORD PTR b01$[rbp] 0013e 62 f1 fd 48 c6 45 05 00 vshufpd zmm0, zmm0, ZMMWORD PTR b01$[rbp], 0 00146 62 f1 fd 48 11 45 0d vmovupd ZMMWORD PTR b01_perm$[rbp], zmm0 ; 338 : register __m512d b23_perm = _mm512_shuffle_pd(b23, b23, _FMA_SELECT(0)); 0014d 62 f1 fd 48 10 45 07 vmovupd zmm0, ZMMWORD PTR b23$[rbp] 00154 62 f1 fd 48 c6 45 07 00 vshufpd zmm0, zmm0, ZMMWORD PTR b23$[rbp], 0 0015c 62 f1 fd 48 11 45 0f vmovupd ZMMWORD PTR b23_perm$[rbp], zmm0 ; 339 : c01 = _mm512_fmadd_pd(a01, b01_perm, c01); 00163 62 f1 fd 48 10 45 01 vmovupd zmm0, ZMMWORD PTR a01$[rbp] 0016a 62 f1 fd 48 10 4d 0d vmovupd zmm1, ZMMWORD PTR b01_perm$[rbp] 00171 62 f2 f5 48 a8 45 09 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c01$[rbp] 00178 62 f1 fd 48 11 45 09 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 340 : c23 = _mm512_fmadd_pd(a23, b23_perm, c23); 0017f 62 f1 fd 48 10 45 03 vmovupd zmm0, ZMMWORD PTR a23$[rbp] 00186 62 f1 fd 48 10 4d 0f vmovupd zmm1, ZMMWORD PTR b23_perm$[rbp] 0018d 62 f2 f5 48 a8 45 0b vfmadd213pd zmm0, zmm1, ZMMWORD PTR c23$[rbp] 00194 62 f1 fd 48 11 45 0b vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 341 : ; 342 : //group 2 ; 343 : b01_perm = _mm512_shuffle_pd(b01, b01, _FMA_SELECT(2)); 0019b 62 f1 fd 48 10 45 05 vmovupd zmm0, ZMMWORD PTR b01$[rbp] 001a2 62 f1 fd 48 c6 45 05 aa vshufpd zmm0, zmm0, ZMMWORD PTR b01$[rbp], 170 ; 000000aaH 001aa 62 f1 fd 48 11 45 0d vmovupd ZMMWORD PTR b01_perm$[rbp], zmm0 ; 344 : b23_perm = _mm512_shuffle_pd(b23, b23, _FMA_SELECT(2)); 001b1 62 f1 fd 48 10 45 07 vmovupd zmm0, ZMMWORD PTR b23$[rbp] 001b8 62 f1 fd 48 c6 45 07 aa vshufpd zmm0, zmm0, ZMMWORD PTR b23$[rbp], 170 ; 000000aaH 001c0 62 f1 fd 48 11 45 0f vmovupd ZMMWORD PTR b23_perm$[rbp], zmm0 ; 345 : c01 = _mm512_fmadd_pd(a23, b01_perm, c01); 001c7 62 f1 fd 48 10 45 03 vmovupd zmm0, ZMMWORD PTR a23$[rbp] 001ce 62 f1 fd 48 10 4d 0d vmovupd zmm1, ZMMWORD PTR b01_perm$[rbp] 001d5 62 f2 f5 48 a8 45 09 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c01$[rbp] 001dc 62 f1 fd 48 11 45 09 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 346 : c23 = _mm512_fmadd_pd(a01, b23_perm, c23); 001e3 62 f1 fd 48 10 45 01 vmovupd zmm0, ZMMWORD PTR a01$[rbp] 001ea 62 f1 fd 48 10 4d 0f vmovupd zmm1, ZMMWORD PTR b23_perm$[rbp] 001f1 62 f2 f5 48 a8 45 0b vfmadd213pd zmm0, zmm1, ZMMWORD PTR c23$[rbp] 001f8 62 f1 fd 48 11 45 0b vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 347 : ; 348 : //group 1 ; 349 : register __m512d a12 = _mm512_shuffle_f64x2(a01, a23, _MM_SHUFFLE(1, 0, 3, 2)); 001ff 62 f1 fd 48 10 45 01 vmovupd zmm0, ZMMWORD PTR a01$[rbp] 00206 62 f3 fd 48 23 45 03 4e vshuff64x2 zmm0, zmm0, ZMMWORD PTR a23$[rbp], 78 ; 0000004eH 0020e 62 f1 fd 48 11 45 11 vmovupd ZMMWORD PTR a12$[rbp], zmm0 ; 350 : register __m512d a30 = _mm512_shuffle_f64x2(a23, a01, _MM_SHUFFLE(1, 0, 3, 2)); 00215 62 f1 fd 48 10 45 03 vmovupd zmm0, ZMMWORD PTR a23$[rbp] 0021c 62 f3 fd 48 23 45 01 4e vshuff64x2 zmm0, zmm0, ZMMWORD PTR a01$[rbp], 78 ; 0000004eH 00224 62 f1 fd 48 11 45 13 vmovupd ZMMWORD PTR a30$[rbp], zmm0 ; 351 : b01_perm = _mm512_shuffle_pd(b01, b01, _FMA_SELECT(1)); 0022b 62 f1 fd 48 10 45 05 vmovupd zmm0, ZMMWORD PTR b01$[rbp] 00232 62 f1 fd 48 c6 45 05 55 vshufpd zmm0, zmm0, ZMMWORD PTR b01$[rbp], 85 ; 00000055H 0023a 62 f1 fd 48 11 45 0d vmovupd ZMMWORD PTR b01_perm$[rbp], zmm0 ; 352 : b23_perm = _mm512_shuffle_pd(b23, b23, _FMA_SELECT(1)); 00241 62 f1 fd 48 10 45 07 vmovupd zmm0, ZMMWORD PTR b23$[rbp] 00248 62 f1 fd 48 c6 45 07 55 vshufpd zmm0, zmm0, ZMMWORD PTR b23$[rbp], 85 ; 00000055H 00250 62 f1 fd 48 11 45 0f vmovupd ZMMWORD PTR b23_perm$[rbp], zmm0 ; 353 : c01 = _mm512_fmadd_pd(a12, b01_perm, c01); 00257 62 f1 fd 48 10 45 11 vmovupd zmm0, ZMMWORD PTR a12$[rbp] 0025e 62 f1 fd 48 10 4d 0d vmovupd zmm1, ZMMWORD PTR b01_perm$[rbp] 00265 62 f2 f5 48 a8 45 09 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c01$[rbp] 0026c 62 f1 fd 48 11 45 09 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 354 : c23 = _mm512_fmadd_pd(a30, b23_perm, c23); 00273 62 f1 fd 48 10 45 13 vmovupd zmm0, ZMMWORD PTR a30$[rbp] 0027a 62 f1 fd 48 10 4d 0f vmovupd zmm1, ZMMWORD PTR b23_perm$[rbp] 00281 62 f2 f5 48 a8 45 0b vfmadd213pd zmm0, zmm1, ZMMWORD PTR c23$[rbp] 00288 62 f1 fd 48 11 45 0b vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 355 : ; 356 : //group 3 ; 357 : b01_perm = _mm512_shuffle_pd(b01, b01, _FMA_SELECT(3)); 0028f 62 f1 fd 48 10 45 05 vmovupd zmm0, ZMMWORD PTR b01$[rbp] 00296 62 f1 fd 48 c6 45 05 ff vshufpd zmm0, zmm0, ZMMWORD PTR b01$[rbp], 255 ; 000000ffH 0029e 62 f1 fd 48 11 45 0d vmovupd ZMMWORD PTR b01_perm$[rbp], zmm0 ; 358 : b23_perm = _mm512_shuffle_pd(b23, b23, _FMA_SELECT(3)); 002a5 62 f1 fd 48 10 45 07 vmovupd zmm0, ZMMWORD PTR b23$[rbp] 002ac 62 f1 fd 48 c6 45 07 ff vshufpd zmm0, zmm0, ZMMWORD PTR b23$[rbp], 255 ; 000000ffH 002b4 62 f1 fd 48 11 45 0f vmovupd ZMMWORD PTR b23_perm$[rbp], zmm0 ; 359 : c01 = _mm512_fmadd_pd(a30, b01_perm, c01); 002bb 62 f1 fd 48 10 45 13 vmovupd zmm0, ZMMWORD PTR a30$[rbp] 002c2 62 f1 fd 48 10 4d 0d vmovupd zmm1, ZMMWORD PTR b01_perm$[rbp] 002c9 62 f2 f5 48 a8 45 09 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c01$[rbp] 002d0 62 f1 fd 48 11 45 09 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 360 : c23 = _mm512_fmadd_pd(a12, b23_perm, c23); 002d7 62 f1 fd 48 10 45 11 vmovupd zmm0, ZMMWORD PTR a12$[rbp] 002de 62 f1 fd 48 10 4d 0f vmovupd zmm1, ZMMWORD PTR b23_perm$[rbp] 002e5 62 f2 f5 48 a8 45 0b vfmadd213pd zmm0, zmm1, ZMMWORD PTR c23$[rbp] 002ec 62 f1 fd 48 11 45 0b vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 361 : ; 362 : _mm512_store_pd((double *)&ans->f64_z[0], c01); 002f3 b8 40 00 00 00 mov eax, 64 ; 00000040H 002f8 48 6b c0 00 imul rax, rax, 0 002fc 49 8b 8d c0 07 00 00 mov rcx, QWORD PTR ans$[r13] 00303 48 03 c8 add rcx, rax 00306 48 8b c1 mov rax, rcx 00309 62 f1 fd 48 10 45 09 vmovupd zmm0, ZMMWORD PTR c01$[rbp] 00310 62 f1 fd 48 11 00 vmovupd ZMMWORD PTR [rax], zmm0 ; 363 : _mm512_store_pd((double *)&ans->f64_z[1], c23); 00316 b8 40 00 00 00 mov eax, 64 ; 00000040H 0031b 48 6b c0 01 imul rax, rax, 1 0031f 49 8b 8d c0 07 00 00 mov rcx, QWORD PTR ans$[r13] 00326 48 03 c8 add rcx, rax 00329 48 8b c1 mov rax, rcx 0032c 62 f1 fd 48 10 45 0b vmovupd zmm0, ZMMWORD PTR c23$[rbp] 00333 62 f1 fd 48 11 00 vmovupd ZMMWORD PTR [rax], zmm0 ; 364 : } 00339 49 8d a5 90 07 00 00 lea rsp, QWORD PTR [r13+1936] 00340 5f pop rdi 00341 5d pop rbp 00342 41 5d pop r13 00344 c3 ret 0 double_kernel_fma_512 ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma.x86.c ; COMDAT double_kernel_fma_avx_fma _TEXT SEGMENT a0$ = 32 a1$ = 96 a2$ = 160 a3$ = 224 b0$ = 288 b1$ = 352 b2$ = 416 b3$ = 480 ccol$ = 544 left$ = 1040 right$ = 1048 ans$ = 1056 double_kernel_fma_avx_fma PROC ; COMDAT ; 277 : { $LN3: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f 41 55 push r13 00011 55 push rbp 00012 57 push rdi 00013 48 81 ec 10 04 00 00 sub rsp, 1040 ; 00000410H 0001a 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 0001f 48 8d 6c 24 40 lea rbp, QWORD PTR [rsp+64] 00024 48 83 e5 e0 and rbp, -32 ; ffffffffffffffe0H 00028 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__F8387F23_m@fma@x86@c 0002f e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00034 90 npad 1 ; 278 : const __m256d a0 = _mm256_load_pd((double *)&left->f64_y[0]); 00035 b8 20 00 00 00 mov eax, 32 ; 00000020H 0003a 48 6b c0 00 imul rax, rax, 0 0003e 49 8b 8d 10 04 00 00 mov rcx, QWORD PTR left$[r13] 00045 48 03 c8 add rcx, rax 00048 48 8b c1 mov rax, rcx 0004b c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0004f c5 fd 11 45 20 vmovupd YMMWORD PTR a0$[rbp], ymm0 ; 279 : const __m256d a1 = _mm256_load_pd((double *)&left->f64_y[1]); 00054 b8 20 00 00 00 mov eax, 32 ; 00000020H 00059 48 6b c0 01 imul rax, rax, 1 0005d 49 8b 8d 10 04 00 00 mov rcx, QWORD PTR left$[r13] 00064 48 03 c8 add rcx, rax 00067 48 8b c1 mov rax, rcx 0006a c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0006e c5 fd 11 45 60 vmovupd YMMWORD PTR a1$[rbp], ymm0 ; 280 : const __m256d a2 = _mm256_load_pd((double *)&left->f64_y[2]); 00073 b8 20 00 00 00 mov eax, 32 ; 00000020H 00078 48 6b c0 02 imul rax, rax, 2 0007c 49 8b 8d 10 04 00 00 mov rcx, QWORD PTR left$[r13] 00083 48 03 c8 add rcx, rax 00086 48 8b c1 mov rax, rcx 00089 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0008d c5 fd 11 85 a0 00 00 00 vmovupd YMMWORD PTR a2$[rbp], ymm0 ; 281 : const __m256d a3 = _mm256_load_pd((double *)&left->f64_y[3]); 00095 b8 20 00 00 00 mov eax, 32 ; 00000020H 0009a 48 6b c0 03 imul rax, rax, 3 0009e 49 8b 8d 10 04 00 00 mov rcx, QWORD PTR left$[r13] 000a5 48 03 c8 add rcx, rax 000a8 48 8b c1 mov rax, rcx 000ab c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000af c5 fd 11 85 e0 00 00 00 vmovupd YMMWORD PTR a3$[rbp], ymm0 ; 282 : ; 283 : __m256d b0 = _mm256_load_pd((double *)&right->f64_y[0]); 000b7 b8 20 00 00 00 mov eax, 32 ; 00000020H 000bc 48 6b c0 00 imul rax, rax, 0 000c0 49 8b 8d 18 04 00 00 mov rcx, QWORD PTR right$[r13] 000c7 48 03 c8 add rcx, rax 000ca 48 8b c1 mov rax, rcx 000cd c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000d1 c5 fd 11 85 20 01 00 00 vmovupd YMMWORD PTR b0$[rbp], ymm0 ; 284 : __m256d b1 = _mm256_load_pd((double *)&right->f64_y[1]); 000d9 b8 20 00 00 00 mov eax, 32 ; 00000020H 000de 48 6b c0 01 imul rax, rax, 1 000e2 49 8b 8d 18 04 00 00 mov rcx, QWORD PTR right$[r13] 000e9 48 03 c8 add rcx, rax 000ec 48 8b c1 mov rax, rcx 000ef c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000f3 c5 fd 11 85 60 01 00 00 vmovupd YMMWORD PTR b1$[rbp], ymm0 ; 285 : __m256d b2 = _mm256_load_pd((double *)&right->f64_y[2]); 000fb b8 20 00 00 00 mov eax, 32 ; 00000020H 00100 48 6b c0 02 imul rax, rax, 2 00104 49 8b 8d 18 04 00 00 mov rcx, QWORD PTR right$[r13] 0010b 48 03 c8 add rcx, rax 0010e 48 8b c1 mov rax, rcx 00111 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00115 c5 fd 11 85 a0 01 00 00 vmovupd YMMWORD PTR b2$[rbp], ymm0 ; 286 : __m256d b3 = _mm256_load_pd((double *)&right->f64_y[3]); 0011d b8 20 00 00 00 mov eax, 32 ; 00000020H 00122 48 6b c0 03 imul rax, rax, 3 00126 49 8b 8d 18 04 00 00 mov rcx, QWORD PTR right$[r13] 0012d 48 03 c8 add rcx, rax 00130 48 8b c1 mov rax, rcx 00133 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00137 c5 fd 11 85 e0 01 00 00 vmovupd YMMWORD PTR b3$[rbp], ymm0 ; 287 : ; 288 : register __m256d ccol; ; 289 : ; 290 : /* Column 0 */ ; 291 : ccol = _mm256_load_pd((double *)&ans->f64_y[0]); 0013f b8 20 00 00 00 mov eax, 32 ; 00000020H 00144 48 6b c0 00 imul rax, rax, 0 00148 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 0014f 48 03 c8 add rcx, rax 00152 48 8b c1 mov rax, rcx 00155 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00159 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 292 : ccol = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(b0, _FMA_SELECT(0)), ccol); 00161 c4 e3 fd 01 85 20 01 00 00 00 vpermpd ymm0, YMMWORD PTR b0$[rbp], 0 0016b c5 fd 10 4d 20 vmovupd ymm1, YMMWORD PTR a0$[rbp] 00170 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 00179 c5 fd 10 c1 vmovupd ymm0, ymm1 0017d c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 293 : ccol = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(b0, _FMA_SELECT(1)), ccol); 00185 c4 e3 fd 01 85 20 01 00 00 55 vpermpd ymm0, YMMWORD PTR b0$[rbp], 85 ; 00000055H 0018f c5 fd 10 4d 60 vmovupd ymm1, YMMWORD PTR a1$[rbp] 00194 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 0019d c5 fd 10 c1 vmovupd ymm0, ymm1 001a1 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 294 : ccol = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(b0, _FMA_SELECT(2)), ccol); 001a9 c4 e3 fd 01 85 20 01 00 00 aa vpermpd ymm0, YMMWORD PTR b0$[rbp], 170 ; 000000aaH 001b3 c5 fd 10 8d a0 00 00 00 vmovupd ymm1, YMMWORD PTR a2$[rbp] 001bb c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 001c4 c5 fd 10 c1 vmovupd ymm0, ymm1 001c8 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 295 : ccol = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(b0, _FMA_SELECT(3)), ccol); 001d0 c4 e3 fd 01 85 20 01 00 00 ff vpermpd ymm0, YMMWORD PTR b0$[rbp], 255 ; 000000ffH 001da c5 fd 10 8d e0 00 00 00 vmovupd ymm1, YMMWORD PTR a3$[rbp] 001e2 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 001eb c5 fd 10 c1 vmovupd ymm0, ymm1 001ef c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 296 : _mm256_store_pd((double *)&ans->f64_y[0], ccol); 001f7 b8 20 00 00 00 mov eax, 32 ; 00000020H 001fc 48 6b c0 00 imul rax, rax, 0 00200 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 00207 48 03 c8 add rcx, rax 0020a 48 8b c1 mov rax, rcx 0020d c5 fd 10 85 20 02 00 00 vmovupd ymm0, YMMWORD PTR ccol$[rbp] 00215 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 297 : /* Column 1 */ ; 298 : ccol = _mm256_load_pd((double *)&ans->f64_y[1]); 00219 b8 20 00 00 00 mov eax, 32 ; 00000020H 0021e 48 6b c0 01 imul rax, rax, 1 00222 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 00229 48 03 c8 add rcx, rax 0022c 48 8b c1 mov rax, rcx 0022f c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00233 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 299 : ccol = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(b1, _FMA_SELECT(0)), ccol); 0023b c4 e3 fd 01 85 60 01 00 00 00 vpermpd ymm0, YMMWORD PTR b1$[rbp], 0 00245 c5 fd 10 4d 20 vmovupd ymm1, YMMWORD PTR a0$[rbp] 0024a c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 00253 c5 fd 10 c1 vmovupd ymm0, ymm1 00257 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 300 : ccol = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(b1, _FMA_SELECT(1)), ccol); 0025f c4 e3 fd 01 85 60 01 00 00 55 vpermpd ymm0, YMMWORD PTR b1$[rbp], 85 ; 00000055H 00269 c5 fd 10 4d 60 vmovupd ymm1, YMMWORD PTR a1$[rbp] 0026e c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 00277 c5 fd 10 c1 vmovupd ymm0, ymm1 0027b c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 301 : ccol = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(b1, _FMA_SELECT(2)), ccol); 00283 c4 e3 fd 01 85 60 01 00 00 aa vpermpd ymm0, YMMWORD PTR b1$[rbp], 170 ; 000000aaH 0028d c5 fd 10 8d a0 00 00 00 vmovupd ymm1, YMMWORD PTR a2$[rbp] 00295 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 0029e c5 fd 10 c1 vmovupd ymm0, ymm1 002a2 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 302 : ccol = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(b1, _FMA_SELECT(3)), ccol); 002aa c4 e3 fd 01 85 60 01 00 00 ff vpermpd ymm0, YMMWORD PTR b1$[rbp], 255 ; 000000ffH 002b4 c5 fd 10 8d e0 00 00 00 vmovupd ymm1, YMMWORD PTR a3$[rbp] 002bc c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 002c5 c5 fd 10 c1 vmovupd ymm0, ymm1 002c9 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 303 : _mm256_store_pd((double *)&ans->f64_y[1], ccol); 002d1 b8 20 00 00 00 mov eax, 32 ; 00000020H 002d6 48 6b c0 01 imul rax, rax, 1 002da 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 002e1 48 03 c8 add rcx, rax 002e4 48 8b c1 mov rax, rcx 002e7 c5 fd 10 85 20 02 00 00 vmovupd ymm0, YMMWORD PTR ccol$[rbp] 002ef c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 304 : /* Column 2 */ ; 305 : ccol = _mm256_load_pd((double *)&ans->f64_y[2]); 002f3 b8 20 00 00 00 mov eax, 32 ; 00000020H 002f8 48 6b c0 02 imul rax, rax, 2 002fc 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 00303 48 03 c8 add rcx, rax 00306 48 8b c1 mov rax, rcx 00309 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0030d c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 306 : ccol = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(b2, _FMA_SELECT(0)), ccol); 00315 c4 e3 fd 01 85 a0 01 00 00 00 vpermpd ymm0, YMMWORD PTR b2$[rbp], 0 0031f c5 fd 10 4d 20 vmovupd ymm1, YMMWORD PTR a0$[rbp] 00324 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 0032d c5 fd 10 c1 vmovupd ymm0, ymm1 00331 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 307 : ccol = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(b2, _FMA_SELECT(1)), ccol); 00339 c4 e3 fd 01 85 a0 01 00 00 55 vpermpd ymm0, YMMWORD PTR b2$[rbp], 85 ; 00000055H 00343 c5 fd 10 4d 60 vmovupd ymm1, YMMWORD PTR a1$[rbp] 00348 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 00351 c5 fd 10 c1 vmovupd ymm0, ymm1 00355 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 308 : ccol = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(b2, _FMA_SELECT(2)), ccol); 0035d c4 e3 fd 01 85 a0 01 00 00 aa vpermpd ymm0, YMMWORD PTR b2$[rbp], 170 ; 000000aaH 00367 c5 fd 10 8d a0 00 00 00 vmovupd ymm1, YMMWORD PTR a2$[rbp] 0036f c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 00378 c5 fd 10 c1 vmovupd ymm0, ymm1 0037c c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 309 : ccol = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(b2, _FMA_SELECT(3)), ccol); 00384 c4 e3 fd 01 85 a0 01 00 00 ff vpermpd ymm0, YMMWORD PTR b2$[rbp], 255 ; 000000ffH 0038e c5 fd 10 8d e0 00 00 00 vmovupd ymm1, YMMWORD PTR a3$[rbp] 00396 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 0039f c5 fd 10 c1 vmovupd ymm0, ymm1 003a3 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 310 : _mm256_store_pd((double *)&ans->f64_y[2], ccol); 003ab b8 20 00 00 00 mov eax, 32 ; 00000020H 003b0 48 6b c0 02 imul rax, rax, 2 003b4 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 003bb 48 03 c8 add rcx, rax 003be 48 8b c1 mov rax, rcx 003c1 c5 fd 10 85 20 02 00 00 vmovupd ymm0, YMMWORD PTR ccol$[rbp] 003c9 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 311 : /* Column 3 */ ; 312 : ccol = _mm256_load_pd((double *)&ans->f64_y[3]); 003cd b8 20 00 00 00 mov eax, 32 ; 00000020H 003d2 48 6b c0 03 imul rax, rax, 3 003d6 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 003dd 48 03 c8 add rcx, rax 003e0 48 8b c1 mov rax, rcx 003e3 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 003e7 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 313 : ccol = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(b3, _FMA_SELECT(0)), ccol); 003ef c4 e3 fd 01 85 e0 01 00 00 00 vpermpd ymm0, YMMWORD PTR b3$[rbp], 0 003f9 c5 fd 10 4d 20 vmovupd ymm1, YMMWORD PTR a0$[rbp] 003fe c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 00407 c5 fd 10 c1 vmovupd ymm0, ymm1 0040b c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 314 : ccol = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(b3, _FMA_SELECT(1)), ccol); 00413 c4 e3 fd 01 85 e0 01 00 00 55 vpermpd ymm0, YMMWORD PTR b3$[rbp], 85 ; 00000055H 0041d c5 fd 10 4d 60 vmovupd ymm1, YMMWORD PTR a1$[rbp] 00422 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 0042b c5 fd 10 c1 vmovupd ymm0, ymm1 0042f c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 315 : ccol = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(b3, _FMA_SELECT(2)), ccol); 00437 c4 e3 fd 01 85 e0 01 00 00 aa vpermpd ymm0, YMMWORD PTR b3$[rbp], 170 ; 000000aaH 00441 c5 fd 10 8d a0 00 00 00 vmovupd ymm1, YMMWORD PTR a2$[rbp] 00449 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 00452 c5 fd 10 c1 vmovupd ymm0, ymm1 00456 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 316 : ccol = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(b3, _FMA_SELECT(3)), ccol); 0045e c4 e3 fd 01 85 e0 01 00 00 ff vpermpd ymm0, YMMWORD PTR b3$[rbp], 255 ; 000000ffH 00468 c5 fd 10 8d e0 00 00 00 vmovupd ymm1, YMMWORD PTR a3$[rbp] 00470 c4 e2 fd a8 8d 20 02 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR ccol$[rbp] 00479 c5 fd 10 c1 vmovupd ymm0, ymm1 0047d c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 317 : _mm256_store_pd((double *)&ans->f64_y[3], ccol); 00485 b8 20 00 00 00 mov eax, 32 ; 00000020H 0048a 48 6b c0 03 imul rax, rax, 3 0048e 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 00495 48 03 c8 add rcx, rax 00498 48 8b c1 mov rax, rcx 0049b c5 fd 10 85 20 02 00 00 vmovupd ymm0, YMMWORD PTR ccol$[rbp] 004a3 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 318 : } 004a7 49 8d a5 f0 03 00 00 lea rsp, QWORD PTR [r13+1008] 004ae 5f pop rdi 004af 5d pop rbp 004b0 41 5d pop r13 004b2 c3 ret 0 double_kernel_fma_avx_fma ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma.x86.c ; COMDAT double_kernel_fma_avx _TEXT SEGMENT a0$ = 32 a1$ = 96 a2$ = 160 a3$ = 224 b0$ = 288 b1$ = 352 b2$ = 416 b3$ = 480 ccol$ = 544 left$ = 1040 right$ = 1048 ans$ = 1056 double_kernel_fma_avx PROC ; COMDAT ; 233 : { $LN3: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f 41 55 push r13 00011 55 push rbp 00012 57 push rdi 00013 48 81 ec 10 04 00 00 sub rsp, 1040 ; 00000410H 0001a 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 0001f 48 8d 6c 24 40 lea rbp, QWORD PTR [rsp+64] 00024 48 83 e5 e0 and rbp, -32 ; ffffffffffffffe0H 00028 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__F8387F23_m@fma@x86@c 0002f e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00034 90 npad 1 ; 234 : const __m256d a0 = _mm256_load_pd((double *)&left->f64_y[0]); 00035 b8 20 00 00 00 mov eax, 32 ; 00000020H 0003a 48 6b c0 00 imul rax, rax, 0 0003e 49 8b 8d 10 04 00 00 mov rcx, QWORD PTR left$[r13] 00045 48 03 c8 add rcx, rax 00048 48 8b c1 mov rax, rcx 0004b c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0004f c5 fd 11 45 20 vmovupd YMMWORD PTR a0$[rbp], ymm0 ; 235 : const __m256d a1 = _mm256_load_pd((double *)&left->f64_y[1]); 00054 b8 20 00 00 00 mov eax, 32 ; 00000020H 00059 48 6b c0 01 imul rax, rax, 1 0005d 49 8b 8d 10 04 00 00 mov rcx, QWORD PTR left$[r13] 00064 48 03 c8 add rcx, rax 00067 48 8b c1 mov rax, rcx 0006a c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0006e c5 fd 11 45 60 vmovupd YMMWORD PTR a1$[rbp], ymm0 ; 236 : const __m256d a2 = _mm256_load_pd((double *)&left->f64_y[2]); 00073 b8 20 00 00 00 mov eax, 32 ; 00000020H 00078 48 6b c0 02 imul rax, rax, 2 0007c 49 8b 8d 10 04 00 00 mov rcx, QWORD PTR left$[r13] 00083 48 03 c8 add rcx, rax 00086 48 8b c1 mov rax, rcx 00089 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0008d c5 fd 11 85 a0 00 00 00 vmovupd YMMWORD PTR a2$[rbp], ymm0 ; 237 : const __m256d a3 = _mm256_load_pd((double *)&left->f64_y[3]); 00095 b8 20 00 00 00 mov eax, 32 ; 00000020H 0009a 48 6b c0 03 imul rax, rax, 3 0009e 49 8b 8d 10 04 00 00 mov rcx, QWORD PTR left$[r13] 000a5 48 03 c8 add rcx, rax 000a8 48 8b c1 mov rax, rcx 000ab c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000af c5 fd 11 85 e0 00 00 00 vmovupd YMMWORD PTR a3$[rbp], ymm0 ; 238 : ; 239 : __m256d b0 = _mm256_load_pd((double *)&right->f64_y[0]); 000b7 b8 20 00 00 00 mov eax, 32 ; 00000020H 000bc 48 6b c0 00 imul rax, rax, 0 000c0 49 8b 8d 18 04 00 00 mov rcx, QWORD PTR right$[r13] 000c7 48 03 c8 add rcx, rax 000ca 48 8b c1 mov rax, rcx 000cd c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000d1 c5 fd 11 85 20 01 00 00 vmovupd YMMWORD PTR b0$[rbp], ymm0 ; 240 : __m256d b1 = _mm256_load_pd((double *)&right->f64_y[1]); 000d9 b8 20 00 00 00 mov eax, 32 ; 00000020H 000de 48 6b c0 01 imul rax, rax, 1 000e2 49 8b 8d 18 04 00 00 mov rcx, QWORD PTR right$[r13] 000e9 48 03 c8 add rcx, rax 000ec 48 8b c1 mov rax, rcx 000ef c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000f3 c5 fd 11 85 60 01 00 00 vmovupd YMMWORD PTR b1$[rbp], ymm0 ; 241 : __m256d b2 = _mm256_load_pd((double *)&right->f64_y[2]); 000fb b8 20 00 00 00 mov eax, 32 ; 00000020H 00100 48 6b c0 02 imul rax, rax, 2 00104 49 8b 8d 18 04 00 00 mov rcx, QWORD PTR right$[r13] 0010b 48 03 c8 add rcx, rax 0010e 48 8b c1 mov rax, rcx 00111 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00115 c5 fd 11 85 a0 01 00 00 vmovupd YMMWORD PTR b2$[rbp], ymm0 ; 242 : __m256d b3 = _mm256_load_pd((double *)&right->f64_y[3]); 0011d b8 20 00 00 00 mov eax, 32 ; 00000020H 00122 48 6b c0 03 imul rax, rax, 3 00126 49 8b 8d 18 04 00 00 mov rcx, QWORD PTR right$[r13] 0012d 48 03 c8 add rcx, rax 00130 48 8b c1 mov rax, rcx 00133 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00137 c5 fd 11 85 e0 01 00 00 vmovupd YMMWORD PTR b3$[rbp], ymm0 ; 243 : ; 244 : register __m256d ccol; ; 245 : ; 246 : /* Column 0 */ ; 247 : ccol = _mm256_load_pd((double *)&ans->f64_y[0]); 0013f b8 20 00 00 00 mov eax, 32 ; 00000020H 00144 48 6b c0 00 imul rax, rax, 0 00148 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 0014f 48 03 c8 add rcx, rax 00152 48 8b c1 mov rax, rcx 00155 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00159 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 248 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a0, _mm256_permute4x64_pd(b0, _FMA_SELECT(0)))); 00161 c4 e3 fd 01 85 20 01 00 00 00 vpermpd ymm0, YMMWORD PTR b0$[rbp], 0 0016b c5 fd 10 4d 20 vmovupd ymm1, YMMWORD PTR a0$[rbp] 00170 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00174 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 0017c c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00180 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 249 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a1, _mm256_permute4x64_pd(b0, _FMA_SELECT(1)))); 00188 c4 e3 fd 01 85 20 01 00 00 55 vpermpd ymm0, YMMWORD PTR b0$[rbp], 85 ; 00000055H 00192 c5 fd 10 4d 60 vmovupd ymm1, YMMWORD PTR a1$[rbp] 00197 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 0019b c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 001a3 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 001a7 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 250 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a2, _mm256_permute4x64_pd(b0, _FMA_SELECT(2)))); 001af c4 e3 fd 01 85 20 01 00 00 aa vpermpd ymm0, YMMWORD PTR b0$[rbp], 170 ; 000000aaH 001b9 c5 fd 10 8d a0 00 00 00 vmovupd ymm1, YMMWORD PTR a2$[rbp] 001c1 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 001c5 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 001cd c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 001d1 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 251 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a3, _mm256_permute4x64_pd(b0, _FMA_SELECT(3)))); 001d9 c4 e3 fd 01 85 20 01 00 00 ff vpermpd ymm0, YMMWORD PTR b0$[rbp], 255 ; 000000ffH 001e3 c5 fd 10 8d e0 00 00 00 vmovupd ymm1, YMMWORD PTR a3$[rbp] 001eb c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 001ef c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 001f7 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 001fb c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 252 : _mm256_store_pd((double *)&ans->f64_y[0], ccol); 00203 b8 20 00 00 00 mov eax, 32 ; 00000020H 00208 48 6b c0 00 imul rax, rax, 0 0020c 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 00213 48 03 c8 add rcx, rax 00216 48 8b c1 mov rax, rcx 00219 c5 fd 10 85 20 02 00 00 vmovupd ymm0, YMMWORD PTR ccol$[rbp] 00221 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 253 : /* Column 1 */ ; 254 : ccol = _mm256_load_pd((double *)&ans->f64_y[1]); 00225 b8 20 00 00 00 mov eax, 32 ; 00000020H 0022a 48 6b c0 01 imul rax, rax, 1 0022e 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 00235 48 03 c8 add rcx, rax 00238 48 8b c1 mov rax, rcx 0023b c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0023f c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 255 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a0, _mm256_permute4x64_pd(b1, _FMA_SELECT(0)))); 00247 c4 e3 fd 01 85 60 01 00 00 00 vpermpd ymm0, YMMWORD PTR b1$[rbp], 0 00251 c5 fd 10 4d 20 vmovupd ymm1, YMMWORD PTR a0$[rbp] 00256 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 0025a c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 00262 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00266 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 256 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a1, _mm256_permute4x64_pd(b1, _FMA_SELECT(1)))); 0026e c4 e3 fd 01 85 60 01 00 00 55 vpermpd ymm0, YMMWORD PTR b1$[rbp], 85 ; 00000055H 00278 c5 fd 10 4d 60 vmovupd ymm1, YMMWORD PTR a1$[rbp] 0027d c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00281 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 00289 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 0028d c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 257 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a2, _mm256_permute4x64_pd(b1, _FMA_SELECT(2)))); 00295 c4 e3 fd 01 85 60 01 00 00 aa vpermpd ymm0, YMMWORD PTR b1$[rbp], 170 ; 000000aaH 0029f c5 fd 10 8d a0 00 00 00 vmovupd ymm1, YMMWORD PTR a2$[rbp] 002a7 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 002ab c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 002b3 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 002b7 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 258 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a3, _mm256_permute4x64_pd(b1, _FMA_SELECT(3)))); 002bf c4 e3 fd 01 85 60 01 00 00 ff vpermpd ymm0, YMMWORD PTR b1$[rbp], 255 ; 000000ffH 002c9 c5 fd 10 8d e0 00 00 00 vmovupd ymm1, YMMWORD PTR a3$[rbp] 002d1 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 002d5 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 002dd c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 002e1 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 259 : _mm256_store_pd((double *)&ans->f64_y[1], ccol); 002e9 b8 20 00 00 00 mov eax, 32 ; 00000020H 002ee 48 6b c0 01 imul rax, rax, 1 002f2 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 002f9 48 03 c8 add rcx, rax 002fc 48 8b c1 mov rax, rcx 002ff c5 fd 10 85 20 02 00 00 vmovupd ymm0, YMMWORD PTR ccol$[rbp] 00307 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 260 : /* Column 2 */ ; 261 : ccol = _mm256_load_pd((double *)&ans->f64_y[2]); 0030b b8 20 00 00 00 mov eax, 32 ; 00000020H 00310 48 6b c0 02 imul rax, rax, 2 00314 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 0031b 48 03 c8 add rcx, rax 0031e 48 8b c1 mov rax, rcx 00321 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00325 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 262 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a0, _mm256_permute4x64_pd(b2, _FMA_SELECT(0)))); 0032d c4 e3 fd 01 85 a0 01 00 00 00 vpermpd ymm0, YMMWORD PTR b2$[rbp], 0 00337 c5 fd 10 4d 20 vmovupd ymm1, YMMWORD PTR a0$[rbp] 0033c c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00340 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 00348 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 0034c c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 263 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a1, _mm256_permute4x64_pd(b2, _FMA_SELECT(1)))); 00354 c4 e3 fd 01 85 a0 01 00 00 55 vpermpd ymm0, YMMWORD PTR b2$[rbp], 85 ; 00000055H 0035e c5 fd 10 4d 60 vmovupd ymm1, YMMWORD PTR a1$[rbp] 00363 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00367 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 0036f c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00373 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 264 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a2, _mm256_permute4x64_pd(b2, _FMA_SELECT(2)))); 0037b c4 e3 fd 01 85 a0 01 00 00 aa vpermpd ymm0, YMMWORD PTR b2$[rbp], 170 ; 000000aaH 00385 c5 fd 10 8d a0 00 00 00 vmovupd ymm1, YMMWORD PTR a2$[rbp] 0038d c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00391 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 00399 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 0039d c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 265 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a3, _mm256_permute4x64_pd(b2, _FMA_SELECT(3)))); 003a5 c4 e3 fd 01 85 a0 01 00 00 ff vpermpd ymm0, YMMWORD PTR b2$[rbp], 255 ; 000000ffH 003af c5 fd 10 8d e0 00 00 00 vmovupd ymm1, YMMWORD PTR a3$[rbp] 003b7 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 003bb c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 003c3 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 003c7 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 266 : _mm256_store_pd((double *)&ans->f64_y[2], ccol); 003cf b8 20 00 00 00 mov eax, 32 ; 00000020H 003d4 48 6b c0 02 imul rax, rax, 2 003d8 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 003df 48 03 c8 add rcx, rax 003e2 48 8b c1 mov rax, rcx 003e5 c5 fd 10 85 20 02 00 00 vmovupd ymm0, YMMWORD PTR ccol$[rbp] 003ed c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 267 : /* Column 3 */ ; 268 : ccol = _mm256_load_pd((double *)&ans->f64_y[3]); 003f1 b8 20 00 00 00 mov eax, 32 ; 00000020H 003f6 48 6b c0 03 imul rax, rax, 3 003fa 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 00401 48 03 c8 add rcx, rax 00404 48 8b c1 mov rax, rcx 00407 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0040b c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 269 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a0, _mm256_permute4x64_pd(b3, _FMA_SELECT(0)))); 00413 c4 e3 fd 01 85 e0 01 00 00 00 vpermpd ymm0, YMMWORD PTR b3$[rbp], 0 0041d c5 fd 10 4d 20 vmovupd ymm1, YMMWORD PTR a0$[rbp] 00422 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00426 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 0042e c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00432 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 270 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a1, _mm256_permute4x64_pd(b3, _FMA_SELECT(1)))); 0043a c4 e3 fd 01 85 e0 01 00 00 55 vpermpd ymm0, YMMWORD PTR b3$[rbp], 85 ; 00000055H 00444 c5 fd 10 4d 60 vmovupd ymm1, YMMWORD PTR a1$[rbp] 00449 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 0044d c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 00455 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00459 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 271 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a2, _mm256_permute4x64_pd(b3, _FMA_SELECT(2)))); 00461 c4 e3 fd 01 85 e0 01 00 00 aa vpermpd ymm0, YMMWORD PTR b3$[rbp], 170 ; 000000aaH 0046b c5 fd 10 8d a0 00 00 00 vmovupd ymm1, YMMWORD PTR a2$[rbp] 00473 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00477 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 0047f c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00483 c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 272 : ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a3, _mm256_permute4x64_pd(b3, _FMA_SELECT(3)))); 0048b c4 e3 fd 01 85 e0 01 00 00 ff vpermpd ymm0, YMMWORD PTR b3$[rbp], 255 ; 000000ffH 00495 c5 fd 10 8d e0 00 00 00 vmovupd ymm1, YMMWORD PTR a3$[rbp] 0049d c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 004a1 c5 fd 10 8d 20 02 00 00 vmovupd ymm1, YMMWORD PTR ccol$[rbp] 004a9 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 004ad c5 fd 11 85 20 02 00 00 vmovupd YMMWORD PTR ccol$[rbp], ymm0 ; 273 : _mm256_store_pd((double *)&ans->f64_y[3], ccol); 004b5 b8 20 00 00 00 mov eax, 32 ; 00000020H 004ba 48 6b c0 03 imul rax, rax, 3 004be 49 8b 8d 20 04 00 00 mov rcx, QWORD PTR ans$[r13] 004c5 48 03 c8 add rcx, rax 004c8 48 8b c1 mov rax, rcx 004cb c5 fd 10 85 20 02 00 00 vmovupd ymm0, YMMWORD PTR ccol$[rbp] 004d3 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 274 : } 004d7 49 8d a5 f0 03 00 00 lea rsp, QWORD PTR [r13+1008] 004de 5f pop rdi 004df 5d pop rbp 004e0 41 5d pop r13 004e2 c3 ret 0 double_kernel_fma_avx ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma.x86.c ; COMDAT double_kernel_fma_sse _TEXT SEGMENT col$1 = 4 c_lo$2 = 48 c_hi$3 = 96 b_lo$4 = 144 b_hi$5 = 192 a_lo$6 = 240 a_hi$7 = 288 b$8 = 336 left$ = 592 right$ = 600 ans$ = 608 double_kernel_fma_sse PROC ; COMDAT ; 189 : { $LN6: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f 55 push rbp 00010 57 push rdi 00011 48 81 ec 58 02 00 00 sub rsp, 600 ; 00000258H 00018 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 0001d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__F8387F23_m@fma@x86@c 00024 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00029 90 npad 1 ; 190 : for (int col = 0; col < 4; ++col) { 0002a c7 45 04 00 00 00 00 mov DWORD PTR col$1[rbp], 0 00031 eb 08 jmp SHORT $LN4@double_ker $LN2@double_ker: 00033 8b 45 04 mov eax, DWORD PTR col$1[rbp] 00036 ff c0 inc eax 00038 89 45 04 mov DWORD PTR col$1[rbp], eax $LN4@double_ker: 0003b 83 7d 04 04 cmp DWORD PTR col$1[rbp], 4 0003f 0f 8d c5 02 00 00 jge $LN3@double_ker ; 191 : /* current answer column (two chunks: rows 0-1 and 2-3) */ ; 192 : register __m128d c_lo = _mm_load_pd(ans->f64_x + (col * 2 + 0)); 00045 8b 45 04 mov eax, DWORD PTR col$1[rbp] 00048 03 c0 add eax, eax 0004a 48 98 cdqe 0004c 48 6b c0 10 imul rax, rax, 16 00050 48 8b 8d 60 02 00 00 mov rcx, QWORD PTR ans$[rbp] 00057 48 03 c8 add rcx, rax 0005a 48 8b c1 mov rax, rcx 0005d 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00060 0f 29 45 30 movaps XMMWORD PTR c_lo$2[rbp], xmm0 ; 193 : register __m128d c_hi = _mm_load_pd(ans->f64_x + (col * 2 + 1)); 00064 8b 45 04 mov eax, DWORD PTR col$1[rbp] 00067 8d 44 00 01 lea eax, DWORD PTR [rax+rax+1] 0006b 48 98 cdqe 0006d 48 6b c0 10 imul rax, rax, 16 00071 48 8b 8d 60 02 00 00 mov rcx, QWORD PTR ans$[rbp] 00078 48 03 c8 add rcx, rax 0007b 48 8b c1 mov rax, rcx 0007e 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00081 0f 29 45 60 movaps XMMWORD PTR c_hi$3[rbp], xmm0 ; 194 : ; 195 : /* right matrix column split into two chunks */ ; 196 : register __m128d b_lo = _mm_load_pd(right + (2 * col + 0)); 00085 8b 45 04 mov eax, DWORD PTR col$1[rbp] 00088 03 c0 add eax, eax 0008a 48 98 cdqe 0008c 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 00093 48 8b 8d 58 02 00 00 mov rcx, QWORD PTR right$[rbp] 0009a 48 03 c8 add rcx, rax 0009d 48 8b c1 mov rax, rcx 000a0 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000a3 0f 29 85 90 00 00 00 movaps XMMWORD PTR b_lo$4[rbp], xmm0 ; 197 : register __m128d b_hi = _mm_load_pd(right + (2 * col + 1)); 000aa 8b 45 04 mov eax, DWORD PTR col$1[rbp] 000ad 8d 44 00 01 lea eax, DWORD PTR [rax+rax+1] 000b1 48 98 cdqe 000b3 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 000ba 48 8b 8d 58 02 00 00 mov rcx, QWORD PTR right$[rbp] 000c1 48 03 c8 add rcx, rax 000c4 48 8b c1 mov rax, rcx 000c7 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000ca 0f 29 85 c0 00 00 00 movaps XMMWORD PTR b_hi$5[rbp], xmm0 ; 198 : ; 199 : /* k = 0 */ ; 200 : register __m128d a_lo = _mm_load_pd(left + (0 * 2 + 0)); 000d1 48 8b 85 50 02 00 00 mov rax, QWORD PTR left$[rbp] 000d8 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000db 0f 29 85 f0 00 00 00 movaps XMMWORD PTR a_lo$6[rbp], xmm0 ; 201 : register __m128d a_hi = _mm_load_pd(left + (0 * 2 + 1)); 000e2 48 8b 85 50 02 00 00 mov rax, QWORD PTR left$[rbp] 000e9 48 05 80 00 00 00 add rax, 128 ; 00000080H 000ef 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000f2 0f 29 85 20 01 00 00 movaps XMMWORD PTR a_hi$7[rbp], xmm0 ; 202 : register __m128d b = _mm_shuffle_pd(b_lo, b_lo, 0x0); 000f9 0f 28 85 90 00 00 00 movaps xmm0, XMMWORD PTR b_lo$4[rbp] 00100 66 0f c6 85 90 00 00 00 00 shufpd xmm0, XMMWORD PTR b_lo$4[rbp], 0 00109 0f 29 85 50 01 00 00 movaps XMMWORD PTR b$8[rbp], xmm0 ; 203 : c_lo = _mm_add_pd(c_lo, _mm_mul_pd(a_lo, b)); 00110 0f 28 85 f0 00 00 00 movaps xmm0, XMMWORD PTR a_lo$6[rbp] 00117 66 0f 59 85 50 01 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 0011f 0f 28 4d 30 movaps xmm1, XMMWORD PTR c_lo$2[rbp] 00123 66 0f 58 c8 addpd xmm1, xmm0 00127 0f 28 c1 movaps xmm0, xmm1 0012a 0f 29 45 30 movaps XMMWORD PTR c_lo$2[rbp], xmm0 ; 204 : c_hi = _mm_add_pd(c_hi, _mm_mul_pd(a_hi, b)); 0012e 0f 28 85 20 01 00 00 movaps xmm0, XMMWORD PTR a_hi$7[rbp] 00135 66 0f 59 85 50 01 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 0013d 0f 28 4d 60 movaps xmm1, XMMWORD PTR c_hi$3[rbp] 00141 66 0f 58 c8 addpd xmm1, xmm0 00145 0f 28 c1 movaps xmm0, xmm1 00148 0f 29 45 60 movaps XMMWORD PTR c_hi$3[rbp], xmm0 ; 205 : ; 206 : /* k = 1 */ ; 207 : a_lo = _mm_load_pd(left + (1 * 2 + 0)); 0014c 48 8b 85 50 02 00 00 mov rax, QWORD PTR left$[rbp] 00153 48 05 00 01 00 00 add rax, 256 ; 00000100H 00159 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0015c 0f 29 85 f0 00 00 00 movaps XMMWORD PTR a_lo$6[rbp], xmm0 ; 208 : a_hi = _mm_load_pd(left + (1 * 2 + 1)); 00163 48 8b 85 50 02 00 00 mov rax, QWORD PTR left$[rbp] 0016a 48 05 80 01 00 00 add rax, 384 ; 00000180H 00170 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00173 0f 29 85 20 01 00 00 movaps XMMWORD PTR a_hi$7[rbp], xmm0 ; 209 : b = _mm_shuffle_pd(b_lo, b_lo, 0x3); 0017a 0f 28 85 90 00 00 00 movaps xmm0, XMMWORD PTR b_lo$4[rbp] 00181 66 0f c6 85 90 00 00 00 03 shufpd xmm0, XMMWORD PTR b_lo$4[rbp], 3 0018a 0f 29 85 50 01 00 00 movaps XMMWORD PTR b$8[rbp], xmm0 ; 210 : c_lo = _mm_add_pd(c_lo, _mm_mul_pd(a_lo, b)); 00191 0f 28 85 f0 00 00 00 movaps xmm0, XMMWORD PTR a_lo$6[rbp] 00198 66 0f 59 85 50 01 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 001a0 0f 28 4d 30 movaps xmm1, XMMWORD PTR c_lo$2[rbp] 001a4 66 0f 58 c8 addpd xmm1, xmm0 001a8 0f 28 c1 movaps xmm0, xmm1 001ab 0f 29 45 30 movaps XMMWORD PTR c_lo$2[rbp], xmm0 ; 211 : c_hi = _mm_add_pd(c_hi, _mm_mul_pd(a_hi, b)); 001af 0f 28 85 20 01 00 00 movaps xmm0, XMMWORD PTR a_hi$7[rbp] 001b6 66 0f 59 85 50 01 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 001be 0f 28 4d 60 movaps xmm1, XMMWORD PTR c_hi$3[rbp] 001c2 66 0f 58 c8 addpd xmm1, xmm0 001c6 0f 28 c1 movaps xmm0, xmm1 001c9 0f 29 45 60 movaps XMMWORD PTR c_hi$3[rbp], xmm0 ; 212 : ; 213 : /* k = 2 */ ; 214 : a_lo = _mm_load_pd(left + (1 * 2 + 0)); 001cd 48 8b 85 50 02 00 00 mov rax, QWORD PTR left$[rbp] 001d4 48 05 00 01 00 00 add rax, 256 ; 00000100H 001da 0f 10 00 movups xmm0, XMMWORD PTR [rax] 001dd 0f 29 85 f0 00 00 00 movaps XMMWORD PTR a_lo$6[rbp], xmm0 ; 215 : a_hi = _mm_load_pd(left + (1 * 2 + 1)); 001e4 48 8b 85 50 02 00 00 mov rax, QWORD PTR left$[rbp] 001eb 48 05 80 01 00 00 add rax, 384 ; 00000180H 001f1 0f 10 00 movups xmm0, XMMWORD PTR [rax] 001f4 0f 29 85 20 01 00 00 movaps XMMWORD PTR a_hi$7[rbp], xmm0 ; 216 : b = _mm_shuffle_pd(b_hi, b_hi, 0x0); 001fb 0f 28 85 c0 00 00 00 movaps xmm0, XMMWORD PTR b_hi$5[rbp] 00202 66 0f c6 85 c0 00 00 00 00 shufpd xmm0, XMMWORD PTR b_hi$5[rbp], 0 0020b 0f 29 85 50 01 00 00 movaps XMMWORD PTR b$8[rbp], xmm0 ; 217 : c_lo = _mm_add_pd(c_lo, _mm_mul_pd(a_lo, b)); 00212 0f 28 85 f0 00 00 00 movaps xmm0, XMMWORD PTR a_lo$6[rbp] 00219 66 0f 59 85 50 01 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 00221 0f 28 4d 30 movaps xmm1, XMMWORD PTR c_lo$2[rbp] 00225 66 0f 58 c8 addpd xmm1, xmm0 00229 0f 28 c1 movaps xmm0, xmm1 0022c 0f 29 45 30 movaps XMMWORD PTR c_lo$2[rbp], xmm0 ; 218 : c_hi = _mm_add_pd(c_hi, _mm_mul_pd(a_hi, b)); 00230 0f 28 85 20 01 00 00 movaps xmm0, XMMWORD PTR a_hi$7[rbp] 00237 66 0f 59 85 50 01 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 0023f 0f 28 4d 60 movaps xmm1, XMMWORD PTR c_hi$3[rbp] 00243 66 0f 58 c8 addpd xmm1, xmm0 00247 0f 28 c1 movaps xmm0, xmm1 0024a 0f 29 45 60 movaps XMMWORD PTR c_hi$3[rbp], xmm0 ; 219 : ; 220 : /* k = 3 */ ; 221 : a_lo = _mm_load_pd(left + (1 * 2 + 0)); 0024e 48 8b 85 50 02 00 00 mov rax, QWORD PTR left$[rbp] 00255 48 05 00 01 00 00 add rax, 256 ; 00000100H 0025b 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0025e 0f 29 85 f0 00 00 00 movaps XMMWORD PTR a_lo$6[rbp], xmm0 ; 222 : a_hi = _mm_load_pd(left + (1 * 2 + 1)); 00265 48 8b 85 50 02 00 00 mov rax, QWORD PTR left$[rbp] 0026c 48 05 80 01 00 00 add rax, 384 ; 00000180H 00272 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00275 0f 29 85 20 01 00 00 movaps XMMWORD PTR a_hi$7[rbp], xmm0 ; 223 : b = _mm_shuffle_pd(b_hi, b_hi, 0x3); 0027c 0f 28 85 c0 00 00 00 movaps xmm0, XMMWORD PTR b_hi$5[rbp] 00283 66 0f c6 85 c0 00 00 00 03 shufpd xmm0, XMMWORD PTR b_hi$5[rbp], 3 0028c 0f 29 85 50 01 00 00 movaps XMMWORD PTR b$8[rbp], xmm0 ; 224 : c_lo = _mm_add_pd(c_lo, _mm_mul_pd(a_lo, b)); 00293 0f 28 85 f0 00 00 00 movaps xmm0, XMMWORD PTR a_lo$6[rbp] 0029a 66 0f 59 85 50 01 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 002a2 0f 28 4d 30 movaps xmm1, XMMWORD PTR c_lo$2[rbp] 002a6 66 0f 58 c8 addpd xmm1, xmm0 002aa 0f 28 c1 movaps xmm0, xmm1 002ad 0f 29 45 30 movaps XMMWORD PTR c_lo$2[rbp], xmm0 ; 225 : c_hi = _mm_add_pd(c_hi, _mm_mul_pd(a_hi, b)); 002b1 0f 28 85 20 01 00 00 movaps xmm0, XMMWORD PTR a_hi$7[rbp] 002b8 66 0f 59 85 50 01 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 002c0 0f 28 4d 60 movaps xmm1, XMMWORD PTR c_hi$3[rbp] 002c4 66 0f 58 c8 addpd xmm1, xmm0 002c8 0f 28 c1 movaps xmm0, xmm1 002cb 0f 29 45 60 movaps XMMWORD PTR c_hi$3[rbp], xmm0 ; 226 : ; 227 : ans->f64_x[col * 2 + 0] = c_lo; 002cf 8b 45 04 mov eax, DWORD PTR col$1[rbp] 002d2 03 c0 add eax, eax 002d4 48 98 cdqe 002d6 48 6b c0 10 imul rax, rax, 16 002da 48 8b 8d 60 02 00 00 mov rcx, QWORD PTR ans$[rbp] 002e1 0f 28 45 30 movaps xmm0, XMMWORD PTR c_lo$2[rbp] 002e5 0f 11 04 01 movups XMMWORD PTR [rcx+rax], xmm0 ; 228 : ans->f64_x[col * 2 + 1] = c_hi; 002e9 8b 45 04 mov eax, DWORD PTR col$1[rbp] 002ec 8d 44 00 01 lea eax, DWORD PTR [rax+rax+1] 002f0 48 98 cdqe 002f2 48 6b c0 10 imul rax, rax, 16 002f6 48 8b 8d 60 02 00 00 mov rcx, QWORD PTR ans$[rbp] 002fd 0f 28 45 60 movaps xmm0, XMMWORD PTR c_hi$3[rbp] 00301 0f 11 04 01 movups XMMWORD PTR [rcx+rax], xmm0 ; 229 : } 00305 e9 29 fd ff ff jmp $LN2@double_ker $LN3@double_ker: ; 230 : } 0030a 48 8d a5 38 02 00 00 lea rsp, QWORD PTR [rbp+568] 00311 5f pop rdi 00312 5d pop rbp 00313 c3 ret 0 double_kernel_fma_sse ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma.x86.c ; COMDAT float_kernel_fma_512 _TEXT SEGMENT a$ = 64 b$ = 192 c$ = 320 a_perm0$ = 448 b_perm0$ = 576 a_perm1$ = 704 b_perm1$ = 832 a_perm2$ = 960 b_perm2$ = 1088 a_perm3$ = 1216 b_perm3$ = 1344 left$ = 2096 right$ = 2104 ans$ = 2112 float_kernel_fma_512 PROC ; COMDAT ; 153 : { $LN3: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f 41 55 push r13 00011 55 push rbp 00012 57 push rdi 00013 48 81 ec 30 08 00 00 sub rsp, 2096 ; 00000830H 0001a 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 0001f 48 8d 6c 24 60 lea rbp, QWORD PTR [rsp+96] 00024 48 83 e5 c0 and rbp, -64 ; ffffffffffffffc0H 00028 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__F8387F23_m@fma@x86@c 0002f e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00034 90 npad 1 ; 154 : static const __m512i b_shift = { .m512i_i32 = { ; 155 : // shuff order ; 156 : 0, 1, 2, 3, // col0 ; 157 : 5, 6, 7, 4, //col1 ; 158 : 10, 11, 8, 9, //col2 ; 159 : 15, 12, 13, 14 //col3 ; 160 : } }; ; 161 : ; 162 : register __m512 a = _mm512_load_ps((float *)left); 00035 49 8b 85 30 08 00 00 mov rax, QWORD PTR left$[r13] 0003c 62 f1 7c 48 10 00 vmovups zmm0, ZMMWORD PTR [rax] 00042 62 f1 7c 48 11 45 01 vmovups ZMMWORD PTR a$[rbp], zmm0 ; 163 : register __m512 b = _mm512_load_ps((float *)right); 00049 49 8b 85 38 08 00 00 mov rax, QWORD PTR right$[r13] 00050 62 f1 7c 48 10 00 vmovups zmm0, ZMMWORD PTR [rax] 00056 62 f1 7c 48 11 45 03 vmovups ZMMWORD PTR b$[rbp], zmm0 ; 164 : register __m512 c = _mm512_load_ps((float *)ans); 0005d 49 8b 85 40 08 00 00 mov rax, QWORD PTR ans$[r13] 00064 62 f1 7c 48 10 00 vmovups zmm0, ZMMWORD PTR [rax] 0006a 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 165 : ; 166 : b = _mm512_permutexvar_ps(b_shift, b); 00071 62 f1 7e 48 6f 05 00 00 00 00 vmovdqu32 zmm0, ZMMWORD PTR ?b_shift@?1??float_kernel_fma_512@@9@9 0007b 62 f2 7d 48 16 45 03 vpermps zmm0, zmm0, ZMMWORD PTR b$[rbp] 00082 62 f1 7c 48 11 45 03 vmovups ZMMWORD PTR b$[rbp], zmm0 ; 167 : register __m512 a_perm0 = _mm512_shuffle_f32x4(a, a, _MM_SHUFFLE(3, 2, 1, 0)); 00089 62 f1 7c 48 10 45 01 vmovups zmm0, ZMMWORD PTR a$[rbp] 00090 62 f3 7d 48 23 45 01 e4 vshuff32x4 zmm0, zmm0, ZMMWORD PTR a$[rbp], 228 ; 000000e4H 00098 62 f1 7c 48 11 45 07 vmovups ZMMWORD PTR a_perm0$[rbp], zmm0 ; 168 : register __m512 b_perm0 = _mm512_permute_ps(b, _FMA_SELECT(0)); 0009f 62 f3 7d 48 04 45 03 00 vpermilps zmm0, ZMMWORD PTR b$[rbp], 0 000a7 62 f1 7c 48 11 45 09 vmovups ZMMWORD PTR b_perm0$[rbp], zmm0 ; 169 : c = _mm512_fmadd_ps(a_perm0, b_perm0, c); 000ae 62 f1 7c 48 10 45 07 vmovups zmm0, ZMMWORD PTR a_perm0$[rbp] 000b5 62 f1 7c 48 10 4d 09 vmovups zmm1, ZMMWORD PTR b_perm0$[rbp] 000bc 62 f2 75 48 a8 45 05 vfmadd213ps zmm0, zmm1, ZMMWORD PTR c$[rbp] 000c3 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 170 : ; 171 : register __m512 a_perm1 = _mm512_shuffle_f32x4(a, a, _MM_SHUFFLE(2, 1, 0, 3)); 000ca 62 f1 7c 48 10 45 01 vmovups zmm0, ZMMWORD PTR a$[rbp] 000d1 62 f3 7d 48 23 45 01 93 vshuff32x4 zmm0, zmm0, ZMMWORD PTR a$[rbp], 147 ; 00000093H 000d9 62 f1 7c 48 11 45 0b vmovups ZMMWORD PTR a_perm1$[rbp], zmm0 ; 172 : register __m512 b_perm1 = _mm512_permute_ps(b, _FMA_SELECT(1)); 000e0 62 f3 7d 48 04 45 03 55 vpermilps zmm0, ZMMWORD PTR b$[rbp], 85 ; 00000055H 000e8 62 f1 7c 48 11 45 0d vmovups ZMMWORD PTR b_perm1$[rbp], zmm0 ; 173 : c = _mm512_fmadd_ps(a_perm1, b_perm1, c); 000ef 62 f1 7c 48 10 45 0b vmovups zmm0, ZMMWORD PTR a_perm1$[rbp] 000f6 62 f1 7c 48 10 4d 0d vmovups zmm1, ZMMWORD PTR b_perm1$[rbp] 000fd 62 f2 75 48 a8 45 05 vfmadd213ps zmm0, zmm1, ZMMWORD PTR c$[rbp] 00104 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 174 : ; 175 : register __m512 a_perm2 = _mm512_shuffle_f32x4(a, a, _MM_SHUFFLE(1, 0, 3, 2)); 0010b 62 f1 7c 48 10 45 01 vmovups zmm0, ZMMWORD PTR a$[rbp] 00112 62 f3 7d 48 23 45 01 4e vshuff32x4 zmm0, zmm0, ZMMWORD PTR a$[rbp], 78 ; 0000004eH 0011a 62 f1 7c 48 11 45 0f vmovups ZMMWORD PTR a_perm2$[rbp], zmm0 ; 176 : register __m512 b_perm2 = _mm512_permute_ps(b, _FMA_SELECT(2)); 00121 62 f3 7d 48 04 45 03 aa vpermilps zmm0, ZMMWORD PTR b$[rbp], 170 ; 000000aaH 00129 62 f1 7c 48 11 45 11 vmovups ZMMWORD PTR b_perm2$[rbp], zmm0 ; 177 : c = _mm512_fmadd_ps(a_perm2, b_perm2, c); 00130 62 f1 7c 48 10 45 0f vmovups zmm0, ZMMWORD PTR a_perm2$[rbp] 00137 62 f1 7c 48 10 4d 11 vmovups zmm1, ZMMWORD PTR b_perm2$[rbp] 0013e 62 f2 75 48 a8 45 05 vfmadd213ps zmm0, zmm1, ZMMWORD PTR c$[rbp] 00145 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 178 : ; 179 : register __m512 a_perm3 = _mm512_shuffle_f32x4(a, a, _MM_SHUFFLE(0, 3, 2, 1)); 0014c 62 f1 7c 48 10 45 01 vmovups zmm0, ZMMWORD PTR a$[rbp] 00153 62 f3 7d 48 23 45 01 39 vshuff32x4 zmm0, zmm0, ZMMWORD PTR a$[rbp], 57 ; 00000039H 0015b 62 f1 7c 48 11 45 13 vmovups ZMMWORD PTR a_perm3$[rbp], zmm0 ; 180 : register __m512 b_perm3 = _mm512_permute_ps(b, _FMA_SELECT(3)); 00162 62 f3 7d 48 04 45 03 ff vpermilps zmm0, ZMMWORD PTR b$[rbp], 255 ; 000000ffH 0016a 62 f1 7c 48 11 45 15 vmovups ZMMWORD PTR b_perm3$[rbp], zmm0 ; 181 : c = _mm512_fmadd_ps(a_perm3, b_perm3, c); 00171 62 f1 7c 48 10 45 13 vmovups zmm0, ZMMWORD PTR a_perm3$[rbp] 00178 62 f1 7c 48 10 4d 15 vmovups zmm1, ZMMWORD PTR b_perm3$[rbp] 0017f 62 f2 75 48 a8 45 05 vfmadd213ps zmm0, zmm1, ZMMWORD PTR c$[rbp] 00186 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 182 : ; 183 : _mm512_store_ps((float *)ans, c); 0018d 49 8b 85 40 08 00 00 mov rax, QWORD PTR ans$[r13] 00194 62 f1 7c 48 10 45 05 vmovups zmm0, ZMMWORD PTR c$[rbp] 0019b 62 f1 7c 48 11 00 vmovups ZMMWORD PTR [rax], zmm0 ; 184 : } 001a1 49 8d a5 10 08 00 00 lea rsp, QWORD PTR [r13+2064] 001a8 5f pop rdi 001a9 5d pop rbp 001aa 41 5d pop r13 001ac c3 ret 0 float_kernel_fma_512 ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma.x86.c ; COMDAT float_kernel_fma_avx_fma _TEXT SEGMENT a01$ = 32 a23$ = 96 b01$ = 160 b23$ = 224 c01$ = 288 c23$ = 352 b01_perm$ = 416 b23_perm$ = 480 a12$ = 544 a30$ = 608 left$ = 1104 right$ = 1112 ans$ = 1120 float_kernel_fma_avx_fma PROC ; COMDAT ; 107 : { $LN3: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f 41 55 push r13 00011 55 push rbp 00012 57 push rdi 00013 48 81 ec 50 04 00 00 sub rsp, 1104 ; 00000450H 0001a 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 0001f 48 8d 6c 24 40 lea rbp, QWORD PTR [rsp+64] 00024 48 83 e5 e0 and rbp, -32 ; ffffffffffffffe0H 00028 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__F8387F23_m@fma@x86@c 0002f e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00034 90 npad 1 ; 108 : static const __m256i b01_shift = { .m256i_i32 = { 0, 1, 2, 3, 5, 6, 7, 4 } }; ; 109 : static const __m256i b23_shift = { .m256i_i32 = { 2, 3, 0, 1, 7, 4, 5, 6 } }; ; 110 : ; 111 : register __m256 a01 = _mm256_load_ps((float *)&left->f32_y[0]); 00035 b8 20 00 00 00 mov eax, 32 ; 00000020H 0003a 48 6b c0 00 imul rax, rax, 0 0003e 49 8b 8d 50 04 00 00 mov rcx, QWORD PTR left$[r13] 00045 48 03 c8 add rcx, rax 00048 48 8b c1 mov rax, rcx 0004b c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 0004f c5 fc 11 45 20 vmovups YMMWORD PTR a01$[rbp], ymm0 ; 112 : register __m256 a23 = _mm256_load_ps((float *)&left->f32_y[1]); 00054 b8 20 00 00 00 mov eax, 32 ; 00000020H 00059 48 6b c0 01 imul rax, rax, 1 0005d 49 8b 8d 50 04 00 00 mov rcx, QWORD PTR left$[r13] 00064 48 03 c8 add rcx, rax 00067 48 8b c1 mov rax, rcx 0006a c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 0006e c5 fc 11 45 60 vmovups YMMWORD PTR a23$[rbp], ymm0 ; 113 : ; 114 : register __m256 b01 = _mm256_load_ps((float *)&right->f32_y[0]); 00073 b8 20 00 00 00 mov eax, 32 ; 00000020H 00078 48 6b c0 00 imul rax, rax, 0 0007c 49 8b 8d 58 04 00 00 mov rcx, QWORD PTR right$[r13] 00083 48 03 c8 add rcx, rax 00086 48 8b c1 mov rax, rcx 00089 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 0008d c5 fc 11 85 a0 00 00 00 vmovups YMMWORD PTR b01$[rbp], ymm0 ; 115 : register __m256 b23 = _mm256_load_ps((float *)&right->f32_y[1]); 00095 b8 20 00 00 00 mov eax, 32 ; 00000020H 0009a 48 6b c0 01 imul rax, rax, 1 0009e 49 8b 8d 58 04 00 00 mov rcx, QWORD PTR right$[r13] 000a5 48 03 c8 add rcx, rax 000a8 48 8b c1 mov rax, rcx 000ab c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 000af c5 fc 11 85 e0 00 00 00 vmovups YMMWORD PTR b23$[rbp], ymm0 ; 116 : b01 = _mm256_permutevar_ps(b01, b01_shift); 000b7 c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 000bf c4 e2 7d 0c 05 00 00 00 00 vpermilps ymm0, ymm0, YMMWORD PTR ?b01_shift@?1??float_kernel_fma_avx_fma@@9@9 000c8 c5 fc 11 85 a0 00 00 00 vmovups YMMWORD PTR b01$[rbp], ymm0 ; 117 : b23 = _mm256_permutevar_ps(b23, b23_shift); 000d0 c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 000d8 c4 e2 7d 0c 05 00 00 00 00 vpermilps ymm0, ymm0, YMMWORD PTR ?b23_shift@?1??float_kernel_fma_avx_fma@@9@9 000e1 c5 fc 11 85 e0 00 00 00 vmovups YMMWORD PTR b23$[rbp], ymm0 ; 118 : ; 119 : register __m256 c01 = _mm256_load_ps((float *)&ans->f32_y[0]); 000e9 b8 20 00 00 00 mov eax, 32 ; 00000020H 000ee 48 6b c0 00 imul rax, rax, 0 000f2 49 8b 8d 60 04 00 00 mov rcx, QWORD PTR ans$[r13] 000f9 48 03 c8 add rcx, rax 000fc 48 8b c1 mov rax, rcx 000ff c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 00103 c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 120 : register __m256 c23 = _mm256_load_ps((float *)&ans->f32_y[1]); 0010b b8 20 00 00 00 mov eax, 32 ; 00000020H 00110 48 6b c0 01 imul rax, rax, 1 00114 49 8b 8d 60 04 00 00 mov rcx, QWORD PTR ans$[r13] 0011b 48 03 c8 add rcx, rax 0011e 48 8b c1 mov rax, rcx 00121 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 00125 c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 121 : ; 122 : //group 0 ; 123 : register __m256 b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(0)); 0012d c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 00135 c5 fc c6 85 a0 00 00 00 00 vshufps ymm0, ymm0, YMMWORD PTR b01$[rbp], 0 0013e c5 fc 11 85 a0 01 00 00 vmovups YMMWORD PTR b01_perm$[rbp], ymm0 ; 124 : register __m256 b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(0)); 00146 c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 0014e c5 fc c6 85 e0 00 00 00 00 vshufps ymm0, ymm0, YMMWORD PTR b23$[rbp], 0 00157 c5 fc 11 85 e0 01 00 00 vmovups YMMWORD PTR b23_perm$[rbp], ymm0 ; 125 : c01 = _mm256_fmadd_ps(a01, b01_perm, c01); 0015f c5 fc 10 45 20 vmovups ymm0, YMMWORD PTR a01$[rbp] 00164 c5 fc 10 8d a0 01 00 00 vmovups ymm1, YMMWORD PTR b01_perm$[rbp] 0016c c4 e2 75 a8 85 20 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c01$[rbp] 00175 c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 126 : c23 = _mm256_fmadd_ps(a23, b23_perm, c23); 0017d c5 fc 10 45 60 vmovups ymm0, YMMWORD PTR a23$[rbp] 00182 c5 fc 10 8d e0 01 00 00 vmovups ymm1, YMMWORD PTR b23_perm$[rbp] 0018a c4 e2 75 a8 85 60 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c23$[rbp] 00193 c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 127 : ; 128 : //group 2 ; 129 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(2)); 0019b c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 001a3 c5 fc c6 85 a0 00 00 00 aa vshufps ymm0, ymm0, YMMWORD PTR b01$[rbp], 170 ; 000000aaH 001ac c5 fc 11 85 a0 01 00 00 vmovups YMMWORD PTR b01_perm$[rbp], ymm0 ; 130 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(2)); 001b4 c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 001bc c5 fc c6 85 e0 00 00 00 aa vshufps ymm0, ymm0, YMMWORD PTR b23$[rbp], 170 ; 000000aaH 001c5 c5 fc 11 85 e0 01 00 00 vmovups YMMWORD PTR b23_perm$[rbp], ymm0 ; 131 : c01 = _mm256_fmadd_ps(a23, b01_perm, c01); 001cd c5 fc 10 45 60 vmovups ymm0, YMMWORD PTR a23$[rbp] 001d2 c5 fc 10 8d a0 01 00 00 vmovups ymm1, YMMWORD PTR b01_perm$[rbp] 001da c4 e2 75 a8 85 20 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c01$[rbp] 001e3 c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 132 : c23 = _mm256_fmadd_ps(a01, b23_perm, c23); 001eb c5 fc 10 45 20 vmovups ymm0, YMMWORD PTR a01$[rbp] 001f0 c5 fc 10 8d e0 01 00 00 vmovups ymm1, YMMWORD PTR b23_perm$[rbp] 001f8 c4 e2 75 a8 85 60 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c23$[rbp] 00201 c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 133 : ; 134 : //group 1 ; 135 : register __m256 a12 = _mm256_permute2f128_ps(a01, a23, 0x21); 00209 c5 fc 10 45 20 vmovups ymm0, YMMWORD PTR a01$[rbp] 0020e c4 e3 7d 06 45 60 21 vperm2f128 ymm0, ymm0, YMMWORD PTR a23$[rbp], 33 ; 00000021H 00215 c5 fc 11 85 20 02 00 00 vmovups YMMWORD PTR a12$[rbp], ymm0 ; 136 : register __m256 a30 = _mm256_permute2f128_ps(a01, a23, 0x30); 0021d c5 fc 10 45 20 vmovups ymm0, YMMWORD PTR a01$[rbp] 00222 c4 e3 7d 06 45 60 30 vperm2f128 ymm0, ymm0, YMMWORD PTR a23$[rbp], 48 ; 00000030H 00229 c5 fc 11 85 60 02 00 00 vmovups YMMWORD PTR a30$[rbp], ymm0 ; 137 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(1)); 00231 c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 00239 c5 fc c6 85 a0 00 00 00 55 vshufps ymm0, ymm0, YMMWORD PTR b01$[rbp], 85 ; 00000055H 00242 c5 fc 11 85 a0 01 00 00 vmovups YMMWORD PTR b01_perm$[rbp], ymm0 ; 138 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(1)); 0024a c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 00252 c5 fc c6 85 e0 00 00 00 55 vshufps ymm0, ymm0, YMMWORD PTR b23$[rbp], 85 ; 00000055H 0025b c5 fc 11 85 e0 01 00 00 vmovups YMMWORD PTR b23_perm$[rbp], ymm0 ; 139 : c01 = _mm256_fmadd_ps(a12, b01_perm, c01); 00263 c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a12$[rbp] 0026b c5 fc 10 8d a0 01 00 00 vmovups ymm1, YMMWORD PTR b01_perm$[rbp] 00273 c4 e2 75 a8 85 20 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c01$[rbp] 0027c c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 140 : c23 = _mm256_fmadd_ps(a30, b23_perm, c23); 00284 c5 fc 10 85 60 02 00 00 vmovups ymm0, YMMWORD PTR a30$[rbp] 0028c c5 fc 10 8d e0 01 00 00 vmovups ymm1, YMMWORD PTR b23_perm$[rbp] 00294 c4 e2 75 a8 85 60 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c23$[rbp] 0029d c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 141 : ; 142 : //group 3 ; 143 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(3)); 002a5 c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 002ad c5 fc c6 85 a0 00 00 00 ff vshufps ymm0, ymm0, YMMWORD PTR b01$[rbp], 255 ; 000000ffH 002b6 c5 fc 11 85 a0 01 00 00 vmovups YMMWORD PTR b01_perm$[rbp], ymm0 ; 144 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(3)); 002be c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 002c6 c5 fc c6 85 e0 00 00 00 ff vshufps ymm0, ymm0, YMMWORD PTR b23$[rbp], 255 ; 000000ffH 002cf c5 fc 11 85 e0 01 00 00 vmovups YMMWORD PTR b23_perm$[rbp], ymm0 ; 145 : c01 = _mm256_fmadd_ps(a30, b01_perm, c01); 002d7 c5 fc 10 85 60 02 00 00 vmovups ymm0, YMMWORD PTR a30$[rbp] 002df c5 fc 10 8d a0 01 00 00 vmovups ymm1, YMMWORD PTR b01_perm$[rbp] 002e7 c4 e2 75 a8 85 20 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c01$[rbp] 002f0 c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 146 : c23 = _mm256_fmadd_ps(a12, b23_perm, c23); 002f8 c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a12$[rbp] 00300 c5 fc 10 8d e0 01 00 00 vmovups ymm1, YMMWORD PTR b23_perm$[rbp] 00308 c4 e2 75 a8 85 60 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c23$[rbp] 00311 c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 147 : ; 148 : ans->f32_y[0] = c01; 00319 b8 20 00 00 00 mov eax, 32 ; 00000020H 0031e 48 6b c0 00 imul rax, rax, 0 00322 49 8b 8d 60 04 00 00 mov rcx, QWORD PTR ans$[r13] 00329 c5 fc 10 85 20 01 00 00 vmovups ymm0, YMMWORD PTR c01$[rbp] 00331 c5 fc 11 04 01 vmovups YMMWORD PTR [rcx+rax], ymm0 ; 149 : ans->f32_y[1] = c23; 00336 b8 20 00 00 00 mov eax, 32 ; 00000020H 0033b 48 6b c0 01 imul rax, rax, 1 0033f 49 8b 8d 60 04 00 00 mov rcx, QWORD PTR ans$[r13] 00346 c5 fc 10 85 60 01 00 00 vmovups ymm0, YMMWORD PTR c23$[rbp] 0034e c5 fc 11 04 01 vmovups YMMWORD PTR [rcx+rax], ymm0 ; 150 : } 00353 49 8d a5 30 04 00 00 lea rsp, QWORD PTR [r13+1072] 0035a 5f pop rdi 0035b 5d pop rbp 0035c 41 5d pop r13 0035e c3 ret 0 float_kernel_fma_avx_fma ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma.x86.c ; COMDAT float_kernel_fma_avx _TEXT SEGMENT a01$ = 32 a23$ = 96 b01$ = 160 b23$ = 224 c01$ = 288 c23$ = 352 b01_perm$ = 416 b23_perm$ = 480 a12$ = 544 a30$ = 608 left$ = 1104 right$ = 1112 ans$ = 1120 float_kernel_fma_avx PROC ; COMDAT ; 61 : { $LN3: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f 41 55 push r13 00011 55 push rbp 00012 57 push rdi 00013 48 81 ec 50 04 00 00 sub rsp, 1104 ; 00000450H 0001a 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 0001f 48 8d 6c 24 40 lea rbp, QWORD PTR [rsp+64] 00024 48 83 e5 e0 and rbp, -32 ; ffffffffffffffe0H 00028 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__F8387F23_m@fma@x86@c 0002f e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00034 90 npad 1 ; 62 : static const __m256i b01_shift = { .m256i_i32 = { 0, 1, 2, 3, 5, 6, 7, 4 } }; ; 63 : static const __m256i b23_shift = { .m256i_i32 = { 2, 3, 0, 1, 7, 4, 5, 6 } }; ; 64 : ; 65 : register __m256 a01 = _mm256_load_ps((float *)&left->f32_y[0]); 00035 b8 20 00 00 00 mov eax, 32 ; 00000020H 0003a 48 6b c0 00 imul rax, rax, 0 0003e 49 8b 8d 50 04 00 00 mov rcx, QWORD PTR left$[r13] 00045 48 03 c8 add rcx, rax 00048 48 8b c1 mov rax, rcx 0004b c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 0004f c5 fc 11 45 20 vmovups YMMWORD PTR a01$[rbp], ymm0 ; 66 : register __m256 a23 = _mm256_load_ps((float *)&left->f32_y[1]); 00054 b8 20 00 00 00 mov eax, 32 ; 00000020H 00059 48 6b c0 01 imul rax, rax, 1 0005d 49 8b 8d 50 04 00 00 mov rcx, QWORD PTR left$[r13] 00064 48 03 c8 add rcx, rax 00067 48 8b c1 mov rax, rcx 0006a c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 0006e c5 fc 11 45 60 vmovups YMMWORD PTR a23$[rbp], ymm0 ; 67 : ; 68 : register __m256 b01 = _mm256_load_ps((float *)&right->f32_y[0]); 00073 b8 20 00 00 00 mov eax, 32 ; 00000020H 00078 48 6b c0 00 imul rax, rax, 0 0007c 49 8b 8d 58 04 00 00 mov rcx, QWORD PTR right$[r13] 00083 48 03 c8 add rcx, rax 00086 48 8b c1 mov rax, rcx 00089 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 0008d c5 fc 11 85 a0 00 00 00 vmovups YMMWORD PTR b01$[rbp], ymm0 ; 69 : register __m256 b23 = _mm256_load_ps((float *)&right->f32_y[1]); 00095 b8 20 00 00 00 mov eax, 32 ; 00000020H 0009a 48 6b c0 01 imul rax, rax, 1 0009e 49 8b 8d 58 04 00 00 mov rcx, QWORD PTR right$[r13] 000a5 48 03 c8 add rcx, rax 000a8 48 8b c1 mov rax, rcx 000ab c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 000af c5 fc 11 85 e0 00 00 00 vmovups YMMWORD PTR b23$[rbp], ymm0 ; 70 : b01 = _mm256_permutevar_ps(b01, b01_shift); 000b7 c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 000bf c4 e2 7d 0c 05 00 00 00 00 vpermilps ymm0, ymm0, YMMWORD PTR ?b01_shift@?1??float_kernel_fma_avx@@9@9 000c8 c5 fc 11 85 a0 00 00 00 vmovups YMMWORD PTR b01$[rbp], ymm0 ; 71 : b23 = _mm256_permutevar_ps(b23, b23_shift); 000d0 c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 000d8 c4 e2 7d 0c 05 00 00 00 00 vpermilps ymm0, ymm0, YMMWORD PTR ?b23_shift@?1??float_kernel_fma_avx@@9@9 000e1 c5 fc 11 85 e0 00 00 00 vmovups YMMWORD PTR b23$[rbp], ymm0 ; 72 : ; 73 : register __m256 c01 = _mm256_load_ps((float *)&ans->f32_y[0]); 000e9 b8 20 00 00 00 mov eax, 32 ; 00000020H 000ee 48 6b c0 00 imul rax, rax, 0 000f2 49 8b 8d 60 04 00 00 mov rcx, QWORD PTR ans$[r13] 000f9 48 03 c8 add rcx, rax 000fc 48 8b c1 mov rax, rcx 000ff c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 00103 c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 74 : register __m256 c23 = _mm256_load_ps((float *)&ans->f32_y[1]); 0010b b8 20 00 00 00 mov eax, 32 ; 00000020H 00110 48 6b c0 01 imul rax, rax, 1 00114 49 8b 8d 60 04 00 00 mov rcx, QWORD PTR ans$[r13] 0011b 48 03 c8 add rcx, rax 0011e 48 8b c1 mov rax, rcx 00121 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 00125 c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 75 : ; 76 : //group 0 ; 77 : register __m256 b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(0)); 0012d c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 00135 c5 fc c6 85 a0 00 00 00 00 vshufps ymm0, ymm0, YMMWORD PTR b01$[rbp], 0 0013e c5 fc 11 85 a0 01 00 00 vmovups YMMWORD PTR b01_perm$[rbp], ymm0 ; 78 : register __m256 b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(0)); 00146 c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 0014e c5 fc c6 85 e0 00 00 00 00 vshufps ymm0, ymm0, YMMWORD PTR b23$[rbp], 0 00157 c5 fc 11 85 e0 01 00 00 vmovups YMMWORD PTR b23_perm$[rbp], ymm0 ; 79 : c01 = _mm256_add_ps(_mm256_mul_ps(a01, b01_perm), c01); 0015f c5 fc 10 45 20 vmovups ymm0, YMMWORD PTR a01$[rbp] 00164 c5 fc 59 85 a0 01 00 00 vmulps ymm0, ymm0, YMMWORD PTR b01_perm$[rbp] 0016c c5 fc 58 85 20 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c01$[rbp] 00174 c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 80 : c23 = _mm256_add_ps(_mm256_mul_ps(a23, b23_perm), c23); 0017c c5 fc 10 45 60 vmovups ymm0, YMMWORD PTR a23$[rbp] 00181 c5 fc 59 85 e0 01 00 00 vmulps ymm0, ymm0, YMMWORD PTR b23_perm$[rbp] 00189 c5 fc 58 85 60 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c23$[rbp] 00191 c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 81 : ; 82 : //group 2 ; 83 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(2)); 00199 c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 001a1 c5 fc c6 85 a0 00 00 00 aa vshufps ymm0, ymm0, YMMWORD PTR b01$[rbp], 170 ; 000000aaH 001aa c5 fc 11 85 a0 01 00 00 vmovups YMMWORD PTR b01_perm$[rbp], ymm0 ; 84 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(2)); 001b2 c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 001ba c5 fc c6 85 e0 00 00 00 aa vshufps ymm0, ymm0, YMMWORD PTR b23$[rbp], 170 ; 000000aaH 001c3 c5 fc 11 85 e0 01 00 00 vmovups YMMWORD PTR b23_perm$[rbp], ymm0 ; 85 : c01 = _mm256_add_ps(_mm256_mul_ps(a23, b01_perm), c01); 001cb c5 fc 10 45 60 vmovups ymm0, YMMWORD PTR a23$[rbp] 001d0 c5 fc 59 85 a0 01 00 00 vmulps ymm0, ymm0, YMMWORD PTR b01_perm$[rbp] 001d8 c5 fc 58 85 20 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c01$[rbp] 001e0 c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 86 : c23 = _mm256_add_ps(_mm256_mul_ps(a01, b23_perm), c23); 001e8 c5 fc 10 45 20 vmovups ymm0, YMMWORD PTR a01$[rbp] 001ed c5 fc 59 85 e0 01 00 00 vmulps ymm0, ymm0, YMMWORD PTR b23_perm$[rbp] 001f5 c5 fc 58 85 60 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c23$[rbp] 001fd c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 87 : ; 88 : //group 1 ; 89 : register __m256 a12 = _mm256_permute2f128_ps(a01, a23, 0x21); 00205 c5 fc 10 45 20 vmovups ymm0, YMMWORD PTR a01$[rbp] 0020a c4 e3 7d 06 45 60 21 vperm2f128 ymm0, ymm0, YMMWORD PTR a23$[rbp], 33 ; 00000021H 00211 c5 fc 11 85 20 02 00 00 vmovups YMMWORD PTR a12$[rbp], ymm0 ; 90 : register __m256 a30 = _mm256_permute2f128_ps(a01, a23, 0x30); 00219 c5 fc 10 45 20 vmovups ymm0, YMMWORD PTR a01$[rbp] 0021e c4 e3 7d 06 45 60 30 vperm2f128 ymm0, ymm0, YMMWORD PTR a23$[rbp], 48 ; 00000030H 00225 c5 fc 11 85 60 02 00 00 vmovups YMMWORD PTR a30$[rbp], ymm0 ; 91 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(1)); 0022d c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 00235 c5 fc c6 85 a0 00 00 00 55 vshufps ymm0, ymm0, YMMWORD PTR b01$[rbp], 85 ; 00000055H 0023e c5 fc 11 85 a0 01 00 00 vmovups YMMWORD PTR b01_perm$[rbp], ymm0 ; 92 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(1)); 00246 c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 0024e c5 fc c6 85 e0 00 00 00 55 vshufps ymm0, ymm0, YMMWORD PTR b23$[rbp], 85 ; 00000055H 00257 c5 fc 11 85 e0 01 00 00 vmovups YMMWORD PTR b23_perm$[rbp], ymm0 ; 93 : c01 = _mm256_add_ps(_mm256_mul_ps(a12, b01_perm), c01); 0025f c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a12$[rbp] 00267 c5 fc 59 85 a0 01 00 00 vmulps ymm0, ymm0, YMMWORD PTR b01_perm$[rbp] 0026f c5 fc 58 85 20 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c01$[rbp] 00277 c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 94 : c23 = _mm256_add_ps(_mm256_mul_ps(a30, b23_perm), c23); 0027f c5 fc 10 85 60 02 00 00 vmovups ymm0, YMMWORD PTR a30$[rbp] 00287 c5 fc 59 85 e0 01 00 00 vmulps ymm0, ymm0, YMMWORD PTR b23_perm$[rbp] 0028f c5 fc 58 85 60 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c23$[rbp] 00297 c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 95 : ; 96 : //group 3 ; 97 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(3)); 0029f c5 fc 10 85 a0 00 00 00 vmovups ymm0, YMMWORD PTR b01$[rbp] 002a7 c5 fc c6 85 a0 00 00 00 ff vshufps ymm0, ymm0, YMMWORD PTR b01$[rbp], 255 ; 000000ffH 002b0 c5 fc 11 85 a0 01 00 00 vmovups YMMWORD PTR b01_perm$[rbp], ymm0 ; 98 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(3)); 002b8 c5 fc 10 85 e0 00 00 00 vmovups ymm0, YMMWORD PTR b23$[rbp] 002c0 c5 fc c6 85 e0 00 00 00 ff vshufps ymm0, ymm0, YMMWORD PTR b23$[rbp], 255 ; 000000ffH 002c9 c5 fc 11 85 e0 01 00 00 vmovups YMMWORD PTR b23_perm$[rbp], ymm0 ; 99 : c01 = _mm256_add_ps(_mm256_mul_ps(a30, b01_perm), c01); 002d1 c5 fc 10 85 60 02 00 00 vmovups ymm0, YMMWORD PTR a30$[rbp] 002d9 c5 fc 59 85 a0 01 00 00 vmulps ymm0, ymm0, YMMWORD PTR b01_perm$[rbp] 002e1 c5 fc 58 85 20 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c01$[rbp] 002e9 c5 fc 11 85 20 01 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 100 : c23 = _mm256_add_ps(_mm256_mul_ps(a12, b23_perm), c23); 002f1 c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a12$[rbp] 002f9 c5 fc 59 85 e0 01 00 00 vmulps ymm0, ymm0, YMMWORD PTR b23_perm$[rbp] 00301 c5 fc 58 85 60 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c23$[rbp] 00309 c5 fc 11 85 60 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 101 : ; 102 : ans->f32_y[0] = c01; 00311 b8 20 00 00 00 mov eax, 32 ; 00000020H 00316 48 6b c0 00 imul rax, rax, 0 0031a 49 8b 8d 60 04 00 00 mov rcx, QWORD PTR ans$[r13] 00321 c5 fc 10 85 20 01 00 00 vmovups ymm0, YMMWORD PTR c01$[rbp] 00329 c5 fc 11 04 01 vmovups YMMWORD PTR [rcx+rax], ymm0 ; 103 : ans->f32_y[1] = c23; 0032e b8 20 00 00 00 mov eax, 32 ; 00000020H 00333 48 6b c0 01 imul rax, rax, 1 00337 49 8b 8d 60 04 00 00 mov rcx, QWORD PTR ans$[r13] 0033e c5 fc 10 85 60 01 00 00 vmovups ymm0, YMMWORD PTR c23$[rbp] 00346 c5 fc 11 04 01 vmovups YMMWORD PTR [rcx+rax], ymm0 ; 104 : } 0034b 49 8d a5 30 04 00 00 lea rsp, QWORD PTR [r13+1072] 00352 5f pop rdi 00353 5d pop rbp 00354 41 5d pop r13 00356 c3 ret 0 float_kernel_fma_avx ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma.x86.c ; COMDAT float_kernel_fma_sse _TEXT SEGMENT a0$ = 16 a1$ = 64 a2$ = 112 a3$ = 160 c0$ = 208 c1$ = 256 c2$ = 304 c3$ = 352 bcol$ = 400 left$ = 656 right$ = 664 ans$ = 672 float_kernel_fma_sse PROC ; COMDAT ; 13 : { $LN3: 00000 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 00005 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000a 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 0000f 55 push rbp 00010 57 push rdi 00011 48 81 ec 98 02 00 00 sub rsp, 664 ; 00000298H 00018 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 0001d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__F8387F23_m@fma@x86@c 00024 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00029 90 npad 1 ; 14 : const __m128 a0 = _mm_load_ps((float *)&left->f32_x[0]); 0002a b8 10 00 00 00 mov eax, 16 0002f 48 6b c0 00 imul rax, rax, 0 00033 48 8b 8d 90 02 00 00 mov rcx, QWORD PTR left$[rbp] 0003a 48 03 c8 add rcx, rax 0003d 48 8b c1 mov rax, rcx 00040 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00043 0f 29 45 10 movaps XMMWORD PTR a0$[rbp], xmm0 ; 15 : const __m128 a1 = _mm_load_ps((float *)&left->f32_x[1]); 00047 b8 10 00 00 00 mov eax, 16 0004c 48 6b c0 01 imul rax, rax, 1 00050 48 8b 8d 90 02 00 00 mov rcx, QWORD PTR left$[rbp] 00057 48 03 c8 add rcx, rax 0005a 48 8b c1 mov rax, rcx 0005d 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00060 0f 29 45 40 movaps XMMWORD PTR a1$[rbp], xmm0 ; 16 : const __m128 a2 = _mm_load_ps((float *)&left->f32_x[2]); 00064 b8 10 00 00 00 mov eax, 16 00069 48 6b c0 02 imul rax, rax, 2 0006d 48 8b 8d 90 02 00 00 mov rcx, QWORD PTR left$[rbp] 00074 48 03 c8 add rcx, rax 00077 48 8b c1 mov rax, rcx 0007a 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0007d 0f 29 45 70 movaps XMMWORD PTR a2$[rbp], xmm0 ; 17 : const __m128 a3 = _mm_load_ps((float *)&left->f32_x[3]); 00081 b8 10 00 00 00 mov eax, 16 00086 48 6b c0 03 imul rax, rax, 3 0008a 48 8b 8d 90 02 00 00 mov rcx, QWORD PTR left$[rbp] 00091 48 03 c8 add rcx, rax 00094 48 8b c1 mov rax, rcx 00097 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0009a 0f 29 85 a0 00 00 00 movaps XMMWORD PTR a3$[rbp], xmm0 ; 18 : ; 19 : __m128 c0 = _mm_load_ps((float *)&ans->f32_x[0]); 000a1 b8 10 00 00 00 mov eax, 16 000a6 48 6b c0 00 imul rax, rax, 0 000aa 48 8b 8d a0 02 00 00 mov rcx, QWORD PTR ans$[rbp] 000b1 48 03 c8 add rcx, rax 000b4 48 8b c1 mov rax, rcx 000b7 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000ba 0f 29 85 d0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 20 : __m128 c1 = _mm_load_ps((float *)&ans->f32_x[1]); 000c1 b8 10 00 00 00 mov eax, 16 000c6 48 6b c0 01 imul rax, rax, 1 000ca 48 8b 8d a0 02 00 00 mov rcx, QWORD PTR ans$[rbp] 000d1 48 03 c8 add rcx, rax 000d4 48 8b c1 mov rax, rcx 000d7 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000da 0f 29 85 00 01 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 21 : __m128 c2 = _mm_load_ps((float *)&ans->f32_x[2]); 000e1 b8 10 00 00 00 mov eax, 16 000e6 48 6b c0 02 imul rax, rax, 2 000ea 48 8b 8d a0 02 00 00 mov rcx, QWORD PTR ans$[rbp] 000f1 48 03 c8 add rcx, rax 000f4 48 8b c1 mov rax, rcx 000f7 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000fa 0f 29 85 30 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 22 : __m128 c3 = _mm_load_ps((float *)&ans->f32_x[3]); 00101 b8 10 00 00 00 mov eax, 16 00106 48 6b c0 03 imul rax, rax, 3 0010a 48 8b 8d a0 02 00 00 mov rcx, QWORD PTR ans$[rbp] 00111 48 03 c8 add rcx, rax 00114 48 8b c1 mov rax, rcx 00117 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0011a 0f 29 85 60 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 23 : ; 24 : __m128 bcol; ; 25 : ; 26 : /* Column 0 */ ; 27 : bcol = _mm_load_ps((float *)&right->f32_x[0]); 00121 b8 10 00 00 00 mov eax, 16 00126 48 6b c0 00 imul rax, rax, 0 0012a 48 8b 8d 98 02 00 00 mov rcx, QWORD PTR right$[rbp] 00131 48 03 c8 add rcx, rax 00134 48 8b c1 mov rax, rcx 00137 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0013a 0f 29 85 90 01 00 00 movaps XMMWORD PTR bcol$[rbp], xmm0 ; 28 : c0 = _mm_add_ps(c0, _mm_mul_ps(a0, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(0)))); 00141 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00148 0f c6 85 90 01 00 00 00 shufps xmm0, XMMWORD PTR bcol$[rbp], 0 00150 0f 28 4d 10 movaps xmm1, XMMWORD PTR a0$[rbp] 00154 0f 59 c8 mulps xmm1, xmm0 00157 0f 28 c1 movaps xmm0, xmm1 0015a 0f 28 8d d0 00 00 00 movaps xmm1, XMMWORD PTR c0$[rbp] 00161 0f 58 c8 addps xmm1, xmm0 00164 0f 28 c1 movaps xmm0, xmm1 00167 0f 29 85 d0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 29 : c0 = _mm_add_ps(c0, _mm_mul_ps(a1, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(1)))); 0016e 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00175 0f c6 85 90 01 00 00 55 shufps xmm0, XMMWORD PTR bcol$[rbp], 85 ; 00000055H 0017d 0f 28 4d 40 movaps xmm1, XMMWORD PTR a1$[rbp] 00181 0f 59 c8 mulps xmm1, xmm0 00184 0f 28 c1 movaps xmm0, xmm1 00187 0f 28 8d d0 00 00 00 movaps xmm1, XMMWORD PTR c0$[rbp] 0018e 0f 58 c8 addps xmm1, xmm0 00191 0f 28 c1 movaps xmm0, xmm1 00194 0f 29 85 d0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 30 : c0 = _mm_add_ps(c0, _mm_mul_ps(a2, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(2)))); 0019b 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 001a2 0f c6 85 90 01 00 00 aa shufps xmm0, XMMWORD PTR bcol$[rbp], 170 ; 000000aaH 001aa 0f 28 4d 70 movaps xmm1, XMMWORD PTR a2$[rbp] 001ae 0f 59 c8 mulps xmm1, xmm0 001b1 0f 28 c1 movaps xmm0, xmm1 001b4 0f 28 8d d0 00 00 00 movaps xmm1, XMMWORD PTR c0$[rbp] 001bb 0f 58 c8 addps xmm1, xmm0 001be 0f 28 c1 movaps xmm0, xmm1 001c1 0f 29 85 d0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 31 : c0 = _mm_add_ps(c0, _mm_mul_ps(a3, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(3)))); 001c8 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 001cf 0f c6 85 90 01 00 00 ff shufps xmm0, XMMWORD PTR bcol$[rbp], 255 ; 000000ffH 001d7 0f 28 8d a0 00 00 00 movaps xmm1, XMMWORD PTR a3$[rbp] 001de 0f 59 c8 mulps xmm1, xmm0 001e1 0f 28 c1 movaps xmm0, xmm1 001e4 0f 28 8d d0 00 00 00 movaps xmm1, XMMWORD PTR c0$[rbp] 001eb 0f 58 c8 addps xmm1, xmm0 001ee 0f 28 c1 movaps xmm0, xmm1 001f1 0f 29 85 d0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 32 : ; 33 : /* Column 1 */ ; 34 : bcol = _mm_load_ps((float *)&right->f32_x[1]); 001f8 b8 10 00 00 00 mov eax, 16 001fd 48 6b c0 01 imul rax, rax, 1 00201 48 8b 8d 98 02 00 00 mov rcx, QWORD PTR right$[rbp] 00208 48 03 c8 add rcx, rax 0020b 48 8b c1 mov rax, rcx 0020e 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00211 0f 29 85 90 01 00 00 movaps XMMWORD PTR bcol$[rbp], xmm0 ; 35 : c1 = _mm_add_ps(c1, _mm_mul_ps(a0, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(0)))); 00218 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 0021f 0f c6 85 90 01 00 00 00 shufps xmm0, XMMWORD PTR bcol$[rbp], 0 00227 0f 28 4d 10 movaps xmm1, XMMWORD PTR a0$[rbp] 0022b 0f 59 c8 mulps xmm1, xmm0 0022e 0f 28 c1 movaps xmm0, xmm1 00231 0f 28 8d 00 01 00 00 movaps xmm1, XMMWORD PTR c1$[rbp] 00238 0f 58 c8 addps xmm1, xmm0 0023b 0f 28 c1 movaps xmm0, xmm1 0023e 0f 29 85 00 01 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 36 : c1 = _mm_add_ps(c1, _mm_mul_ps(a1, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(1)))); 00245 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 0024c 0f c6 85 90 01 00 00 55 shufps xmm0, XMMWORD PTR bcol$[rbp], 85 ; 00000055H 00254 0f 28 4d 40 movaps xmm1, XMMWORD PTR a1$[rbp] 00258 0f 59 c8 mulps xmm1, xmm0 0025b 0f 28 c1 movaps xmm0, xmm1 0025e 0f 28 8d 00 01 00 00 movaps xmm1, XMMWORD PTR c1$[rbp] 00265 0f 58 c8 addps xmm1, xmm0 00268 0f 28 c1 movaps xmm0, xmm1 0026b 0f 29 85 00 01 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 37 : c1 = _mm_add_ps(c1, _mm_mul_ps(a2, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(2)))); 00272 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00279 0f c6 85 90 01 00 00 aa shufps xmm0, XMMWORD PTR bcol$[rbp], 170 ; 000000aaH 00281 0f 28 4d 70 movaps xmm1, XMMWORD PTR a2$[rbp] 00285 0f 59 c8 mulps xmm1, xmm0 00288 0f 28 c1 movaps xmm0, xmm1 0028b 0f 28 8d 00 01 00 00 movaps xmm1, XMMWORD PTR c1$[rbp] 00292 0f 58 c8 addps xmm1, xmm0 00295 0f 28 c1 movaps xmm0, xmm1 00298 0f 29 85 00 01 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 38 : c1 = _mm_add_ps(c1, _mm_mul_ps(a3, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(3)))); 0029f 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 002a6 0f c6 85 90 01 00 00 ff shufps xmm0, XMMWORD PTR bcol$[rbp], 255 ; 000000ffH 002ae 0f 28 8d a0 00 00 00 movaps xmm1, XMMWORD PTR a3$[rbp] 002b5 0f 59 c8 mulps xmm1, xmm0 002b8 0f 28 c1 movaps xmm0, xmm1 002bb 0f 28 8d 00 01 00 00 movaps xmm1, XMMWORD PTR c1$[rbp] 002c2 0f 58 c8 addps xmm1, xmm0 002c5 0f 28 c1 movaps xmm0, xmm1 002c8 0f 29 85 00 01 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 39 : ; 40 : /* Column 2 */ ; 41 : bcol = _mm_load_ps((float *)&right->f32_x[2]); 002cf b8 10 00 00 00 mov eax, 16 002d4 48 6b c0 02 imul rax, rax, 2 002d8 48 8b 8d 98 02 00 00 mov rcx, QWORD PTR right$[rbp] 002df 48 03 c8 add rcx, rax 002e2 48 8b c1 mov rax, rcx 002e5 0f 10 00 movups xmm0, XMMWORD PTR [rax] 002e8 0f 29 85 90 01 00 00 movaps XMMWORD PTR bcol$[rbp], xmm0 ; 42 : c2 = _mm_add_ps(c2, _mm_mul_ps(a0, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(0)))); 002ef 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 002f6 0f c6 85 90 01 00 00 00 shufps xmm0, XMMWORD PTR bcol$[rbp], 0 002fe 0f 28 4d 10 movaps xmm1, XMMWORD PTR a0$[rbp] 00302 0f 59 c8 mulps xmm1, xmm0 00305 0f 28 c1 movaps xmm0, xmm1 00308 0f 28 8d 30 01 00 00 movaps xmm1, XMMWORD PTR c2$[rbp] 0030f 0f 58 c8 addps xmm1, xmm0 00312 0f 28 c1 movaps xmm0, xmm1 00315 0f 29 85 30 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 43 : c2 = _mm_add_ps(c2, _mm_mul_ps(a1, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(1)))); 0031c 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00323 0f c6 85 90 01 00 00 55 shufps xmm0, XMMWORD PTR bcol$[rbp], 85 ; 00000055H 0032b 0f 28 4d 40 movaps xmm1, XMMWORD PTR a1$[rbp] 0032f 0f 59 c8 mulps xmm1, xmm0 00332 0f 28 c1 movaps xmm0, xmm1 00335 0f 28 8d 30 01 00 00 movaps xmm1, XMMWORD PTR c2$[rbp] 0033c 0f 58 c8 addps xmm1, xmm0 0033f 0f 28 c1 movaps xmm0, xmm1 00342 0f 29 85 30 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 44 : c2 = _mm_add_ps(c2, _mm_mul_ps(a2, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(2)))); 00349 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00350 0f c6 85 90 01 00 00 aa shufps xmm0, XMMWORD PTR bcol$[rbp], 170 ; 000000aaH 00358 0f 28 4d 70 movaps xmm1, XMMWORD PTR a2$[rbp] 0035c 0f 59 c8 mulps xmm1, xmm0 0035f 0f 28 c1 movaps xmm0, xmm1 00362 0f 28 8d 30 01 00 00 movaps xmm1, XMMWORD PTR c2$[rbp] 00369 0f 58 c8 addps xmm1, xmm0 0036c 0f 28 c1 movaps xmm0, xmm1 0036f 0f 29 85 30 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 45 : c2 = _mm_add_ps(c2, _mm_mul_ps(a3, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(3)))); 00376 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 0037d 0f c6 85 90 01 00 00 ff shufps xmm0, XMMWORD PTR bcol$[rbp], 255 ; 000000ffH 00385 0f 28 8d a0 00 00 00 movaps xmm1, XMMWORD PTR a3$[rbp] 0038c 0f 59 c8 mulps xmm1, xmm0 0038f 0f 28 c1 movaps xmm0, xmm1 00392 0f 28 8d 30 01 00 00 movaps xmm1, XMMWORD PTR c2$[rbp] 00399 0f 58 c8 addps xmm1, xmm0 0039c 0f 28 c1 movaps xmm0, xmm1 0039f 0f 29 85 30 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 46 : ; 47 : /* Column 3 */ ; 48 : bcol = _mm_load_ps((float *)&right->f32_x[3]); 003a6 b8 10 00 00 00 mov eax, 16 003ab 48 6b c0 03 imul rax, rax, 3 003af 48 8b 8d 98 02 00 00 mov rcx, QWORD PTR right$[rbp] 003b6 48 03 c8 add rcx, rax 003b9 48 8b c1 mov rax, rcx 003bc 0f 10 00 movups xmm0, XMMWORD PTR [rax] 003bf 0f 29 85 90 01 00 00 movaps XMMWORD PTR bcol$[rbp], xmm0 ; 49 : c3 = _mm_add_ps(c3, _mm_mul_ps(a0, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(0)))); 003c6 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 003cd 0f c6 85 90 01 00 00 00 shufps xmm0, XMMWORD PTR bcol$[rbp], 0 003d5 0f 28 4d 10 movaps xmm1, XMMWORD PTR a0$[rbp] 003d9 0f 59 c8 mulps xmm1, xmm0 003dc 0f 28 c1 movaps xmm0, xmm1 003df 0f 28 8d 60 01 00 00 movaps xmm1, XMMWORD PTR c3$[rbp] 003e6 0f 58 c8 addps xmm1, xmm0 003e9 0f 28 c1 movaps xmm0, xmm1 003ec 0f 29 85 60 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 50 : c3 = _mm_add_ps(c3, _mm_mul_ps(a1, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(1)))); 003f3 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 003fa 0f c6 85 90 01 00 00 55 shufps xmm0, XMMWORD PTR bcol$[rbp], 85 ; 00000055H 00402 0f 28 4d 40 movaps xmm1, XMMWORD PTR a1$[rbp] 00406 0f 59 c8 mulps xmm1, xmm0 00409 0f 28 c1 movaps xmm0, xmm1 0040c 0f 28 8d 60 01 00 00 movaps xmm1, XMMWORD PTR c3$[rbp] 00413 0f 58 c8 addps xmm1, xmm0 00416 0f 28 c1 movaps xmm0, xmm1 00419 0f 29 85 60 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 51 : c3 = _mm_add_ps(c3, _mm_mul_ps(a2, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(2)))); 00420 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00427 0f c6 85 90 01 00 00 aa shufps xmm0, XMMWORD PTR bcol$[rbp], 170 ; 000000aaH 0042f 0f 28 4d 70 movaps xmm1, XMMWORD PTR a2$[rbp] 00433 0f 59 c8 mulps xmm1, xmm0 00436 0f 28 c1 movaps xmm0, xmm1 00439 0f 28 8d 60 01 00 00 movaps xmm1, XMMWORD PTR c3$[rbp] 00440 0f 58 c8 addps xmm1, xmm0 00443 0f 28 c1 movaps xmm0, xmm1 00446 0f 29 85 60 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 52 : c3 = _mm_add_ps(c3, _mm_mul_ps(a3, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(3)))); 0044d 0f 28 85 90 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00454 0f c6 85 90 01 00 00 ff shufps xmm0, XMMWORD PTR bcol$[rbp], 255 ; 000000ffH 0045c 0f 28 8d a0 00 00 00 movaps xmm1, XMMWORD PTR a3$[rbp] 00463 0f 59 c8 mulps xmm1, xmm0 00466 0f 28 c1 movaps xmm0, xmm1 00469 0f 28 8d 60 01 00 00 movaps xmm1, XMMWORD PTR c3$[rbp] 00470 0f 58 c8 addps xmm1, xmm0 00473 0f 28 c1 movaps xmm0, xmm1 00476 0f 29 85 60 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 53 : ; 54 : _mm_store_ps((float *)&ans->f32_x[0], c0); 0047d b8 10 00 00 00 mov eax, 16 00482 48 6b c0 00 imul rax, rax, 0 00486 48 8b 8d a0 02 00 00 mov rcx, QWORD PTR ans$[rbp] 0048d 48 03 c8 add rcx, rax 00490 48 8b c1 mov rax, rcx 00493 0f 28 85 d0 00 00 00 movaps xmm0, XMMWORD PTR c0$[rbp] 0049a 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 55 : _mm_store_ps((float *)&ans->f32_x[1], c1); 0049d b8 10 00 00 00 mov eax, 16 004a2 48 6b c0 01 imul rax, rax, 1 004a6 48 8b 8d a0 02 00 00 mov rcx, QWORD PTR ans$[rbp] 004ad 48 03 c8 add rcx, rax 004b0 48 8b c1 mov rax, rcx 004b3 0f 28 85 00 01 00 00 movaps xmm0, XMMWORD PTR c1$[rbp] 004ba 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 56 : _mm_store_ps((float *)&ans->f32_x[2], c2); 004bd b8 10 00 00 00 mov eax, 16 004c2 48 6b c0 02 imul rax, rax, 2 004c6 48 8b 8d a0 02 00 00 mov rcx, QWORD PTR ans$[rbp] 004cd 48 03 c8 add rcx, rax 004d0 48 8b c1 mov rax, rcx 004d3 0f 28 85 30 01 00 00 movaps xmm0, XMMWORD PTR c2$[rbp] 004da 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 57 : _mm_store_ps((float *)&ans->f32_x[3], c3); 004dd b8 10 00 00 00 mov eax, 16 004e2 48 6b c0 03 imul rax, rax, 3 004e6 48 8b 8d a0 02 00 00 mov rcx, QWORD PTR ans$[rbp] 004ed 48 03 c8 add rcx, rax 004f0 48 8b c1 mov rax, rcx 004f3 0f 28 85 60 01 00 00 movaps xmm0, XMMWORD PTR c3$[rbp] 004fa 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 58 : } 004fd 48 8d a5 78 02 00 00 lea rsp, QWORD PTR [rbp+632] 00504 5f pop rdi 00505 5d pop rbp 00506 c3 ret 0 float_kernel_fma_sse ENDP _TEXT ENDS END