; 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 __31D20E98_m@fma_tile@x86@c DB 01H msvcjmc ENDS CONST SEGMENT ?b01_shift_source@?1??float_kernel_tile_fma_avx@@9@9 DD 00H ; `float_kernel_tile_fma_avx'::`2'::b01_shift_source DD 01H DD 02H DD 03H DD 05H DD 06H DD 07H DD 04H ?b23_shift_source@?1??float_kernel_tile_fma_avx@@9@9 DD 02H ; `float_kernel_tile_fma_avx'::`2'::b23_shift_source DD 03H DD 00H DD 01H DD 07H DD 04H DD 05H DD 06H ?b01_shift_source@?1??float_kernel_tile_fma_avx_fma@@9@9 DD 00H ; `float_kernel_tile_fma_avx_fma'::`2'::b01_shift_source DD 01H DD 02H DD 03H DD 05H DD 06H DD 07H DD 04H ?b23_shift_source@?1??float_kernel_tile_fma_avx_fma@@9@9 DD 02H ; `float_kernel_tile_fma_avx_fma'::`2'::b23_shift_source DD 03H DD 00H DD 01H DD 07H DD 04H DD 05H DD 06H ?b_shift_source@?1??float_kernel_tile_fma_512@@9@9 DD 00H ; `float_kernel_tile_fma_512'::`2'::b_shift_source 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_source@?1??double_kernel_tile_fma_512@@9@9 DQ 0000000000000000H ; `double_kernel_tile_fma_512'::`2'::b01_shift_source DQ 0000000000000001H DQ 0000000000000002H DQ 0000000000000003H DQ 0000000000000005H DQ 0000000000000006H DQ 0000000000000007H DQ 0000000000000004H ?b23_shift_source@?1??double_kernel_tile_fma_512@@9@9 DQ 0000000000000002H ; `double_kernel_tile_fma_512'::`2'::b23_shift_source DQ 0000000000000003H DQ 0000000000000000H DQ 0000000000000001H DQ 0000000000000007H DQ 0000000000000004H DQ 0000000000000005H DQ 0000000000000006H CONST ENDS PUBLIC float_kernel_tile_fma_sse PUBLIC float_kernel_tile_fma_avx PUBLIC float_kernel_tile_fma_avx_fma PUBLIC float_kernel_tile_fma_512 PUBLIC double_kernel_tile_fma_sse PUBLIC double_kernel_tile_fma_avx PUBLIC double_kernel_tile_fma_avx_fma PUBLIC double_kernel_tile_fma_512 PUBLIC __JustMyCode_Default EXTRN _RTC_InitBase:PROC EXTRN _RTC_Shutdown:PROC EXTRN __CheckForDebuggerJustMyCode:PROC ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_tile_fma_sse DD imagerel $LN6 DD imagerel $LN6+1596 DD imagerel $unwind$float_kernel_tile_fma_sse pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_tile_fma_avx DD imagerel $LN6 DD imagerel $LN6+1188 DD imagerel $unwind$float_kernel_tile_fma_avx pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_tile_fma_avx_fma DD imagerel $LN6 DD imagerel $LN6+1199 DD imagerel $unwind$float_kernel_tile_fma_avx_fma pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$float_kernel_tile_fma_512 DD imagerel $LN6 DD imagerel $LN6+715 DD imagerel $unwind$float_kernel_tile_fma_512 pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$double_kernel_tile_fma_sse DD imagerel $LN18 DD imagerel $LN18+3061 DD imagerel $unwind$double_kernel_tile_fma_sse pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$double_kernel_tile_fma_avx DD imagerel $LN6 DD imagerel $LN6+1554 DD imagerel $unwind$double_kernel_tile_fma_avx pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$double_kernel_tile_fma_avx_fma DD imagerel $LN6 DD imagerel $LN6+1506 DD imagerel $unwind$double_kernel_tile_fma_avx_fma pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$double_kernel_tile_fma_512 DD imagerel $LN6 DD imagerel $LN6+1135 DD imagerel $unwind$double_kernel_tile_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_tile_fma_512 DD 02d062d01H DD 011f2324H DD 070180146H DD 0d0165017H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$double_kernel_tile_fma_avx_fma DD 02d062d01H DD 011f2324H DD 0701800a2H DD 0d0165017H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$double_kernel_tile_fma_avx DD 02d062d01H DD 011f2324H DD 0701800a2H DD 0d0165017H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$double_kernel_tile_fma_sse DD 025052201H DD 011d2322H DD 070160129H DD 05015H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_tile_fma_512 DD 02d062d01H DD 011f2324H DD 0701800b6H DD 0d0165017H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_tile_fma_avx_fma DD 02d062d01H DD 011f2324H DD 0701800d2H DD 0d0165017H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_tile_fma_avx DD 02d062d01H DD 011f2324H DD 0701800d2H DD 0d0165017H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$float_kernel_tile_fma_sse DD 025052201H DD 011d2322H DD 07016008bH DD 05015H 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_tile.x86.c ; COMDAT double_kernel_tile_fma_512 _TEXT SEGMENT i$ = 4 j$ = 36 commonK$ = 68 ansHeight$ = 100 ans_cur$ = 136 c01$ = 192 c23$ = 320 b01_shift$ = 448 b23_shift$ = 576 k$1 = 664 left_cur$2 = 696 right_cur$3 = 728 a01$4 = 768 a23$5 = 896 b01$6 = 1024 b23$7 = 1152 b01_perm$8 = 1280 b23_perm$9 = 1408 a12$10 = 1536 a30$11 = 1664 left$ = 2608 right$ = 2616 ans$ = 2624 enumeration$ = 2632 double_kernel_tile_fma_512 PROC ; COMDAT ; 463 : { $LN6: 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 41 55 push r13 00016 55 push rbp 00017 57 push rdi 00018 48 81 ec 30 0a 00 00 sub rsp, 2608 ; 00000a30H 0001f 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 00024 48 8d 6c 24 60 lea rbp, QWORD PTR [rsp+96] 00029 48 83 e5 c0 and rbp, -64 ; ffffffffffffffc0H 0002d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__31D20E98_m@fma_tile@x86@c 00034 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00039 90 npad 1 ; 464 : static const __m512i b01_shift_source = { .m512i_i64 = { 0, 1, 2, 3, 5, 6, 7, 4 } }; ; 465 : static const __m512i b23_shift_source = { .m512i_i64 = { 2, 3, 0, 1, 7, 4, 5, 6 } }; ; 466 : ; 467 : int i = enumeration->m128_i32[0]; 0003a b8 04 00 00 00 mov eax, 4 0003f 48 6b c0 00 imul rax, rax, 0 00043 49 8b 8d 48 0a 00 00 mov rcx, QWORD PTR enumeration$[r13] 0004a 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0004d 89 45 04 mov DWORD PTR i$[rbp], eax ; 468 : int j = enumeration->m128_i32[1]; 00050 b8 04 00 00 00 mov eax, 4 00055 48 6b c0 01 imul rax, rax, 1 00059 49 8b 8d 48 0a 00 00 mov rcx, QWORD PTR enumeration$[r13] 00060 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00063 89 45 24 mov DWORD PTR j$[rbp], eax ; 469 : int commonK = enumeration->m128_i32[2]; 00066 b8 04 00 00 00 mov eax, 4 0006b 48 6b c0 02 imul rax, rax, 2 0006f 49 8b 8d 48 0a 00 00 mov rcx, QWORD PTR enumeration$[r13] 00076 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00079 89 45 44 mov DWORD PTR commonK$[rbp], eax ; 470 : int ansHeight = enumeration->m128_i32[3]; 0007c b8 04 00 00 00 mov eax, 4 00081 48 6b c0 03 imul rax, rax, 3 00085 49 8b 8d 48 0a 00 00 mov rcx, QWORD PTR enumeration$[r13] 0008c 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0008f 89 45 64 mov DWORD PTR ansHeight$[rbp], eax ; 471 : ; 472 : MAT_KERNEL(double) ; 473 : const *ans_cur = ans + GET_INDEX(ansHeight, i, j); // GetKernelAddressUnsafe 00092 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 00095 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00099 03 45 24 add eax, DWORD PTR j$[rbp] 0009c 48 98 cdqe 0009e 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 000a5 49 8b 8d 40 0a 00 00 mov rcx, QWORD PTR ans$[r13] 000ac 48 03 c8 add rcx, rax 000af 48 8b c1 mov rax, rcx 000b2 48 89 85 88 00 00 00 mov QWORD PTR ans_cur$[rbp], rax ; 474 : ; 475 : register __m512d c01 = _mm512_load_pd((double *)&ans->f64_z[0]); 000b9 b8 40 00 00 00 mov eax, 64 ; 00000040H 000be 48 6b c0 00 imul rax, rax, 0 000c2 49 8b 8d 40 0a 00 00 mov rcx, QWORD PTR ans$[r13] 000c9 48 03 c8 add rcx, rax 000cc 48 8b c1 mov rax, rcx 000cf 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 000d5 62 f1 fd 48 11 45 03 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 476 : register __m512d c23 = _mm512_load_pd((double *)&ans->f64_z[1]); 000dc b8 40 00 00 00 mov eax, 64 ; 00000040H 000e1 48 6b c0 01 imul rax, rax, 1 000e5 49 8b 8d 40 0a 00 00 mov rcx, QWORD PTR ans$[r13] 000ec 48 03 c8 add rcx, rax 000ef 48 8b c1 mov rax, rcx 000f2 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 000f8 62 f1 fd 48 11 45 05 vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 477 : ; 478 : register __m512i b01_shift = _mm512_load_si512(&b01_shift_source); 000ff 62 f1 7d 48 6f 05 00 00 00 00 vmovdqa32 zmm0, ZMMWORD PTR ?b01_shift_source@?1??double_kernel_tile_fma_512@@9@9 00109 62 f1 7e 48 7f 45 07 vmovdqu32 ZMMWORD PTR b01_shift$[rbp], zmm0 ; 479 : register __m512i b23_shift = _mm512_load_si512(&b23_shift_source); 00110 62 f1 7d 48 6f 05 00 00 00 00 vmovdqa32 zmm0, ZMMWORD PTR ?b23_shift_source@?1??double_kernel_tile_fma_512@@9@9 0011a 62 f1 7e 48 7f 45 09 vmovdqu32 ZMMWORD PTR b23_shift$[rbp], zmm0 ; 480 : ; 481 : for (size_t k = 0; k < commonK; k++) { 00121 48 c7 85 98 02 00 00 00 00 00 00 mov QWORD PTR k$1[rbp], 0 0012c eb 11 jmp SHORT $LN4@double_ker $LN2@double_ker: 0012e 48 8b 85 98 02 00 00 mov rax, QWORD PTR k$1[rbp] 00135 48 ff c0 inc rax 00138 48 89 85 98 02 00 00 mov QWORD PTR k$1[rbp], rax $LN4@double_ker: 0013f 48 63 45 44 movsxd rax, DWORD PTR commonK$[rbp] 00143 48 39 85 98 02 00 00 cmp QWORD PTR k$1[rbp], rax 0014a 0f 83 cd 02 00 00 jae $LN3@double_ker ; 482 : MAT_KERNEL(double) ; 483 : const *left_cur = left + GET_INDEX(ansHeight, i, k), // GetKernelAddressUnsafe 00150 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 00153 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00157 48 98 cdqe 00159 48 03 85 98 02 00 00 add rax, QWORD PTR k$1[rbp] 00160 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 00167 49 8b 8d 30 0a 00 00 mov rcx, QWORD PTR left$[r13] 0016e 48 03 c8 add rcx, rax 00171 48 8b c1 mov rax, rcx 00174 48 89 85 b8 02 00 00 mov QWORD PTR left_cur$2[rbp], rax ; 484 : const *right_cur = 0017b 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 0017e 0f af 45 24 imul eax, DWORD PTR j$[rbp] 00182 48 98 cdqe 00184 48 03 85 98 02 00 00 add rax, QWORD PTR k$1[rbp] 0018b 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 00192 49 8b 8d 38 0a 00 00 mov rcx, QWORD PTR right$[r13] 00199 48 03 c8 add rcx, rax 0019c 48 8b c1 mov rax, rcx 0019f 48 89 85 d8 02 00 00 mov QWORD PTR right_cur$3[rbp], rax ; 485 : right + GET_INDEX(ansHeight, j, k); // GetKernelAddressUnsafe ; 486 : ; 487 : register __m512d a01 = _mm512_load_pd((double *)&left_cur->f64_z[0]); 001a6 b8 40 00 00 00 mov eax, 64 ; 00000040H 001ab 48 6b c0 00 imul rax, rax, 0 001af 48 8b 8d b8 02 00 00 mov rcx, QWORD PTR left_cur$2[rbp] 001b6 48 03 c8 add rcx, rax 001b9 48 8b c1 mov rax, rcx 001bc 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 001c2 62 f1 fd 48 11 45 0c vmovupd ZMMWORD PTR a01$4[rbp], zmm0 ; 488 : register __m512d a23 = _mm512_load_pd((double *)&left_cur->f64_z[1]); 001c9 b8 40 00 00 00 mov eax, 64 ; 00000040H 001ce 48 6b c0 01 imul rax, rax, 1 001d2 48 8b 8d b8 02 00 00 mov rcx, QWORD PTR left_cur$2[rbp] 001d9 48 03 c8 add rcx, rax 001dc 48 8b c1 mov rax, rcx 001df 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 001e5 62 f1 fd 48 11 45 0e vmovupd ZMMWORD PTR a23$5[rbp], zmm0 ; 489 : ; 490 : register __m512d b01 = _mm512_load_pd((double *)&right_cur->f64_z[0]); 001ec b8 40 00 00 00 mov eax, 64 ; 00000040H 001f1 48 6b c0 00 imul rax, rax, 0 001f5 48 8b 8d d8 02 00 00 mov rcx, QWORD PTR right_cur$3[rbp] 001fc 48 03 c8 add rcx, rax 001ff 48 8b c1 mov rax, rcx 00202 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 00208 62 f1 fd 48 11 45 10 vmovupd ZMMWORD PTR b01$6[rbp], zmm0 ; 491 : register __m512d b23 = _mm512_load_pd((double *)&right_cur->f64_z[1]); 0020f b8 40 00 00 00 mov eax, 64 ; 00000040H 00214 48 6b c0 01 imul rax, rax, 1 00218 48 8b 8d d8 02 00 00 mov rcx, QWORD PTR right_cur$3[rbp] 0021f 48 03 c8 add rcx, rax 00222 48 8b c1 mov rax, rcx 00225 62 f1 fd 48 10 00 vmovupd zmm0, ZMMWORD PTR [rax] 0022b 62 f1 fd 48 11 45 12 vmovupd ZMMWORD PTR b23$7[rbp], zmm0 ; 492 : b01 = _mm512_permutexvar_pd(b01_shift, b01); 00232 62 f1 7e 48 6f 45 07 vmovdqu32 zmm0, ZMMWORD PTR b01_shift$[rbp] 00239 62 f2 fd 48 16 45 10 vpermpd zmm0, zmm0, ZMMWORD PTR b01$6[rbp] 00240 62 f1 fd 48 11 45 10 vmovupd ZMMWORD PTR b01$6[rbp], zmm0 ; 493 : b23 = _mm512_permutexvar_pd(b23_shift, b23); 00247 62 f1 7e 48 6f 45 09 vmovdqu32 zmm0, ZMMWORD PTR b23_shift$[rbp] 0024e 62 f2 fd 48 16 45 12 vpermpd zmm0, zmm0, ZMMWORD PTR b23$7[rbp] 00255 62 f1 fd 48 11 45 12 vmovupd ZMMWORD PTR b23$7[rbp], zmm0 ; 494 : ; 495 : //group 0 ; 496 : register __m512d b01_perm = _mm512_shuffle_pd(b01, b01, _FMA_SELECT(0)); 0025c 62 f1 fd 48 10 45 10 vmovupd zmm0, ZMMWORD PTR b01$6[rbp] 00263 62 f1 fd 48 c6 45 10 00 vshufpd zmm0, zmm0, ZMMWORD PTR b01$6[rbp], 0 0026b 62 f1 fd 48 11 45 14 vmovupd ZMMWORD PTR b01_perm$8[rbp], zmm0 ; 497 : register __m512d b23_perm = _mm512_shuffle_pd(b23, b23, _FMA_SELECT(0)); 00272 62 f1 fd 48 10 45 12 vmovupd zmm0, ZMMWORD PTR b23$7[rbp] 00279 62 f1 fd 48 c6 45 12 00 vshufpd zmm0, zmm0, ZMMWORD PTR b23$7[rbp], 0 00281 62 f1 fd 48 11 45 16 vmovupd ZMMWORD PTR b23_perm$9[rbp], zmm0 ; 498 : c01 = _mm512_fmadd_pd(a01, b01_perm, c01); 00288 62 f1 fd 48 10 45 0c vmovupd zmm0, ZMMWORD PTR a01$4[rbp] 0028f 62 f1 fd 48 10 4d 14 vmovupd zmm1, ZMMWORD PTR b01_perm$8[rbp] 00296 62 f2 f5 48 a8 45 03 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c01$[rbp] 0029d 62 f1 fd 48 11 45 03 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 499 : c23 = _mm512_fmadd_pd(a23, b23_perm, c23); 002a4 62 f1 fd 48 10 45 0e vmovupd zmm0, ZMMWORD PTR a23$5[rbp] 002ab 62 f1 fd 48 10 4d 16 vmovupd zmm1, ZMMWORD PTR b23_perm$9[rbp] 002b2 62 f2 f5 48 a8 45 05 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c23$[rbp] 002b9 62 f1 fd 48 11 45 05 vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 500 : ; 501 : //group 2 ; 502 : b01_perm = _mm512_shuffle_pd(b01, b01, _FMA_SELECT(2)); 002c0 62 f1 fd 48 10 45 10 vmovupd zmm0, ZMMWORD PTR b01$6[rbp] 002c7 62 f1 fd 48 c6 45 10 aa vshufpd zmm0, zmm0, ZMMWORD PTR b01$6[rbp], 170 ; 000000aaH 002cf 62 f1 fd 48 11 45 14 vmovupd ZMMWORD PTR b01_perm$8[rbp], zmm0 ; 503 : b23_perm = _mm512_shuffle_pd(b23, b23, _FMA_SELECT(2)); 002d6 62 f1 fd 48 10 45 12 vmovupd zmm0, ZMMWORD PTR b23$7[rbp] 002dd 62 f1 fd 48 c6 45 12 aa vshufpd zmm0, zmm0, ZMMWORD PTR b23$7[rbp], 170 ; 000000aaH 002e5 62 f1 fd 48 11 45 16 vmovupd ZMMWORD PTR b23_perm$9[rbp], zmm0 ; 504 : c01 = _mm512_fmadd_pd(a23, b01_perm, c01); 002ec 62 f1 fd 48 10 45 0e vmovupd zmm0, ZMMWORD PTR a23$5[rbp] 002f3 62 f1 fd 48 10 4d 14 vmovupd zmm1, ZMMWORD PTR b01_perm$8[rbp] 002fa 62 f2 f5 48 a8 45 03 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c01$[rbp] 00301 62 f1 fd 48 11 45 03 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 505 : c23 = _mm512_fmadd_pd(a01, b23_perm, c23); 00308 62 f1 fd 48 10 45 0c vmovupd zmm0, ZMMWORD PTR a01$4[rbp] 0030f 62 f1 fd 48 10 4d 16 vmovupd zmm1, ZMMWORD PTR b23_perm$9[rbp] 00316 62 f2 f5 48 a8 45 05 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c23$[rbp] 0031d 62 f1 fd 48 11 45 05 vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 506 : ; 507 : //group 1 ; 508 : register __m512d a12 = _mm512_shuffle_f64x2(a01, a23, 0x21); 00324 62 f1 fd 48 10 45 0c vmovupd zmm0, ZMMWORD PTR a01$4[rbp] 0032b 62 f3 fd 48 23 45 0e 21 vshuff64x2 zmm0, zmm0, ZMMWORD PTR a23$5[rbp], 33 ; 00000021H 00333 62 f1 fd 48 11 45 18 vmovupd ZMMWORD PTR a12$10[rbp], zmm0 ; 509 : register __m512d a30 = _mm512_shuffle_f64x2(a01, a23, 0x30); 0033a 62 f1 fd 48 10 45 0c vmovupd zmm0, ZMMWORD PTR a01$4[rbp] 00341 62 f3 fd 48 23 45 0e 30 vshuff64x2 zmm0, zmm0, ZMMWORD PTR a23$5[rbp], 48 ; 00000030H 00349 62 f1 fd 48 11 45 1a vmovupd ZMMWORD PTR a30$11[rbp], zmm0 ; 510 : b01_perm = _mm512_shuffle_pd(b01, b01, _FMA_SELECT(1)); 00350 62 f1 fd 48 10 45 10 vmovupd zmm0, ZMMWORD PTR b01$6[rbp] 00357 62 f1 fd 48 c6 45 10 55 vshufpd zmm0, zmm0, ZMMWORD PTR b01$6[rbp], 85 ; 00000055H 0035f 62 f1 fd 48 11 45 14 vmovupd ZMMWORD PTR b01_perm$8[rbp], zmm0 ; 511 : b23_perm = _mm512_shuffle_pd(b23, b23, _FMA_SELECT(1)); 00366 62 f1 fd 48 10 45 12 vmovupd zmm0, ZMMWORD PTR b23$7[rbp] 0036d 62 f1 fd 48 c6 45 12 55 vshufpd zmm0, zmm0, ZMMWORD PTR b23$7[rbp], 85 ; 00000055H 00375 62 f1 fd 48 11 45 16 vmovupd ZMMWORD PTR b23_perm$9[rbp], zmm0 ; 512 : c01 = _mm512_fmadd_pd(a12, b01_perm, c01); 0037c 62 f1 fd 48 10 45 18 vmovupd zmm0, ZMMWORD PTR a12$10[rbp] 00383 62 f1 fd 48 10 4d 14 vmovupd zmm1, ZMMWORD PTR b01_perm$8[rbp] 0038a 62 f2 f5 48 a8 45 03 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c01$[rbp] 00391 62 f1 fd 48 11 45 03 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 513 : c23 = _mm512_fmadd_pd(a30, b23_perm, c23); 00398 62 f1 fd 48 10 45 1a vmovupd zmm0, ZMMWORD PTR a30$11[rbp] 0039f 62 f1 fd 48 10 4d 16 vmovupd zmm1, ZMMWORD PTR b23_perm$9[rbp] 003a6 62 f2 f5 48 a8 45 05 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c23$[rbp] 003ad 62 f1 fd 48 11 45 05 vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 514 : ; 515 : //group 3 ; 516 : b01_perm = _mm512_shuffle_pd(b01, b01, _FMA_SELECT(3)); 003b4 62 f1 fd 48 10 45 10 vmovupd zmm0, ZMMWORD PTR b01$6[rbp] 003bb 62 f1 fd 48 c6 45 10 ff vshufpd zmm0, zmm0, ZMMWORD PTR b01$6[rbp], 255 ; 000000ffH 003c3 62 f1 fd 48 11 45 14 vmovupd ZMMWORD PTR b01_perm$8[rbp], zmm0 ; 517 : b23_perm = _mm512_shuffle_pd(b23, b23, _FMA_SELECT(3)); 003ca 62 f1 fd 48 10 45 12 vmovupd zmm0, ZMMWORD PTR b23$7[rbp] 003d1 62 f1 fd 48 c6 45 12 ff vshufpd zmm0, zmm0, ZMMWORD PTR b23$7[rbp], 255 ; 000000ffH 003d9 62 f1 fd 48 11 45 16 vmovupd ZMMWORD PTR b23_perm$9[rbp], zmm0 ; 518 : c01 = _mm512_fmadd_pd(a30, b01_perm, c01); 003e0 62 f1 fd 48 10 45 1a vmovupd zmm0, ZMMWORD PTR a30$11[rbp] 003e7 62 f1 fd 48 10 4d 14 vmovupd zmm1, ZMMWORD PTR b01_perm$8[rbp] 003ee 62 f2 f5 48 a8 45 03 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c01$[rbp] 003f5 62 f1 fd 48 11 45 03 vmovupd ZMMWORD PTR c01$[rbp], zmm0 ; 519 : c23 = _mm512_fmadd_pd(a12, b23_perm, c23); 003fc 62 f1 fd 48 10 45 18 vmovupd zmm0, ZMMWORD PTR a12$10[rbp] 00403 62 f1 fd 48 10 4d 16 vmovupd zmm1, ZMMWORD PTR b23_perm$9[rbp] 0040a 62 f2 f5 48 a8 45 05 vfmadd213pd zmm0, zmm1, ZMMWORD PTR c23$[rbp] 00411 62 f1 fd 48 11 45 05 vmovupd ZMMWORD PTR c23$[rbp], zmm0 ; 520 : } 00418 e9 11 fd ff ff jmp $LN2@double_ker $LN3@double_ker: ; 521 : _mm512_store_pd((double *)&ans_cur->f64_z[0], c01); 0041d b8 40 00 00 00 mov eax, 64 ; 00000040H 00422 48 6b c0 00 imul rax, rax, 0 00426 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 0042d 48 03 c8 add rcx, rax 00430 48 8b c1 mov rax, rcx 00433 62 f1 fd 48 10 45 03 vmovupd zmm0, ZMMWORD PTR c01$[rbp] 0043a 62 f1 fd 48 11 00 vmovupd ZMMWORD PTR [rax], zmm0 ; 522 : _mm512_store_pd((double *)&ans_cur->f64_z[1], c23); 00440 b8 40 00 00 00 mov eax, 64 ; 00000040H 00445 48 6b c0 01 imul rax, rax, 1 00449 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 00450 48 03 c8 add rcx, rax 00453 48 8b c1 mov rax, rcx 00456 62 f1 fd 48 10 45 05 vmovupd zmm0, ZMMWORD PTR c23$[rbp] 0045d 62 f1 fd 48 11 00 vmovupd ZMMWORD PTR [rax], zmm0 ; 523 : } 00463 49 8d a5 10 0a 00 00 lea rsp, QWORD PTR [r13+2576] 0046a 5f pop rdi 0046b 5d pop rbp 0046c 41 5d pop r13 0046e c3 ret 0 double_kernel_tile_fma_512 ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma_tile.x86.c ; COMDAT double_kernel_tile_fma_avx_fma _TEXT SEGMENT i$ = 4 j$ = 36 commonK$ = 68 ansHeight$ = 100 ans_cur$ = 136 c0$ = 192 c1$ = 256 c2$ = 320 c3$ = 384 bcol$ = 448 k$1 = 504 right_cur$2 = 536 left_cur$3 = 568 a0$4 = 608 a1$5 = 672 a2$6 = 736 a3$7 = 800 left$ = 1296 right$ = 1304 ans$ = 1312 enumeration$ = 1320 double_kernel_tile_fma_avx_fma PROC ; COMDAT ; 401 : { $LN6: 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 41 55 push r13 00016 55 push rbp 00017 57 push rdi 00018 48 81 ec 10 05 00 00 sub rsp, 1296 ; 00000510H 0001f 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 00024 48 8d 6c 24 40 lea rbp, QWORD PTR [rsp+64] 00029 48 83 e5 e0 and rbp, -32 ; ffffffffffffffe0H 0002d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__31D20E98_m@fma_tile@x86@c 00034 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00039 90 npad 1 ; 402 : int i = enumeration->m128_i32[0]; 0003a b8 04 00 00 00 mov eax, 4 0003f 48 6b c0 00 imul rax, rax, 0 00043 49 8b 8d 28 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 0004a 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0004d 89 45 04 mov DWORD PTR i$[rbp], eax ; 403 : int j = enumeration->m128_i32[1]; 00050 b8 04 00 00 00 mov eax, 4 00055 48 6b c0 01 imul rax, rax, 1 00059 49 8b 8d 28 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 00060 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00063 89 45 24 mov DWORD PTR j$[rbp], eax ; 404 : int commonK = enumeration->m128_i32[2]; 00066 b8 04 00 00 00 mov eax, 4 0006b 48 6b c0 02 imul rax, rax, 2 0006f 49 8b 8d 28 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 00076 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00079 89 45 44 mov DWORD PTR commonK$[rbp], eax ; 405 : int ansHeight = enumeration->m128_i32[3]; 0007c b8 04 00 00 00 mov eax, 4 00081 48 6b c0 03 imul rax, rax, 3 00085 49 8b 8d 28 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 0008c 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0008f 89 45 64 mov DWORD PTR ansHeight$[rbp], eax ; 406 : ; 407 : MAT_KERNEL(double) ; 408 : const *ans_cur = ans + GET_INDEX(ansHeight, i, j); // GetKernelAddressUnsafe 00092 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 00095 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00099 03 45 24 add eax, DWORD PTR j$[rbp] 0009c 48 98 cdqe 0009e 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 000a5 49 8b 8d 20 05 00 00 mov rcx, QWORD PTR ans$[r13] 000ac 48 03 c8 add rcx, rax 000af 48 8b c1 mov rax, rcx 000b2 48 89 85 88 00 00 00 mov QWORD PTR ans_cur$[rbp], rax ; 409 : ; 410 : register __m256d c0 = _mm256_load_pd((double *)&ans_cur->f64_y[0]); 000b9 b8 20 00 00 00 mov eax, 32 ; 00000020H 000be 48 6b c0 00 imul rax, rax, 0 000c2 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 000c9 48 03 c8 add rcx, rax 000cc 48 8b c1 mov rax, rcx 000cf c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000d3 c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 411 : register __m256d c1 = _mm256_load_pd((double *)&ans_cur->f64_y[1]); 000db b8 20 00 00 00 mov eax, 32 ; 00000020H 000e0 48 6b c0 01 imul rax, rax, 1 000e4 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 000eb 48 03 c8 add rcx, rax 000ee 48 8b c1 mov rax, rcx 000f1 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000f5 c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 412 : register __m256d c2 = _mm256_load_pd((double *)&ans_cur->f64_y[2]); 000fd b8 20 00 00 00 mov eax, 32 ; 00000020H 00102 48 6b c0 02 imul rax, rax, 2 00106 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 0010d 48 03 c8 add rcx, rax 00110 48 8b c1 mov rax, rcx 00113 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00117 c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 413 : register __m256d c3 = _mm256_load_pd((double *)&ans_cur->f64_y[3]); 0011f b8 20 00 00 00 mov eax, 32 ; 00000020H 00124 48 6b c0 03 imul rax, rax, 3 00128 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 0012f 48 03 c8 add rcx, rax 00132 48 8b c1 mov rax, rcx 00135 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00139 c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 414 : register __m256d bcol; ; 415 : ; 416 : for (size_t k = 0; k < commonK; k++) { 00141 48 c7 85 f8 01 00 00 00 00 00 00 mov QWORD PTR k$1[rbp], 0 0014c eb 11 jmp SHORT $LN4@double_ker $LN2@double_ker: 0014e 48 8b 85 f8 01 00 00 mov rax, QWORD PTR k$1[rbp] 00155 48 ff c0 inc rax 00158 48 89 85 f8 01 00 00 mov QWORD PTR k$1[rbp], rax $LN4@double_ker: 0015f 48 63 45 44 movsxd rax, DWORD PTR commonK$[rbp] 00163 48 39 85 f8 01 00 00 cmp QWORD PTR k$1[rbp], rax 0016a 0f 83 de 03 00 00 jae $LN3@double_ker ; 417 : MAT_KERNEL(double) ; 418 : const *right_cur = right + GET_INDEX(commonK, i, k), // GetKernelAddressUnsafe 00170 8b 45 44 mov eax, DWORD PTR commonK$[rbp] 00173 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00177 48 98 cdqe 00179 48 03 85 f8 01 00 00 add rax, QWORD PTR k$1[rbp] 00180 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 00187 49 8b 8d 18 05 00 00 mov rcx, QWORD PTR right$[r13] 0018e 48 03 c8 add rcx, rax 00191 48 8b c1 mov rax, rcx 00194 48 89 85 18 02 00 00 mov QWORD PTR right_cur$2[rbp], rax ; 419 : const *left_cur = 0019b 48 63 45 64 movsxd rax, DWORD PTR ansHeight$[rbp] 0019f 48 0f af 85 f8 01 00 00 imul rax, QWORD PTR k$1[rbp] 001a7 48 63 4d 24 movsxd rcx, DWORD PTR j$[rbp] 001ab 48 03 c1 add rax, rcx 001ae 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 001b5 49 8b 8d 10 05 00 00 mov rcx, QWORD PTR left$[r13] 001bc 48 03 c8 add rcx, rax 001bf 48 8b c1 mov rax, rcx 001c2 48 89 85 38 02 00 00 mov QWORD PTR left_cur$3[rbp], rax ; 420 : left + GET_INDEX(ansHeight, k, j); // GetKernelAddressUnsafe ; 421 : ; 422 : const __m256d a0 = _mm256_load_pd((double *)&left_cur->f64_y[0]); 001c9 b8 20 00 00 00 mov eax, 32 ; 00000020H 001ce 48 6b c0 00 imul rax, rax, 0 001d2 48 8b 8d 38 02 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 001d9 48 03 c8 add rcx, rax 001dc 48 8b c1 mov rax, rcx 001df c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 001e3 c5 fd 11 85 60 02 00 00 vmovupd YMMWORD PTR a0$4[rbp], ymm0 ; 423 : const __m256d a1 = _mm256_load_pd((double *)&left_cur->f64_y[1]); 001eb b8 20 00 00 00 mov eax, 32 ; 00000020H 001f0 48 6b c0 01 imul rax, rax, 1 001f4 48 8b 8d 38 02 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 001fb 48 03 c8 add rcx, rax 001fe 48 8b c1 mov rax, rcx 00201 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00205 c5 fd 11 85 a0 02 00 00 vmovupd YMMWORD PTR a1$5[rbp], ymm0 ; 424 : const __m256d a2 = _mm256_load_pd((double *)&left_cur->f64_y[2]); 0020d b8 20 00 00 00 mov eax, 32 ; 00000020H 00212 48 6b c0 02 imul rax, rax, 2 00216 48 8b 8d 38 02 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 0021d 48 03 c8 add rcx, rax 00220 48 8b c1 mov rax, rcx 00223 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00227 c5 fd 11 85 e0 02 00 00 vmovupd YMMWORD PTR a2$6[rbp], ymm0 ; 425 : const __m256d a3 = _mm256_load_pd((double *)&left_cur->f64_y[3]); 0022f b8 20 00 00 00 mov eax, 32 ; 00000020H 00234 48 6b c0 03 imul rax, rax, 3 00238 48 8b 8d 38 02 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 0023f 48 03 c8 add rcx, rax 00242 48 8b c1 mov rax, rcx 00245 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00249 c5 fd 11 85 20 03 00 00 vmovupd YMMWORD PTR a3$7[rbp], ymm0 ; 426 : ; 427 : /* Column 0 */ ; 428 : bcol = _mm256_load_pd((double *)&right_cur->f64_y[0]); 00251 b8 20 00 00 00 mov eax, 32 ; 00000020H 00256 48 6b c0 00 imul rax, rax, 0 0025a 48 8b 8d 18 02 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 00261 48 03 c8 add rcx, rax 00264 48 8b c1 mov rax, rcx 00267 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0026b c5 fd 11 85 c0 01 00 00 vmovupd YMMWORD PTR bcol$[rbp], ymm0 ; 429 : c0 = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(bcol, _FMA_SELECT(0)), c0); 00273 c4 e3 fd 01 85 c0 01 00 00 00 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 0 0027d c5 fd 10 8d 60 02 00 00 vmovupd ymm1, YMMWORD PTR a0$4[rbp] 00285 c4 e2 fd a8 8d c0 00 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c0$[rbp] 0028e c5 fd 10 c1 vmovupd ymm0, ymm1 00292 c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 430 : c0 = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(bcol, _FMA_SELECT(1)), c0); 0029a c4 e3 fd 01 85 c0 01 00 00 55 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 85 ; 00000055H 002a4 c5 fd 10 8d a0 02 00 00 vmovupd ymm1, YMMWORD PTR a1$5[rbp] 002ac c4 e2 fd a8 8d c0 00 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c0$[rbp] 002b5 c5 fd 10 c1 vmovupd ymm0, ymm1 002b9 c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 431 : c0 = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(bcol, _FMA_SELECT(2)), c0); 002c1 c4 e3 fd 01 85 c0 01 00 00 aa vpermpd ymm0, YMMWORD PTR bcol$[rbp], 170 ; 000000aaH 002cb c5 fd 10 8d e0 02 00 00 vmovupd ymm1, YMMWORD PTR a2$6[rbp] 002d3 c4 e2 fd a8 8d c0 00 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c0$[rbp] 002dc c5 fd 10 c1 vmovupd ymm0, ymm1 002e0 c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 432 : c0 = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(bcol, _FMA_SELECT(3)), c0); 002e8 c4 e3 fd 01 85 c0 01 00 00 ff vpermpd ymm0, YMMWORD PTR bcol$[rbp], 255 ; 000000ffH 002f2 c5 fd 10 8d 20 03 00 00 vmovupd ymm1, YMMWORD PTR a3$7[rbp] 002fa c4 e2 fd a8 8d c0 00 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c0$[rbp] 00303 c5 fd 10 c1 vmovupd ymm0, ymm1 00307 c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 433 : ; 434 : /* Column 1 */ ; 435 : bcol = _mm256_load_pd((double *)&right_cur->f64_y[1]); 0030f b8 20 00 00 00 mov eax, 32 ; 00000020H 00314 48 6b c0 01 imul rax, rax, 1 00318 48 8b 8d 18 02 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 0031f 48 03 c8 add rcx, rax 00322 48 8b c1 mov rax, rcx 00325 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00329 c5 fd 11 85 c0 01 00 00 vmovupd YMMWORD PTR bcol$[rbp], ymm0 ; 436 : c1 = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(bcol, _FMA_SELECT(0)), c1); 00331 c4 e3 fd 01 85 c0 01 00 00 00 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 0 0033b c5 fd 10 8d 60 02 00 00 vmovupd ymm1, YMMWORD PTR a0$4[rbp] 00343 c4 e2 fd a8 8d 00 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c1$[rbp] 0034c c5 fd 10 c1 vmovupd ymm0, ymm1 00350 c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 437 : c1 = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(bcol, _FMA_SELECT(1)), c1); 00358 c4 e3 fd 01 85 c0 01 00 00 55 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 85 ; 00000055H 00362 c5 fd 10 8d a0 02 00 00 vmovupd ymm1, YMMWORD PTR a1$5[rbp] 0036a c4 e2 fd a8 8d 00 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c1$[rbp] 00373 c5 fd 10 c1 vmovupd ymm0, ymm1 00377 c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 438 : c1 = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(bcol, _FMA_SELECT(2)), c1); 0037f c4 e3 fd 01 85 c0 01 00 00 aa vpermpd ymm0, YMMWORD PTR bcol$[rbp], 170 ; 000000aaH 00389 c5 fd 10 8d e0 02 00 00 vmovupd ymm1, YMMWORD PTR a2$6[rbp] 00391 c4 e2 fd a8 8d 00 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c1$[rbp] 0039a c5 fd 10 c1 vmovupd ymm0, ymm1 0039e c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 439 : c1 = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(bcol, _FMA_SELECT(3)), c1); 003a6 c4 e3 fd 01 85 c0 01 00 00 ff vpermpd ymm0, YMMWORD PTR bcol$[rbp], 255 ; 000000ffH 003b0 c5 fd 10 8d 20 03 00 00 vmovupd ymm1, YMMWORD PTR a3$7[rbp] 003b8 c4 e2 fd a8 8d 00 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c1$[rbp] 003c1 c5 fd 10 c1 vmovupd ymm0, ymm1 003c5 c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 440 : ; 441 : /* Column 2 */ ; 442 : bcol = _mm256_load_pd((double *)&right_cur->f64_y[2]); 003cd b8 20 00 00 00 mov eax, 32 ; 00000020H 003d2 48 6b c0 02 imul rax, rax, 2 003d6 48 8b 8d 18 02 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 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 c0 01 00 00 vmovupd YMMWORD PTR bcol$[rbp], ymm0 ; 443 : c2 = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(bcol, _FMA_SELECT(0)), c2); 003ef c4 e3 fd 01 85 c0 01 00 00 00 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 0 003f9 c5 fd 10 8d 60 02 00 00 vmovupd ymm1, YMMWORD PTR a0$4[rbp] 00401 c4 e2 fd a8 8d 40 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c2$[rbp] 0040a c5 fd 10 c1 vmovupd ymm0, ymm1 0040e c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 444 : c2 = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(bcol, _FMA_SELECT(1)), c2); 00416 c4 e3 fd 01 85 c0 01 00 00 55 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 85 ; 00000055H 00420 c5 fd 10 8d a0 02 00 00 vmovupd ymm1, YMMWORD PTR a1$5[rbp] 00428 c4 e2 fd a8 8d 40 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c2$[rbp] 00431 c5 fd 10 c1 vmovupd ymm0, ymm1 00435 c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 445 : c2 = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(bcol, _FMA_SELECT(2)), c2); 0043d c4 e3 fd 01 85 c0 01 00 00 aa vpermpd ymm0, YMMWORD PTR bcol$[rbp], 170 ; 000000aaH 00447 c5 fd 10 8d e0 02 00 00 vmovupd ymm1, YMMWORD PTR a2$6[rbp] 0044f c4 e2 fd a8 8d 40 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c2$[rbp] 00458 c5 fd 10 c1 vmovupd ymm0, ymm1 0045c c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 446 : c2 = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(bcol, _FMA_SELECT(3)), c2); 00464 c4 e3 fd 01 85 c0 01 00 00 ff vpermpd ymm0, YMMWORD PTR bcol$[rbp], 255 ; 000000ffH 0046e c5 fd 10 8d 20 03 00 00 vmovupd ymm1, YMMWORD PTR a3$7[rbp] 00476 c4 e2 fd a8 8d 40 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c2$[rbp] 0047f c5 fd 10 c1 vmovupd ymm0, ymm1 00483 c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 447 : ; 448 : /* Column 3 */ ; 449 : bcol = _mm256_load_pd((double *)&right_cur->f64_y[3]); 0048b b8 20 00 00 00 mov eax, 32 ; 00000020H 00490 48 6b c0 03 imul rax, rax, 3 00494 48 8b 8d 18 02 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 0049b 48 03 c8 add rcx, rax 0049e 48 8b c1 mov rax, rcx 004a1 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 004a5 c5 fd 11 85 c0 01 00 00 vmovupd YMMWORD PTR bcol$[rbp], ymm0 ; 450 : c3 = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(bcol, _FMA_SELECT(0)), c3); 004ad c4 e3 fd 01 85 c0 01 00 00 00 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 0 004b7 c5 fd 10 8d 60 02 00 00 vmovupd ymm1, YMMWORD PTR a0$4[rbp] 004bf c4 e2 fd a8 8d 80 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c3$[rbp] 004c8 c5 fd 10 c1 vmovupd ymm0, ymm1 004cc c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 451 : c3 = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(bcol, _FMA_SELECT(1)), c3); 004d4 c4 e3 fd 01 85 c0 01 00 00 55 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 85 ; 00000055H 004de c5 fd 10 8d a0 02 00 00 vmovupd ymm1, YMMWORD PTR a1$5[rbp] 004e6 c4 e2 fd a8 8d 80 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c3$[rbp] 004ef c5 fd 10 c1 vmovupd ymm0, ymm1 004f3 c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 452 : c3 = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(bcol, _FMA_SELECT(2)), c3); 004fb c4 e3 fd 01 85 c0 01 00 00 aa vpermpd ymm0, YMMWORD PTR bcol$[rbp], 170 ; 000000aaH 00505 c5 fd 10 8d e0 02 00 00 vmovupd ymm1, YMMWORD PTR a2$6[rbp] 0050d c4 e2 fd a8 8d 80 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c3$[rbp] 00516 c5 fd 10 c1 vmovupd ymm0, ymm1 0051a c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 453 : c3 = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(bcol, _FMA_SELECT(3)), c3); 00522 c4 e3 fd 01 85 c0 01 00 00 ff vpermpd ymm0, YMMWORD PTR bcol$[rbp], 255 ; 000000ffH 0052c c5 fd 10 8d 20 03 00 00 vmovupd ymm1, YMMWORD PTR a3$7[rbp] 00534 c4 e2 fd a8 8d 80 01 00 00 vfmadd213pd ymm1, ymm0, YMMWORD PTR c3$[rbp] 0053d c5 fd 10 c1 vmovupd ymm0, ymm1 00541 c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 454 : } 00549 e9 00 fc ff ff jmp $LN2@double_ker $LN3@double_ker: ; 455 : ; 456 : _mm256_store_pd((double *)&ans_cur->f64_y[0], c0); 0054e b8 20 00 00 00 mov eax, 32 ; 00000020H 00553 48 6b c0 00 imul rax, rax, 0 00557 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 0055e 48 03 c8 add rcx, rax 00561 48 8b c1 mov rax, rcx 00564 c5 fd 10 85 c0 00 00 00 vmovupd ymm0, YMMWORD PTR c0$[rbp] 0056c c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 457 : _mm256_store_pd((double *)&ans_cur->f64_y[1], c1); 00570 b8 20 00 00 00 mov eax, 32 ; 00000020H 00575 48 6b c0 01 imul rax, rax, 1 00579 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 00580 48 03 c8 add rcx, rax 00583 48 8b c1 mov rax, rcx 00586 c5 fd 10 85 00 01 00 00 vmovupd ymm0, YMMWORD PTR c1$[rbp] 0058e c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 458 : _mm256_store_pd((double *)&ans_cur->f64_y[2], c2); 00592 b8 20 00 00 00 mov eax, 32 ; 00000020H 00597 48 6b c0 02 imul rax, rax, 2 0059b 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 005a2 48 03 c8 add rcx, rax 005a5 48 8b c1 mov rax, rcx 005a8 c5 fd 10 85 40 01 00 00 vmovupd ymm0, YMMWORD PTR c2$[rbp] 005b0 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 459 : _mm256_store_pd((double *)&ans_cur->f64_y[3], c3); 005b4 b8 20 00 00 00 mov eax, 32 ; 00000020H 005b9 48 6b c0 03 imul rax, rax, 3 005bd 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 005c4 48 03 c8 add rcx, rax 005c7 48 8b c1 mov rax, rcx 005ca c5 fd 10 85 80 01 00 00 vmovupd ymm0, YMMWORD PTR c3$[rbp] 005d2 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 460 : } 005d6 49 8d a5 f0 04 00 00 lea rsp, QWORD PTR [r13+1264] 005dd 5f pop rdi 005de 5d pop rbp 005df 41 5d pop r13 005e1 c3 ret 0 double_kernel_tile_fma_avx_fma ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma_tile.x86.c ; COMDAT double_kernel_tile_fma_avx _TEXT SEGMENT i$ = 4 j$ = 36 commonK$ = 68 ansHeight$ = 100 ans_cur$ = 136 c0$ = 192 c1$ = 256 c2$ = 320 c3$ = 384 bcol$ = 448 k$1 = 504 right_cur$2 = 536 left_cur$3 = 568 a0$4 = 608 a1$5 = 672 a2$6 = 736 a3$7 = 800 left$ = 1296 right$ = 1304 ans$ = 1312 enumeration$ = 1320 double_kernel_tile_fma_avx PROC ; COMDAT ; 323 : { $LN6: 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 41 55 push r13 00016 55 push rbp 00017 57 push rdi 00018 48 81 ec 10 05 00 00 sub rsp, 1296 ; 00000510H 0001f 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 00024 48 8d 6c 24 40 lea rbp, QWORD PTR [rsp+64] 00029 48 83 e5 e0 and rbp, -32 ; ffffffffffffffe0H 0002d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__31D20E98_m@fma_tile@x86@c 00034 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00039 90 npad 1 ; 324 : int i = enumeration->m128_i32[0]; 0003a b8 04 00 00 00 mov eax, 4 0003f 48 6b c0 00 imul rax, rax, 0 00043 49 8b 8d 28 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 0004a 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0004d 89 45 04 mov DWORD PTR i$[rbp], eax ; 325 : int j = enumeration->m128_i32[1]; 00050 b8 04 00 00 00 mov eax, 4 00055 48 6b c0 01 imul rax, rax, 1 00059 49 8b 8d 28 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 00060 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00063 89 45 24 mov DWORD PTR j$[rbp], eax ; 326 : int commonK = enumeration->m128_i32[2]; 00066 b8 04 00 00 00 mov eax, 4 0006b 48 6b c0 02 imul rax, rax, 2 0006f 49 8b 8d 28 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 00076 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00079 89 45 44 mov DWORD PTR commonK$[rbp], eax ; 327 : int ansHeight = enumeration->m128_i32[3]; 0007c b8 04 00 00 00 mov eax, 4 00081 48 6b c0 03 imul rax, rax, 3 00085 49 8b 8d 28 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 0008c 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0008f 89 45 64 mov DWORD PTR ansHeight$[rbp], eax ; 328 : ; 329 : MAT_KERNEL(double) ; 330 : const *ans_cur = ans + GET_INDEX(ansHeight, i, j); // GetKernelAddressUnsafe 00092 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 00095 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00099 03 45 24 add eax, DWORD PTR j$[rbp] 0009c 48 98 cdqe 0009e 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 000a5 49 8b 8d 20 05 00 00 mov rcx, QWORD PTR ans$[r13] 000ac 48 03 c8 add rcx, rax 000af 48 8b c1 mov rax, rcx 000b2 48 89 85 88 00 00 00 mov QWORD PTR ans_cur$[rbp], rax ; 331 : ; 332 : register __m256d c0 = _mm256_load_pd((double *)&ans_cur->f64_y[0]); 000b9 b8 20 00 00 00 mov eax, 32 ; 00000020H 000be 48 6b c0 00 imul rax, rax, 0 000c2 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 000c9 48 03 c8 add rcx, rax 000cc 48 8b c1 mov rax, rcx 000cf c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000d3 c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 333 : register __m256d c1 = _mm256_load_pd((double *)&ans_cur->f64_y[1]); 000db b8 20 00 00 00 mov eax, 32 ; 00000020H 000e0 48 6b c0 01 imul rax, rax, 1 000e4 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 000eb 48 03 c8 add rcx, rax 000ee 48 8b c1 mov rax, rcx 000f1 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 000f5 c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 334 : register __m256d c2 = _mm256_load_pd((double *)&ans_cur->f64_y[2]); 000fd b8 20 00 00 00 mov eax, 32 ; 00000020H 00102 48 6b c0 02 imul rax, rax, 2 00106 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 0010d 48 03 c8 add rcx, rax 00110 48 8b c1 mov rax, rcx 00113 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00117 c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 335 : register __m256d c3 = _mm256_load_pd((double *)&ans_cur->f64_y[3]); 0011f b8 20 00 00 00 mov eax, 32 ; 00000020H 00124 48 6b c0 03 imul rax, rax, 3 00128 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 0012f 48 03 c8 add rcx, rax 00132 48 8b c1 mov rax, rcx 00135 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00139 c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 336 : register __m256d bcol; ; 337 : ; 338 : for (size_t k = 0; k < commonK; k++) { 00141 48 c7 85 f8 01 00 00 00 00 00 00 mov QWORD PTR k$1[rbp], 0 0014c eb 11 jmp SHORT $LN4@double_ker $LN2@double_ker: 0014e 48 8b 85 f8 01 00 00 mov rax, QWORD PTR k$1[rbp] 00155 48 ff c0 inc rax 00158 48 89 85 f8 01 00 00 mov QWORD PTR k$1[rbp], rax $LN4@double_ker: 0015f 48 63 45 44 movsxd rax, DWORD PTR commonK$[rbp] 00163 48 39 85 f8 01 00 00 cmp QWORD PTR k$1[rbp], rax 0016a 0f 83 0e 04 00 00 jae $LN3@double_ker ; 339 : MAT_KERNEL(double) ; 340 : const *right_cur = right + GET_INDEX(commonK, i, k), // GetKernelAddressUnsafe 00170 8b 45 44 mov eax, DWORD PTR commonK$[rbp] 00173 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00177 48 98 cdqe 00179 48 03 85 f8 01 00 00 add rax, QWORD PTR k$1[rbp] 00180 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 00187 49 8b 8d 18 05 00 00 mov rcx, QWORD PTR right$[r13] 0018e 48 03 c8 add rcx, rax 00191 48 8b c1 mov rax, rcx 00194 48 89 85 18 02 00 00 mov QWORD PTR right_cur$2[rbp], rax ; 341 : const *left_cur = 0019b 48 63 45 64 movsxd rax, DWORD PTR ansHeight$[rbp] 0019f 48 0f af 85 f8 01 00 00 imul rax, QWORD PTR k$1[rbp] 001a7 48 63 4d 24 movsxd rcx, DWORD PTR j$[rbp] 001ab 48 03 c1 add rax, rcx 001ae 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 001b5 49 8b 8d 10 05 00 00 mov rcx, QWORD PTR left$[r13] 001bc 48 03 c8 add rcx, rax 001bf 48 8b c1 mov rax, rcx 001c2 48 89 85 38 02 00 00 mov QWORD PTR left_cur$3[rbp], rax ; 342 : left + GET_INDEX(ansHeight, k, j); // GetKernelAddressUnsafe ; 343 : ; 344 : const __m256d a0 = _mm256_load_pd((double *)&left_cur->f64_y[0]); 001c9 b8 20 00 00 00 mov eax, 32 ; 00000020H 001ce 48 6b c0 00 imul rax, rax, 0 001d2 48 8b 8d 38 02 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 001d9 48 03 c8 add rcx, rax 001dc 48 8b c1 mov rax, rcx 001df c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 001e3 c5 fd 11 85 60 02 00 00 vmovupd YMMWORD PTR a0$4[rbp], ymm0 ; 345 : const __m256d a1 = _mm256_load_pd((double *)&left_cur->f64_y[1]); 001eb b8 20 00 00 00 mov eax, 32 ; 00000020H 001f0 48 6b c0 01 imul rax, rax, 1 001f4 48 8b 8d 38 02 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 001fb 48 03 c8 add rcx, rax 001fe 48 8b c1 mov rax, rcx 00201 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00205 c5 fd 11 85 a0 02 00 00 vmovupd YMMWORD PTR a1$5[rbp], ymm0 ; 346 : const __m256d a2 = _mm256_load_pd((double *)&left_cur->f64_y[2]); 0020d b8 20 00 00 00 mov eax, 32 ; 00000020H 00212 48 6b c0 02 imul rax, rax, 2 00216 48 8b 8d 38 02 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 0021d 48 03 c8 add rcx, rax 00220 48 8b c1 mov rax, rcx 00223 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00227 c5 fd 11 85 e0 02 00 00 vmovupd YMMWORD PTR a2$6[rbp], ymm0 ; 347 : const __m256d a3 = _mm256_load_pd((double *)&left_cur->f64_y[3]); 0022f b8 20 00 00 00 mov eax, 32 ; 00000020H 00234 48 6b c0 03 imul rax, rax, 3 00238 48 8b 8d 38 02 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 0023f 48 03 c8 add rcx, rax 00242 48 8b c1 mov rax, rcx 00245 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00249 c5 fd 11 85 20 03 00 00 vmovupd YMMWORD PTR a3$7[rbp], ymm0 ; 348 : ; 349 : /* Column 0 */ ; 350 : bcol = _mm256_load_pd((double *)&right_cur->f64_y[0]); 00251 b8 20 00 00 00 mov eax, 32 ; 00000020H 00256 48 6b c0 00 imul rax, rax, 0 0025a 48 8b 8d 18 02 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 00261 48 03 c8 add rcx, rax 00264 48 8b c1 mov rax, rcx 00267 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 0026b c5 fd 11 85 c0 01 00 00 vmovupd YMMWORD PTR bcol$[rbp], ymm0 ; 351 : c0 = _mm256_add_pd(c0, 00273 c4 e3 fd 01 85 c0 01 00 00 00 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 0 0027d c5 fd 10 8d 60 02 00 00 vmovupd ymm1, YMMWORD PTR a0$4[rbp] 00285 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00289 c5 fd 10 8d c0 00 00 00 vmovupd ymm1, YMMWORD PTR c0$[rbp] 00291 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00295 c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 352 : _mm256_mul_pd(a0, _mm256_permute4x64_pd(bcol, _FMA_SELECT(0)))); ; 353 : c0 = _mm256_add_pd(c0, 0029d c4 e3 fd 01 85 c0 01 00 00 55 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 85 ; 00000055H 002a7 c5 fd 10 8d a0 02 00 00 vmovupd ymm1, YMMWORD PTR a1$5[rbp] 002af c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 002b3 c5 fd 10 8d c0 00 00 00 vmovupd ymm1, YMMWORD PTR c0$[rbp] 002bb c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 002bf c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 354 : _mm256_mul_pd(a1, _mm256_permute4x64_pd(bcol, _FMA_SELECT(1)))); ; 355 : c0 = _mm256_add_pd(c0, 002c7 c4 e3 fd 01 85 c0 01 00 00 aa vpermpd ymm0, YMMWORD PTR bcol$[rbp], 170 ; 000000aaH 002d1 c5 fd 10 8d e0 02 00 00 vmovupd ymm1, YMMWORD PTR a2$6[rbp] 002d9 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 002dd c5 fd 10 8d c0 00 00 00 vmovupd ymm1, YMMWORD PTR c0$[rbp] 002e5 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 002e9 c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 356 : _mm256_mul_pd(a2, _mm256_permute4x64_pd(bcol, _FMA_SELECT(2)))); ; 357 : c0 = _mm256_add_pd(c0, 002f1 c4 e3 fd 01 85 c0 01 00 00 ff vpermpd ymm0, YMMWORD PTR bcol$[rbp], 255 ; 000000ffH 002fb c5 fd 10 8d 20 03 00 00 vmovupd ymm1, YMMWORD PTR a3$7[rbp] 00303 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00307 c5 fd 10 8d c0 00 00 00 vmovupd ymm1, YMMWORD PTR c0$[rbp] 0030f c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00313 c5 fd 11 85 c0 00 00 00 vmovupd YMMWORD PTR c0$[rbp], ymm0 ; 358 : _mm256_mul_pd(a3, _mm256_permute4x64_pd(bcol, _FMA_SELECT(3)))); ; 359 : ; 360 : /* Column 1 */ ; 361 : bcol = _mm256_load_pd((double *)&right_cur->f64_y[1]); 0031b b8 20 00 00 00 mov eax, 32 ; 00000020H 00320 48 6b c0 01 imul rax, rax, 1 00324 48 8b 8d 18 02 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 0032b 48 03 c8 add rcx, rax 0032e 48 8b c1 mov rax, rcx 00331 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 00335 c5 fd 11 85 c0 01 00 00 vmovupd YMMWORD PTR bcol$[rbp], ymm0 ; 362 : c1 = _mm256_add_pd(c1, 0033d c4 e3 fd 01 85 c0 01 00 00 00 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 0 00347 c5 fd 10 8d 60 02 00 00 vmovupd ymm1, YMMWORD PTR a0$4[rbp] 0034f c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00353 c5 fd 10 8d 00 01 00 00 vmovupd ymm1, YMMWORD PTR c1$[rbp] 0035b c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 0035f c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 363 : _mm256_mul_pd(a0, _mm256_permute4x64_pd(bcol, _FMA_SELECT(0)))); ; 364 : c1 = _mm256_add_pd(c1, 00367 c4 e3 fd 01 85 c0 01 00 00 55 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 85 ; 00000055H 00371 c5 fd 10 8d a0 02 00 00 vmovupd ymm1, YMMWORD PTR a1$5[rbp] 00379 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 0037d c5 fd 10 8d 00 01 00 00 vmovupd ymm1, YMMWORD PTR c1$[rbp] 00385 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00389 c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 365 : _mm256_mul_pd(a1, _mm256_permute4x64_pd(bcol, _FMA_SELECT(1)))); ; 366 : c1 = _mm256_add_pd(c1, 00391 c4 e3 fd 01 85 c0 01 00 00 aa vpermpd ymm0, YMMWORD PTR bcol$[rbp], 170 ; 000000aaH 0039b c5 fd 10 8d e0 02 00 00 vmovupd ymm1, YMMWORD PTR a2$6[rbp] 003a3 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 003a7 c5 fd 10 8d 00 01 00 00 vmovupd ymm1, YMMWORD PTR c1$[rbp] 003af c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 003b3 c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 367 : _mm256_mul_pd(a2, _mm256_permute4x64_pd(bcol, _FMA_SELECT(2)))); ; 368 : c1 = _mm256_add_pd(c1, 003bb c4 e3 fd 01 85 c0 01 00 00 ff vpermpd ymm0, YMMWORD PTR bcol$[rbp], 255 ; 000000ffH 003c5 c5 fd 10 8d 20 03 00 00 vmovupd ymm1, YMMWORD PTR a3$7[rbp] 003cd c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 003d1 c5 fd 10 8d 00 01 00 00 vmovupd ymm1, YMMWORD PTR c1$[rbp] 003d9 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 003dd c5 fd 11 85 00 01 00 00 vmovupd YMMWORD PTR c1$[rbp], ymm0 ; 369 : _mm256_mul_pd(a3, _mm256_permute4x64_pd(bcol, _FMA_SELECT(3)))); ; 370 : ; 371 : /* Column 2 */ ; 372 : bcol = _mm256_load_pd((double *)&right_cur->f64_y[2]); 003e5 b8 20 00 00 00 mov eax, 32 ; 00000020H 003ea 48 6b c0 02 imul rax, rax, 2 003ee 48 8b 8d 18 02 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 003f5 48 03 c8 add rcx, rax 003f8 48 8b c1 mov rax, rcx 003fb c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 003ff c5 fd 11 85 c0 01 00 00 vmovupd YMMWORD PTR bcol$[rbp], ymm0 ; 373 : c2 = _mm256_add_pd(c2, 00407 c4 e3 fd 01 85 c0 01 00 00 00 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 0 00411 c5 fd 10 8d 60 02 00 00 vmovupd ymm1, YMMWORD PTR a0$4[rbp] 00419 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 0041d c5 fd 10 8d 40 01 00 00 vmovupd ymm1, YMMWORD PTR c2$[rbp] 00425 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00429 c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 374 : _mm256_mul_pd(a0, _mm256_permute4x64_pd(bcol, _FMA_SELECT(0)))); ; 375 : c2 = _mm256_add_pd(c2, 00431 c4 e3 fd 01 85 c0 01 00 00 55 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 85 ; 00000055H 0043b c5 fd 10 8d a0 02 00 00 vmovupd ymm1, YMMWORD PTR a1$5[rbp] 00443 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00447 c5 fd 10 8d 40 01 00 00 vmovupd ymm1, YMMWORD PTR c2$[rbp] 0044f c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00453 c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 376 : _mm256_mul_pd(a1, _mm256_permute4x64_pd(bcol, _FMA_SELECT(1)))); ; 377 : c2 = _mm256_add_pd(c2, 0045b c4 e3 fd 01 85 c0 01 00 00 aa vpermpd ymm0, YMMWORD PTR bcol$[rbp], 170 ; 000000aaH 00465 c5 fd 10 8d e0 02 00 00 vmovupd ymm1, YMMWORD PTR a2$6[rbp] 0046d c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00471 c5 fd 10 8d 40 01 00 00 vmovupd ymm1, YMMWORD PTR c2$[rbp] 00479 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 0047d c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 378 : _mm256_mul_pd(a2, _mm256_permute4x64_pd(bcol, _FMA_SELECT(2)))); ; 379 : c2 = _mm256_add_pd(c2, 00485 c4 e3 fd 01 85 c0 01 00 00 ff vpermpd ymm0, YMMWORD PTR bcol$[rbp], 255 ; 000000ffH 0048f c5 fd 10 8d 20 03 00 00 vmovupd ymm1, YMMWORD PTR a3$7[rbp] 00497 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 0049b c5 fd 10 8d 40 01 00 00 vmovupd ymm1, YMMWORD PTR c2$[rbp] 004a3 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 004a7 c5 fd 11 85 40 01 00 00 vmovupd YMMWORD PTR c2$[rbp], ymm0 ; 380 : _mm256_mul_pd(a3, _mm256_permute4x64_pd(bcol, _FMA_SELECT(3)))); ; 381 : ; 382 : /* Column 3 */ ; 383 : bcol = _mm256_load_pd((double *)&right_cur->f64_y[3]); 004af b8 20 00 00 00 mov eax, 32 ; 00000020H 004b4 48 6b c0 03 imul rax, rax, 3 004b8 48 8b 8d 18 02 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 004bf 48 03 c8 add rcx, rax 004c2 48 8b c1 mov rax, rcx 004c5 c5 fd 10 00 vmovupd ymm0, YMMWORD PTR [rax] 004c9 c5 fd 11 85 c0 01 00 00 vmovupd YMMWORD PTR bcol$[rbp], ymm0 ; 384 : c3 = _mm256_add_pd(c3, 004d1 c4 e3 fd 01 85 c0 01 00 00 00 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 0 004db c5 fd 10 8d 60 02 00 00 vmovupd ymm1, YMMWORD PTR a0$4[rbp] 004e3 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 004e7 c5 fd 10 8d 80 01 00 00 vmovupd ymm1, YMMWORD PTR c3$[rbp] 004ef c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 004f3 c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 385 : _mm256_mul_pd(a0, _mm256_permute4x64_pd(bcol, _FMA_SELECT(0)))); ; 386 : c3 = _mm256_add_pd(c3, 004fb c4 e3 fd 01 85 c0 01 00 00 55 vpermpd ymm0, YMMWORD PTR bcol$[rbp], 85 ; 00000055H 00505 c5 fd 10 8d a0 02 00 00 vmovupd ymm1, YMMWORD PTR a1$5[rbp] 0050d c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00511 c5 fd 10 8d 80 01 00 00 vmovupd ymm1, YMMWORD PTR c3$[rbp] 00519 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 0051d c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 387 : _mm256_mul_pd(a1, _mm256_permute4x64_pd(bcol, _FMA_SELECT(1)))); ; 388 : c3 = _mm256_add_pd(c3, 00525 c4 e3 fd 01 85 c0 01 00 00 aa vpermpd ymm0, YMMWORD PTR bcol$[rbp], 170 ; 000000aaH 0052f c5 fd 10 8d e0 02 00 00 vmovupd ymm1, YMMWORD PTR a2$6[rbp] 00537 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 0053b c5 fd 10 8d 80 01 00 00 vmovupd ymm1, YMMWORD PTR c3$[rbp] 00543 c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00547 c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 389 : _mm256_mul_pd(a2, _mm256_permute4x64_pd(bcol, _FMA_SELECT(2)))); ; 390 : c3 = _mm256_add_pd(c3, 0054f c4 e3 fd 01 85 c0 01 00 00 ff vpermpd ymm0, YMMWORD PTR bcol$[rbp], 255 ; 000000ffH 00559 c5 fd 10 8d 20 03 00 00 vmovupd ymm1, YMMWORD PTR a3$7[rbp] 00561 c5 f5 59 c0 vmulpd ymm0, ymm1, ymm0 00565 c5 fd 10 8d 80 01 00 00 vmovupd ymm1, YMMWORD PTR c3$[rbp] 0056d c5 f5 58 c0 vaddpd ymm0, ymm1, ymm0 00571 c5 fd 11 85 80 01 00 00 vmovupd YMMWORD PTR c3$[rbp], ymm0 ; 391 : _mm256_mul_pd(a3, _mm256_permute4x64_pd(bcol, _FMA_SELECT(3)))); ; 392 : } 00579 e9 d0 fb ff ff jmp $LN2@double_ker $LN3@double_ker: ; 393 : ; 394 : _mm256_store_pd((double *)&ans_cur->f64_y[0], c0); 0057e b8 20 00 00 00 mov eax, 32 ; 00000020H 00583 48 6b c0 00 imul rax, rax, 0 00587 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 0058e 48 03 c8 add rcx, rax 00591 48 8b c1 mov rax, rcx 00594 c5 fd 10 85 c0 00 00 00 vmovupd ymm0, YMMWORD PTR c0$[rbp] 0059c c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 395 : _mm256_store_pd((double *)&ans_cur->f64_y[1], c1); 005a0 b8 20 00 00 00 mov eax, 32 ; 00000020H 005a5 48 6b c0 01 imul rax, rax, 1 005a9 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 005b0 48 03 c8 add rcx, rax 005b3 48 8b c1 mov rax, rcx 005b6 c5 fd 10 85 00 01 00 00 vmovupd ymm0, YMMWORD PTR c1$[rbp] 005be c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 396 : _mm256_store_pd((double *)&ans_cur->f64_y[2], c2); 005c2 b8 20 00 00 00 mov eax, 32 ; 00000020H 005c7 48 6b c0 02 imul rax, rax, 2 005cb 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 005d2 48 03 c8 add rcx, rax 005d5 48 8b c1 mov rax, rcx 005d8 c5 fd 10 85 40 01 00 00 vmovupd ymm0, YMMWORD PTR c2$[rbp] 005e0 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 397 : _mm256_store_pd((double *)&ans_cur->f64_y[3], c3); 005e4 b8 20 00 00 00 mov eax, 32 ; 00000020H 005e9 48 6b c0 03 imul rax, rax, 3 005ed 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 005f4 48 03 c8 add rcx, rax 005f7 48 8b c1 mov rax, rcx 005fa c5 fd 10 85 80 01 00 00 vmovupd ymm0, YMMWORD PTR c3$[rbp] 00602 c5 fd 11 00 vmovupd YMMWORD PTR [rax], ymm0 ; 398 : } 00606 49 8d a5 f0 04 00 00 lea rsp, QWORD PTR [r13+1264] 0060d 5f pop rdi 0060e 5d pop rbp 0060f 41 5d pop r13 00611 c3 ret 0 double_kernel_tile_fma_avx ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma_tile.x86.c ; COMDAT double_kernel_tile_fma_sse _TEXT SEGMENT i$ = 4 j$ = 36 commonK$ = 68 ansHeight$ = 100 c0_lo$ = 144 c0_hi$ = 192 c1_lo$ = 240 c1_hi$ = 288 c2_lo$ = 336 c2_hi$ = 384 c3_lo$ = 432 c3_hi$ = 480 k$1 = 520 left_cur$2 = 552 right_cur$3 = 584 b_lo$4 = 624 b_hi$5 = 672 a_lo$6 = 720 a_hi$7 = 768 b$8 = 816 b_lo$9 = 864 b_hi$10 = 912 a_lo$11 = 960 a_hi$12 = 1008 b$13 = 1056 b_lo$14 = 1104 b_hi$15 = 1152 a_lo$16 = 1200 a_hi$17 = 1248 b$18 = 1296 b_lo$19 = 1344 b_hi$20 = 1392 a_lo$21 = 1440 a_hi$22 = 1488 b$23 = 1536 left$ = 2368 right$ = 2376 ans$ = 2384 enumeration$ = 2392 double_kernel_tile_fma_sse PROC ; COMDAT ; 283 : { $LN18: 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 55 push rbp 00015 57 push rdi 00016 48 81 ec 48 09 00 00 sub rsp, 2376 ; 00000948H 0001d 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 00022 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__31D20E98_m@fma_tile@x86@c 00029 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 0002e 90 npad 1 ; 284 : int i = enumeration->m128_i32[0]; 0002f b8 04 00 00 00 mov eax, 4 00034 48 6b c0 00 imul rax, rax, 0 00038 48 8b 8d 58 09 00 00 mov rcx, QWORD PTR enumeration$[rbp] 0003f 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00042 89 45 04 mov DWORD PTR i$[rbp], eax ; 285 : int j = enumeration->m128_i32[1]; 00045 b8 04 00 00 00 mov eax, 4 0004a 48 6b c0 01 imul rax, rax, 1 0004e 48 8b 8d 58 09 00 00 mov rcx, QWORD PTR enumeration$[rbp] 00055 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00058 89 45 24 mov DWORD PTR j$[rbp], eax ; 286 : int commonK = enumeration->m128_i32[2]; 0005b b8 04 00 00 00 mov eax, 4 00060 48 6b c0 02 imul rax, rax, 2 00064 48 8b 8d 58 09 00 00 mov rcx, QWORD PTR enumeration$[rbp] 0006b 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0006e 89 45 44 mov DWORD PTR commonK$[rbp], eax ; 287 : int ansHeight = enumeration->m128_i32[3]; 00071 b8 04 00 00 00 mov eax, 4 00076 48 6b c0 03 imul rax, rax, 3 0007a 48 8b 8d 58 09 00 00 mov rcx, QWORD PTR enumeration$[rbp] 00081 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00084 89 45 64 mov DWORD PTR ansHeight$[rbp], eax ; 288 : ; 289 : register __m128d c0_lo = _mm_load_pd(ans->f64_x + (0 * 2 + 0)); 00087 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 0008e 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00091 0f 29 85 90 00 00 00 movaps XMMWORD PTR c0_lo$[rbp], xmm0 ; 290 : register __m128d c0_hi = _mm_load_pd(ans->f64_x + (0 * 2 + 1)); 00098 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 0009f 48 83 c0 10 add rax, 16 000a3 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000a6 0f 29 85 c0 00 00 00 movaps XMMWORD PTR c0_hi$[rbp], xmm0 ; 291 : register __m128d c1_lo = _mm_load_pd(ans->f64_x + (1 * 2 + 0)); 000ad 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 000b4 48 83 c0 20 add rax, 32 ; 00000020H 000b8 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000bb 0f 29 85 f0 00 00 00 movaps XMMWORD PTR c1_lo$[rbp], xmm0 ; 292 : register __m128d c1_hi = _mm_load_pd(ans->f64_x + (1 * 2 + 1)); 000c2 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 000c9 48 83 c0 30 add rax, 48 ; 00000030H 000cd 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000d0 0f 29 85 20 01 00 00 movaps XMMWORD PTR c1_hi$[rbp], xmm0 ; 293 : register __m128d c2_lo = _mm_load_pd(ans->f64_x + (2 * 2 + 0)); 000d7 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 000de 48 83 c0 40 add rax, 64 ; 00000040H 000e2 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000e5 0f 29 85 50 01 00 00 movaps XMMWORD PTR c2_lo$[rbp], xmm0 ; 294 : register __m128d c2_hi = _mm_load_pd(ans->f64_x + (2 * 2 + 1)); 000ec 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 000f3 48 83 c0 50 add rax, 80 ; 00000050H 000f7 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000fa 0f 29 85 80 01 00 00 movaps XMMWORD PTR c2_hi$[rbp], xmm0 ; 295 : register __m128d c3_lo = _mm_load_pd(ans->f64_x + (3 * 2 + 0)); 00101 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 00108 48 83 c0 60 add rax, 96 ; 00000060H 0010c 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0010f 0f 29 85 b0 01 00 00 movaps XMMWORD PTR c3_lo$[rbp], xmm0 ; 296 : register __m128d c3_hi = _mm_load_pd(ans->f64_x + (3 * 2 + 1)); 00116 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 0011d 48 83 c0 70 add rax, 112 ; 00000070H 00121 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00124 0f 29 85 e0 01 00 00 movaps XMMWORD PTR c3_hi$[rbp], xmm0 ; 297 : ; 298 : for (size_t k = 0; k < commonK; k++) { 0012b 48 c7 85 08 02 00 00 00 00 00 00 mov QWORD PTR k$1[rbp], 0 00136 eb 11 jmp SHORT $LN4@double_ker $LN2@double_ker: 00138 48 8b 85 08 02 00 00 mov rax, QWORD PTR k$1[rbp] 0013f 48 ff c0 inc rax 00142 48 89 85 08 02 00 00 mov QWORD PTR k$1[rbp], rax $LN4@double_ker: 00149 48 63 45 44 movsxd rax, DWORD PTR commonK$[rbp] 0014d 48 39 85 08 02 00 00 cmp QWORD PTR k$1[rbp], rax 00154 0f 83 ed 09 00 00 jae $LN3@double_ker ; 299 : MAT_KERNEL(double) ; 300 : const *left_cur = left + GET_INDEX(ansHeight, i, k), 0015a 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 0015d 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00161 48 98 cdqe 00163 48 03 85 08 02 00 00 add rax, QWORD PTR k$1[rbp] 0016a 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 00171 48 8b 8d 40 09 00 00 mov rcx, QWORD PTR left$[rbp] 00178 48 03 c8 add rcx, rax 0017b 48 8b c1 mov rax, rcx 0017e 48 89 85 28 02 00 00 mov QWORD PTR left_cur$2[rbp], rax ; 301 : const *right_cur = right + GET_INDEX(commonK, j, k); // GetKernelAddressUnsafe 00185 8b 45 44 mov eax, DWORD PTR commonK$[rbp] 00188 0f af 45 24 imul eax, DWORD PTR j$[rbp] 0018c 48 98 cdqe 0018e 48 03 85 08 02 00 00 add rax, QWORD PTR k$1[rbp] 00195 48 69 c0 80 00 00 00 imul rax, rax, 128 ; 00000080H 0019c 48 8b 8d 48 09 00 00 mov rcx, QWORD PTR right$[rbp] 001a3 48 03 c8 add rcx, rax 001a6 48 8b c1 mov rax, rcx 001a9 48 89 85 48 02 00 00 mov QWORD PTR right_cur$3[rbp], rax $LN7@double_ker: ; 302 : ; 303 : DOUBLE_KERNEL_FMA_CYCLE(0); 001b0 48 8b 85 48 02 00 00 mov rax, QWORD PTR right_cur$3[rbp] 001b7 0f 10 00 movups xmm0, XMMWORD PTR [rax] 001ba 0f 29 85 70 02 00 00 movaps XMMWORD PTR b_lo$4[rbp], xmm0 001c1 48 8b 85 48 02 00 00 mov rax, QWORD PTR right_cur$3[rbp] 001c8 48 05 80 00 00 00 add rax, 128 ; 00000080H 001ce 0f 10 00 movups xmm0, XMMWORD PTR [rax] 001d1 0f 29 85 a0 02 00 00 movaps XMMWORD PTR b_hi$5[rbp], xmm0 001d8 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 001df 0f 10 00 movups xmm0, XMMWORD PTR [rax] 001e2 0f 29 85 d0 02 00 00 movaps XMMWORD PTR a_lo$6[rbp], xmm0 001e9 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 001f0 48 05 80 00 00 00 add rax, 128 ; 00000080H 001f6 0f 10 00 movups xmm0, XMMWORD PTR [rax] 001f9 0f 29 85 00 03 00 00 movaps XMMWORD PTR a_hi$7[rbp], xmm0 00200 0f 28 85 70 02 00 00 movaps xmm0, XMMWORD PTR b_lo$4[rbp] 00207 66 0f c6 85 70 02 00 00 00 shufpd xmm0, XMMWORD PTR b_lo$4[rbp], 0 00210 0f 29 85 30 03 00 00 movaps XMMWORD PTR b$8[rbp], xmm0 00217 0f 28 85 d0 02 00 00 movaps xmm0, XMMWORD PTR a_lo$6[rbp] 0021e 66 0f 59 85 30 03 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 00226 0f 28 8d 90 00 00 00 movaps xmm1, XMMWORD PTR c0_lo$[rbp] 0022d 66 0f 58 c8 addpd xmm1, xmm0 00231 0f 28 c1 movaps xmm0, xmm1 00234 0f 29 85 90 00 00 00 movaps XMMWORD PTR c0_lo$[rbp], xmm0 0023b 0f 28 85 00 03 00 00 movaps xmm0, XMMWORD PTR a_hi$7[rbp] 00242 66 0f 59 85 30 03 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 0024a 0f 28 8d c0 00 00 00 movaps xmm1, XMMWORD PTR c0_hi$[rbp] 00251 66 0f 58 c8 addpd xmm1, xmm0 00255 0f 28 c1 movaps xmm0, xmm1 00258 0f 29 85 c0 00 00 00 movaps XMMWORD PTR c0_hi$[rbp], xmm0 0025f 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00266 48 05 00 01 00 00 add rax, 256 ; 00000100H 0026c 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0026f 0f 29 85 d0 02 00 00 movaps XMMWORD PTR a_lo$6[rbp], xmm0 00276 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 0027d 48 05 80 01 00 00 add rax, 384 ; 00000180H 00283 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00286 0f 29 85 00 03 00 00 movaps XMMWORD PTR a_hi$7[rbp], xmm0 0028d 0f 28 85 70 02 00 00 movaps xmm0, XMMWORD PTR b_lo$4[rbp] 00294 66 0f c6 85 70 02 00 00 03 shufpd xmm0, XMMWORD PTR b_lo$4[rbp], 3 0029d 0f 29 85 30 03 00 00 movaps XMMWORD PTR b$8[rbp], xmm0 002a4 0f 28 85 d0 02 00 00 movaps xmm0, XMMWORD PTR a_lo$6[rbp] 002ab 66 0f 59 85 30 03 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 002b3 0f 28 8d 90 00 00 00 movaps xmm1, XMMWORD PTR c0_lo$[rbp] 002ba 66 0f 58 c8 addpd xmm1, xmm0 002be 0f 28 c1 movaps xmm0, xmm1 002c1 0f 29 85 90 00 00 00 movaps XMMWORD PTR c0_lo$[rbp], xmm0 002c8 0f 28 85 00 03 00 00 movaps xmm0, XMMWORD PTR a_hi$7[rbp] 002cf 66 0f 59 85 30 03 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 002d7 0f 28 8d c0 00 00 00 movaps xmm1, XMMWORD PTR c0_hi$[rbp] 002de 66 0f 58 c8 addpd xmm1, xmm0 002e2 0f 28 c1 movaps xmm0, xmm1 002e5 0f 29 85 c0 00 00 00 movaps XMMWORD PTR c0_hi$[rbp], xmm0 002ec 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 002f3 48 05 00 02 00 00 add rax, 512 ; 00000200H 002f9 0f 10 00 movups xmm0, XMMWORD PTR [rax] 002fc 0f 29 85 d0 02 00 00 movaps XMMWORD PTR a_lo$6[rbp], xmm0 00303 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 0030a 48 05 80 02 00 00 add rax, 640 ; 00000280H 00310 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00313 0f 29 85 00 03 00 00 movaps XMMWORD PTR a_hi$7[rbp], xmm0 0031a 0f 28 85 a0 02 00 00 movaps xmm0, XMMWORD PTR b_hi$5[rbp] 00321 66 0f c6 85 a0 02 00 00 00 shufpd xmm0, XMMWORD PTR b_hi$5[rbp], 0 0032a 0f 29 85 30 03 00 00 movaps XMMWORD PTR b$8[rbp], xmm0 00331 0f 28 85 d0 02 00 00 movaps xmm0, XMMWORD PTR a_lo$6[rbp] 00338 66 0f 59 85 30 03 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 00340 0f 28 8d 90 00 00 00 movaps xmm1, XMMWORD PTR c0_lo$[rbp] 00347 66 0f 58 c8 addpd xmm1, xmm0 0034b 0f 28 c1 movaps xmm0, xmm1 0034e 0f 29 85 90 00 00 00 movaps XMMWORD PTR c0_lo$[rbp], xmm0 00355 0f 28 85 00 03 00 00 movaps xmm0, XMMWORD PTR a_hi$7[rbp] 0035c 66 0f 59 85 30 03 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 00364 0f 28 8d c0 00 00 00 movaps xmm1, XMMWORD PTR c0_hi$[rbp] 0036b 66 0f 58 c8 addpd xmm1, xmm0 0036f 0f 28 c1 movaps xmm0, xmm1 00372 0f 29 85 c0 00 00 00 movaps XMMWORD PTR c0_hi$[rbp], xmm0 00379 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00380 48 05 00 03 00 00 add rax, 768 ; 00000300H 00386 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00389 0f 29 85 d0 02 00 00 movaps XMMWORD PTR a_lo$6[rbp], xmm0 00390 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00397 48 05 80 03 00 00 add rax, 896 ; 00000380H 0039d 0f 10 00 movups xmm0, XMMWORD PTR [rax] 003a0 0f 29 85 00 03 00 00 movaps XMMWORD PTR a_hi$7[rbp], xmm0 003a7 0f 28 85 a0 02 00 00 movaps xmm0, XMMWORD PTR b_hi$5[rbp] 003ae 66 0f c6 85 a0 02 00 00 03 shufpd xmm0, XMMWORD PTR b_hi$5[rbp], 3 003b7 0f 29 85 30 03 00 00 movaps XMMWORD PTR b$8[rbp], xmm0 003be 0f 28 85 d0 02 00 00 movaps xmm0, XMMWORD PTR a_lo$6[rbp] 003c5 66 0f 59 85 30 03 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 003cd 0f 28 8d 90 00 00 00 movaps xmm1, XMMWORD PTR c0_lo$[rbp] 003d4 66 0f 58 c8 addpd xmm1, xmm0 003d8 0f 28 c1 movaps xmm0, xmm1 003db 0f 29 85 90 00 00 00 movaps XMMWORD PTR c0_lo$[rbp], xmm0 003e2 0f 28 85 00 03 00 00 movaps xmm0, XMMWORD PTR a_hi$7[rbp] 003e9 66 0f 59 85 30 03 00 00 mulpd xmm0, XMMWORD PTR b$8[rbp] 003f1 0f 28 8d c0 00 00 00 movaps xmm1, XMMWORD PTR c0_hi$[rbp] 003f8 66 0f 58 c8 addpd xmm1, xmm0 003fc 0f 28 c1 movaps xmm0, xmm1 003ff 0f 29 85 c0 00 00 00 movaps XMMWORD PTR c0_hi$[rbp], xmm0 00406 33 c0 xor eax, eax 00408 85 c0 test eax, eax 0040a 0f 85 a0 fd ff ff jne $LN7@double_ker $LN10@double_ker: ; 304 : ; 305 : DOUBLE_KERNEL_FMA_CYCLE(1); 00410 48 8b 85 48 02 00 00 mov rax, QWORD PTR right_cur$3[rbp] 00417 48 05 00 01 00 00 add rax, 256 ; 00000100H 0041d 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00420 0f 29 85 60 03 00 00 movaps XMMWORD PTR b_lo$9[rbp], xmm0 00427 48 8b 85 48 02 00 00 mov rax, QWORD PTR right_cur$3[rbp] 0042e 48 05 80 01 00 00 add rax, 384 ; 00000180H 00434 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00437 0f 29 85 90 03 00 00 movaps XMMWORD PTR b_hi$10[rbp], xmm0 0043e 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00445 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00448 0f 29 85 c0 03 00 00 movaps XMMWORD PTR a_lo$11[rbp], xmm0 0044f 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00456 48 05 80 00 00 00 add rax, 128 ; 00000080H 0045c 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0045f 0f 29 85 f0 03 00 00 movaps XMMWORD PTR a_hi$12[rbp], xmm0 00466 0f 28 85 60 03 00 00 movaps xmm0, XMMWORD PTR b_lo$9[rbp] 0046d 66 0f c6 85 60 03 00 00 00 shufpd xmm0, XMMWORD PTR b_lo$9[rbp], 0 00476 0f 29 85 20 04 00 00 movaps XMMWORD PTR b$13[rbp], xmm0 0047d 0f 28 85 c0 03 00 00 movaps xmm0, XMMWORD PTR a_lo$11[rbp] 00484 66 0f 59 85 20 04 00 00 mulpd xmm0, XMMWORD PTR b$13[rbp] 0048c 0f 28 8d f0 00 00 00 movaps xmm1, XMMWORD PTR c1_lo$[rbp] 00493 66 0f 58 c8 addpd xmm1, xmm0 00497 0f 28 c1 movaps xmm0, xmm1 0049a 0f 29 85 f0 00 00 00 movaps XMMWORD PTR c1_lo$[rbp], xmm0 004a1 0f 28 85 f0 03 00 00 movaps xmm0, XMMWORD PTR a_hi$12[rbp] 004a8 66 0f 59 85 20 04 00 00 mulpd xmm0, XMMWORD PTR b$13[rbp] 004b0 0f 28 8d 20 01 00 00 movaps xmm1, XMMWORD PTR c1_hi$[rbp] 004b7 66 0f 58 c8 addpd xmm1, xmm0 004bb 0f 28 c1 movaps xmm0, xmm1 004be 0f 29 85 20 01 00 00 movaps XMMWORD PTR c1_hi$[rbp], xmm0 004c5 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 004cc 48 05 00 01 00 00 add rax, 256 ; 00000100H 004d2 0f 10 00 movups xmm0, XMMWORD PTR [rax] 004d5 0f 29 85 c0 03 00 00 movaps XMMWORD PTR a_lo$11[rbp], xmm0 004dc 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 004e3 48 05 80 01 00 00 add rax, 384 ; 00000180H 004e9 0f 10 00 movups xmm0, XMMWORD PTR [rax] 004ec 0f 29 85 f0 03 00 00 movaps XMMWORD PTR a_hi$12[rbp], xmm0 004f3 0f 28 85 60 03 00 00 movaps xmm0, XMMWORD PTR b_lo$9[rbp] 004fa 66 0f c6 85 60 03 00 00 03 shufpd xmm0, XMMWORD PTR b_lo$9[rbp], 3 00503 0f 29 85 20 04 00 00 movaps XMMWORD PTR b$13[rbp], xmm0 0050a 0f 28 85 c0 03 00 00 movaps xmm0, XMMWORD PTR a_lo$11[rbp] 00511 66 0f 59 85 20 04 00 00 mulpd xmm0, XMMWORD PTR b$13[rbp] 00519 0f 28 8d f0 00 00 00 movaps xmm1, XMMWORD PTR c1_lo$[rbp] 00520 66 0f 58 c8 addpd xmm1, xmm0 00524 0f 28 c1 movaps xmm0, xmm1 00527 0f 29 85 f0 00 00 00 movaps XMMWORD PTR c1_lo$[rbp], xmm0 0052e 0f 28 85 f0 03 00 00 movaps xmm0, XMMWORD PTR a_hi$12[rbp] 00535 66 0f 59 85 20 04 00 00 mulpd xmm0, XMMWORD PTR b$13[rbp] 0053d 0f 28 8d 20 01 00 00 movaps xmm1, XMMWORD PTR c1_hi$[rbp] 00544 66 0f 58 c8 addpd xmm1, xmm0 00548 0f 28 c1 movaps xmm0, xmm1 0054b 0f 29 85 20 01 00 00 movaps XMMWORD PTR c1_hi$[rbp], xmm0 00552 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00559 48 05 00 02 00 00 add rax, 512 ; 00000200H 0055f 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00562 0f 29 85 c0 03 00 00 movaps XMMWORD PTR a_lo$11[rbp], xmm0 00569 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00570 48 05 80 02 00 00 add rax, 640 ; 00000280H 00576 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00579 0f 29 85 f0 03 00 00 movaps XMMWORD PTR a_hi$12[rbp], xmm0 00580 0f 28 85 90 03 00 00 movaps xmm0, XMMWORD PTR b_hi$10[rbp] 00587 66 0f c6 85 90 03 00 00 00 shufpd xmm0, XMMWORD PTR b_hi$10[rbp], 0 00590 0f 29 85 20 04 00 00 movaps XMMWORD PTR b$13[rbp], xmm0 00597 0f 28 85 c0 03 00 00 movaps xmm0, XMMWORD PTR a_lo$11[rbp] 0059e 66 0f 59 85 20 04 00 00 mulpd xmm0, XMMWORD PTR b$13[rbp] 005a6 0f 28 8d f0 00 00 00 movaps xmm1, XMMWORD PTR c1_lo$[rbp] 005ad 66 0f 58 c8 addpd xmm1, xmm0 005b1 0f 28 c1 movaps xmm0, xmm1 005b4 0f 29 85 f0 00 00 00 movaps XMMWORD PTR c1_lo$[rbp], xmm0 005bb 0f 28 85 f0 03 00 00 movaps xmm0, XMMWORD PTR a_hi$12[rbp] 005c2 66 0f 59 85 20 04 00 00 mulpd xmm0, XMMWORD PTR b$13[rbp] 005ca 0f 28 8d 20 01 00 00 movaps xmm1, XMMWORD PTR c1_hi$[rbp] 005d1 66 0f 58 c8 addpd xmm1, xmm0 005d5 0f 28 c1 movaps xmm0, xmm1 005d8 0f 29 85 20 01 00 00 movaps XMMWORD PTR c1_hi$[rbp], xmm0 005df 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 005e6 48 05 00 03 00 00 add rax, 768 ; 00000300H 005ec 0f 10 00 movups xmm0, XMMWORD PTR [rax] 005ef 0f 29 85 c0 03 00 00 movaps XMMWORD PTR a_lo$11[rbp], xmm0 005f6 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 005fd 48 05 80 03 00 00 add rax, 896 ; 00000380H 00603 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00606 0f 29 85 f0 03 00 00 movaps XMMWORD PTR a_hi$12[rbp], xmm0 0060d 0f 28 85 90 03 00 00 movaps xmm0, XMMWORD PTR b_hi$10[rbp] 00614 66 0f c6 85 90 03 00 00 03 shufpd xmm0, XMMWORD PTR b_hi$10[rbp], 3 0061d 0f 29 85 20 04 00 00 movaps XMMWORD PTR b$13[rbp], xmm0 00624 0f 28 85 c0 03 00 00 movaps xmm0, XMMWORD PTR a_lo$11[rbp] 0062b 66 0f 59 85 20 04 00 00 mulpd xmm0, XMMWORD PTR b$13[rbp] 00633 0f 28 8d f0 00 00 00 movaps xmm1, XMMWORD PTR c1_lo$[rbp] 0063a 66 0f 58 c8 addpd xmm1, xmm0 0063e 0f 28 c1 movaps xmm0, xmm1 00641 0f 29 85 f0 00 00 00 movaps XMMWORD PTR c1_lo$[rbp], xmm0 00648 0f 28 85 f0 03 00 00 movaps xmm0, XMMWORD PTR a_hi$12[rbp] 0064f 66 0f 59 85 20 04 00 00 mulpd xmm0, XMMWORD PTR b$13[rbp] 00657 0f 28 8d 20 01 00 00 movaps xmm1, XMMWORD PTR c1_hi$[rbp] 0065e 66 0f 58 c8 addpd xmm1, xmm0 00662 0f 28 c1 movaps xmm0, xmm1 00665 0f 29 85 20 01 00 00 movaps XMMWORD PTR c1_hi$[rbp], xmm0 0066c 33 c0 xor eax, eax 0066e 85 c0 test eax, eax 00670 0f 85 9a fd ff ff jne $LN10@double_ker $LN13@double_ker: ; 306 : ; 307 : DOUBLE_KERNEL_FMA_CYCLE(2); 00676 48 8b 85 48 02 00 00 mov rax, QWORD PTR right_cur$3[rbp] 0067d 48 05 00 02 00 00 add rax, 512 ; 00000200H 00683 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00686 0f 29 85 50 04 00 00 movaps XMMWORD PTR b_lo$14[rbp], xmm0 0068d 48 8b 85 48 02 00 00 mov rax, QWORD PTR right_cur$3[rbp] 00694 48 05 80 02 00 00 add rax, 640 ; 00000280H 0069a 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0069d 0f 29 85 80 04 00 00 movaps XMMWORD PTR b_hi$15[rbp], xmm0 006a4 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 006ab 0f 10 00 movups xmm0, XMMWORD PTR [rax] 006ae 0f 29 85 b0 04 00 00 movaps XMMWORD PTR a_lo$16[rbp], xmm0 006b5 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 006bc 48 05 80 00 00 00 add rax, 128 ; 00000080H 006c2 0f 10 00 movups xmm0, XMMWORD PTR [rax] 006c5 0f 29 85 e0 04 00 00 movaps XMMWORD PTR a_hi$17[rbp], xmm0 006cc 0f 28 85 50 04 00 00 movaps xmm0, XMMWORD PTR b_lo$14[rbp] 006d3 66 0f c6 85 50 04 00 00 00 shufpd xmm0, XMMWORD PTR b_lo$14[rbp], 0 006dc 0f 29 85 10 05 00 00 movaps XMMWORD PTR b$18[rbp], xmm0 006e3 0f 28 85 b0 04 00 00 movaps xmm0, XMMWORD PTR a_lo$16[rbp] 006ea 66 0f 59 85 10 05 00 00 mulpd xmm0, XMMWORD PTR b$18[rbp] 006f2 0f 28 8d 50 01 00 00 movaps xmm1, XMMWORD PTR c2_lo$[rbp] 006f9 66 0f 58 c8 addpd xmm1, xmm0 006fd 0f 28 c1 movaps xmm0, xmm1 00700 0f 29 85 50 01 00 00 movaps XMMWORD PTR c2_lo$[rbp], xmm0 00707 0f 28 85 e0 04 00 00 movaps xmm0, XMMWORD PTR a_hi$17[rbp] 0070e 66 0f 59 85 10 05 00 00 mulpd xmm0, XMMWORD PTR b$18[rbp] 00716 0f 28 8d 80 01 00 00 movaps xmm1, XMMWORD PTR c2_hi$[rbp] 0071d 66 0f 58 c8 addpd xmm1, xmm0 00721 0f 28 c1 movaps xmm0, xmm1 00724 0f 29 85 80 01 00 00 movaps XMMWORD PTR c2_hi$[rbp], xmm0 0072b 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00732 48 05 00 01 00 00 add rax, 256 ; 00000100H 00738 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0073b 0f 29 85 b0 04 00 00 movaps XMMWORD PTR a_lo$16[rbp], xmm0 00742 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00749 48 05 80 01 00 00 add rax, 384 ; 00000180H 0074f 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00752 0f 29 85 e0 04 00 00 movaps XMMWORD PTR a_hi$17[rbp], xmm0 00759 0f 28 85 50 04 00 00 movaps xmm0, XMMWORD PTR b_lo$14[rbp] 00760 66 0f c6 85 50 04 00 00 03 shufpd xmm0, XMMWORD PTR b_lo$14[rbp], 3 00769 0f 29 85 10 05 00 00 movaps XMMWORD PTR b$18[rbp], xmm0 00770 0f 28 85 b0 04 00 00 movaps xmm0, XMMWORD PTR a_lo$16[rbp] 00777 66 0f 59 85 10 05 00 00 mulpd xmm0, XMMWORD PTR b$18[rbp] 0077f 0f 28 8d 50 01 00 00 movaps xmm1, XMMWORD PTR c2_lo$[rbp] 00786 66 0f 58 c8 addpd xmm1, xmm0 0078a 0f 28 c1 movaps xmm0, xmm1 0078d 0f 29 85 50 01 00 00 movaps XMMWORD PTR c2_lo$[rbp], xmm0 00794 0f 28 85 e0 04 00 00 movaps xmm0, XMMWORD PTR a_hi$17[rbp] 0079b 66 0f 59 85 10 05 00 00 mulpd xmm0, XMMWORD PTR b$18[rbp] 007a3 0f 28 8d 80 01 00 00 movaps xmm1, XMMWORD PTR c2_hi$[rbp] 007aa 66 0f 58 c8 addpd xmm1, xmm0 007ae 0f 28 c1 movaps xmm0, xmm1 007b1 0f 29 85 80 01 00 00 movaps XMMWORD PTR c2_hi$[rbp], xmm0 007b8 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 007bf 48 05 00 02 00 00 add rax, 512 ; 00000200H 007c5 0f 10 00 movups xmm0, XMMWORD PTR [rax] 007c8 0f 29 85 b0 04 00 00 movaps XMMWORD PTR a_lo$16[rbp], xmm0 007cf 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 007d6 48 05 80 02 00 00 add rax, 640 ; 00000280H 007dc 0f 10 00 movups xmm0, XMMWORD PTR [rax] 007df 0f 29 85 e0 04 00 00 movaps XMMWORD PTR a_hi$17[rbp], xmm0 007e6 0f 28 85 80 04 00 00 movaps xmm0, XMMWORD PTR b_hi$15[rbp] 007ed 66 0f c6 85 80 04 00 00 00 shufpd xmm0, XMMWORD PTR b_hi$15[rbp], 0 007f6 0f 29 85 10 05 00 00 movaps XMMWORD PTR b$18[rbp], xmm0 007fd 0f 28 85 b0 04 00 00 movaps xmm0, XMMWORD PTR a_lo$16[rbp] 00804 66 0f 59 85 10 05 00 00 mulpd xmm0, XMMWORD PTR b$18[rbp] 0080c 0f 28 8d 50 01 00 00 movaps xmm1, XMMWORD PTR c2_lo$[rbp] 00813 66 0f 58 c8 addpd xmm1, xmm0 00817 0f 28 c1 movaps xmm0, xmm1 0081a 0f 29 85 50 01 00 00 movaps XMMWORD PTR c2_lo$[rbp], xmm0 00821 0f 28 85 e0 04 00 00 movaps xmm0, XMMWORD PTR a_hi$17[rbp] 00828 66 0f 59 85 10 05 00 00 mulpd xmm0, XMMWORD PTR b$18[rbp] 00830 0f 28 8d 80 01 00 00 movaps xmm1, XMMWORD PTR c2_hi$[rbp] 00837 66 0f 58 c8 addpd xmm1, xmm0 0083b 0f 28 c1 movaps xmm0, xmm1 0083e 0f 29 85 80 01 00 00 movaps XMMWORD PTR c2_hi$[rbp], xmm0 00845 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 0084c 48 05 00 03 00 00 add rax, 768 ; 00000300H 00852 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00855 0f 29 85 b0 04 00 00 movaps XMMWORD PTR a_lo$16[rbp], xmm0 0085c 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00863 48 05 80 03 00 00 add rax, 896 ; 00000380H 00869 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0086c 0f 29 85 e0 04 00 00 movaps XMMWORD PTR a_hi$17[rbp], xmm0 00873 0f 28 85 80 04 00 00 movaps xmm0, XMMWORD PTR b_hi$15[rbp] 0087a 66 0f c6 85 80 04 00 00 03 shufpd xmm0, XMMWORD PTR b_hi$15[rbp], 3 00883 0f 29 85 10 05 00 00 movaps XMMWORD PTR b$18[rbp], xmm0 0088a 0f 28 85 b0 04 00 00 movaps xmm0, XMMWORD PTR a_lo$16[rbp] 00891 66 0f 59 85 10 05 00 00 mulpd xmm0, XMMWORD PTR b$18[rbp] 00899 0f 28 8d 50 01 00 00 movaps xmm1, XMMWORD PTR c2_lo$[rbp] 008a0 66 0f 58 c8 addpd xmm1, xmm0 008a4 0f 28 c1 movaps xmm0, xmm1 008a7 0f 29 85 50 01 00 00 movaps XMMWORD PTR c2_lo$[rbp], xmm0 008ae 0f 28 85 e0 04 00 00 movaps xmm0, XMMWORD PTR a_hi$17[rbp] 008b5 66 0f 59 85 10 05 00 00 mulpd xmm0, XMMWORD PTR b$18[rbp] 008bd 0f 28 8d 80 01 00 00 movaps xmm1, XMMWORD PTR c2_hi$[rbp] 008c4 66 0f 58 c8 addpd xmm1, xmm0 008c8 0f 28 c1 movaps xmm0, xmm1 008cb 0f 29 85 80 01 00 00 movaps XMMWORD PTR c2_hi$[rbp], xmm0 008d2 33 c0 xor eax, eax 008d4 85 c0 test eax, eax 008d6 0f 85 9a fd ff ff jne $LN13@double_ker $LN16@double_ker: ; 308 : ; 309 : DOUBLE_KERNEL_FMA_CYCLE(3); 008dc 48 8b 85 48 02 00 00 mov rax, QWORD PTR right_cur$3[rbp] 008e3 48 05 00 03 00 00 add rax, 768 ; 00000300H 008e9 0f 10 00 movups xmm0, XMMWORD PTR [rax] 008ec 0f 29 85 40 05 00 00 movaps XMMWORD PTR b_lo$19[rbp], xmm0 008f3 48 8b 85 48 02 00 00 mov rax, QWORD PTR right_cur$3[rbp] 008fa 48 05 80 03 00 00 add rax, 896 ; 00000380H 00900 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00903 0f 29 85 70 05 00 00 movaps XMMWORD PTR b_hi$20[rbp], xmm0 0090a 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00911 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00914 0f 29 85 a0 05 00 00 movaps XMMWORD PTR a_lo$21[rbp], xmm0 0091b 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00922 48 05 80 00 00 00 add rax, 128 ; 00000080H 00928 0f 10 00 movups xmm0, XMMWORD PTR [rax] 0092b 0f 29 85 d0 05 00 00 movaps XMMWORD PTR a_hi$22[rbp], xmm0 00932 0f 28 85 40 05 00 00 movaps xmm0, XMMWORD PTR b_lo$19[rbp] 00939 66 0f c6 85 40 05 00 00 00 shufpd xmm0, XMMWORD PTR b_lo$19[rbp], 0 00942 0f 29 85 00 06 00 00 movaps XMMWORD PTR b$23[rbp], xmm0 00949 0f 28 85 a0 05 00 00 movaps xmm0, XMMWORD PTR a_lo$21[rbp] 00950 66 0f 59 85 00 06 00 00 mulpd xmm0, XMMWORD PTR b$23[rbp] 00958 0f 28 8d b0 01 00 00 movaps xmm1, XMMWORD PTR c3_lo$[rbp] 0095f 66 0f 58 c8 addpd xmm1, xmm0 00963 0f 28 c1 movaps xmm0, xmm1 00966 0f 29 85 b0 01 00 00 movaps XMMWORD PTR c3_lo$[rbp], xmm0 0096d 0f 28 85 d0 05 00 00 movaps xmm0, XMMWORD PTR a_hi$22[rbp] 00974 66 0f 59 85 00 06 00 00 mulpd xmm0, XMMWORD PTR b$23[rbp] 0097c 0f 28 8d e0 01 00 00 movaps xmm1, XMMWORD PTR c3_hi$[rbp] 00983 66 0f 58 c8 addpd xmm1, xmm0 00987 0f 28 c1 movaps xmm0, xmm1 0098a 0f 29 85 e0 01 00 00 movaps XMMWORD PTR c3_hi$[rbp], xmm0 00991 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00998 48 05 00 01 00 00 add rax, 256 ; 00000100H 0099e 0f 10 00 movups xmm0, XMMWORD PTR [rax] 009a1 0f 29 85 a0 05 00 00 movaps XMMWORD PTR a_lo$21[rbp], xmm0 009a8 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 009af 48 05 80 01 00 00 add rax, 384 ; 00000180H 009b5 0f 10 00 movups xmm0, XMMWORD PTR [rax] 009b8 0f 29 85 d0 05 00 00 movaps XMMWORD PTR a_hi$22[rbp], xmm0 009bf 0f 28 85 40 05 00 00 movaps xmm0, XMMWORD PTR b_lo$19[rbp] 009c6 66 0f c6 85 40 05 00 00 03 shufpd xmm0, XMMWORD PTR b_lo$19[rbp], 3 009cf 0f 29 85 00 06 00 00 movaps XMMWORD PTR b$23[rbp], xmm0 009d6 0f 28 85 a0 05 00 00 movaps xmm0, XMMWORD PTR a_lo$21[rbp] 009dd 66 0f 59 85 00 06 00 00 mulpd xmm0, XMMWORD PTR b$23[rbp] 009e5 0f 28 8d b0 01 00 00 movaps xmm1, XMMWORD PTR c3_lo$[rbp] 009ec 66 0f 58 c8 addpd xmm1, xmm0 009f0 0f 28 c1 movaps xmm0, xmm1 009f3 0f 29 85 b0 01 00 00 movaps XMMWORD PTR c3_lo$[rbp], xmm0 009fa 0f 28 85 d0 05 00 00 movaps xmm0, XMMWORD PTR a_hi$22[rbp] 00a01 66 0f 59 85 00 06 00 00 mulpd xmm0, XMMWORD PTR b$23[rbp] 00a09 0f 28 8d e0 01 00 00 movaps xmm1, XMMWORD PTR c3_hi$[rbp] 00a10 66 0f 58 c8 addpd xmm1, xmm0 00a14 0f 28 c1 movaps xmm0, xmm1 00a17 0f 29 85 e0 01 00 00 movaps XMMWORD PTR c3_hi$[rbp], xmm0 00a1e 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00a25 48 05 00 02 00 00 add rax, 512 ; 00000200H 00a2b 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00a2e 0f 29 85 a0 05 00 00 movaps XMMWORD PTR a_lo$21[rbp], xmm0 00a35 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00a3c 48 05 80 02 00 00 add rax, 640 ; 00000280H 00a42 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00a45 0f 29 85 d0 05 00 00 movaps XMMWORD PTR a_hi$22[rbp], xmm0 00a4c 0f 28 85 70 05 00 00 movaps xmm0, XMMWORD PTR b_hi$20[rbp] 00a53 66 0f c6 85 70 05 00 00 00 shufpd xmm0, XMMWORD PTR b_hi$20[rbp], 0 00a5c 0f 29 85 00 06 00 00 movaps XMMWORD PTR b$23[rbp], xmm0 00a63 0f 28 85 a0 05 00 00 movaps xmm0, XMMWORD PTR a_lo$21[rbp] 00a6a 66 0f 59 85 00 06 00 00 mulpd xmm0, XMMWORD PTR b$23[rbp] 00a72 0f 28 8d b0 01 00 00 movaps xmm1, XMMWORD PTR c3_lo$[rbp] 00a79 66 0f 58 c8 addpd xmm1, xmm0 00a7d 0f 28 c1 movaps xmm0, xmm1 00a80 0f 29 85 b0 01 00 00 movaps XMMWORD PTR c3_lo$[rbp], xmm0 00a87 0f 28 85 d0 05 00 00 movaps xmm0, XMMWORD PTR a_hi$22[rbp] 00a8e 66 0f 59 85 00 06 00 00 mulpd xmm0, XMMWORD PTR b$23[rbp] 00a96 0f 28 8d e0 01 00 00 movaps xmm1, XMMWORD PTR c3_hi$[rbp] 00a9d 66 0f 58 c8 addpd xmm1, xmm0 00aa1 0f 28 c1 movaps xmm0, xmm1 00aa4 0f 29 85 e0 01 00 00 movaps XMMWORD PTR c3_hi$[rbp], xmm0 00aab 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00ab2 48 05 00 03 00 00 add rax, 768 ; 00000300H 00ab8 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00abb 0f 29 85 a0 05 00 00 movaps XMMWORD PTR a_lo$21[rbp], xmm0 00ac2 48 8b 85 28 02 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00ac9 48 05 80 03 00 00 add rax, 896 ; 00000380H 00acf 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00ad2 0f 29 85 d0 05 00 00 movaps XMMWORD PTR a_hi$22[rbp], xmm0 00ad9 0f 28 85 70 05 00 00 movaps xmm0, XMMWORD PTR b_hi$20[rbp] 00ae0 66 0f c6 85 70 05 00 00 03 shufpd xmm0, XMMWORD PTR b_hi$20[rbp], 3 00ae9 0f 29 85 00 06 00 00 movaps XMMWORD PTR b$23[rbp], xmm0 00af0 0f 28 85 a0 05 00 00 movaps xmm0, XMMWORD PTR a_lo$21[rbp] 00af7 66 0f 59 85 00 06 00 00 mulpd xmm0, XMMWORD PTR b$23[rbp] 00aff 0f 28 8d b0 01 00 00 movaps xmm1, XMMWORD PTR c3_lo$[rbp] 00b06 66 0f 58 c8 addpd xmm1, xmm0 00b0a 0f 28 c1 movaps xmm0, xmm1 00b0d 0f 29 85 b0 01 00 00 movaps XMMWORD PTR c3_lo$[rbp], xmm0 00b14 0f 28 85 d0 05 00 00 movaps xmm0, XMMWORD PTR a_hi$22[rbp] 00b1b 66 0f 59 85 00 06 00 00 mulpd xmm0, XMMWORD PTR b$23[rbp] 00b23 0f 28 8d e0 01 00 00 movaps xmm1, XMMWORD PTR c3_hi$[rbp] 00b2a 66 0f 58 c8 addpd xmm1, xmm0 00b2e 0f 28 c1 movaps xmm0, xmm1 00b31 0f 29 85 e0 01 00 00 movaps XMMWORD PTR c3_hi$[rbp], xmm0 00b38 33 c0 xor eax, eax 00b3a 85 c0 test eax, eax 00b3c 0f 85 9a fd ff ff jne $LN16@double_ker ; 310 : } 00b42 e9 f1 f5 ff ff jmp $LN2@double_ker $LN3@double_ker: ; 311 : ; 312 : _mm_store_pd(ans->f64_x + (0 * 2 + 0), c0_lo); 00b47 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 00b4e 0f 28 85 90 00 00 00 movaps xmm0, XMMWORD PTR c0_lo$[rbp] 00b55 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 313 : _mm_store_pd(ans->f64_x + (0 * 2 + 1), c0_hi); 00b58 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 00b5f 48 83 c0 10 add rax, 16 00b63 0f 28 85 c0 00 00 00 movaps xmm0, XMMWORD PTR c0_hi$[rbp] 00b6a 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 314 : _mm_store_pd(ans->f64_x + (1 * 2 + 0), c1_lo); 00b6d 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 00b74 48 83 c0 20 add rax, 32 ; 00000020H 00b78 0f 28 85 f0 00 00 00 movaps xmm0, XMMWORD PTR c1_lo$[rbp] 00b7f 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 315 : _mm_store_pd(ans->f64_x + (1 * 2 + 1), c1_hi); 00b82 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 00b89 48 83 c0 30 add rax, 48 ; 00000030H 00b8d 0f 28 85 20 01 00 00 movaps xmm0, XMMWORD PTR c1_hi$[rbp] 00b94 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 316 : _mm_store_pd(ans->f64_x + (2 * 2 + 0), c2_lo); 00b97 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 00b9e 48 83 c0 40 add rax, 64 ; 00000040H 00ba2 0f 28 85 50 01 00 00 movaps xmm0, XMMWORD PTR c2_lo$[rbp] 00ba9 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 317 : _mm_store_pd(ans->f64_x + (2 * 2 + 1), c2_hi); 00bac 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 00bb3 48 83 c0 50 add rax, 80 ; 00000050H 00bb7 0f 28 85 80 01 00 00 movaps xmm0, XMMWORD PTR c2_hi$[rbp] 00bbe 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 318 : _mm_store_pd(ans->f64_x + (3 * 2 + 0), c3_lo); 00bc1 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 00bc8 48 83 c0 60 add rax, 96 ; 00000060H 00bcc 0f 28 85 b0 01 00 00 movaps xmm0, XMMWORD PTR c3_lo$[rbp] 00bd3 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 319 : _mm_store_pd(ans->f64_x + (3 * 2 + 1), c3_hi); 00bd6 48 8b 85 50 09 00 00 mov rax, QWORD PTR ans$[rbp] 00bdd 48 83 c0 70 add rax, 112 ; 00000070H 00be1 0f 28 85 e0 01 00 00 movaps xmm0, XMMWORD PTR c3_hi$[rbp] 00be8 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 320 : } 00beb 48 8d a5 28 09 00 00 lea rsp, QWORD PTR [rbp+2344] 00bf2 5f pop rdi 00bf3 5d pop rbp 00bf4 c3 ret 0 double_kernel_tile_fma_sse ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma_tile.x86.c ; COMDAT float_kernel_tile_fma_512 _TEXT SEGMENT i$ = 4 j$ = 36 commonK$ = 68 ansHeight$ = 100 b_shift$ = 192 c$ = 320 k$1 = 408 left_cur$2 = 440 right_cur$3 = 472 a$4 = 512 b$5 = 640 a_perm$6 = 768 b_perm$7 = 896 left$ = 1456 right$ = 1464 ans$ = 1472 enumeration$ = 1480 float_kernel_tile_fma_512 PROC ; COMDAT ; 203 : { $LN6: 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 41 55 push r13 00016 55 push rbp 00017 57 push rdi 00018 48 81 ec b0 05 00 00 sub rsp, 1456 ; 000005b0H 0001f 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 00024 48 8d 6c 24 60 lea rbp, QWORD PTR [rsp+96] 00029 48 83 e5 c0 and rbp, -64 ; ffffffffffffffc0H 0002d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__31D20E98_m@fma_tile@x86@c 00034 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00039 90 npad 1 ; 204 : static const __m512i b_shift_source = { .m512i_i32 = { ; 205 : // shuff order ; 206 : 0, 1, 2, 3, // col0 ; 207 : 5, 6, 7, 4, //col1 ; 208 : 10, 11, 8, 9, //col2 ; 209 : 15, 12, 13, 14 //col3 ; 210 : } }; ; 211 : int i = enumeration->m128_i32[0]; 0003a b8 04 00 00 00 mov eax, 4 0003f 48 6b c0 00 imul rax, rax, 0 00043 49 8b 8d c8 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 0004a 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0004d 89 45 04 mov DWORD PTR i$[rbp], eax ; 212 : int j = enumeration->m128_i32[1]; 00050 b8 04 00 00 00 mov eax, 4 00055 48 6b c0 01 imul rax, rax, 1 00059 49 8b 8d c8 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 00060 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00063 89 45 24 mov DWORD PTR j$[rbp], eax ; 213 : int commonK = enumeration->m128_i32[2]; 00066 b8 04 00 00 00 mov eax, 4 0006b 48 6b c0 02 imul rax, rax, 2 0006f 49 8b 8d c8 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 00076 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00079 89 45 44 mov DWORD PTR commonK$[rbp], eax ; 214 : int ansHeight = enumeration->m128_i32[3]; 0007c b8 04 00 00 00 mov eax, 4 00081 48 6b c0 03 imul rax, rax, 3 00085 49 8b 8d c8 05 00 00 mov rcx, QWORD PTR enumeration$[r13] 0008c 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0008f 89 45 64 mov DWORD PTR ansHeight$[rbp], eax ; 215 : ; 216 : register __m512i b_shift = _mm512_load_si512(&b_shift_source); 00092 62 f1 7d 48 6f 05 00 00 00 00 vmovdqa32 zmm0, ZMMWORD PTR ?b_shift_source@?1??float_kernel_tile_fma_512@@9@9 0009c 62 f1 7e 48 7f 45 03 vmovdqu32 ZMMWORD PTR b_shift$[rbp], zmm0 ; 217 : register __m512 c = _mm512_load_ps((float *)(ans + GET_INDEX(ansHeight, i, j))); 000a3 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 000a6 0f af 45 04 imul eax, DWORD PTR i$[rbp] 000aa 03 45 24 add eax, DWORD PTR j$[rbp] 000ad 48 98 cdqe 000af 48 6b c0 40 imul rax, rax, 64 ; 00000040H 000b3 49 8b 8d c0 05 00 00 mov rcx, QWORD PTR ans$[r13] 000ba 48 03 c8 add rcx, rax 000bd 48 8b c1 mov rax, rcx 000c0 62 f1 7c 48 10 00 vmovups zmm0, ZMMWORD PTR [rax] 000c6 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 218 : for (size_t k = 0; k < commonK; k++) { 000cd 48 c7 85 98 01 00 00 00 00 00 00 mov QWORD PTR k$1[rbp], 0 000d8 eb 11 jmp SHORT $LN4@float_kern $LN2@float_kern: 000da 48 8b 85 98 01 00 00 mov rax, QWORD PTR k$1[rbp] 000e1 48 ff c0 inc rax 000e4 48 89 85 98 01 00 00 mov QWORD PTR k$1[rbp], rax $LN4@float_kern: 000eb 48 63 45 44 movsxd rax, DWORD PTR commonK$[rbp] 000ef 48 39 85 98 01 00 00 cmp QWORD PTR k$1[rbp], rax 000f6 0f 83 99 01 00 00 jae $LN3@float_kern ; 219 : MAT_KERNEL(double) *const left_cur = left + GET_INDEX(ansHeight, k, j), 000fc 48 63 45 64 movsxd rax, DWORD PTR ansHeight$[rbp] 00100 48 0f af 85 98 01 00 00 imul rax, QWORD PTR k$1[rbp] 00108 48 63 4d 24 movsxd rcx, DWORD PTR j$[rbp] 0010c 48 03 c1 add rax, rcx 0010f 48 6b c0 40 imul rax, rax, 64 ; 00000040H 00113 49 8b 8d b0 05 00 00 mov rcx, QWORD PTR left$[r13] 0011a 48 03 c8 add rcx, rax 0011d 48 8b c1 mov rax, rcx 00120 48 89 85 b8 01 00 00 mov QWORD PTR left_cur$2[rbp], rax ; 220 : const *right_cur = 00127 8b 45 44 mov eax, DWORD PTR commonK$[rbp] 0012a 0f af 45 04 imul eax, DWORD PTR i$[rbp] 0012e 48 98 cdqe 00130 48 03 85 98 01 00 00 add rax, QWORD PTR k$1[rbp] 00137 48 6b c0 40 imul rax, rax, 64 ; 00000040H 0013b 49 8b 8d b8 05 00 00 mov rcx, QWORD PTR right$[r13] 00142 48 03 c8 add rcx, rax 00145 48 8b c1 mov rax, rcx 00148 48 89 85 d8 01 00 00 mov QWORD PTR right_cur$3[rbp], rax ; 221 : right + GET_INDEX(commonK, i, ; 222 : k); // GetKernelAddressUnsafe ; 223 : ; 224 : register __m512 a = _mm512_load_ps((float *)left_cur); 0014f 48 8b 85 b8 01 00 00 mov rax, QWORD PTR left_cur$2[rbp] 00156 62 f1 7c 48 10 00 vmovups zmm0, ZMMWORD PTR [rax] 0015c 62 f1 7c 48 11 45 08 vmovups ZMMWORD PTR a$4[rbp], zmm0 ; 225 : register __m512 b = _mm512_load_ps((float *)right_cur); 00163 48 8b 85 d8 01 00 00 mov rax, QWORD PTR right_cur$3[rbp] 0016a 62 f1 7c 48 10 00 vmovups zmm0, ZMMWORD PTR [rax] 00170 62 f1 7c 48 11 45 0a vmovups ZMMWORD PTR b$5[rbp], zmm0 ; 226 : ; 227 : b = _mm512_permutexvar_ps(b_shift, b); 00177 62 f1 7e 48 6f 45 03 vmovdqu32 zmm0, ZMMWORD PTR b_shift$[rbp] 0017e 62 f2 7d 48 16 45 0a vpermps zmm0, zmm0, ZMMWORD PTR b$5[rbp] 00185 62 f1 7c 48 11 45 0a vmovups ZMMWORD PTR b$5[rbp], zmm0 ; 228 : register __m512 a_perm = _mm512_shuffle_f32x4(a, a, _MM_SHUFFLE(3, 2, 1, 0)); 0018c 62 f1 7c 48 10 45 08 vmovups zmm0, ZMMWORD PTR a$4[rbp] 00193 62 f3 7d 48 23 45 08 e4 vshuff32x4 zmm0, zmm0, ZMMWORD PTR a$4[rbp], 228 ; 000000e4H 0019b 62 f1 7c 48 11 45 0c vmovups ZMMWORD PTR a_perm$6[rbp], zmm0 ; 229 : register __m512 b_perm = _mm512_permute_ps(b, _FMA_SELECT(0)); 001a2 62 f3 7d 48 04 45 0a 00 vpermilps zmm0, ZMMWORD PTR b$5[rbp], 0 001aa 62 f1 7c 48 11 45 0e vmovups ZMMWORD PTR b_perm$7[rbp], zmm0 ; 230 : c = _mm512_fmadd_ps(a_perm, b_perm, c); 001b1 62 f1 7c 48 10 45 0c vmovups zmm0, ZMMWORD PTR a_perm$6[rbp] 001b8 62 f1 7c 48 10 4d 0e vmovups zmm1, ZMMWORD PTR b_perm$7[rbp] 001bf 62 f2 75 48 a8 45 05 vfmadd213ps zmm0, zmm1, ZMMWORD PTR c$[rbp] 001c6 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 231 : ; 232 : a_perm = _mm512_shuffle_f32x4(a, a, _MM_SHUFFLE(2, 1, 0, 3)); 001cd 62 f1 7c 48 10 45 08 vmovups zmm0, ZMMWORD PTR a$4[rbp] 001d4 62 f3 7d 48 23 45 08 93 vshuff32x4 zmm0, zmm0, ZMMWORD PTR a$4[rbp], 147 ; 00000093H 001dc 62 f1 7c 48 11 45 0c vmovups ZMMWORD PTR a_perm$6[rbp], zmm0 ; 233 : b_perm = _mm512_permute_ps(b, _FMA_SELECT(1)); 001e3 62 f3 7d 48 04 45 0a 55 vpermilps zmm0, ZMMWORD PTR b$5[rbp], 85 ; 00000055H 001eb 62 f1 7c 48 11 45 0e vmovups ZMMWORD PTR b_perm$7[rbp], zmm0 ; 234 : c = _mm512_fmadd_ps(a_perm, b_perm, c); 001f2 62 f1 7c 48 10 45 0c vmovups zmm0, ZMMWORD PTR a_perm$6[rbp] 001f9 62 f1 7c 48 10 4d 0e vmovups zmm1, ZMMWORD PTR b_perm$7[rbp] 00200 62 f2 75 48 a8 45 05 vfmadd213ps zmm0, zmm1, ZMMWORD PTR c$[rbp] 00207 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 235 : ; 236 : a_perm = _mm512_shuffle_f32x4(a, a, _MM_SHUFFLE(1, 0, 3, 2)); 0020e 62 f1 7c 48 10 45 08 vmovups zmm0, ZMMWORD PTR a$4[rbp] 00215 62 f3 7d 48 23 45 08 4e vshuff32x4 zmm0, zmm0, ZMMWORD PTR a$4[rbp], 78 ; 0000004eH 0021d 62 f1 7c 48 11 45 0c vmovups ZMMWORD PTR a_perm$6[rbp], zmm0 ; 237 : b_perm = _mm512_permute_ps(b, _FMA_SELECT(2)); 00224 62 f3 7d 48 04 45 0a aa vpermilps zmm0, ZMMWORD PTR b$5[rbp], 170 ; 000000aaH 0022c 62 f1 7c 48 11 45 0e vmovups ZMMWORD PTR b_perm$7[rbp], zmm0 ; 238 : c = _mm512_fmadd_ps(a_perm, b_perm, c); 00233 62 f1 7c 48 10 45 0c vmovups zmm0, ZMMWORD PTR a_perm$6[rbp] 0023a 62 f1 7c 48 10 4d 0e vmovups zmm1, ZMMWORD PTR b_perm$7[rbp] 00241 62 f2 75 48 a8 45 05 vfmadd213ps zmm0, zmm1, ZMMWORD PTR c$[rbp] 00248 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 239 : ; 240 : a_perm = _mm512_shuffle_f32x4(a, a, _MM_SHUFFLE(0, 3, 2, 1)); 0024f 62 f1 7c 48 10 45 08 vmovups zmm0, ZMMWORD PTR a$4[rbp] 00256 62 f3 7d 48 23 45 08 39 vshuff32x4 zmm0, zmm0, ZMMWORD PTR a$4[rbp], 57 ; 00000039H 0025e 62 f1 7c 48 11 45 0c vmovups ZMMWORD PTR a_perm$6[rbp], zmm0 ; 241 : b_perm = _mm512_permute_ps(b, _FMA_SELECT(3)); 00265 62 f3 7d 48 04 45 0a ff vpermilps zmm0, ZMMWORD PTR b$5[rbp], 255 ; 000000ffH 0026d 62 f1 7c 48 11 45 0e vmovups ZMMWORD PTR b_perm$7[rbp], zmm0 ; 242 : c = _mm512_fmadd_ps(a_perm, b_perm, c); 00274 62 f1 7c 48 10 45 0c vmovups zmm0, ZMMWORD PTR a_perm$6[rbp] 0027b 62 f1 7c 48 10 4d 0e vmovups zmm1, ZMMWORD PTR b_perm$7[rbp] 00282 62 f2 75 48 a8 45 05 vfmadd213ps zmm0, zmm1, ZMMWORD PTR c$[rbp] 00289 62 f1 7c 48 11 45 05 vmovups ZMMWORD PTR c$[rbp], zmm0 ; 243 : } 00290 e9 45 fe ff ff jmp $LN2@float_kern $LN3@float_kern: ; 244 : ; 245 : _mm512_store_ps((float *)(ans + GET_INDEX(ansHeight, i, j)), c); 00295 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 00298 0f af 45 04 imul eax, DWORD PTR i$[rbp] 0029c 03 45 24 add eax, DWORD PTR j$[rbp] 0029f 48 98 cdqe 002a1 48 6b c0 40 imul rax, rax, 64 ; 00000040H 002a5 49 8b 8d c0 05 00 00 mov rcx, QWORD PTR ans$[r13] 002ac 48 03 c8 add rcx, rax 002af 48 8b c1 mov rax, rcx 002b2 62 f1 7c 48 10 45 05 vmovups zmm0, ZMMWORD PTR c$[rbp] 002b9 62 f1 7c 48 11 00 vmovups ZMMWORD PTR [rax], zmm0 ; 246 : } 002bf 49 8d a5 90 05 00 00 lea rsp, QWORD PTR [r13+1424] 002c6 5f pop rdi 002c7 5d pop rbp 002c8 41 5d pop r13 002ca c3 ret 0 float_kernel_tile_fma_512 ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma_tile.x86.c ; COMDAT float_kernel_tile_fma_avx_fma _TEXT SEGMENT i$ = 4 j$ = 36 commonK$ = 68 ansHeight$ = 100 ans_cur$ = 136 c01$ = 192 c23$ = 256 b01_shift$ = 320 b23_shift$ = 384 k$1 = 440 left_cur$2 = 472 right_cur$3 = 504 a01$4 = 544 a23$5 = 608 b01$6 = 672 b23$7 = 736 b01_perm$8 = 800 b23_perm$9 = 864 a12$10 = 928 a30$11 = 992 left$ = 1680 right$ = 1688 ans$ = 1696 enumeration$ = 1704 float_kernel_tile_fma_avx_fma PROC ; COMDAT ; 140 : { $LN6: 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 41 55 push r13 00016 55 push rbp 00017 57 push rdi 00018 48 81 ec 90 06 00 00 sub rsp, 1680 ; 00000690H 0001f 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 00024 48 8d 6c 24 40 lea rbp, QWORD PTR [rsp+64] 00029 48 83 e5 e0 and rbp, -32 ; ffffffffffffffe0H 0002d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__31D20E98_m@fma_tile@x86@c 00034 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00039 90 npad 1 ; 141 : static const __m256i b01_shift_source = { .m256i_i32 = { 0, 1, 2, 3, 5, 6, 7, 4 } }; ; 142 : static const __m256i b23_shift_source = { .m256i_i32 = { 2, 3, 0, 1, 7, 4, 5, 6 } }; ; 143 : ; 144 : int i = enumeration->m128_i32[0]; 0003a b8 04 00 00 00 mov eax, 4 0003f 48 6b c0 00 imul rax, rax, 0 00043 49 8b 8d a8 06 00 00 mov rcx, QWORD PTR enumeration$[r13] 0004a 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0004d 89 45 04 mov DWORD PTR i$[rbp], eax ; 145 : int j = enumeration->m128_i32[1]; 00050 b8 04 00 00 00 mov eax, 4 00055 48 6b c0 01 imul rax, rax, 1 00059 49 8b 8d a8 06 00 00 mov rcx, QWORD PTR enumeration$[r13] 00060 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00063 89 45 24 mov DWORD PTR j$[rbp], eax ; 146 : int commonK = enumeration->m128_i32[2]; 00066 b8 04 00 00 00 mov eax, 4 0006b 48 6b c0 02 imul rax, rax, 2 0006f 49 8b 8d a8 06 00 00 mov rcx, QWORD PTR enumeration$[r13] 00076 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00079 89 45 44 mov DWORD PTR commonK$[rbp], eax ; 147 : int ansHeight = enumeration->m128_i32[3]; 0007c b8 04 00 00 00 mov eax, 4 00081 48 6b c0 03 imul rax, rax, 3 00085 49 8b 8d a8 06 00 00 mov rcx, QWORD PTR enumeration$[r13] 0008c 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0008f 89 45 64 mov DWORD PTR ansHeight$[rbp], eax ; 148 : ; 149 : MAT_KERNEL(float) ; 150 : const *ans_cur = ans + GET_INDEX(ansHeight, i, j); // GetKernelAddressUnsafe 00092 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 00095 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00099 03 45 24 add eax, DWORD PTR j$[rbp] 0009c 48 98 cdqe 0009e 48 6b c0 40 imul rax, rax, 64 ; 00000040H 000a2 49 8b 8d a0 06 00 00 mov rcx, QWORD PTR ans$[r13] 000a9 48 03 c8 add rcx, rax 000ac 48 8b c1 mov rax, rcx 000af 48 89 85 88 00 00 00 mov QWORD PTR ans_cur$[rbp], rax ; 151 : ; 152 : register __m256 c01 = _mm256_load_ps((float *)&ans_cur->f32_y[0]); 000b6 b8 20 00 00 00 mov eax, 32 ; 00000020H 000bb 48 6b c0 00 imul rax, rax, 0 000bf 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 000c6 48 03 c8 add rcx, rax 000c9 48 8b c1 mov rax, rcx 000cc c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 000d0 c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 153 : register __m256 c23 = _mm256_load_ps((float *)&ans_cur->f32_y[1]); 000d8 b8 20 00 00 00 mov eax, 32 ; 00000020H 000dd 48 6b c0 01 imul rax, rax, 1 000e1 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 000e8 48 03 c8 add rcx, rax 000eb 48 8b c1 mov rax, rcx 000ee c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 000f2 c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 154 : ; 155 : register __m256i b01_shift = _mm256_load_si256(&b01_shift_source); 000fa c5 fd 6f 05 00 00 00 00 vmovdqa ymm0, YMMWORD PTR ?b01_shift_source@?1??float_kernel_tile_fma_avx_fma@@9@9 00102 c5 fe 7f 85 40 01 00 00 vmovdqu YMMWORD PTR b01_shift$[rbp], ymm0 ; 156 : register __m256i b23_shift = _mm256_load_si256(&b23_shift_source); 0010a c5 fd 6f 05 00 00 00 00 vmovdqa ymm0, YMMWORD PTR ?b23_shift_source@?1??float_kernel_tile_fma_avx_fma@@9@9 00112 c5 fe 7f 85 80 01 00 00 vmovdqu YMMWORD PTR b23_shift$[rbp], ymm0 ; 157 : ; 158 : for (size_t k = 0; k < commonK; k++) { 0011a 48 c7 85 b8 01 00 00 00 00 00 00 mov QWORD PTR k$1[rbp], 0 00125 eb 11 jmp SHORT $LN4@float_kern $LN2@float_kern: 00127 48 8b 85 b8 01 00 00 mov rax, QWORD PTR k$1[rbp] 0012e 48 ff c0 inc rax 00131 48 89 85 b8 01 00 00 mov QWORD PTR k$1[rbp], rax $LN4@float_kern: 00138 48 63 45 44 movsxd rax, DWORD PTR commonK$[rbp] 0013c 48 39 85 b8 01 00 00 cmp QWORD PTR k$1[rbp], rax 00143 0f 83 16 03 00 00 jae $LN3@float_kern ; 159 : MAT_KERNEL(float) ; 160 : const *left_cur = left + GET_INDEX(ansHeight, k, j), // GetKernelAddressUnsafe 00149 48 63 45 64 movsxd rax, DWORD PTR ansHeight$[rbp] 0014d 48 0f af 85 b8 01 00 00 imul rax, QWORD PTR k$1[rbp] 00155 48 63 4d 24 movsxd rcx, DWORD PTR j$[rbp] 00159 48 03 c1 add rax, rcx 0015c 48 6b c0 40 imul rax, rax, 64 ; 00000040H 00160 49 8b 8d 90 06 00 00 mov rcx, QWORD PTR left$[r13] 00167 48 03 c8 add rcx, rax 0016a 48 8b c1 mov rax, rcx 0016d 48 89 85 d8 01 00 00 mov QWORD PTR left_cur$2[rbp], rax ; 161 : const *right_cur = 00174 8b 45 44 mov eax, DWORD PTR commonK$[rbp] 00177 0f af 45 04 imul eax, DWORD PTR i$[rbp] 0017b 48 98 cdqe 0017d 48 03 85 b8 01 00 00 add rax, QWORD PTR k$1[rbp] 00184 48 6b c0 40 imul rax, rax, 64 ; 00000040H 00188 49 8b 8d 98 06 00 00 mov rcx, QWORD PTR right$[r13] 0018f 48 03 c8 add rcx, rax 00192 48 8b c1 mov rax, rcx 00195 48 89 85 f8 01 00 00 mov QWORD PTR right_cur$3[rbp], rax ; 162 : right + GET_INDEX(commonK, i, k); // GetKernelAddressUnsafe ; 163 : ; 164 : register __m256 a01 = _mm256_load_ps((float *)&left_cur->f32_y[0]); 0019c b8 20 00 00 00 mov eax, 32 ; 00000020H 001a1 48 6b c0 00 imul rax, rax, 0 001a5 48 8b 8d d8 01 00 00 mov rcx, QWORD PTR left_cur$2[rbp] 001ac 48 03 c8 add rcx, rax 001af 48 8b c1 mov rax, rcx 001b2 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 001b6 c5 fc 11 85 20 02 00 00 vmovups YMMWORD PTR a01$4[rbp], ymm0 ; 165 : register __m256 a23 = _mm256_load_ps((float *)&left_cur->f32_y[1]); 001be b8 20 00 00 00 mov eax, 32 ; 00000020H 001c3 48 6b c0 01 imul rax, rax, 1 001c7 48 8b 8d d8 01 00 00 mov rcx, QWORD PTR left_cur$2[rbp] 001ce 48 03 c8 add rcx, rax 001d1 48 8b c1 mov rax, rcx 001d4 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 001d8 c5 fc 11 85 60 02 00 00 vmovups YMMWORD PTR a23$5[rbp], ymm0 ; 166 : ; 167 : register __m256 b01 = _mm256_load_ps((float *)&right_cur->f32_y[0]); 001e0 b8 20 00 00 00 mov eax, 32 ; 00000020H 001e5 48 6b c0 00 imul rax, rax, 0 001e9 48 8b 8d f8 01 00 00 mov rcx, QWORD PTR right_cur$3[rbp] 001f0 48 03 c8 add rcx, rax 001f3 48 8b c1 mov rax, rcx 001f6 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 001fa c5 fc 11 85 a0 02 00 00 vmovups YMMWORD PTR b01$6[rbp], ymm0 ; 168 : register __m256 b23 = _mm256_load_ps((float *)&right_cur->f32_y[1]); 00202 b8 20 00 00 00 mov eax, 32 ; 00000020H 00207 48 6b c0 01 imul rax, rax, 1 0020b 48 8b 8d f8 01 00 00 mov rcx, QWORD PTR right_cur$3[rbp] 00212 48 03 c8 add rcx, rax 00215 48 8b c1 mov rax, rcx 00218 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 0021c c5 fc 11 85 e0 02 00 00 vmovups YMMWORD PTR b23$7[rbp], ymm0 ; 169 : b01 = _mm256_permutevar_ps(b01, b01_shift); 00224 c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 0022c c4 e2 7d 0c 85 40 01 00 00 vpermilps ymm0, ymm0, YMMWORD PTR b01_shift$[rbp] 00235 c5 fc 11 85 a0 02 00 00 vmovups YMMWORD PTR b01$6[rbp], ymm0 ; 170 : b23 = _mm256_permutevar_ps(b23, b23_shift); 0023d c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 00245 c4 e2 7d 0c 85 80 01 00 00 vpermilps ymm0, ymm0, YMMWORD PTR b23_shift$[rbp] 0024e c5 fc 11 85 e0 02 00 00 vmovups YMMWORD PTR b23$7[rbp], ymm0 ; 171 : ; 172 : //group 0 ; 173 : register __m256 b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(0)); 00256 c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 0025e c5 fc c6 85 a0 02 00 00 00 vshufps ymm0, ymm0, YMMWORD PTR b01$6[rbp], 0 00267 c5 fc 11 85 20 03 00 00 vmovups YMMWORD PTR b01_perm$8[rbp], ymm0 ; 174 : register __m256 b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(0)); 0026f c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 00277 c5 fc c6 85 e0 02 00 00 00 vshufps ymm0, ymm0, YMMWORD PTR b23$7[rbp], 0 00280 c5 fc 11 85 60 03 00 00 vmovups YMMWORD PTR b23_perm$9[rbp], ymm0 ; 175 : c01 = _mm256_fmadd_ps(a01, b01_perm, c01); 00288 c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a01$4[rbp] 00290 c5 fc 10 8d 20 03 00 00 vmovups ymm1, YMMWORD PTR b01_perm$8[rbp] 00298 c4 e2 75 a8 85 c0 00 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c01$[rbp] 002a1 c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 176 : c23 = _mm256_fmadd_ps(a23, b23_perm, c23); 002a9 c5 fc 10 85 60 02 00 00 vmovups ymm0, YMMWORD PTR a23$5[rbp] 002b1 c5 fc 10 8d 60 03 00 00 vmovups ymm1, YMMWORD PTR b23_perm$9[rbp] 002b9 c4 e2 75 a8 85 00 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c23$[rbp] 002c2 c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 177 : ; 178 : //group 2 ; 179 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(2)); 002ca c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 002d2 c5 fc c6 85 a0 02 00 00 aa vshufps ymm0, ymm0, YMMWORD PTR b01$6[rbp], 170 ; 000000aaH 002db c5 fc 11 85 20 03 00 00 vmovups YMMWORD PTR b01_perm$8[rbp], ymm0 ; 180 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(2)); 002e3 c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 002eb c5 fc c6 85 e0 02 00 00 aa vshufps ymm0, ymm0, YMMWORD PTR b23$7[rbp], 170 ; 000000aaH 002f4 c5 fc 11 85 60 03 00 00 vmovups YMMWORD PTR b23_perm$9[rbp], ymm0 ; 181 : c01 = _mm256_fmadd_ps(a23, b01_perm, c01); 002fc c5 fc 10 85 60 02 00 00 vmovups ymm0, YMMWORD PTR a23$5[rbp] 00304 c5 fc 10 8d 20 03 00 00 vmovups ymm1, YMMWORD PTR b01_perm$8[rbp] 0030c c4 e2 75 a8 85 c0 00 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c01$[rbp] 00315 c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 182 : c23 = _mm256_fmadd_ps(a01, b23_perm, c23); 0031d c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a01$4[rbp] 00325 c5 fc 10 8d 60 03 00 00 vmovups ymm1, YMMWORD PTR b23_perm$9[rbp] 0032d c4 e2 75 a8 85 00 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c23$[rbp] 00336 c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 183 : ; 184 : //group 1 ; 185 : register __m256 a12 = _mm256_permute2f128_ps(a01, a23, 0x21); 0033e c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a01$4[rbp] 00346 c4 e3 7d 06 85 60 02 00 00 21 vperm2f128 ymm0, ymm0, YMMWORD PTR a23$5[rbp], 33 ; 00000021H 00350 c5 fc 11 85 a0 03 00 00 vmovups YMMWORD PTR a12$10[rbp], ymm0 ; 186 : register __m256 a30 = _mm256_permute2f128_ps(a01, a23, 0x30); 00358 c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a01$4[rbp] 00360 c4 e3 7d 06 85 60 02 00 00 30 vperm2f128 ymm0, ymm0, YMMWORD PTR a23$5[rbp], 48 ; 00000030H 0036a c5 fc 11 85 e0 03 00 00 vmovups YMMWORD PTR a30$11[rbp], ymm0 ; 187 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(1)); 00372 c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 0037a c5 fc c6 85 a0 02 00 00 55 vshufps ymm0, ymm0, YMMWORD PTR b01$6[rbp], 85 ; 00000055H 00383 c5 fc 11 85 20 03 00 00 vmovups YMMWORD PTR b01_perm$8[rbp], ymm0 ; 188 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(1)); 0038b c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 00393 c5 fc c6 85 e0 02 00 00 55 vshufps ymm0, ymm0, YMMWORD PTR b23$7[rbp], 85 ; 00000055H 0039c c5 fc 11 85 60 03 00 00 vmovups YMMWORD PTR b23_perm$9[rbp], ymm0 ; 189 : c01 = _mm256_fmadd_ps(a12, b01_perm, c01); 003a4 c5 fc 10 85 a0 03 00 00 vmovups ymm0, YMMWORD PTR a12$10[rbp] 003ac c5 fc 10 8d 20 03 00 00 vmovups ymm1, YMMWORD PTR b01_perm$8[rbp] 003b4 c4 e2 75 a8 85 c0 00 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c01$[rbp] 003bd c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 190 : c23 = _mm256_fmadd_ps(a30, b23_perm, c23); 003c5 c5 fc 10 85 e0 03 00 00 vmovups ymm0, YMMWORD PTR a30$11[rbp] 003cd c5 fc 10 8d 60 03 00 00 vmovups ymm1, YMMWORD PTR b23_perm$9[rbp] 003d5 c4 e2 75 a8 85 00 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c23$[rbp] 003de c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 191 : ; 192 : //group 3 ; 193 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(3)); 003e6 c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 003ee c5 fc c6 85 a0 02 00 00 ff vshufps ymm0, ymm0, YMMWORD PTR b01$6[rbp], 255 ; 000000ffH 003f7 c5 fc 11 85 20 03 00 00 vmovups YMMWORD PTR b01_perm$8[rbp], ymm0 ; 194 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(3)); 003ff c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 00407 c5 fc c6 85 e0 02 00 00 ff vshufps ymm0, ymm0, YMMWORD PTR b23$7[rbp], 255 ; 000000ffH 00410 c5 fc 11 85 60 03 00 00 vmovups YMMWORD PTR b23_perm$9[rbp], ymm0 ; 195 : c01 = _mm256_fmadd_ps(a30, b01_perm, c01); 00418 c5 fc 10 85 e0 03 00 00 vmovups ymm0, YMMWORD PTR a30$11[rbp] 00420 c5 fc 10 8d 20 03 00 00 vmovups ymm1, YMMWORD PTR b01_perm$8[rbp] 00428 c4 e2 75 a8 85 c0 00 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c01$[rbp] 00431 c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 196 : c23 = _mm256_fmadd_ps(a12, b23_perm, c23); 00439 c5 fc 10 85 a0 03 00 00 vmovups ymm0, YMMWORD PTR a12$10[rbp] 00441 c5 fc 10 8d 60 03 00 00 vmovups ymm1, YMMWORD PTR b23_perm$9[rbp] 00449 c4 e2 75 a8 85 00 01 00 00 vfmadd213ps ymm0, ymm1, YMMWORD PTR c23$[rbp] 00452 c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 197 : } 0045a e9 c8 fc ff ff jmp $LN2@float_kern $LN3@float_kern: ; 198 : _mm256_store_ps((float *)&ans_cur->f32_y[0], c01); 0045f b8 20 00 00 00 mov eax, 32 ; 00000020H 00464 48 6b c0 00 imul rax, rax, 0 00468 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 0046f 48 03 c8 add rcx, rax 00472 48 8b c1 mov rax, rcx 00475 c5 fc 10 85 c0 00 00 00 vmovups ymm0, YMMWORD PTR c01$[rbp] 0047d c5 fc 11 00 vmovups YMMWORD PTR [rax], ymm0 ; 199 : _mm256_store_ps((float *)&ans_cur->f32_y[1], c23); 00481 b8 20 00 00 00 mov eax, 32 ; 00000020H 00486 48 6b c0 01 imul rax, rax, 1 0048a 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 00491 48 03 c8 add rcx, rax 00494 48 8b c1 mov rax, rcx 00497 c5 fc 10 85 00 01 00 00 vmovups ymm0, YMMWORD PTR c23$[rbp] 0049f c5 fc 11 00 vmovups YMMWORD PTR [rax], ymm0 ; 200 : } 004a3 49 8d a5 70 06 00 00 lea rsp, QWORD PTR [r13+1648] 004aa 5f pop rdi 004ab 5d pop rbp 004ac 41 5d pop r13 004ae c3 ret 0 float_kernel_tile_fma_avx_fma ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma_tile.x86.c ; COMDAT float_kernel_tile_fma_avx _TEXT SEGMENT i$ = 4 j$ = 36 commonK$ = 68 ansHeight$ = 100 ans_cur$ = 136 c01$ = 192 c23$ = 256 b01_shift$ = 320 b23_shift$ = 384 k$1 = 440 left_cur$2 = 472 right_cur$3 = 504 a01$4 = 544 a23$5 = 608 b01$6 = 672 b23$7 = 736 b01_perm$8 = 800 b23_perm$9 = 864 a12$10 = 928 a30$11 = 992 left$ = 1680 right$ = 1688 ans$ = 1696 enumeration$ = 1704 float_kernel_tile_fma_avx PROC ; COMDAT ; 77 : { $LN6: 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 41 55 push r13 00016 55 push rbp 00017 57 push rdi 00018 48 81 ec 90 06 00 00 sub rsp, 1680 ; 00000690H 0001f 4c 8d 6c 24 20 lea r13, QWORD PTR [rsp+32] 00024 48 8d 6c 24 40 lea rbp, QWORD PTR [rsp+64] 00029 48 83 e5 e0 and rbp, -32 ; ffffffffffffffe0H 0002d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__31D20E98_m@fma_tile@x86@c 00034 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 00039 90 npad 1 ; 78 : static const __m256i b01_shift_source = { .m256i_i32 = { 0, 1, 2, 3, 5, 6, 7, 4 } }; ; 79 : static const __m256i b23_shift_source = { .m256i_i32 = { 2, 3, 0, 1, 7, 4, 5, 6 } }; ; 80 : ; 81 : int i = enumeration->m128_i32[0]; 0003a b8 04 00 00 00 mov eax, 4 0003f 48 6b c0 00 imul rax, rax, 0 00043 49 8b 8d a8 06 00 00 mov rcx, QWORD PTR enumeration$[r13] 0004a 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0004d 89 45 04 mov DWORD PTR i$[rbp], eax ; 82 : int j = enumeration->m128_i32[1]; 00050 b8 04 00 00 00 mov eax, 4 00055 48 6b c0 01 imul rax, rax, 1 00059 49 8b 8d a8 06 00 00 mov rcx, QWORD PTR enumeration$[r13] 00060 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00063 89 45 24 mov DWORD PTR j$[rbp], eax ; 83 : int commonK = enumeration->m128_i32[2]; 00066 b8 04 00 00 00 mov eax, 4 0006b 48 6b c0 02 imul rax, rax, 2 0006f 49 8b 8d a8 06 00 00 mov rcx, QWORD PTR enumeration$[r13] 00076 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00079 89 45 44 mov DWORD PTR commonK$[rbp], eax ; 84 : int ansHeight = enumeration->m128_i32[3]; 0007c b8 04 00 00 00 mov eax, 4 00081 48 6b c0 03 imul rax, rax, 3 00085 49 8b 8d a8 06 00 00 mov rcx, QWORD PTR enumeration$[r13] 0008c 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0008f 89 45 64 mov DWORD PTR ansHeight$[rbp], eax ; 85 : ; 86 : MAT_KERNEL(float) ; 87 : const *ans_cur = ans + GET_INDEX(ansHeight, i, j); // GetKernelAddressUnsafe 00092 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 00095 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00099 03 45 24 add eax, DWORD PTR j$[rbp] 0009c 48 98 cdqe 0009e 48 6b c0 40 imul rax, rax, 64 ; 00000040H 000a2 49 8b 8d a0 06 00 00 mov rcx, QWORD PTR ans$[r13] 000a9 48 03 c8 add rcx, rax 000ac 48 8b c1 mov rax, rcx 000af 48 89 85 88 00 00 00 mov QWORD PTR ans_cur$[rbp], rax ; 88 : ; 89 : register __m256 c01 = _mm256_load_ps((float *)&ans->f32_y[0]); 000b6 b8 20 00 00 00 mov eax, 32 ; 00000020H 000bb 48 6b c0 00 imul rax, rax, 0 000bf 49 8b 8d a0 06 00 00 mov rcx, QWORD PTR ans$[r13] 000c6 48 03 c8 add rcx, rax 000c9 48 8b c1 mov rax, rcx 000cc c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 000d0 c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 90 : register __m256 c23 = _mm256_load_ps((float *)&ans->f32_y[1]); 000d8 b8 20 00 00 00 mov eax, 32 ; 00000020H 000dd 48 6b c0 01 imul rax, rax, 1 000e1 49 8b 8d a0 06 00 00 mov rcx, QWORD PTR ans$[r13] 000e8 48 03 c8 add rcx, rax 000eb 48 8b c1 mov rax, rcx 000ee c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 000f2 c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 91 : ; 92 : register __m256i b01_shift = _mm256_load_si256(&b01_shift_source); 000fa c5 fd 6f 05 00 00 00 00 vmovdqa ymm0, YMMWORD PTR ?b01_shift_source@?1??float_kernel_tile_fma_avx@@9@9 00102 c5 fe 7f 85 40 01 00 00 vmovdqu YMMWORD PTR b01_shift$[rbp], ymm0 ; 93 : register __m256i b23_shift = _mm256_load_si256(&b23_shift_source); 0010a c5 fd 6f 05 00 00 00 00 vmovdqa ymm0, YMMWORD PTR ?b23_shift_source@?1??float_kernel_tile_fma_avx@@9@9 00112 c5 fe 7f 85 80 01 00 00 vmovdqu YMMWORD PTR b23_shift$[rbp], ymm0 ; 94 : ; 95 : for (size_t k = 0; k < commonK; k++) { 0011a 48 c7 85 b8 01 00 00 00 00 00 00 mov QWORD PTR k$1[rbp], 0 00125 eb 11 jmp SHORT $LN4@float_kern $LN2@float_kern: 00127 48 8b 85 b8 01 00 00 mov rax, QWORD PTR k$1[rbp] 0012e 48 ff c0 inc rax 00131 48 89 85 b8 01 00 00 mov QWORD PTR k$1[rbp], rax $LN4@float_kern: 00138 48 63 45 44 movsxd rax, DWORD PTR commonK$[rbp] 0013c 48 39 85 b8 01 00 00 cmp QWORD PTR k$1[rbp], rax 00143 0f 83 0b 03 00 00 jae $LN3@float_kern ; 96 : MAT_KERNEL(float) ; 97 : const *left_cur = left + GET_INDEX(ansHeight, i, k), // GetKernelAddressUnsafe 00149 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 0014c 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00150 48 98 cdqe 00152 48 03 85 b8 01 00 00 add rax, QWORD PTR k$1[rbp] 00159 48 6b c0 40 imul rax, rax, 64 ; 00000040H 0015d 49 8b 8d 90 06 00 00 mov rcx, QWORD PTR left$[r13] 00164 48 03 c8 add rcx, rax 00167 48 8b c1 mov rax, rcx 0016a 48 89 85 d8 01 00 00 mov QWORD PTR left_cur$2[rbp], rax ; 98 : const *right_cur = 00171 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 00174 0f af 45 24 imul eax, DWORD PTR j$[rbp] 00178 48 98 cdqe 0017a 48 03 85 b8 01 00 00 add rax, QWORD PTR k$1[rbp] 00181 48 6b c0 40 imul rax, rax, 64 ; 00000040H 00185 49 8b 8d 98 06 00 00 mov rcx, QWORD PTR right$[r13] 0018c 48 03 c8 add rcx, rax 0018f 48 8b c1 mov rax, rcx 00192 48 89 85 f8 01 00 00 mov QWORD PTR right_cur$3[rbp], rax ; 99 : right + GET_INDEX(ansHeight, j, k); // GetKernelAddressUnsafe ; 100 : ; 101 : register __m256 a01 = _mm256_load_ps((float *)&left_cur->f32_y[0]); 00199 b8 20 00 00 00 mov eax, 32 ; 00000020H 0019e 48 6b c0 00 imul rax, rax, 0 001a2 48 8b 8d d8 01 00 00 mov rcx, QWORD PTR left_cur$2[rbp] 001a9 48 03 c8 add rcx, rax 001ac 48 8b c1 mov rax, rcx 001af c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 001b3 c5 fc 11 85 20 02 00 00 vmovups YMMWORD PTR a01$4[rbp], ymm0 ; 102 : register __m256 a23 = _mm256_load_ps((float *)&left_cur->f32_y[1]); 001bb b8 20 00 00 00 mov eax, 32 ; 00000020H 001c0 48 6b c0 01 imul rax, rax, 1 001c4 48 8b 8d d8 01 00 00 mov rcx, QWORD PTR left_cur$2[rbp] 001cb 48 03 c8 add rcx, rax 001ce 48 8b c1 mov rax, rcx 001d1 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 001d5 c5 fc 11 85 60 02 00 00 vmovups YMMWORD PTR a23$5[rbp], ymm0 ; 103 : ; 104 : register __m256 b01 = _mm256_load_ps((float *)&right_cur->f32_y[0]); 001dd b8 20 00 00 00 mov eax, 32 ; 00000020H 001e2 48 6b c0 00 imul rax, rax, 0 001e6 48 8b 8d f8 01 00 00 mov rcx, QWORD PTR right_cur$3[rbp] 001ed 48 03 c8 add rcx, rax 001f0 48 8b c1 mov rax, rcx 001f3 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 001f7 c5 fc 11 85 a0 02 00 00 vmovups YMMWORD PTR b01$6[rbp], ymm0 ; 105 : register __m256 b23 = _mm256_load_ps((float *)&right_cur->f32_y[1]); 001ff b8 20 00 00 00 mov eax, 32 ; 00000020H 00204 48 6b c0 01 imul rax, rax, 1 00208 48 8b 8d f8 01 00 00 mov rcx, QWORD PTR right_cur$3[rbp] 0020f 48 03 c8 add rcx, rax 00212 48 8b c1 mov rax, rcx 00215 c5 fc 10 00 vmovups ymm0, YMMWORD PTR [rax] 00219 c5 fc 11 85 e0 02 00 00 vmovups YMMWORD PTR b23$7[rbp], ymm0 ; 106 : b01 = _mm256_permutevar_ps(b01, b01_shift); 00221 c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 00229 c4 e2 7d 0c 85 40 01 00 00 vpermilps ymm0, ymm0, YMMWORD PTR b01_shift$[rbp] 00232 c5 fc 11 85 a0 02 00 00 vmovups YMMWORD PTR b01$6[rbp], ymm0 ; 107 : b23 = _mm256_permutevar_ps(b23, b23_shift); 0023a c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 00242 c4 e2 7d 0c 85 80 01 00 00 vpermilps ymm0, ymm0, YMMWORD PTR b23_shift$[rbp] 0024b c5 fc 11 85 e0 02 00 00 vmovups YMMWORD PTR b23$7[rbp], ymm0 ; 108 : ; 109 : //group 0 ; 110 : register __m256 b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(0)); 00253 c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 0025b c5 fc c6 85 a0 02 00 00 00 vshufps ymm0, ymm0, YMMWORD PTR b01$6[rbp], 0 00264 c5 fc 11 85 20 03 00 00 vmovups YMMWORD PTR b01_perm$8[rbp], ymm0 ; 111 : register __m256 b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(0)); 0026c c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 00274 c5 fc c6 85 e0 02 00 00 00 vshufps ymm0, ymm0, YMMWORD PTR b23$7[rbp], 0 0027d c5 fc 11 85 60 03 00 00 vmovups YMMWORD PTR b23_perm$9[rbp], ymm0 ; 112 : c01 = _mm256_add_ps(_mm256_mul_ps(a01, b01_perm), c01); 00285 c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a01$4[rbp] 0028d c5 fc 59 85 20 03 00 00 vmulps ymm0, ymm0, YMMWORD PTR b01_perm$8[rbp] 00295 c5 fc 58 85 c0 00 00 00 vaddps ymm0, ymm0, YMMWORD PTR c01$[rbp] 0029d c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 113 : c23 = _mm256_add_ps(_mm256_mul_ps(a23, b23_perm), c23); 002a5 c5 fc 10 85 60 02 00 00 vmovups ymm0, YMMWORD PTR a23$5[rbp] 002ad c5 fc 59 85 60 03 00 00 vmulps ymm0, ymm0, YMMWORD PTR b23_perm$9[rbp] 002b5 c5 fc 58 85 00 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c23$[rbp] 002bd c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 114 : ; 115 : //group 2 ; 116 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(2)); 002c5 c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 002cd c5 fc c6 85 a0 02 00 00 aa vshufps ymm0, ymm0, YMMWORD PTR b01$6[rbp], 170 ; 000000aaH 002d6 c5 fc 11 85 20 03 00 00 vmovups YMMWORD PTR b01_perm$8[rbp], ymm0 ; 117 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(2)); 002de c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 002e6 c5 fc c6 85 e0 02 00 00 aa vshufps ymm0, ymm0, YMMWORD PTR b23$7[rbp], 170 ; 000000aaH 002ef c5 fc 11 85 60 03 00 00 vmovups YMMWORD PTR b23_perm$9[rbp], ymm0 ; 118 : c01 = _mm256_add_ps(_mm256_mul_ps(a23, b01_perm), c01); 002f7 c5 fc 10 85 60 02 00 00 vmovups ymm0, YMMWORD PTR a23$5[rbp] 002ff c5 fc 59 85 20 03 00 00 vmulps ymm0, ymm0, YMMWORD PTR b01_perm$8[rbp] 00307 c5 fc 58 85 c0 00 00 00 vaddps ymm0, ymm0, YMMWORD PTR c01$[rbp] 0030f c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 119 : c23 = _mm256_add_ps(_mm256_mul_ps(a01, b23_perm), c23); 00317 c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a01$4[rbp] 0031f c5 fc 59 85 60 03 00 00 vmulps ymm0, ymm0, YMMWORD PTR b23_perm$9[rbp] 00327 c5 fc 58 85 00 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c23$[rbp] 0032f c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 120 : ; 121 : //group 1 ; 122 : register __m256 a12 = _mm256_permute2f128_ps(a01, a23, 0x21); 00337 c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a01$4[rbp] 0033f c4 e3 7d 06 85 60 02 00 00 21 vperm2f128 ymm0, ymm0, YMMWORD PTR a23$5[rbp], 33 ; 00000021H 00349 c5 fc 11 85 a0 03 00 00 vmovups YMMWORD PTR a12$10[rbp], ymm0 ; 123 : register __m256 a30 = _mm256_permute2f128_ps(a01, a23, 0x30); 00351 c5 fc 10 85 20 02 00 00 vmovups ymm0, YMMWORD PTR a01$4[rbp] 00359 c4 e3 7d 06 85 60 02 00 00 30 vperm2f128 ymm0, ymm0, YMMWORD PTR a23$5[rbp], 48 ; 00000030H 00363 c5 fc 11 85 e0 03 00 00 vmovups YMMWORD PTR a30$11[rbp], ymm0 ; 124 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(1)); 0036b c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 00373 c5 fc c6 85 a0 02 00 00 55 vshufps ymm0, ymm0, YMMWORD PTR b01$6[rbp], 85 ; 00000055H 0037c c5 fc 11 85 20 03 00 00 vmovups YMMWORD PTR b01_perm$8[rbp], ymm0 ; 125 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(1)); 00384 c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 0038c c5 fc c6 85 e0 02 00 00 55 vshufps ymm0, ymm0, YMMWORD PTR b23$7[rbp], 85 ; 00000055H 00395 c5 fc 11 85 60 03 00 00 vmovups YMMWORD PTR b23_perm$9[rbp], ymm0 ; 126 : c01 = _mm256_add_ps(_mm256_mul_ps(a12, b01_perm), c01); 0039d c5 fc 10 85 a0 03 00 00 vmovups ymm0, YMMWORD PTR a12$10[rbp] 003a5 c5 fc 59 85 20 03 00 00 vmulps ymm0, ymm0, YMMWORD PTR b01_perm$8[rbp] 003ad c5 fc 58 85 c0 00 00 00 vaddps ymm0, ymm0, YMMWORD PTR c01$[rbp] 003b5 c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 127 : c23 = _mm256_add_ps(_mm256_mul_ps(a30, b23_perm), c23); 003bd c5 fc 10 85 e0 03 00 00 vmovups ymm0, YMMWORD PTR a30$11[rbp] 003c5 c5 fc 59 85 60 03 00 00 vmulps ymm0, ymm0, YMMWORD PTR b23_perm$9[rbp] 003cd c5 fc 58 85 00 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c23$[rbp] 003d5 c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 128 : ; 129 : //group 3 ; 130 : b01_perm = _mm256_shuffle_ps(b01, b01, _FMA_SELECT(3)); 003dd c5 fc 10 85 a0 02 00 00 vmovups ymm0, YMMWORD PTR b01$6[rbp] 003e5 c5 fc c6 85 a0 02 00 00 ff vshufps ymm0, ymm0, YMMWORD PTR b01$6[rbp], 255 ; 000000ffH 003ee c5 fc 11 85 20 03 00 00 vmovups YMMWORD PTR b01_perm$8[rbp], ymm0 ; 131 : b23_perm = _mm256_shuffle_ps(b23, b23, _FMA_SELECT(3)); 003f6 c5 fc 10 85 e0 02 00 00 vmovups ymm0, YMMWORD PTR b23$7[rbp] 003fe c5 fc c6 85 e0 02 00 00 ff vshufps ymm0, ymm0, YMMWORD PTR b23$7[rbp], 255 ; 000000ffH 00407 c5 fc 11 85 60 03 00 00 vmovups YMMWORD PTR b23_perm$9[rbp], ymm0 ; 132 : c01 = _mm256_add_ps(_mm256_mul_ps(a30, b01_perm), c01); 0040f c5 fc 10 85 e0 03 00 00 vmovups ymm0, YMMWORD PTR a30$11[rbp] 00417 c5 fc 59 85 20 03 00 00 vmulps ymm0, ymm0, YMMWORD PTR b01_perm$8[rbp] 0041f c5 fc 58 85 c0 00 00 00 vaddps ymm0, ymm0, YMMWORD PTR c01$[rbp] 00427 c5 fc 11 85 c0 00 00 00 vmovups YMMWORD PTR c01$[rbp], ymm0 ; 133 : c23 = _mm256_add_ps(_mm256_mul_ps(a12, b23_perm), c23); 0042f c5 fc 10 85 a0 03 00 00 vmovups ymm0, YMMWORD PTR a12$10[rbp] 00437 c5 fc 59 85 60 03 00 00 vmulps ymm0, ymm0, YMMWORD PTR b23_perm$9[rbp] 0043f c5 fc 58 85 00 01 00 00 vaddps ymm0, ymm0, YMMWORD PTR c23$[rbp] 00447 c5 fc 11 85 00 01 00 00 vmovups YMMWORD PTR c23$[rbp], ymm0 ; 134 : } 0044f e9 d3 fc ff ff jmp $LN2@float_kern $LN3@float_kern: ; 135 : _mm256_store_ps((float *)&ans_cur->f32_y[0], c01); 00454 b8 20 00 00 00 mov eax, 32 ; 00000020H 00459 48 6b c0 00 imul rax, rax, 0 0045d 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 00464 48 03 c8 add rcx, rax 00467 48 8b c1 mov rax, rcx 0046a c5 fc 10 85 c0 00 00 00 vmovups ymm0, YMMWORD PTR c01$[rbp] 00472 c5 fc 11 00 vmovups YMMWORD PTR [rax], ymm0 ; 136 : _mm256_store_ps((float *)&ans_cur->f32_y[1], c23); 00476 b8 20 00 00 00 mov eax, 32 ; 00000020H 0047b 48 6b c0 01 imul rax, rax, 1 0047f 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 00486 48 03 c8 add rcx, rax 00489 48 8b c1 mov rax, rcx 0048c c5 fc 10 85 00 01 00 00 vmovups ymm0, YMMWORD PTR c23$[rbp] 00494 c5 fc 11 00 vmovups YMMWORD PTR [rax], ymm0 ; 137 : } 00498 49 8d a5 70 06 00 00 lea rsp, QWORD PTR [r13+1648] 0049f 5f pop rdi 004a0 5d pop rbp 004a1 41 5d pop r13 004a3 c3 ret 0 float_kernel_tile_fma_avx ENDP _TEXT ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File D:\platform-dev\StgSharp.Native\sn-src\m.fma_tile.x86.c ; COMDAT float_kernel_tile_fma_sse _TEXT SEGMENT i$ = 4 j$ = 36 commonK$ = 68 ansHeight$ = 100 ans_cur$ = 136 c0$ = 176 c1$ = 224 c2$ = 272 c3$ = 320 bcol$ = 368 k$1 = 408 right_cur$2 = 440 left_cur$3 = 472 a0$4 = 512 a1$5 = 560 a2$6 = 608 a3$7 = 656 left$ = 1104 right$ = 1112 ans$ = 1120 enumeration$ = 1128 float_kernel_tile_fma_sse PROC ; COMDAT ; 15 : { $LN6: 00000 4c 89 4c 24 20 mov QWORD PTR [rsp+32], r9 00005 4c 89 44 24 18 mov QWORD PTR [rsp+24], r8 0000a 48 89 54 24 10 mov QWORD PTR [rsp+16], rdx 0000f 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx 00014 55 push rbp 00015 57 push rdi 00016 48 81 ec 58 04 00 00 sub rsp, 1112 ; 00000458H 0001d 48 8d 6c 24 20 lea rbp, QWORD PTR [rsp+32] 00022 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:__31D20E98_m@fma_tile@x86@c 00029 e8 00 00 00 00 call __CheckForDebuggerJustMyCode 0002e 90 npad 1 ; 16 : int i = enumeration->m128_i32[0]; 0002f b8 04 00 00 00 mov eax, 4 00034 48 6b c0 00 imul rax, rax, 0 00038 48 8b 8d 68 04 00 00 mov rcx, QWORD PTR enumeration$[rbp] 0003f 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00042 89 45 04 mov DWORD PTR i$[rbp], eax ; 17 : int j = enumeration->m128_i32[1]; 00045 b8 04 00 00 00 mov eax, 4 0004a 48 6b c0 01 imul rax, rax, 1 0004e 48 8b 8d 68 04 00 00 mov rcx, QWORD PTR enumeration$[rbp] 00055 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00058 89 45 24 mov DWORD PTR j$[rbp], eax ; 18 : int commonK = enumeration->m128_i32[2]; 0005b b8 04 00 00 00 mov eax, 4 00060 48 6b c0 02 imul rax, rax, 2 00064 48 8b 8d 68 04 00 00 mov rcx, QWORD PTR enumeration$[rbp] 0006b 8b 04 01 mov eax, DWORD PTR [rcx+rax] 0006e 89 45 44 mov DWORD PTR commonK$[rbp], eax ; 19 : int ansHeight = enumeration->m128_i32[3]; 00071 b8 04 00 00 00 mov eax, 4 00076 48 6b c0 03 imul rax, rax, 3 0007a 48 8b 8d 68 04 00 00 mov rcx, QWORD PTR enumeration$[rbp] 00081 8b 04 01 mov eax, DWORD PTR [rcx+rax] 00084 89 45 64 mov DWORD PTR ansHeight$[rbp], eax ; 20 : ; 21 : MAT_KERNEL(float) ; 22 : const *ans_cur = ans + GET_INDEX(ansHeight, i, j); // GetKernelAddressUnsafe 00087 8b 45 64 mov eax, DWORD PTR ansHeight$[rbp] 0008a 0f af 45 04 imul eax, DWORD PTR i$[rbp] 0008e 03 45 24 add eax, DWORD PTR j$[rbp] 00091 48 98 cdqe 00093 48 6b c0 40 imul rax, rax, 64 ; 00000040H 00097 48 8b 8d 60 04 00 00 mov rcx, QWORD PTR ans$[rbp] 0009e 48 03 c8 add rcx, rax 000a1 48 8b c1 mov rax, rcx 000a4 48 89 85 88 00 00 00 mov QWORD PTR ans_cur$[rbp], rax ; 23 : ; 24 : register __m128 c0 = _mm_load_ps((float *)&ans_cur->f32_x[0]); 000ab b8 10 00 00 00 mov eax, 16 000b0 48 6b c0 00 imul rax, rax, 0 000b4 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 000bb 48 03 c8 add rcx, rax 000be 48 8b c1 mov rax, rcx 000c1 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000c4 0f 29 85 b0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 25 : register __m128 c1 = _mm_load_ps((float *)&ans_cur->f32_x[1]); 000cb b8 10 00 00 00 mov eax, 16 000d0 48 6b c0 01 imul rax, rax, 1 000d4 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 000db 48 03 c8 add rcx, rax 000de 48 8b c1 mov rax, rcx 000e1 0f 10 00 movups xmm0, XMMWORD PTR [rax] 000e4 0f 29 85 e0 00 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 26 : register __m128 c2 = _mm_load_ps((float *)&ans_cur->f32_x[2]); 000eb b8 10 00 00 00 mov eax, 16 000f0 48 6b c0 02 imul rax, rax, 2 000f4 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 000fb 48 03 c8 add rcx, rax 000fe 48 8b c1 mov rax, rcx 00101 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00104 0f 29 85 10 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 27 : register __m128 c3 = _mm_load_ps((float *)&ans_cur->f32_x[3]); 0010b b8 10 00 00 00 mov eax, 16 00110 48 6b c0 03 imul rax, rax, 3 00114 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 0011b 48 03 c8 add rcx, rax 0011e 48 8b c1 mov rax, rcx 00121 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00124 0f 29 85 40 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 28 : register __m128 bcol; ; 29 : ; 30 : for (size_t k = 0; k < commonK; k++) { 0012b 48 c7 85 98 01 00 00 00 00 00 00 mov QWORD PTR k$1[rbp], 0 00136 eb 11 jmp SHORT $LN4@float_kern $LN2@float_kern: 00138 48 8b 85 98 01 00 00 mov rax, QWORD PTR k$1[rbp] 0013f 48 ff c0 inc rax 00142 48 89 85 98 01 00 00 mov QWORD PTR k$1[rbp], rax $LN4@float_kern: 00149 48 63 45 44 movsxd rax, DWORD PTR commonK$[rbp] 0014d 48 39 85 98 01 00 00 cmp QWORD PTR k$1[rbp], rax 00154 0f 83 58 04 00 00 jae $LN3@float_kern ; 31 : MAT_KERNEL(float) ; 32 : const *right_cur = right + GET_INDEX(commonK, i, k), // GetKernelAddressUnsafe 0015a 8b 45 44 mov eax, DWORD PTR commonK$[rbp] 0015d 0f af 45 04 imul eax, DWORD PTR i$[rbp] 00161 48 98 cdqe 00163 48 03 85 98 01 00 00 add rax, QWORD PTR k$1[rbp] 0016a 48 6b c0 40 imul rax, rax, 64 ; 00000040H 0016e 48 8b 8d 58 04 00 00 mov rcx, QWORD PTR right$[rbp] 00175 48 03 c8 add rcx, rax 00178 48 8b c1 mov rax, rcx 0017b 48 89 85 b8 01 00 00 mov QWORD PTR right_cur$2[rbp], rax ; 33 : const *left_cur = 00182 48 63 45 64 movsxd rax, DWORD PTR ansHeight$[rbp] 00186 48 0f af 85 98 01 00 00 imul rax, QWORD PTR k$1[rbp] 0018e 48 63 4d 24 movsxd rcx, DWORD PTR j$[rbp] 00192 48 03 c1 add rax, rcx 00195 48 6b c0 40 imul rax, rax, 64 ; 00000040H 00199 48 8b 8d 50 04 00 00 mov rcx, QWORD PTR left$[rbp] 001a0 48 03 c8 add rcx, rax 001a3 48 8b c1 mov rax, rcx 001a6 48 89 85 d8 01 00 00 mov QWORD PTR left_cur$3[rbp], rax ; 34 : left + GET_INDEX(ansHeight, k, j); // GetKernelAddressUnsafe ; 35 : ; 36 : const __m128 a0 = _mm_load_ps((float *)&left_cur->f32_x[0]); 001ad b8 10 00 00 00 mov eax, 16 001b2 48 6b c0 00 imul rax, rax, 0 001b6 48 8b 8d d8 01 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 001bd 48 03 c8 add rcx, rax 001c0 48 8b c1 mov rax, rcx 001c3 0f 10 00 movups xmm0, XMMWORD PTR [rax] 001c6 0f 29 85 00 02 00 00 movaps XMMWORD PTR a0$4[rbp], xmm0 ; 37 : const __m128 a1 = _mm_load_ps((float *)&left_cur->f32_x[1]); 001cd b8 10 00 00 00 mov eax, 16 001d2 48 6b c0 01 imul rax, rax, 1 001d6 48 8b 8d d8 01 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 001dd 48 03 c8 add rcx, rax 001e0 48 8b c1 mov rax, rcx 001e3 0f 10 00 movups xmm0, XMMWORD PTR [rax] 001e6 0f 29 85 30 02 00 00 movaps XMMWORD PTR a1$5[rbp], xmm0 ; 38 : const __m128 a2 = _mm_load_ps((float *)&left_cur->f32_x[2]); 001ed b8 10 00 00 00 mov eax, 16 001f2 48 6b c0 02 imul rax, rax, 2 001f6 48 8b 8d d8 01 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 001fd 48 03 c8 add rcx, rax 00200 48 8b c1 mov rax, rcx 00203 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00206 0f 29 85 60 02 00 00 movaps XMMWORD PTR a2$6[rbp], xmm0 ; 39 : const __m128 a3 = _mm_load_ps((float *)&left_cur->f32_x[3]); 0020d b8 10 00 00 00 mov eax, 16 00212 48 6b c0 03 imul rax, rax, 3 00216 48 8b 8d d8 01 00 00 mov rcx, QWORD PTR left_cur$3[rbp] 0021d 48 03 c8 add rcx, rax 00220 48 8b c1 mov rax, rcx 00223 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00226 0f 29 85 90 02 00 00 movaps XMMWORD PTR a3$7[rbp], xmm0 ; 40 : ; 41 : /* Column 0 */ ; 42 : bcol = _mm_load_ps((float *)&right_cur->f32_x[0]); 0022d b8 10 00 00 00 mov eax, 16 00232 48 6b c0 00 imul rax, rax, 0 00236 48 8b 8d b8 01 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 0023d 48 03 c8 add rcx, rax 00240 48 8b c1 mov rax, rcx 00243 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00246 0f 29 85 70 01 00 00 movaps XMMWORD PTR bcol$[rbp], xmm0 ; 43 : c0 = _mm_add_ps(c0, _mm_mul_ps(a0, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(0)))); 0024d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00254 0f c6 85 70 01 00 00 00 shufps xmm0, XMMWORD PTR bcol$[rbp], 0 0025c 0f 28 8d 00 02 00 00 movaps xmm1, XMMWORD PTR a0$4[rbp] 00263 0f 59 c8 mulps xmm1, xmm0 00266 0f 28 c1 movaps xmm0, xmm1 00269 0f 28 8d b0 00 00 00 movaps xmm1, XMMWORD PTR c0$[rbp] 00270 0f 58 c8 addps xmm1, xmm0 00273 0f 28 c1 movaps xmm0, xmm1 00276 0f 29 85 b0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 44 : c0 = _mm_add_ps(c0, _mm_mul_ps(a1, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(1)))); 0027d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00284 0f c6 85 70 01 00 00 55 shufps xmm0, XMMWORD PTR bcol$[rbp], 85 ; 00000055H 0028c 0f 28 8d 30 02 00 00 movaps xmm1, XMMWORD PTR a1$5[rbp] 00293 0f 59 c8 mulps xmm1, xmm0 00296 0f 28 c1 movaps xmm0, xmm1 00299 0f 28 8d b0 00 00 00 movaps xmm1, XMMWORD PTR c0$[rbp] 002a0 0f 58 c8 addps xmm1, xmm0 002a3 0f 28 c1 movaps xmm0, xmm1 002a6 0f 29 85 b0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 45 : c0 = _mm_add_ps(c0, _mm_mul_ps(a2, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(2)))); 002ad 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 002b4 0f c6 85 70 01 00 00 aa shufps xmm0, XMMWORD PTR bcol$[rbp], 170 ; 000000aaH 002bc 0f 28 8d 60 02 00 00 movaps xmm1, XMMWORD PTR a2$6[rbp] 002c3 0f 59 c8 mulps xmm1, xmm0 002c6 0f 28 c1 movaps xmm0, xmm1 002c9 0f 28 8d b0 00 00 00 movaps xmm1, XMMWORD PTR c0$[rbp] 002d0 0f 58 c8 addps xmm1, xmm0 002d3 0f 28 c1 movaps xmm0, xmm1 002d6 0f 29 85 b0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 46 : c0 = _mm_add_ps(c0, _mm_mul_ps(a3, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(3)))); 002dd 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 002e4 0f c6 85 70 01 00 00 ff shufps xmm0, XMMWORD PTR bcol$[rbp], 255 ; 000000ffH 002ec 0f 28 8d 90 02 00 00 movaps xmm1, XMMWORD PTR a3$7[rbp] 002f3 0f 59 c8 mulps xmm1, xmm0 002f6 0f 28 c1 movaps xmm0, xmm1 002f9 0f 28 8d b0 00 00 00 movaps xmm1, XMMWORD PTR c0$[rbp] 00300 0f 58 c8 addps xmm1, xmm0 00303 0f 28 c1 movaps xmm0, xmm1 00306 0f 29 85 b0 00 00 00 movaps XMMWORD PTR c0$[rbp], xmm0 ; 47 : ; 48 : /* Column 1 */ ; 49 : bcol = _mm_load_ps((float *)&right_cur->f32_x[1]); 0030d b8 10 00 00 00 mov eax, 16 00312 48 6b c0 01 imul rax, rax, 1 00316 48 8b 8d b8 01 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 0031d 48 03 c8 add rcx, rax 00320 48 8b c1 mov rax, rcx 00323 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00326 0f 29 85 70 01 00 00 movaps XMMWORD PTR bcol$[rbp], xmm0 ; 50 : c1 = _mm_add_ps(c1, _mm_mul_ps(a0, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(0)))); 0032d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00334 0f c6 85 70 01 00 00 00 shufps xmm0, XMMWORD PTR bcol$[rbp], 0 0033c 0f 28 8d 00 02 00 00 movaps xmm1, XMMWORD PTR a0$4[rbp] 00343 0f 59 c8 mulps xmm1, xmm0 00346 0f 28 c1 movaps xmm0, xmm1 00349 0f 28 8d e0 00 00 00 movaps xmm1, XMMWORD PTR c1$[rbp] 00350 0f 58 c8 addps xmm1, xmm0 00353 0f 28 c1 movaps xmm0, xmm1 00356 0f 29 85 e0 00 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 51 : c1 = _mm_add_ps(c1, _mm_mul_ps(a1, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(1)))); 0035d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00364 0f c6 85 70 01 00 00 55 shufps xmm0, XMMWORD PTR bcol$[rbp], 85 ; 00000055H 0036c 0f 28 8d 30 02 00 00 movaps xmm1, XMMWORD PTR a1$5[rbp] 00373 0f 59 c8 mulps xmm1, xmm0 00376 0f 28 c1 movaps xmm0, xmm1 00379 0f 28 8d e0 00 00 00 movaps xmm1, XMMWORD PTR c1$[rbp] 00380 0f 58 c8 addps xmm1, xmm0 00383 0f 28 c1 movaps xmm0, xmm1 00386 0f 29 85 e0 00 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 52 : c1 = _mm_add_ps(c1, _mm_mul_ps(a2, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(2)))); 0038d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00394 0f c6 85 70 01 00 00 aa shufps xmm0, XMMWORD PTR bcol$[rbp], 170 ; 000000aaH 0039c 0f 28 8d 60 02 00 00 movaps xmm1, XMMWORD PTR a2$6[rbp] 003a3 0f 59 c8 mulps xmm1, xmm0 003a6 0f 28 c1 movaps xmm0, xmm1 003a9 0f 28 8d e0 00 00 00 movaps xmm1, XMMWORD PTR c1$[rbp] 003b0 0f 58 c8 addps xmm1, xmm0 003b3 0f 28 c1 movaps xmm0, xmm1 003b6 0f 29 85 e0 00 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 53 : c1 = _mm_add_ps(c1, _mm_mul_ps(a3, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(3)))); 003bd 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 003c4 0f c6 85 70 01 00 00 ff shufps xmm0, XMMWORD PTR bcol$[rbp], 255 ; 000000ffH 003cc 0f 28 8d 90 02 00 00 movaps xmm1, XMMWORD PTR a3$7[rbp] 003d3 0f 59 c8 mulps xmm1, xmm0 003d6 0f 28 c1 movaps xmm0, xmm1 003d9 0f 28 8d e0 00 00 00 movaps xmm1, XMMWORD PTR c1$[rbp] 003e0 0f 58 c8 addps xmm1, xmm0 003e3 0f 28 c1 movaps xmm0, xmm1 003e6 0f 29 85 e0 00 00 00 movaps XMMWORD PTR c1$[rbp], xmm0 ; 54 : ; 55 : /* Column 2 */ ; 56 : bcol = _mm_load_ps((float *)&right_cur->f32_x[2]); 003ed b8 10 00 00 00 mov eax, 16 003f2 48 6b c0 02 imul rax, rax, 2 003f6 48 8b 8d b8 01 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 003fd 48 03 c8 add rcx, rax 00400 48 8b c1 mov rax, rcx 00403 0f 10 00 movups xmm0, XMMWORD PTR [rax] 00406 0f 29 85 70 01 00 00 movaps XMMWORD PTR bcol$[rbp], xmm0 ; 57 : c2 = _mm_add_ps(c2, _mm_mul_ps(a0, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(0)))); 0040d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00414 0f c6 85 70 01 00 00 00 shufps xmm0, XMMWORD PTR bcol$[rbp], 0 0041c 0f 28 8d 00 02 00 00 movaps xmm1, XMMWORD PTR a0$4[rbp] 00423 0f 59 c8 mulps xmm1, xmm0 00426 0f 28 c1 movaps xmm0, xmm1 00429 0f 28 8d 10 01 00 00 movaps xmm1, XMMWORD PTR c2$[rbp] 00430 0f 58 c8 addps xmm1, xmm0 00433 0f 28 c1 movaps xmm0, xmm1 00436 0f 29 85 10 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 58 : c2 = _mm_add_ps(c2, _mm_mul_ps(a1, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(1)))); 0043d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00444 0f c6 85 70 01 00 00 55 shufps xmm0, XMMWORD PTR bcol$[rbp], 85 ; 00000055H 0044c 0f 28 8d 30 02 00 00 movaps xmm1, XMMWORD PTR a1$5[rbp] 00453 0f 59 c8 mulps xmm1, xmm0 00456 0f 28 c1 movaps xmm0, xmm1 00459 0f 28 8d 10 01 00 00 movaps xmm1, XMMWORD PTR c2$[rbp] 00460 0f 58 c8 addps xmm1, xmm0 00463 0f 28 c1 movaps xmm0, xmm1 00466 0f 29 85 10 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 59 : c2 = _mm_add_ps(c2, _mm_mul_ps(a2, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(2)))); 0046d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00474 0f c6 85 70 01 00 00 aa shufps xmm0, XMMWORD PTR bcol$[rbp], 170 ; 000000aaH 0047c 0f 28 8d 60 02 00 00 movaps xmm1, XMMWORD PTR a2$6[rbp] 00483 0f 59 c8 mulps xmm1, xmm0 00486 0f 28 c1 movaps xmm0, xmm1 00489 0f 28 8d 10 01 00 00 movaps xmm1, XMMWORD PTR c2$[rbp] 00490 0f 58 c8 addps xmm1, xmm0 00493 0f 28 c1 movaps xmm0, xmm1 00496 0f 29 85 10 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 60 : c2 = _mm_add_ps(c2, _mm_mul_ps(a3, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(3)))); 0049d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 004a4 0f c6 85 70 01 00 00 ff shufps xmm0, XMMWORD PTR bcol$[rbp], 255 ; 000000ffH 004ac 0f 28 8d 90 02 00 00 movaps xmm1, XMMWORD PTR a3$7[rbp] 004b3 0f 59 c8 mulps xmm1, xmm0 004b6 0f 28 c1 movaps xmm0, xmm1 004b9 0f 28 8d 10 01 00 00 movaps xmm1, XMMWORD PTR c2$[rbp] 004c0 0f 58 c8 addps xmm1, xmm0 004c3 0f 28 c1 movaps xmm0, xmm1 004c6 0f 29 85 10 01 00 00 movaps XMMWORD PTR c2$[rbp], xmm0 ; 61 : ; 62 : /* Column 3 */ ; 63 : bcol = _mm_load_ps((float *)&right_cur->f32_x[3]); 004cd b8 10 00 00 00 mov eax, 16 004d2 48 6b c0 03 imul rax, rax, 3 004d6 48 8b 8d b8 01 00 00 mov rcx, QWORD PTR right_cur$2[rbp] 004dd 48 03 c8 add rcx, rax 004e0 48 8b c1 mov rax, rcx 004e3 0f 10 00 movups xmm0, XMMWORD PTR [rax] 004e6 0f 29 85 70 01 00 00 movaps XMMWORD PTR bcol$[rbp], xmm0 ; 64 : c3 = _mm_add_ps(c3, _mm_mul_ps(a0, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(0)))); 004ed 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 004f4 0f c6 85 70 01 00 00 00 shufps xmm0, XMMWORD PTR bcol$[rbp], 0 004fc 0f 28 8d 00 02 00 00 movaps xmm1, XMMWORD PTR a0$4[rbp] 00503 0f 59 c8 mulps xmm1, xmm0 00506 0f 28 c1 movaps xmm0, xmm1 00509 0f 28 8d 40 01 00 00 movaps xmm1, XMMWORD PTR c3$[rbp] 00510 0f 58 c8 addps xmm1, xmm0 00513 0f 28 c1 movaps xmm0, xmm1 00516 0f 29 85 40 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 65 : c3 = _mm_add_ps(c3, _mm_mul_ps(a1, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(1)))); 0051d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00524 0f c6 85 70 01 00 00 55 shufps xmm0, XMMWORD PTR bcol$[rbp], 85 ; 00000055H 0052c 0f 28 8d 30 02 00 00 movaps xmm1, XMMWORD PTR a1$5[rbp] 00533 0f 59 c8 mulps xmm1, xmm0 00536 0f 28 c1 movaps xmm0, xmm1 00539 0f 28 8d 40 01 00 00 movaps xmm1, XMMWORD PTR c3$[rbp] 00540 0f 58 c8 addps xmm1, xmm0 00543 0f 28 c1 movaps xmm0, xmm1 00546 0f 29 85 40 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 66 : c3 = _mm_add_ps(c3, _mm_mul_ps(a2, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(2)))); 0054d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00554 0f c6 85 70 01 00 00 aa shufps xmm0, XMMWORD PTR bcol$[rbp], 170 ; 000000aaH 0055c 0f 28 8d 60 02 00 00 movaps xmm1, XMMWORD PTR a2$6[rbp] 00563 0f 59 c8 mulps xmm1, xmm0 00566 0f 28 c1 movaps xmm0, xmm1 00569 0f 28 8d 40 01 00 00 movaps xmm1, XMMWORD PTR c3$[rbp] 00570 0f 58 c8 addps xmm1, xmm0 00573 0f 28 c1 movaps xmm0, xmm1 00576 0f 29 85 40 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 67 : c3 = _mm_add_ps(c3, _mm_mul_ps(a3, _mm_shuffle_ps(bcol, bcol, _FMA_SELECT(3)))); 0057d 0f 28 85 70 01 00 00 movaps xmm0, XMMWORD PTR bcol$[rbp] 00584 0f c6 85 70 01 00 00 ff shufps xmm0, XMMWORD PTR bcol$[rbp], 255 ; 000000ffH 0058c 0f 28 8d 90 02 00 00 movaps xmm1, XMMWORD PTR a3$7[rbp] 00593 0f 59 c8 mulps xmm1, xmm0 00596 0f 28 c1 movaps xmm0, xmm1 00599 0f 28 8d 40 01 00 00 movaps xmm1, XMMWORD PTR c3$[rbp] 005a0 0f 58 c8 addps xmm1, xmm0 005a3 0f 28 c1 movaps xmm0, xmm1 005a6 0f 29 85 40 01 00 00 movaps XMMWORD PTR c3$[rbp], xmm0 ; 68 : } 005ad e9 86 fb ff ff jmp $LN2@float_kern $LN3@float_kern: ; 69 : ; 70 : _mm_store_ps((float *)&ans_cur->f32_x[0], c0); 005b2 b8 10 00 00 00 mov eax, 16 005b7 48 6b c0 00 imul rax, rax, 0 005bb 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 005c2 48 03 c8 add rcx, rax 005c5 48 8b c1 mov rax, rcx 005c8 0f 28 85 b0 00 00 00 movaps xmm0, XMMWORD PTR c0$[rbp] 005cf 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 71 : _mm_store_ps((float *)&ans_cur->f32_x[1], c1); 005d2 b8 10 00 00 00 mov eax, 16 005d7 48 6b c0 01 imul rax, rax, 1 005db 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 005e2 48 03 c8 add rcx, rax 005e5 48 8b c1 mov rax, rcx 005e8 0f 28 85 e0 00 00 00 movaps xmm0, XMMWORD PTR c1$[rbp] 005ef 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 72 : _mm_store_ps((float *)&ans_cur->f32_x[2], c2); 005f2 b8 10 00 00 00 mov eax, 16 005f7 48 6b c0 02 imul rax, rax, 2 005fb 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 00602 48 03 c8 add rcx, rax 00605 48 8b c1 mov rax, rcx 00608 0f 28 85 10 01 00 00 movaps xmm0, XMMWORD PTR c2$[rbp] 0060f 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 73 : _mm_store_ps((float *)&ans_cur->f32_x[3], c3); 00612 b8 10 00 00 00 mov eax, 16 00617 48 6b c0 03 imul rax, rax, 3 0061b 48 8b 8d 88 00 00 00 mov rcx, QWORD PTR ans_cur$[rbp] 00622 48 03 c8 add rcx, rax 00625 48 8b c1 mov rax, rcx 00628 0f 28 85 40 01 00 00 movaps xmm0, XMMWORD PTR c3$[rbp] 0062f 0f 11 00 movups XMMWORD PTR [rax], xmm0 ; 74 : } 00632 48 8d a5 38 04 00 00 lea rsp, QWORD PTR [rbp+1080] 00639 5f pop rdi 0063a 5d pop rbp 0063b c3 ret 0 float_kernel_tile_fma_sse ENDP _TEXT ENDS END