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

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