; Listing generated by Microsoft (R) Optimizing Compiler Version 17.00.50727.1 include listing.inc INCLUDELIB MSVCRT INCLUDELIB OLDNAMES PUBLIC ??0float4@@QEAA@XZ ; float4::float4 PUBLIC ??0float4@@QEAA@AEBM@Z ; float4::float4 PUBLIC ??0float4@@QEAA@AEBM000@Z ; float4::float4 PUBLIC ??Afloat4@@QEBAM_K@Z ; float4::operator[] PUBLIC ??D@YA?AUfloat4@@AEBU0@0@Z ; operator* PUBLIC ?mul_intrinsic@@YA?AUfloat4@@QEBU1@AEBU1@@Z ; mul_intrinsic PUBLIC ?mul_cpp@@YA?AUfloat4@@QEBU1@AEBU1@@Z ; mul_cpp PUBLIC ?mul_inst_like@@YA?AUfloat4@@QEBU1@AEBU1@@Z ; mul_inst_like PUBLIC main EXTRN _fltused:DWORD ; COMDAT pdata pdata SEGMENT $pdata$?mul_cpp@@YA?AUfloat4@@QEBU1@AEBU1@@Z DD imagerel $LN70 DD imagerel $LN70+235 DD imagerel $unwind$?mul_cpp@@YA?AUfloat4@@QEBU1@AEBU1@@Z pdata ENDS ; COMDAT pdata pdata SEGMENT $pdata$?mul_inst_like@@YA?AUfloat4@@QEBU1@AEBU1@@Z DD imagerel $LN48 DD imagerel $LN48+298 DD imagerel $unwind$?mul_inst_like@@YA?AUfloat4@@QEBU1@AEBU1@@Z pdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?mul_inst_like@@YA?AUfloat4@@QEBU1@AEBU1@@Z DD 0d3901H DD 0b839H DD 01a834H DD 029825H DD 03881fH DD 047819H DD 05680eH DD 0c204H xdata ENDS ; COMDAT xdata xdata SEGMENT $unwind$?mul_cpp@@YA?AUfloat4@@QEBU1@AEBU1@@Z DD 051901H DD 07819H DD 016815H DD 04204H xdata ENDS ; Function compile flags: /Ogtpy ; File g:\repository\glm\glm\core\dummy.cpp ; COMDAT main _TEXT SEGMENT main PROC ; COMDAT ; 134 : ; 135 : ; 136 : return 0; xor eax, eax ; 137 : } ret 0 main ENDP _TEXT ENDS ; Function compile flags: /Ogtpy ; File g:\repository\glm\glm\core\dummy.cpp ; COMDAT ?mul_inst_like@@YA?AUfloat4@@QEBU1@AEBU1@@Z _TEXT SEGMENT __$ReturnUdt$ = 112 m$ = 120 v$ = 128 ?mul_inst_like@@YA?AUfloat4@@QEBU1@AEBU1@@Z PROC ; mul_inst_like, COMDAT ; 116 : { $LN48: sub rsp, 104 ; 00000068H ; 117 : float4 const Mov0(v[0]); movss xmm3, DWORD PTR [r8] movaps XMMWORD PTR [rsp+80], xmm6 ; 118 : float4 const Mov1(v[1]); ; 119 : float4 const Mul0 = m[0] * Mov0; ; 120 : float4 const Mul1 = m[1] * Mov1; ; 121 : float4 const Add0 = Mul0 * Mul1; ; 122 : float4 const Mov2(v[2]); movss xmm6, DWORD PTR [r8+8] movaps XMMWORD PTR [rsp+64], xmm7 movaps XMMWORD PTR [rsp+48], xmm8 movaps XMMWORD PTR [rsp+32], xmm9 ; 123 : float4 const Mov3(v[3]); ; 124 : float4 const Mul2 = m[2] * Mov2; ; 125 : float4 const Mul3 = m[3] * Mov3; ; 126 : float4 const Add1 = Mul2 * Mul3; ; 127 : float4 const Add2 = Add0 * Add1; ; 128 : ; 129 : return Add2; mov rax, rcx movss xmm7, DWORD PTR [r8+12] movaps XMMWORD PTR [rsp+16], xmm10 movaps XMMWORD PTR [rsp], xmm11 movaps xmm0, xmm3 movss xmm11, DWORD PTR [r8+4] mulss xmm0, DWORD PTR [rdx] movaps xmm1, xmm3 movaps xmm2, xmm3 movaps xmm8, xmm11 mulss xmm3, DWORD PTR [rdx+12] mulss xmm1, DWORD PTR [rdx+4] mulss xmm2, DWORD PTR [rdx+8] mulss xmm8, DWORD PTR [rdx+16] movaps xmm9, xmm11 movaps xmm10, xmm11 movaps xmm4, xmm7 movaps xmm5, xmm7 mulss xmm9, DWORD PTR [rdx+20] mulss xmm10, DWORD PTR [rdx+24] mulss xmm11, DWORD PTR [rdx+28] mulss xmm4, DWORD PTR [rdx+52] mulss xmm5, DWORD PTR [rdx+56] mulss xmm11, xmm3 movaps xmm3, xmm7 mulss xmm7, DWORD PTR [rdx+60] mulss xmm3, DWORD PTR [rdx+48] mulss xmm8, xmm0 movaps xmm0, xmm6 mulss xmm0, DWORD PTR [rdx+32] mulss xmm9, xmm1 mulss xmm10, xmm2 movaps xmm1, xmm6 movaps xmm2, xmm6 mulss xmm6, DWORD PTR [rdx+44] mulss xmm1, DWORD PTR [rdx+36] mulss xmm2, DWORD PTR [rdx+40] mulss xmm7, xmm6 mulss xmm3, xmm0 mulss xmm4, xmm1 ; 130 : } movaps xmm6, XMMWORD PTR [rsp+80] mulss xmm7, xmm11 mulss xmm3, xmm8 mulss xmm4, xmm9 movaps xmm8, XMMWORD PTR [rsp+48] movaps xmm9, XMMWORD PTR [rsp+32] movaps xmm11, XMMWORD PTR [rsp] movss DWORD PTR [rcx+12], xmm7 movss DWORD PTR [rcx], xmm3 movss DWORD PTR [rcx+4], xmm4 movaps xmm7, XMMWORD PTR [rsp+64] mulss xmm5, xmm2 mulss xmm5, xmm10 movaps xmm10, XMMWORD PTR [rsp+16] movss DWORD PTR [rcx+8], xmm5 add rsp, 104 ; 00000068H ret 0 ?mul_inst_like@@YA?AUfloat4@@QEBU1@AEBU1@@Z ENDP ; mul_inst_like _TEXT ENDS ; Function compile flags: /Ogtpy ; File g:\repository\glm\glm\core\dummy.cpp ; COMDAT ?mul_cpp@@YA?AUfloat4@@QEBU1@AEBU1@@Z _TEXT SEGMENT __$ReturnUdt$ = 48 m$ = 56 v$ = 64 ?mul_cpp@@YA?AUfloat4@@QEBU1@AEBU1@@Z PROC ; mul_cpp, COMDAT ; 106 : { $LN70: sub rsp, 40 ; 00000028H ; 107 : return float4( ; 108 : m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3], ; 109 : m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3], ; 110 : m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3], ; 111 : m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3] * v[3]); movss xmm4, DWORD PTR [r8+4] movss xmm5, DWORD PTR [r8+8] movaps XMMWORD PTR [rsp+16], xmm6 movaps XMMWORD PTR [rsp], xmm7 movaps xmm2, xmm4 movaps xmm1, xmm5 mov rax, rcx movss xmm7, DWORD PTR [r8] movss xmm6, DWORD PTR [r8+12] mulss xmm2, DWORD PTR [rdx+16] mulss xmm1, DWORD PTR [rdx+32] movaps xmm0, xmm7 movaps xmm3, xmm7 mulss xmm0, DWORD PTR [rdx] mulss xmm3, DWORD PTR [rdx+4] addss xmm2, xmm0 movaps xmm0, xmm6 addss xmm2, xmm1 mulss xmm0, DWORD PTR [rdx+48] movaps xmm1, xmm5 mulss xmm1, DWORD PTR [rdx+36] addss xmm2, xmm0 movaps xmm0, xmm4 movss DWORD PTR [rcx], xmm2 mulss xmm0, DWORD PTR [rdx+20] movaps xmm2, xmm7 mulss xmm7, DWORD PTR [rdx+12] mulss xmm2, DWORD PTR [rdx+8] addss xmm3, xmm0 movaps xmm0, xmm6 addss xmm3, xmm1 movaps xmm1, xmm5 mulss xmm0, DWORD PTR [rdx+52] mulss xmm5, DWORD PTR [rdx+44] mulss xmm1, DWORD PTR [rdx+40] addss xmm3, xmm0 movaps xmm0, xmm4 movss DWORD PTR [rcx+4], xmm3 mulss xmm0, DWORD PTR [rdx+24] mulss xmm4, DWORD PTR [rdx+28] addss xmm2, xmm0 addss xmm7, xmm4 movaps xmm0, xmm6 mulss xmm6, DWORD PTR [rdx+60] mulss xmm0, DWORD PTR [rdx+56] addss xmm7, xmm5 addss xmm2, xmm1 addss xmm7, xmm6 addss xmm2, xmm0 ; 112 : } movaps xmm6, XMMWORD PTR [rsp+16] movss DWORD PTR [rcx+12], xmm7 movss DWORD PTR [rcx+8], xmm2 movaps xmm7, XMMWORD PTR [rsp] add rsp, 40 ; 00000028H ret 0 ?mul_cpp@@YA?AUfloat4@@QEBU1@AEBU1@@Z ENDP ; mul_cpp _TEXT ENDS ; Function compile flags: /Ogtpy ; File g:\repository\glm\glm\core\dummy.cpp ; COMDAT ?mul_intrinsic@@YA?AUfloat4@@QEBU1@AEBU1@@Z _TEXT SEGMENT __$ReturnUdt$ = 8 m$ = 16 v$ = 24 ?mul_intrinsic@@YA?AUfloat4@@QEBU1@AEBU1@@Z PROC ; mul_intrinsic, COMDAT ; 83 : __m128 v0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0)); ; 84 : __m128 v1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1)); ; 85 : __m128 v2 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2)); ; 86 : __m128 v3 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3)); movaps xmm2, XMMWORD PTR [r8] ; 87 : ; 88 : __m128 m0 = _mm_mul_ps(m[0].data, v0); ; 89 : __m128 m1 = _mm_mul_ps(m[1].data, v1); ; 90 : __m128 a0 = _mm_add_ps(m0, m1); ; 91 : ; 92 : __m128 m2 = _mm_mul_ps(m[2].data, v2); ; 93 : __m128 m3 = _mm_mul_ps(m[3].data, v3); ; 94 : __m128 a1 = _mm_add_ps(m2, m3); ; 95 : ; 96 : __m128 a2 = _mm_add_ps(a0, a1); ; 97 : ; 98 : float4 f; ; 99 : f.data = a2; ; 100 : ; 101 : return f; mov rax, rcx movaps xmm3, xmm2 movaps xmm0, xmm2 movaps xmm1, xmm2 shufps xmm3, xmm2, 255 ; 000000ffH shufps xmm1, xmm2, 85 ; 00000055H shufps xmm0, xmm2, 170 ; 000000aaH mulps xmm3, XMMWORD PTR [rdx+48] mulps xmm0, XMMWORD PTR [rdx+32] mulps xmm1, XMMWORD PTR [rdx+16] addps xmm3, xmm0 shufps xmm2, xmm2, 0 mulps xmm2, XMMWORD PTR [rdx] addps xmm1, xmm2 addps xmm3, xmm1 movaps XMMWORD PTR [rcx], xmm3 ; 102 : } ret 0 ?mul_intrinsic@@YA?AUfloat4@@QEBU1@AEBU1@@Z ENDP ; mul_intrinsic _TEXT ENDS ; Function compile flags: /Ogtpy ; File g:\repository\glm\glm\core\dummy.cpp ; COMDAT ??D@YA?AUfloat4@@AEBU0@0@Z _TEXT SEGMENT __$ReturnUdt$ = 8 a$ = 16 b$ = 24 ??D@YA?AUfloat4@@AEBU0@0@Z PROC ; operator*, COMDAT ; 78 : return float4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); movss xmm0, DWORD PTR [rdx] movss xmm1, DWORD PTR [rdx+4] mov rax, rcx mulss xmm0, DWORD PTR [r8] mulss xmm1, DWORD PTR [r8+4] movss DWORD PTR [rcx], xmm0 movss xmm0, DWORD PTR [rdx+8] movss DWORD PTR [rcx+4], xmm1 mulss xmm0, DWORD PTR [r8+8] movss xmm1, DWORD PTR [rdx+12] mulss xmm1, DWORD PTR [r8+12] movss DWORD PTR [rcx+8], xmm0 movss DWORD PTR [rcx+12], xmm1 ; 79 : } ret 0 ??D@YA?AUfloat4@@AEBU0@0@Z ENDP ; operator* _TEXT ENDS ; Function compile flags: /Ogtpy ; File g:\repository\glm\glm\core\dummy.cpp ; COMDAT ??Afloat4@@QEBAM_K@Z _TEXT SEGMENT this$ = 8 i$ = 16 ??Afloat4@@QEBAM_K@Z PROC ; float4::operator[], COMDAT ; 64 : return (&x)[i]; movss xmm0, DWORD PTR [rcx+rdx*4] ; 65 : } ret 0 ??Afloat4@@QEBAM_K@Z ENDP ; float4::operator[] _TEXT ENDS ; Function compile flags: /Ogtpy ; File g:\repository\glm\glm\core\dummy.cpp ; COMDAT ??0float4@@QEAA@AEBM000@Z _TEXT SEGMENT this$ = 8 x$ = 16 y$ = 24 z$ = 32 w$ = 40 ??0float4@@QEAA@AEBM000@Z PROC ; float4::float4, COMDAT ; 60 : {} mov eax, DWORD PTR [rdx] mov DWORD PTR [rcx], eax mov eax, DWORD PTR [r8] mov DWORD PTR [rcx+4], eax mov eax, DWORD PTR [r9] mov DWORD PTR [rcx+8], eax mov rax, QWORD PTR w$[rsp] mov edx, DWORD PTR [rax] mov rax, rcx mov DWORD PTR [rcx+12], edx ret 0 ??0float4@@QEAA@AEBM000@Z ENDP ; float4::float4 _TEXT ENDS ; Function compile flags: /Ogtpy ; File g:\repository\glm\glm\core\dummy.cpp ; COMDAT ??0float4@@QEAA@AEBM@Z _TEXT SEGMENT this$ = 8 s$ = 16 ??0float4@@QEAA@AEBM@Z PROC ; float4::float4, COMDAT ; 56 : {} mov eax, DWORD PTR [rdx] mov DWORD PTR [rcx], eax mov eax, DWORD PTR [rdx] mov DWORD PTR [rcx+4], eax mov eax, DWORD PTR [rdx] mov DWORD PTR [rcx+8], eax mov eax, DWORD PTR [rdx] mov DWORD PTR [rcx+12], eax mov rax, rcx ret 0 ??0float4@@QEAA@AEBM@Z ENDP ; float4::float4 _TEXT ENDS ; Function compile flags: /Ogtpy ; File g:\repository\glm\glm\core\dummy.cpp ; COMDAT ??0float4@@QEAA@XZ _TEXT SEGMENT this$ = 8 ??0float4@@QEAA@XZ PROC ; float4::float4, COMDAT ; 52 : float4(){} mov rax, rcx ret 0 ??0float4@@QEAA@XZ ENDP ; float4::float4 _TEXT ENDS END