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

4991 lines
161 KiB
Plaintext

; Listing generated by Microsoft (R) Optimizing Compiler Version 19.44.35220.0
include listing.inc
INCLUDELIB MSVCRTD
INCLUDELIB OLDNAMES
_DATA SEGMENT
COMM infolog:BYTE:0200H
_DATA ENDS
msvcjmc SEGMENT
__5C8CA4D3_mmintrin@h DB 01H
__8C83BECC_concurrencysal@h DB 01H
__608E3340_sal@h DB 01H
__FB67E29A_vadefs@h DB 01H
__1D1B619C_vcruntime@h DB 01H
__735960E1_corecrt@h DB 01H
__211DB995_corecrt_malloc@h DB 01H
__7CD62D9E_malloc@h DB 01H
__9DCE0DC8_xmmintrin@h DB 01H
__4C2AD0C7_winpackagefamily@h DB 01H
__9DED9ED1_winapifamily@h DB 01H
__12FEDF4E_sdkddkver@h DB 01H
__9BAEE128_excpt@h DB 01H
__B7B53233_stdarg@h DB 01H
__6B04FCB3_specstrings_undef@h DB 01H
__F4027AF7_specstrings_strict@h DB 01H
__B90340D4_sdv_driverspecs@h DB 01H
__BFFF5AD3_driverspecs@h DB 01H
__32847078_specstrings@h DB 01H
__108B2620_corecrt_wctype@h DB 01H
__6CD6613D_ctype@h DB 01H
__30902A1F_kernelspecs@h DB 01H
__376FD5CA_basetsd@h DB 01H
__13DE2371_errno@h DB 01H
__8C6AE390_vcruntime_string@h DB 01H
__8ACB2152_corecrt_memcpy_s@h DB 01H
__EA6C9D17_corecrt_memory@h DB 01H
__0DF2AF52_corecrt_wstring@h DB 01H
__6E889ECC_string@h DB 01H
__9BEDF4DE_guiddef@h DB 01H
__51BFD2FE_pshpack4@h DB 01H
__31652CEA_poppack@h DB 01H
__5532AE4C_pshpack2@h DB 01H
__58A52B9A_pshpack8@h DB 01H
__57741015_pshpack1@h DB 01H
__CDE68C90_apiset@h DB 01H
__0BF06E8D_ktmtypes@h DB 01H
__40C200C0_winnt@h DB 01H
__9336F789_minwindef@h DB 01H
__55136115_windef@h DB 01H
__32205BF0_apisetcconv@h DB 01H
__B48FDEA0_minwinbase@h DB 01H
__3551B028_apiquery2@h DB 01H
__65BE04AA_processenv@h DB 01H
__4767CA46_fileapi@h DB 01H
__282E6C4B_fileapifromapp@h DB 01H
__393AF12C_debugapi@h DB 01H
__EBC502B8_utilapiset@h DB 01H
__1EAD8C69_handleapi@h DB 01H
__D8EF9B29_errhandlingapi@h DB 01H
__97FC1204_fibersapi@h DB 01H
__27448220_namedpipeapi@h DB 01H
__6EA33B2A_profileapi@h DB 01H
__EAC6F673_heapapi@h DB 01H
__D64EEA5A_ioapiset@h DB 01H
__144BD4B6_synchapi@h DB 01H
__03B1C640_interlockedapi@h DB 01H
__DC64CB38_processthreadsapi@h DB 01H
__D719B518_sysinfoapi@h DB 01H
__410385B1_memoryapi@h DB 01H
__C1AD45EF_enclaveapi@h DB 01H
__F4C3AA32_threadpoollegacyapiset@h DB 01H
__AC5A7A9F_threadpoolapiset@h DB 01H
__F5254B21_jobapi@h DB 01H
__BCEA6EE8_jobapi2@h DB 01H
__D18ACE72_wow64apiset@h DB 01H
__669B0D4A_libloaderapi@h DB 01H
__645F7034_securitybaseapi@h DB 01H
__67E58557_namespaceapi@h DB 01H
__599D9D3A_systemtopologyapi@h DB 01H
__2337E373_processtopologyapi@h DB 01H
__02BFF239_securityappcontainer@h DB 01H
__9C196272_realtimeapiset@h DB 01H
__5AB313A4_winerror@h DB 01H
__B7E7187B_timezoneapi@h DB 01H
__6DE9EB6F_winbase@h DB 01H
__56B2AFF2_wingdi@h DB 01H
__BA1161A9_tvout@h DB 01H
__0501A018_winuser@h DB 01H
__EF12FA99_datetimeapi@h DB 01H
__8FA7C3CA_winnls@h DB 01H
__390F0C47_stringapiset@h DB 01H
__28605B0A_wincontypes@h DB 01H
__BFBDE86D_consoleapi@h DB 01H
__C3CAFBF0_consoleapi2@h DB 01H
__C20891C7_consoleapi3@h DB 01H
__717C98B6_wincon@h DB 01H
__2884C177_verrsrc@h DB 01H
__A3FD3A34_winver@h DB 01H
__6F8AD9F1_reason@h DB 01H
__4C90FD6F_winreg@h DB 01H
__68AFEBAD_wnnc@h DB 01H
__5A7AB086_winnetwk@h DB 01H
__2FE8A10C_stralign@h DB 01H
__34558472_winsvc@h DB 01H
__058845F1_mcx@h DB 01H
__7F16006B_ime_cmodes@h DB 01H
__0A3AF599_imm@h DB 01H
__9349FE86_windows@h DB 01H
__639A050C_sn_internal@h DB 01H
__836A8CFC_stdint@h DB 01H
__714FE6D7_sn_target@h DB 01H
__60B45B40_corecrt_stdio_config@h DB 01H
__CFA3741E_corecrt_wstdio@h DB 01H
__B3FE3303_stdio@h DB 01H
__955456CD_stddef@h DB 01H
__99AED4FB_corecrt_search@h DB 01H
__8B813BF6_corecrt_wstdlib@h DB 01H
__3D1CA2C3_limits@h DB 01H
__E8FB0A68_stdlib@h DB 01H
__F562FA57_stb_image@h DB 01H
__C95DC661_khrplatform@h DB 01H
__6C577136_gl@h DB 01H
__EE638A2C_wgl@h DB 01H
__8EF9E35C_glfw3@h DB 01H
__F8AC8404_emmintrin@h DB 01H
__270DEC8D_pmmintrin@h DB 01H
__97D49F0F_tmmintrin@h DB 01H
__BEEF8A8C_smmintrin@h DB 01H
__DB8D0340_nmmintrin@h DB 01H
__0E36F90E_wmmintrin@h DB 01H
__C5A2B409_zmmintrin@h DB 01H
__F2B616C3_immintrin@h DB 01H
__9FB25DBE_assert@h DB 01H
__4E664295_glfw_function@h DB 01H
__64C0EF11_StgSharpNative@h DB 01H
__E2EC0CAF_sn_matkernel@h DB 01H
__47E843D2_intrin0@inl@h DB 01H
__130964FF_setjmp@h DB 01H
__4875F786_ammintrin@h DB 01H
__353FD888_intrin@h DB 01H
__5FE1E9E3_isa_availability@h DB 01H
__AA840D82_sn_intrinsic@h DB 01H
__CE29950A_sn_intrincontext@x86@h DB 01H
__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