; Listing generated by Microsoft (R) Optimizing Compiler Version 19.36.32537.0 include listing.inc INCLUDELIB OLDNAMES PUBLIC ??_C@_09OKFGCEAB@?$CFf?7?$CFf?7?$CFf?6@ ; `string' PUBLIC ??_C@_0L@INACIODI@?$CFf?7?$CFf?7?$CFf?6?6@ ; `string' EXTRN __imp___stdio_common_vfprintf:PROC EXTRN __imp___acrt_iob_func:PROC ; COMDAT ??_C@_0L@INACIODI@?$CFf?7?$CFf?7?$CFf?6?6@ CONST SEGMENT ??_C@_0L@INACIODI@?$CFf?7?$CFf?7?$CFf?6?6@ DB '%f', 09H, '%f', 09H, '%f', 0aH DB 0aH, 00H ; `string' CONST ENDS ; COMDAT ??_C@_09OKFGCEAB@?$CFf?7?$CFf?7?$CFf?6@ CONST SEGMENT ??_C@_09OKFGCEAB@?$CFf?7?$CFf?7?$CFf?6@ DB '%f', 09H, '%f', 09H, '%f', 0aH DB 00H ; `string' PUBLIC det_mat3_internal PUBLIC printf PUBLIC _vfprintf_l PUBLIC __local_stdio_printf_options ; COMDAT pdata pdata SEGMENT $pdata$det_mat3_internal DD imagerel $LN4 DD imagerel $LN4+400 DD imagerel $unwind$det_mat3_internal pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$printf DD imagerel $LN6@printf DD imagerel $LN6@printf+85 DD imagerel $unwind$printf pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$_vfprintf_l DD imagerel $LN4@vfprintf_l DD imagerel $LN4@vfprintf_l+68 DD imagerel $unwind$_vfprintf_l ; COMDAT xdata xdata SEGMENT $unwind$_vfprintf_l DQ 00009640f00060f01r ; 1.30596e-308 DQ 0700b520f0008340fr ; 5.30195e+231 xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$printf DQ 07017521b00041b01r ; 9.05146e+231 DD 030156016H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$det_mat3_internal DD 0a3401H DD 029834H DD 038823H DD 04781aH DD 05680bH DD 03002b206H ; Function compile flags: /Ogtpy ; File D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\源代码\StgShqrpGraphic\mat3.c ; COMDAT det_mat3_internal _TEXT SEGMENT c0$ = 112 c1$ = 120 c2$ = 128 det_mat3_internal PROC ; COMDAT ; 5 : { $LN4: 00000 40 53 push rbx 00002 48 83 ec 60 sub rsp, 96 ; 00000060H 00006 0f 29 74 24 50 movaps XMMWORD PTR [rsp+80], xmm6 ; 6 : //let adding row aligned ; 7 : __m128 addc1 = _mm_shuffle_ps(c1, c1, _MM_SHUFFLE(3, 0, 2, 1)); ; 8 : __m128 addc2 = _mm_shuffle_ps(c2, c1, _MM_SHUFFLE(3, 1, 0, 2)); ; 9 : ; 10 : printf("%f\t%f\t%f\n", addc1.m128_f32[0], addc1.m128_f32[1], addc1.m128_f32[2]); 0000b 0f 57 d2 xorps xmm2, xmm2 0000e 41 0f 10 30 movups xmm6, XMMWORD PTR [r8] 00012 0f 57 db xorps xmm3, xmm3 00015 0f 29 7c 24 40 movaps XMMWORD PTR [rsp+64], xmm7 0001a 48 8b d9 mov rbx, rcx 0001d 44 0f 29 44 24 30 movaps XMMWORD PTR [rsp+48], xmm8 00023 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_09OKFGCEAB@?$CFf?7?$CFf?7?$CFf?6@ 0002a 44 0f 10 02 movups xmm8, XMMWORD PTR [rdx] 0002e 44 0f 29 4c 24 20 movaps XMMWORD PTR [rsp+32], xmm9 00034 45 0f 28 c8 movaps xmm9, xmm8 00038 45 0f c6 c8 c9 shufps xmm9, xmm8, 201 ; 000000c9H 0003d 41 0f 28 c9 movaps xmm1, xmm9 00041 41 0f c6 f0 d2 shufps xmm6, xmm8, 210 ; 000000d2H 00046 41 0f c6 c9 55 shufps xmm1, xmm9, 85 ; 00000055H 0004b 41 0f 28 c1 movaps xmm0, xmm9 0004f f3 0f 5a d1 cvtss2sd xmm2, xmm1 00053 0f 57 c9 xorps xmm1, xmm1 00056 41 0f c6 c1 aa shufps xmm0, xmm9, 170 ; 000000aaH 0005b f3 41 0f 5a c9 cvtss2sd xmm1, xmm9 00060 f3 0f 5a d8 cvtss2sd xmm3, xmm0 00064 66 48 0f 7e ca movq rdx, xmm1 00069 66 49 0f 7e d0 movq r8, xmm2 0006e 66 49 0f 7e d9 movq r9, xmm3 00073 e8 00 00 00 00 call printf ; 11 : printf("%f\t%f\t%f\n\n", addc2.m128_f32[0], addc2.m128_f32[1], addc2.m128_f32[2]); 00078 0f 28 ce movaps xmm1, xmm6 0007b 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_0L@INACIODI@?$CFf?7?$CFf?7?$CFf?6?6@ 00082 0f c6 ce 55 shufps xmm1, xmm6, 85 ; 00000055H 00086 0f 57 d2 xorps xmm2, xmm2 00089 f3 0f 5a d1 cvtss2sd xmm2, xmm1 0008d 0f 28 c6 movaps xmm0, xmm6 00090 0f 57 c9 xorps xmm1, xmm1 00093 0f c6 c6 aa shufps xmm0, xmm6, 170 ; 000000aaH 00097 0f 57 db xorps xmm3, xmm3 0009a f3 0f 5a ce cvtss2sd xmm1, xmm6 0009e f3 0f 5a d8 cvtss2sd xmm3, xmm0 000a2 66 48 0f 7e ca movq rdx, xmm1 000a7 66 49 0f 7e d0 movq r8, xmm2 000ac 66 49 0f 7e d9 movq r9, xmm3 000b1 e8 00 00 00 00 call printf ; 12 : ; 13 : //let sub row aligned ; 14 : __m128 subc1 = _mm_shuffle_ps(c1, c1, _MM_SHUFFLE(3, 1, 0, 2)); ; 15 : __m128 subc2 = _mm_shuffle_ps(c2, c2, _MM_SHUFFLE(3, 0, 2, 1)); ; 16 : ; 17 : //multple all add row ; 18 : __m128 cache = _mm_mul_ps(c0,addc1); 000b6 0f 10 3b movups xmm7, XMMWORD PTR [rbx] ; 19 : cache = _mm_mul_ps(cache,addc2); ; 20 : ; 21 : printf("%f\t%f\t%f\n\n", cache.m128_f32[0], cache.m128_f32[1], cache.m128_f32[2]); 000b9 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_0L@INACIODI@?$CFf?7?$CFf?7?$CFf?6?6@ 000c0 44 0f 59 cf mulps xmm9, xmm7 000c4 0f 57 d2 xorps xmm2, xmm2 000c7 0f 57 db xorps xmm3, xmm3 000ca 45 0f c6 c0 d2 shufps xmm8, xmm8, 210 ; 000000d2H 000cf 44 0f 59 ce mulps xmm9, xmm6 000d3 41 0f 28 c9 movaps xmm1, xmm9 000d7 41 0f 28 c1 movaps xmm0, xmm9 000db 41 0f c6 c9 55 shufps xmm1, xmm9, 85 ; 00000055H 000e0 f3 0f 5a d1 cvtss2sd xmm2, xmm1 000e4 0f 57 c9 xorps xmm1, xmm1 000e7 41 0f c6 c1 aa shufps xmm0, xmm9, 170 ; 000000aaH 000ec f3 41 0f 5a c9 cvtss2sd xmm1, xmm9 000f1 f3 0f 5a d8 cvtss2sd xmm3, xmm0 000f5 66 48 0f 7e ca movq rdx, xmm1 000fa 66 49 0f 7e d0 movq r8, xmm2 000ff 66 49 0f 7e d9 movq r9, xmm3 00104 e8 00 00 00 00 call printf ; 22 : ; 23 : //multiple all sub row ; 24 : __m128 sub = _mm_mul_ps(c0, subc1); 00109 41 0f 59 f8 mulps xmm7, xmm8 ; 25 : sub = _mm_mul_ps(sub, subc1); ; 26 : ; 27 : printf("%f\t%f\t%f\n\n", sub.m128_f32[0], sub.m128_f32[1], sub.m128_f32[2]); 0010d 48 8d 0d 00 00 00 00 lea rcx, OFFSET FLAT:??_C@_0L@INACIODI@?$CFf?7?$CFf?7?$CFf?6?6@ 00114 0f 57 d2 xorps xmm2, xmm2 00117 0f 57 db xorps xmm3, xmm3 0011a 41 0f 59 f8 mulps xmm7, xmm8 0011e 0f 28 cf movaps xmm1, xmm7 00121 0f 28 c7 movaps xmm0, xmm7 00124 0f c6 cf 55 shufps xmm1, xmm7, 85 ; 00000055H 00128 f3 0f 5a d1 cvtss2sd xmm2, xmm1 0012c 0f 57 c9 xorps xmm1, xmm1 0012f 0f c6 c7 aa shufps xmm0, xmm7, 170 ; 000000aaH 00133 f3 0f 5a cf cvtss2sd xmm1, xmm7 00137 f3 0f 5a d8 cvtss2sd xmm3, xmm0 0013b 66 48 0f 7e ca movq rdx, xmm1 00140 66 49 0f 7e d0 movq r8, xmm2 00145 66 49 0f 7e d9 movq r9, xmm3 0014a e8 00 00 00 00 call printf ; 28 : ; 29 : //main-corner sub sub-corner ; 30 : cache = _mm_sub_ps(cache,sub); 0014f 44 0f 5c cf subps xmm9, xmm7 00153 0f 57 c0 xorps xmm0, xmm0 ; 31 : ; 32 : __m128 ret = _mm_hadd_ps(cache,cache); //element 1 add element 2 00156 41 0f 28 c9 movaps xmm1, xmm9 0015a f2 41 0f 7c c9 haddps xmm1, xmm9 ; 33 : ret = _mm_add_ps(ret, cache); //(e1 add e2) add element 3 0015f 41 0f 58 c9 addps xmm1, xmm9 ; 34 : ; 35 : int a = *(int*)0; //for debug, all an excepotion ; 36 : ; 37 : return ret.m128_f32[3] + a; 00163 f3 0f 2a 04 25 00 00 00 00 cvtsi2ss xmm0, DWORD PTR ds:0 ; 38 : } 0016c 0f 28 74 24 50 movaps xmm6, XMMWORD PTR [rsp+80] 00171 0f 28 7c 24 40 movaps xmm7, XMMWORD PTR [rsp+64] 00176 44 0f 28 44 24 30 movaps xmm8, XMMWORD PTR [rsp+48] 0017c 44 0f 28 4c 24 20 movaps xmm9, XMMWORD PTR [rsp+32] 00182 0f c6 c9 ff shufps xmm1, xmm1, 255 ; 000000ffH 00186 f3 0f 58 c1 addss xmm0, xmm1 0018a 48 83 c4 60 add rsp, 96 ; 00000060H 0018e 5b pop rbx 0018f c3 ret 0 det_mat3_internal ENDP _TEXT ENDS END