; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.40219.01 TITLE E:\Private\Frank\Code\blu-flame.org\4kgfx\vecmath.cpp .686P .XMM include listing.inc .model flat INCLUDELIB MSVCRT INCLUDELIB OLDNAMES PUBLIC __fltused attribs SEGMENT __fltused DD 01H attribs ENDS PUBLIC _pi ; Function compile flags: /Ogspy ; File e:\private\frank\code\blu-flame.org\4kgfx\vecmath.cpp compile SEGMENT _pi PROC ; 7 : __asm fldpi fldpi ; 8 : } ret 0 _pi ENDP compile ENDS PUBLIC _memclear ; Function compile flags: /Ogspy compile SEGMENT _dest$ = 8 ; size = 4 __size$ = 12 ; size = 4 _memclear PROC ; 11 : { push edi ; 13 : { ; 14 : xor eax, eax xor eax, eax ; 15 : mov edi, dest mov edi, DWORD PTR _dest$[esp] ; 16 : mov ecx, _size mov ecx, DWORD PTR __size$[esp] ; 17 : rep stosb rep stosb ; 12 : __asm pop edi ; 18 : } ; 19 : } ret 0 _memclear ENDP compile ENDS PUBLIC _memcpy ; Function compile flags: /Ogspy compile SEGMENT _dest$ = 8 ; size = 4 _source$ = 12 ; size = 4 __size$ = 16 ; size = 4 _memcpy PROC ; 22 : { push esi push edi ; 24 : { ; 25 : mov esi, source mov esi, DWORD PTR _source$[esp+4] ; 26 : mov edi, dest mov edi, DWORD PTR _dest$[esp+4] ; 27 : mov ecx, _size mov ecx, DWORD PTR __size$[esp+4] ; 28 : rep movsb rep movsb ; 23 : __asm pop edi pop esi ; 29 : } ; 30 : } ret 0 _memcpy ENDP compile ENDS PUBLIC _strlen ; Function compile flags: /Ogspy compile SEGMENT _string$ = 8 ; size = 4 _strlen PROC ; 33 : { push edi ; 35 : { ; 36 : xor ecx, ecx xor ecx, ecx ; 37 : mov edi, string mov edi, DWORD PTR _string$[esp] ; 38 : not ecx not ecx ; 39 : xor al, al xor al, al ; 40 : cld cld ; 41 : repne scasb repnz scasb ; 42 : not ecx not ecx ; 43 : lea eax, [ecx-1] lea eax, DWORD PTR [ecx-1] ; 34 : __asm pop edi ; 44 : } ; 45 : } ret 0 _strlen ENDP compile ENDS PUBLIC _pow EXTRN __fltused:DWORD ; Function compile flags: /Ogspy compile SEGMENT _r$ = -4 ; size = 4 _x$ = 8 ; size = 4 _y$ = 12 ; size = 4 _pow PROC ; 48 : { push ecx ; 49 : float r; ; 50 : __asm ; 51 : { ; 52 : fld y fld DWORD PTR _y$[esp] ; 53 : fld x fld DWORD PTR _x$[esp] ; 54 : fyl2x fyl2x ; 55 : fld1 fld1 ; 56 : fld st(1) fld ST(1) ; 57 : fprem fprem ; 58 : f2xm1 f2xm1 ; 59 : faddp st(1),st faddp ST(1), ST(0) ; 60 : fscale fscale ; 61 : fxch st(1) fxch ST(1) ; 62 : fstp st(0) fstp ST(0) ; 63 : fstp r fstp DWORD PTR _r$[esp+4] ; 64 : } ; 65 : return r; fld DWORD PTR _r$[esp+4] ; 66 : } pop ecx ret 0 _pow ENDP compile ENDS PUBLIC _sqrt ; Function compile flags: /Ogspy compile SEGMENT _x$ = 8 ; size = 4 _sqrt PROC ; 70 : __asm fld x fld DWORD PTR _x$[esp-4] ; 71 : __asm fsqrt fsqrt ; 72 : } ret 0 _sqrt ENDP compile ENDS PUBLIC _sin ; Function compile flags: /Ogspy compile SEGMENT _x$ = 8 ; size = 4 _sin PROC ; 76 : __asm fld x fld DWORD PTR _x$[esp-4] ; 77 : __asm fsin fsin ; 78 : } ret 0 _sin ENDP compile ENDS PUBLIC _cos ; Function compile flags: /Ogspy compile SEGMENT _x$ = 8 ; size = 4 _cos PROC ; 82 : __asm fld x fld DWORD PTR _x$[esp-4] ; 83 : __asm fcos fcos ; 84 : } ret 0 _cos ENDP compile ENDS PUBLIC _fabs ; Function compile flags: /Ogspy compile SEGMENT _x$ = 8 ; size = 4 _fabs PROC ; 88 : __asm fld x fld DWORD PTR _x$[esp-4] ; 89 : __asm fabs fabs ; 90 : } ret 0 _fabs ENDP compile ENDS PUBLIC _tan ; Function compile flags: /Ogspy compile SEGMENT tv72 = -8 ; size = 4 $T18361 = -8 ; size = 4 $T18357 = -4 ; size = 4 _f$ = 8 ; size = 4 _tan PROC ; 93 : { push ebp mov ebp, esp push ecx push ecx ; 94 : return sin(f) / cos(f); fld DWORD PTR _f$[ebp] fsin fstp DWORD PTR $T18357[ebp] fld DWORD PTR _f$[ebp] fcos fstp DWORD PTR $T18361[ebp] fld DWORD PTR $T18357[ebp] fdiv DWORD PTR $T18361[ebp] fstp DWORD PTR tv72[ebp] fld DWORD PTR tv72[ebp] ; 95 : } leave ret 0 _tan ENDP compile ENDS PUBLIC __real@4008000000000000 PUBLIC __real@3f800000 PUBLIC __real@00000000 PUBLIC _smoothstep ; COMDAT __real@4008000000000000 CONST SEGMENT __real@4008000000000000 DQ 04008000000000000r ; 3 CONST ENDS ; COMDAT __real@3f800000 CONST SEGMENT __real@3f800000 DD 03f800000r ; 1 CONST ENDS ; COMDAT __real@00000000 CONST SEGMENT __real@00000000 DD 000000000r ; 0 ; Function compile flags: /Ogspy CONST ENDS compile SEGMENT tv129 = 8 ; size = 4 _x$ = 8 ; size = 4 _a$ = 12 ; size = 4 _b$ = 16 ; size = 4 _smoothstep PROC ; 98 : { push ebp mov ebp, esp ; 99 : if (xb) return 1.0f; fld DWORD PTR _x$[ebp] fld DWORD PTR _b$[ebp] fcompp fnstsw ax test ah, 5 jp SHORT $LN1@smoothstep fld1 ; 103 : } pop ebp ret 0 $LN1@smoothstep: ; 101 : x = (x-a)/(b-a); fld DWORD PTR _x$[ebp] fsub DWORD PTR _a$[ebp] fld DWORD PTR _b$[ebp] fsub DWORD PTR _a$[ebp] fdivp ST(1), ST(0) fstp DWORD PTR _x$[ebp] ; 102 : return x*x*(3.0f-2.0f*x); fld DWORD PTR _x$[ebp] fld DWORD PTR _x$[ebp] fadd ST(0), ST(0) fsubr QWORD PTR __real@4008000000000000 fld ST(1) fmulp ST(2), ST(0) fmulp ST(1), ST(0) fstp DWORD PTR tv129[ebp] fld DWORD PTR tv129[ebp] ; 103 : } pop ebp ret 0 _smoothstep ENDP compile ENDS PUBLIC _exp2 ; Function compile flags: /Ogspy compile SEGMENT _f$ = 8 ; size = 4 _exp2 PROC ; 107 : _asm fld dword ptr [f] fld DWORD PTR _f$[esp-4] ; 108 : _asm fld1 fld1 ; 109 : _asm fld st(1) fld ST(1) ; 110 : _asm fprem fprem ; 111 : _asm f2xm1 f2xm1 ; 112 : _asm faddp st(1), st faddp ST(1), ST(0) ; 113 : _asm fscale fscale ; 114 : _asm fstp st(1) fstp ST(1) ; 115 : _asm fstp dword ptr [f] fstp DWORD PTR _f$[esp-4] ; 116 : return f; fld DWORD PTR _f$[esp-4] ; 117 : } ret 0 _exp2 ENDP compile ENDS PUBLIC _ftol ; Function compile flags: /Ogspy compile SEGMENT _t$ = -4 ; size = 4 _x$ = 8 ; size = 4 _ftol PROC ; 120 : { push ecx ; 121 : int t; ; 122 : _asm fld x fld DWORD PTR _x$[esp] ; 123 : _asm fistp t fistp DWORD PTR _t$[esp+4] ; 124 : return t; mov eax, DWORD PTR _t$[esp+4] ; 125 : } pop ecx ret 0 _ftol ENDP compile ENDS PUBLIC __ftol2_sse ; Function compile flags: /Ogspy compile SEGMENT _t$18376 = -4 ; size = 4 _x$ = 8 ; size = 4 __ftol2_sse PROC ; 128 : { push ecx ; 129 : *((char*)0) = 0; // If it breaks here, it's because you have a cast to (int) somewhere. Use ftol for float-to-int casts. mov BYTE PTR ds:0, 0 ; 130 : return ftol(x); fld DWORD PTR _x$[esp] fistp DWORD PTR _t$18376[esp+4] mov eax, DWORD PTR _t$18376[esp+4] ; 131 : } pop ecx ret 0 __ftol2_sse ENDP compile ENDS PUBLIC _min ; Function compile flags: /Ogspy compile SEGMENT _a$ = 8 ; size = 4 _b$ = 12 ; size = 4 _min PROC ; 135 : if (a < b) return a; fld DWORD PTR _a$[esp-4] fld DWORD PTR _b$[esp-4] fcompp fnstsw ax test ah, 65 ; 00000041H jne SHORT $LN1@min fld DWORD PTR _a$[esp-4] ; 137 : } ret 0 $LN1@min: ; 136 : return b; fld DWORD PTR _b$[esp-4] ; 137 : } ret 0 _min ENDP compile ENDS PUBLIC _max ; Function compile flags: /Ogspy compile SEGMENT _a$ = 8 ; size = 4 _b$ = 12 ; size = 4 _max PROC ; 141 : if (a > b) return a; fld DWORD PTR _a$[esp-4] fld DWORD PTR _b$[esp-4] fcompp fnstsw ax test ah, 5 jp SHORT $LN1@max fld DWORD PTR _a$[esp-4] ; 143 : } ret 0 $LN1@max: ; 142 : return b; fld DWORD PTR _b$[esp-4] ; 143 : } ret 0 _max ENDP compile ENDS PUBLIC ??0vec4@@QAE@XZ ; vec4::vec4 ; Function compile flags: /Ogspy compile SEGMENT ??0vec4@@QAE@XZ PROC ; vec4::vec4 ; _this$ = ecx ; 148 : vec4::vec4():x(0),y(0),z(0),w(0){}; fldz mov eax, ecx fst DWORD PTR [eax] fst DWORD PTR [eax+4] fst DWORD PTR [eax+8] fstp DWORD PTR [eax+12] ret 0 ??0vec4@@QAE@XZ ENDP ; vec4::vec4 compile ENDS PUBLIC ??0vec4@@QAE@ABU0@@Z ; vec4::vec4 ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??0vec4@@QAE@ABU0@@Z PROC ; vec4::vec4 ; _this$ = ecx ; 149 : vec4::vec4(const vec4& arg):x(arg.x),y(arg.y),z(arg.z),w(arg.w){}; mov eax, ecx mov ecx, DWORD PTR _arg$[esp-4] fld DWORD PTR [ecx] fstp DWORD PTR [eax] fld DWORD PTR [ecx+4] fstp DWORD PTR [eax+4] fld DWORD PTR [ecx+8] fstp DWORD PTR [eax+8] fld DWORD PTR [ecx+12] fstp DWORD PTR [eax+12] ret 4 ??0vec4@@QAE@ABU0@@Z ENDP ; vec4::vec4 compile ENDS PUBLIC ??0vec4@@QAE@MMMM@Z ; vec4::vec4 ; Function compile flags: /Ogspy compile SEGMENT _X$ = 8 ; size = 4 _Y$ = 12 ; size = 4 _Z$ = 16 ; size = 4 _W$ = 20 ; size = 4 ??0vec4@@QAE@MMMM@Z PROC ; vec4::vec4 ; _this$ = ecx ; 150 : vec4::vec4(float X, float Y, float Z, float W):x(X),y(Y),z(Z),w(W){}; fld DWORD PTR _X$[esp-4] mov eax, ecx fstp DWORD PTR [eax] fld DWORD PTR _Y$[esp-4] fstp DWORD PTR [eax+4] fld DWORD PTR _Z$[esp-4] fstp DWORD PTR [eax+8] fld DWORD PTR _W$[esp-4] fstp DWORD PTR [eax+12] ret 16 ; 00000010H ??0vec4@@QAE@MMMM@Z ENDP ; vec4::vec4 compile ENDS PUBLIC ??0vec4@@QAE@M@Z ; vec4::vec4 ; Function compile flags: /Ogspy compile SEGMENT _a$ = 8 ; size = 4 ??0vec4@@QAE@M@Z PROC ; vec4::vec4 ; _this$ = ecx ; 151 : vec4::vec4(float a):x(a),y(a),z(a),w(0){}; fld DWORD PTR _a$[esp-4] mov eax, ecx fstp DWORD PTR [eax] fld DWORD PTR _a$[esp-4] fstp DWORD PTR [eax+4] fld DWORD PTR _a$[esp-4] fstp DWORD PTR [eax+8] fldz fstp DWORD PTR [eax+12] ret 4 ??0vec4@@QAE@M@Z ENDP ; vec4::vec4 compile ENDS PUBLIC ??0vec4@@QAE@PBM@Z ; vec4::vec4 ; Function compile flags: /Ogspy compile SEGMENT _this$ = -4 ; size = 4 _arg$ = 8 ; size = 4 ??0vec4@@QAE@PBM@Z PROC ; vec4::vec4 ; _this$ = ecx ; 152 : vec4::vec4(const float* arg){memcpy(m, arg, 16);}; push ecx push esi mov eax, ecx push edi mov DWORD PTR _this$[esp+12], eax mov esi, DWORD PTR _arg$[esp+8] mov edi, DWORD PTR _this$[esp+12] mov ecx, 16 ; 00000010H rep movsb pop edi pop esi pop ecx ret 4 ??0vec4@@QAE@PBM@Z ENDP ; vec4::vec4 compile ENDS PUBLIC ??0vec4@@QAE@ABT__m128@@@Z ; vec4::vec4 ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??0vec4@@QAE@ABT__m128@@@Z PROC ; vec4::vec4 ; _this$ = ecx ; 153 : vec4::vec4(const __m128& arg){_mm_store_ps(m, arg);}; mov eax, ecx mov ecx, DWORD PTR _arg$[esp-4] movaps xmm0, XMMWORD PTR [ecx] movaps XMMWORD PTR [eax], xmm0 ret 4 ??0vec4@@QAE@ABT__m128@@@Z ENDP ; vec4::vec4 compile ENDS PUBLIC __real@406fe00000000000 PUBLIC ?ToInt32@vec4@@QBEHXZ ; vec4::ToInt32 ; COMDAT __real@406fe00000000000 CONST SEGMENT __real@406fe00000000000 DQ 0406fe00000000000r ; 255 ; Function compile flags: /Ogspy CONST ENDS compile SEGMENT $T18407 = -16 ; size = 4 _t$18405 = -12 ; size = 4 $T18401 = -12 ; size = 4 $T18395 = -12 ; size = 4 _t$18399 = -8 ; size = 4 _t$18393 = -4 ; size = 4 ?ToInt32@vec4@@QBEHXZ PROC ; vec4::ToInt32 ; _this$ = ecx ; 156 : { push ebp mov ebp, esp sub esp, 16 ; 00000010H ; 157 : return (((ftol(255 * x) << 8) + ftol(255 * y)) << 8) + ftol(255 * z); fld DWORD PTR [ecx] fmul QWORD PTR __real@406fe00000000000 fstp DWORD PTR $T18395[ebp] fld DWORD PTR $T18395[ebp] fistp DWORD PTR _t$18393[ebp] fld DWORD PTR [ecx+4] mov eax, DWORD PTR _t$18393[ebp] fmul QWORD PTR __real@406fe00000000000 fstp DWORD PTR $T18401[ebp] fld DWORD PTR $T18401[ebp] fistp DWORD PTR _t$18399[ebp] fld DWORD PTR [ecx+8] mov edx, DWORD PTR _t$18399[ebp] fmul QWORD PTR __real@406fe00000000000 fstp DWORD PTR $T18407[ebp] fld DWORD PTR $T18407[ebp] fistp DWORD PTR _t$18405[ebp] shl eax, 8 add eax, edx shl eax, 8 add eax, DWORD PTR _t$18405[ebp] ; 158 : } leave ret 0 ?ToInt32@vec4@@QBEHXZ ENDP ; vec4::ToInt32 compile ENDS PUBLIC ??Bvec4@@QBE?AT__m128@@XZ ; vec4::operator __m128 ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 ??Bvec4@@QBE?AT__m128@@XZ PROC ; vec4::operator __m128 ; _this$ = ecx ; 162 : return _mm_load_ps(m); mov eax, DWORD PTR ___$ReturnUdt$[esp-4] movaps xmm0, XMMWORD PTR [ecx] movaps XMMWORD PTR [eax], xmm0 ; 163 : } ret 4 ??Bvec4@@QBE?AT__m128@@XZ ENDP ; vec4::operator __m128 compile ENDS PUBLIC ??Avec4@@QAEAAMH@Z ; vec4::operator[] ; Function compile flags: /Ogspy compile SEGMENT _i$ = 8 ; size = 4 ??Avec4@@QAEAAMH@Z PROC ; vec4::operator[] ; _this$ = ecx ; 167 : return m[i]; mov eax, DWORD PTR _i$[esp-4] lea eax, DWORD PTR [ecx+eax*4] ; 168 : } ret 4 ??Avec4@@QAEAAMH@Z ENDP ; vec4::operator[] compile ENDS PUBLIC ??Hvec4@@QBE?AU0@ABU0@@Z ; vec4::operator+ ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 _arg$ = 12 ; size = 4 ??Hvec4@@QBE?AU0@ABU0@@Z PROC ; vec4::operator+ ; _this$ = ecx ; 172 : return _mm_add_ps(_mm_load_ps(m), _mm_load_ps(arg.m)); mov edx, DWORD PTR _arg$[esp-4] movaps xmm0, XMMWORD PTR [edx] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] addps xmm0, XMMWORD PTR [ecx] movaps XMMWORD PTR [eax], xmm0 ; 173 : } ret 8 ??Hvec4@@QBE?AU0@ABU0@@Z ENDP ; vec4::operator+ compile ENDS PUBLIC ??Hvec4@@QBE?AU0@M@Z ; vec4::operator+ ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 _arg$ = 12 ; size = 4 ??Hvec4@@QBE?AU0@M@Z PROC ; vec4::operator+ ; _this$ = ecx ; 177 : return *this + _mm_set_ps1(arg); movss xmm0, DWORD PTR _arg$[esp-4] movaps xmm1, XMMWORD PTR [ecx] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] shufps xmm0, xmm0, 0 addps xmm1, xmm0 movaps XMMWORD PTR [eax], xmm1 ; 178 : } ret 8 ??Hvec4@@QBE?AU0@M@Z ENDP ; vec4::operator+ compile ENDS PUBLIC ??Yvec4@@QAEXABU0@@Z ; vec4::operator+= ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??Yvec4@@QAEXABU0@@Z PROC ; vec4::operator+= ; _this$ = ecx ; 182 : _mm_store_ps(m, _mm_add_ps(*this, arg)); mov eax, DWORD PTR _arg$[esp-4] movaps xmm0, XMMWORD PTR [eax] addps xmm0, XMMWORD PTR [ecx] movaps XMMWORD PTR [ecx], xmm0 ; 183 : } ret 4 ??Yvec4@@QAEXABU0@@Z ENDP ; vec4::operator+= compile ENDS PUBLIC ??Yvec4@@QAEXM@Z ; vec4::operator+= ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??Yvec4@@QAEXM@Z PROC ; vec4::operator+= ; _this$ = ecx ; 187 : *this += _mm_set_ps1(arg); movss xmm0, DWORD PTR _arg$[esp-4] movaps xmm1, XMMWORD PTR [ecx] shufps xmm0, xmm0, 0 addps xmm1, xmm0 movaps XMMWORD PTR [ecx], xmm1 ; 188 : } ret 4 ??Yvec4@@QAEXM@Z ENDP ; vec4::operator+= compile ENDS PUBLIC ??Gvec4@@QBE?AU0@ABU0@@Z ; vec4::operator- ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 _arg$ = 12 ; size = 4 ??Gvec4@@QBE?AU0@ABU0@@Z PROC ; vec4::operator- ; _this$ = ecx ; 192 : return _mm_sub_ps(*this, arg); mov edx, DWORD PTR _arg$[esp-4] movaps xmm1, XMMWORD PTR [ecx] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] subps xmm1, XMMWORD PTR [edx] movaps XMMWORD PTR [eax], xmm1 ; 193 : } ret 8 ??Gvec4@@QBE?AU0@ABU0@@Z ENDP ; vec4::operator- compile ENDS PUBLIC ??Gvec4@@QBE?AU0@M@Z ; vec4::operator- ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 _arg$ = 12 ; size = 4 ??Gvec4@@QBE?AU0@M@Z PROC ; vec4::operator- ; _this$ = ecx ; 197 : return *this - _mm_set_ps1(arg); movss xmm0, DWORD PTR _arg$[esp-4] movaps xmm1, XMMWORD PTR [ecx] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] shufps xmm0, xmm0, 0 subps xmm1, xmm0 movaps XMMWORD PTR [eax], xmm1 ; 198 : } ret 8 ??Gvec4@@QBE?AU0@M@Z ENDP ; vec4::operator- compile ENDS PUBLIC ??Zvec4@@QAEXABU0@@Z ; vec4::operator-= ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??Zvec4@@QAEXABU0@@Z PROC ; vec4::operator-= ; _this$ = ecx ; 202 : _mm_store_ps(m, _mm_sub_ps(*this, arg)); mov eax, DWORD PTR _arg$[esp-4] movaps xmm1, XMMWORD PTR [ecx] subps xmm1, XMMWORD PTR [eax] movaps XMMWORD PTR [ecx], xmm1 ; 203 : } ret 4 ??Zvec4@@QAEXABU0@@Z ENDP ; vec4::operator-= compile ENDS PUBLIC ??Zvec4@@QAEXM@Z ; vec4::operator-= ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??Zvec4@@QAEXM@Z PROC ; vec4::operator-= ; _this$ = ecx ; 207 : *this -= _mm_set_ps1(arg); movss xmm0, DWORD PTR _arg$[esp-4] movaps xmm1, XMMWORD PTR [ecx] shufps xmm0, xmm0, 0 subps xmm1, xmm0 movaps XMMWORD PTR [ecx], xmm1 ; 208 : } ret 4 ??Zvec4@@QAEXM@Z ENDP ; vec4::operator-= compile ENDS PUBLIC ??Dvec4@@QBE?AU0@ABU0@@Z ; vec4::operator* ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 _arg$ = 12 ; size = 4 ??Dvec4@@QBE?AU0@ABU0@@Z PROC ; vec4::operator* ; _this$ = ecx ; 212 : return _mm_mul_ps(*this, arg); mov edx, DWORD PTR _arg$[esp-4] movaps xmm0, XMMWORD PTR [edx] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] mulps xmm0, XMMWORD PTR [ecx] movaps XMMWORD PTR [eax], xmm0 ; 213 : } ret 8 ??Dvec4@@QBE?AU0@ABU0@@Z ENDP ; vec4::operator* compile ENDS PUBLIC ??Dvec4@@QBE?AU0@M@Z ; vec4::operator* ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 _arg$ = 12 ; size = 4 ??Dvec4@@QBE?AU0@M@Z PROC ; vec4::operator* ; _this$ = ecx ; 217 : return *this * _mm_set_ps1(arg); movss xmm0, DWORD PTR _arg$[esp-4] movaps xmm1, XMMWORD PTR [ecx] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] shufps xmm0, xmm0, 0 mulps xmm1, xmm0 movaps XMMWORD PTR [eax], xmm1 ; 218 : } ret 8 ??Dvec4@@QBE?AU0@M@Z ENDP ; vec4::operator* compile ENDS PUBLIC ??Xvec4@@QAEXABU0@@Z ; vec4::operator*= ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??Xvec4@@QAEXABU0@@Z PROC ; vec4::operator*= ; _this$ = ecx ; 222 : _mm_store_ps(m, _mm_mul_ps(*this, arg)); mov eax, DWORD PTR _arg$[esp-4] movaps xmm0, XMMWORD PTR [eax] mulps xmm0, XMMWORD PTR [ecx] movaps XMMWORD PTR [ecx], xmm0 ; 223 : } ret 4 ??Xvec4@@QAEXABU0@@Z ENDP ; vec4::operator*= compile ENDS PUBLIC ??Xvec4@@QAEXM@Z ; vec4::operator*= ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??Xvec4@@QAEXM@Z PROC ; vec4::operator*= ; _this$ = ecx ; 227 : *this *= _mm_set_ps1(arg); movss xmm0, DWORD PTR _arg$[esp-4] movaps xmm1, XMMWORD PTR [ecx] shufps xmm0, xmm0, 0 mulps xmm1, xmm0 movaps XMMWORD PTR [ecx], xmm1 ; 228 : } ret 4 ??Xvec4@@QAEXM@Z ENDP ; vec4::operator*= compile ENDS PUBLIC __real@3ff0000000000000 PUBLIC ??Kvec4@@QBE?AU0@M@Z ; vec4::operator/ ; COMDAT __real@3ff0000000000000 CONST SEGMENT __real@3ff0000000000000 DQ 03ff0000000000000r ; 1 ; Function compile flags: /Ogspy CONST ENDS compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 tv136 = 12 ; size = 4 tv134 = 12 ; size = 4 _arg$ = 12 ; size = 4 ??Kvec4@@QBE?AU0@M@Z PROC ; vec4::operator/ ; _this$ = ecx ; 232 : return *this * _mm_set_ps1(1.0f / arg); fld DWORD PTR _arg$[esp-4] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] fld1 fdivrp ST(1), ST(0) fstp DWORD PTR tv136[esp-4] fld DWORD PTR tv136[esp-4] fstp DWORD PTR tv134[esp-4] movss xmm0, DWORD PTR tv134[esp-4] movaps xmm1, XMMWORD PTR [ecx] shufps xmm0, xmm0, 0 mulps xmm1, xmm0 movaps XMMWORD PTR [eax], xmm1 ; 233 : } ret 8 ??Kvec4@@QBE?AU0@M@Z ENDP ; vec4::operator/ compile ENDS PUBLIC ??_0vec4@@QAEXM@Z ; vec4::operator/= ; Function compile flags: /Ogspy compile SEGMENT tv136 = 8 ; size = 4 tv134 = 8 ; size = 4 _arg$ = 8 ; size = 4 ??_0vec4@@QAEXM@Z PROC ; vec4::operator/= ; _this$ = ecx ; 237 : *this *= _mm_set_ps1(1.0f / arg); fld DWORD PTR _arg$[esp-4] fld1 fdivrp ST(1), ST(0) fstp DWORD PTR tv136[esp-4] fld DWORD PTR tv136[esp-4] fstp DWORD PTR tv134[esp-4] movss xmm0, DWORD PTR tv134[esp-4] movaps xmm1, XMMWORD PTR [ecx] shufps xmm0, xmm0, 0 mulps xmm1, xmm0 movaps XMMWORD PTR [ecx], xmm1 ; 238 : } ret 4 ??_0vec4@@QAEXM@Z ENDP ; vec4::operator/= compile ENDS PUBLIC ??Gvec4@@QBE?AU0@XZ ; vec4::operator- CONST SEGMENT __xmm@0 DB 00H, 00H, 080H, 0bfH, 00H, 00H, 080H, 0bfH, 00H, 00H, 080H DB 0bfH, 00H, 00H, 080H, 0bfH ; Function compile flags: /Ogspy CONST ENDS compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 ??Gvec4@@QBE?AU0@XZ PROC ; vec4::operator- ; _this$ = ecx ; 242 : return *this * -1.0f; movaps xmm1, XMMWORD PTR [ecx] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] mulps xmm1, XMMWORD PTR __xmm@0 movaps XMMWORD PTR [eax], xmm1 ; 243 : } ret 4 ??Gvec4@@QBE?AU0@XZ ENDP ; vec4::operator- compile ENDS PUBLIC ?dot@@YAMABUvec4@@0@Z ; dot ; Function compile flags: /Ogspy compile SEGMENT _temp$ = -16 ; size = 16 _arg1$ = 8 ; size = 4 _arg2$ = 12 ; size = 4 ?dot@@YAMABUvec4@@0@Z PROC ; dot ; 251 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 16 ; 00000010H ; 252 : __m128 temp = _mm_mul_ps(arg1, arg2); mov eax, DWORD PTR _arg1$[ebp] movaps xmm0, XMMWORD PTR [eax] mov eax, DWORD PTR _arg2$[ebp] mulps xmm0, XMMWORD PTR [eax] ; 253 : temp = _mm_hadd_ps(temp, temp); haddps xmm0, xmm0 ; 254 : temp = _mm_hadd_ps(temp, temp); haddps xmm0, xmm0 movaps XMMWORD PTR _temp$[esp+16], xmm0 ; 255 : return temp.m128_f32[0]; fld DWORD PTR _temp$[esp+16] ; 256 : } mov esp, ebp pop ebp ret 0 ?dot@@YAMABUvec4@@0@Z ENDP ; dot compile ENDS PUBLIC ?length@@YAMAAUvec4@@@Z ; length ; Function compile flags: /Ogspy compile SEGMENT $T18733 = -4 ; size = 4 $T18732 = -4 ; size = 4 _arg$ = 8 ; size = 4 ?length@@YAMAAUvec4@@@Z PROC ; length ; 259 : { push ebp mov ebp, esp push ecx ; 260 : return sqrt(dot(arg, arg)); push DWORD PTR _arg$[ebp] push DWORD PTR _arg$[ebp] call ?dot@@YAMABUvec4@@0@Z ; dot fstp DWORD PTR $T18732[ebp] add esp, 8 fld DWORD PTR $T18732[ebp] fsqrt fstp DWORD PTR $T18733[ebp] fld DWORD PTR $T18733[ebp] ; 261 : } leave ret 0 ?length@@YAMAAUvec4@@@Z ENDP ; length compile ENDS PUBLIC ?normalize@@YA?AUvec4@@ABU1@@Z ; normalize ; Function compile flags: /Ogspy compile SEGMENT tv135 = -4 ; size = 4 ___$ReturnUdt$ = 8 ; size = 4 _arg$ = 12 ; size = 4 ?normalize@@YA?AUvec4@@ABU1@@Z PROC ; normalize ; 264 : { push ecx ; 265 : return arg * _mm_rsqrt_ss(_mm_set_ps1(dot(arg,arg))).m128_f32[0]; mov ecx, DWORD PTR _arg$[esp] push ecx push ecx call ?dot@@YAMABUvec4@@0@Z ; dot fstp DWORD PTR tv135[esp+12] movss xmm0, DWORD PTR tv135[esp+12] movaps xmm1, XMMWORD PTR [ecx] mov eax, DWORD PTR ___$ReturnUdt$[esp+8] shufps xmm0, xmm0, 0 rsqrtss xmm0, xmm0 shufps xmm0, xmm0, 0 mulps xmm1, xmm0 movaps XMMWORD PTR [eax], xmm1 ; 266 : } add esp, 12 ; 0000000cH ret 0 ?normalize@@YA?AUvec4@@ABU1@@Z ENDP ; normalize compile ENDS PUBLIC ?mix@@YA?AUvec4@@AAU1@0M@Z ; mix ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 _arg1$ = 12 ; size = 4 _arg2$ = 16 ; size = 4 $T18880 = 20 ; size = 4 _t$ = 20 ; size = 4 ?mix@@YA?AUvec4@@AAU1@0M@Z PROC ; mix ; 270 : return arg1 * (1.0f - t) + arg2 * t; fld DWORD PTR _t$[esp-4] movss xmm0, DWORD PTR _t$[esp-4] fld1 mov eax, DWORD PTR _arg2$[esp-4] shufps xmm0, xmm0, 0 fsubrp ST(1), ST(0) movaps xmm1, xmm0 movaps xmm0, XMMWORD PTR [eax] mov eax, DWORD PTR _arg1$[esp-4] mulps xmm0, xmm1 fstp DWORD PTR $T18880[esp-4] movss xmm1, DWORD PTR $T18880[esp-4] shufps xmm1, xmm1, 0 movaps xmm2, xmm1 movaps xmm1, XMMWORD PTR [eax] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] mulps xmm1, xmm2 addps xmm1, xmm0 movaps XMMWORD PTR [eax], xmm1 ; 271 : } ret 0 ?mix@@YA?AUvec4@@AAU1@0M@Z ENDP ; mix compile ENDS PUBLIC ?clamp@@YA?AUvec4@@AAU1@MM@Z ; clamp ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 _arg$ = 12 ; size = 4 _lo$ = 16 ; size = 4 _hi$ = 20 ; size = 4 ?clamp@@YA?AUvec4@@AAU1@MM@Z PROC ; clamp ; 275 : return _mm_max_ps(_mm_min_ps(arg, _mm_set_ps1(hi)), _mm_set_ps1(lo)); mov ecx, DWORD PTR _arg$[esp-4] movaps xmm1, XMMWORD PTR [ecx] movss xmm0, DWORD PTR _hi$[esp-4] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] shufps xmm0, xmm0, 0 minps xmm1, xmm0 movss xmm0, DWORD PTR _lo$[esp-4] shufps xmm0, xmm0, 0 maxps xmm1, xmm0 movaps XMMWORD PTR [eax], xmm1 ; 276 : } ret 0 ?clamp@@YA?AUvec4@@AAU1@MM@Z ENDP ; clamp compile ENDS PUBLIC ?clamp@@YAMMMM@Z ; clamp ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 _lo$ = 12 ; size = 4 _hi$ = 16 ; size = 4 ?clamp@@YAMMMM@Z PROC ; clamp ; 280 : return max(min(arg, hi), lo); fld DWORD PTR _lo$[esp-4] sub esp, 12 ; 0000000cH fstp DWORD PTR [esp+8] fld DWORD PTR _hi$[esp+8] fstp DWORD PTR [esp+4] fld DWORD PTR _arg$[esp+8] fstp DWORD PTR [esp] call _min add esp, 4 fstp DWORD PTR [esp] call _max add esp, 8 ; 281 : } ret 0 ?clamp@@YAMMMM@Z ENDP ; clamp compile ENDS PUBLIC ?reflect@@YA?AUvec4@@AAU1@0@Z ; reflect CONST SEGMENT __xmm@1 DB 00H, 00H, 00H, '@', 00H, 00H, 00H, '@', 00H, 00H, 00H, '@' DB 00H, 00H, 00H, '@' ; Function compile flags: /Ogspy CONST ENDS compile SEGMENT $T18999 = -4 ; size = 4 ___$ReturnUdt$ = 8 ; size = 4 _arg1$ = 12 ; size = 4 _arg2$ = 16 ; size = 4 ?reflect@@YA?AUvec4@@AAU1@0@Z PROC ; reflect ; 284 : { push ecx ; 285 : return arg1 - arg2 * 2.0f * dot(arg2, arg1); mov eax, DWORD PTR _arg2$[esp] mov ecx, DWORD PTR _arg1$[esp] movaps xmm1, XMMWORD PTR [eax] mulps xmm1, XMMWORD PTR __xmm@1 push ecx push eax call ?dot@@YAMABUvec4@@0@Z ; dot fstp DWORD PTR $T18999[esp+12] movss xmm0, DWORD PTR $T18999[esp+12] mov eax, DWORD PTR ___$ReturnUdt$[esp+8] shufps xmm0, xmm0, 0 mulps xmm1, xmm0 movaps xmm0, XMMWORD PTR [ecx] subps xmm0, xmm1 movaps XMMWORD PTR [eax], xmm0 ; 286 : } add esp, 12 ; 0000000cH ret 0 ?reflect@@YA?AUvec4@@AAU1@0@Z ENDP ; reflect compile ENDS PUBLIC ?cross@@YA?AUvec4@@AAU1@0@Z ; cross ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 _va$ = 12 ; size = 4 _vb$ = 16 ; size = 4 ?cross@@YA?AUvec4@@AAU1@0@Z PROC ; cross ; 290 : __m128 a = va; mov eax, DWORD PTR _va$[esp-4] movaps xmm0, XMMWORD PTR [eax] ; 291 : __m128 b = vb; mov eax, DWORD PTR _vb$[esp-4] movaps xmm1, XMMWORD PTR [eax] ; 292 : __m128 ea = _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 0, 2, 1)); ; 293 : __m128 eb = _mm_shuffle_ps(b, b, _MM_SHUFFLE(3, 1, 0, 2)); ; 294 : __m128 xa = _mm_mul_ps(ea, eb); ; 295 : a = _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 1, 0, 2)); ; 296 : b = _mm_shuffle_ps(b, b, _MM_SHUFFLE(3, 0, 2, 1)); ; 297 : __m128 xb = _mm_mul_ps(a, b); ; 298 : return _mm_sub_ps(xa, xb); mov eax, DWORD PTR ___$ReturnUdt$[esp-4] movaps xmm2, xmm1 shufps xmm2, xmm1, 201 ; 000000c9H movaps xmm3, xmm0 shufps xmm3, xmm0, 210 ; 000000d2H shufps xmm1, xmm1, 210 ; 000000d2H shufps xmm0, xmm0, 201 ; 000000c9H mulps xmm2, xmm3 mulps xmm1, xmm0 subps xmm1, xmm2 movaps XMMWORD PTR [eax], xmm1 ; 299 : } ret 0 ?cross@@YA?AUvec4@@AAU1@0@Z ENDP ; cross compile ENDS PUBLIC ??0Quaternion@@QAE@XZ ; Quaternion::Quaternion ; Function compile flags: /Ogspy compile SEGMENT ??0Quaternion@@QAE@XZ PROC ; Quaternion::Quaternion ; _this$ = ecx ; 306 : { fldz mov eax, ecx fst DWORD PTR [eax] fst DWORD PTR [eax+4] fstp DWORD PTR [eax+8] fld1 fstp DWORD PTR [eax+12] ; 307 : }; ret 0 ??0Quaternion@@QAE@XZ ENDP ; Quaternion::Quaternion compile ENDS PUBLIC ??0Quaternion@@QAE@ABU0@@Z ; Quaternion::Quaternion ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??0Quaternion@@QAE@ABU0@@Z PROC ; Quaternion::Quaternion ; _this$ = ecx ; 314 : { mov eax, ecx mov ecx, DWORD PTR _arg$[esp-4] fld DWORD PTR [ecx] fstp DWORD PTR [eax] fld DWORD PTR [ecx+4] fstp DWORD PTR [eax+4] fld DWORD PTR [ecx+8] fstp DWORD PTR [eax+8] fld DWORD PTR [ecx+12] fstp DWORD PTR [eax+12] ; 315 : }; ret 4 ??0Quaternion@@QAE@ABU0@@Z ENDP ; Quaternion::Quaternion compile ENDS PUBLIC ??0Quaternion@@QAE@PBM@Z ; Quaternion::Quaternion ; Function compile flags: /Ogspy compile SEGMENT _this$ = -4 ; size = 4 _M$ = 8 ; size = 4 ??0Quaternion@@QAE@PBM@Z PROC ; Quaternion::Quaternion ; _this$ = ecx ; 318 : { push ecx push esi mov eax, ecx push edi mov DWORD PTR _this$[esp+12], eax ; 319 : memcpy(m, M, 4 * sizeof(float)); mov esi, DWORD PTR _M$[esp+8] mov edi, DWORD PTR _this$[esp+12] mov ecx, 16 ; 00000010H rep movsb pop edi pop esi ; 320 : }; pop ecx ret 4 ??0Quaternion@@QAE@PBM@Z ENDP ; Quaternion::Quaternion compile ENDS PUBLIC ??BQuaternion@@QBE?AT__m128@@XZ ; Quaternion::operator __m128 ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 ??BQuaternion@@QBE?AT__m128@@XZ PROC ; Quaternion::operator __m128 ; _this$ = ecx ; 324 : return _mm_load_ps(m); mov eax, DWORD PTR ___$ReturnUdt$[esp-4] movaps xmm0, XMMWORD PTR [ecx] movaps XMMWORD PTR [eax], xmm0 ; 325 : } ret 4 ??BQuaternion@@QBE?AT__m128@@XZ ENDP ; Quaternion::operator __m128 compile ENDS PUBLIC ??0Quaternion@@QAE@ABT__m128@@@Z ; Quaternion::Quaternion ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??0Quaternion@@QAE@ABT__m128@@@Z PROC ; Quaternion::Quaternion ; _this$ = ecx ; 345 : { mov eax, ecx ; 346 : _mm_store_ps(m, arg); mov ecx, DWORD PTR _arg$[esp-4] movaps xmm0, XMMWORD PTR [ecx] movaps XMMWORD PTR [eax], xmm0 ; 347 : }; ret 4 ??0Quaternion@@QAE@ABT__m128@@@Z ENDP ; Quaternion::Quaternion compile ENDS PUBLIC ??BQuaternion@@QAEPAMXZ ; Quaternion::operator float * ; Function compile flags: /Ogspy compile SEGMENT ??BQuaternion@@QAEPAMXZ PROC ; Quaternion::operator float * ; _this$ = ecx ; 350 : { mov eax, ecx ; 351 : return m; ; 352 : } ret 0 ??BQuaternion@@QAEPAMXZ ENDP ; Quaternion::operator float * compile ENDS PUBLIC ??DQuaternion@@QBE?AU0@ABU0@@Z ; Quaternion::operator* ; Function compile flags: /Ogspy compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 tv332 = 12 ; size = 4 tv323 = 12 ; size = 4 tv312 = 12 ; size = 4 tv311 = 12 ; size = 4 tv309 = 12 ; size = 4 tv305 = 12 ; size = 4 tv302 = 12 ; size = 4 tv298 = 12 ; size = 4 _arg$ = 12 ; size = 4 ??DQuaternion@@QBE?AU0@ABU0@@Z PROC ; Quaternion::operator* ; _this$ = ecx ; 356 : return _mm_set_ps( ; 357 : x * -arg.x - y * arg.y - z * arg.z * w * arg.w, ; 358 : x * -arg.y + y * arg.x + z * arg.w - w * arg.z, ; 359 : x * -arg.z - y * arg.w + z * arg.x + w * arg.y, ; 360 : x * -arg.w + y * arg.z - z * arg.y + w * arg.x); mov edx, DWORD PTR _arg$[esp-4] fld DWORD PTR [edx] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] fchs fmul DWORD PTR [ecx] fld DWORD PTR [edx+4] fmul DWORD PTR [ecx+4] fsubp ST(1), ST(0) fld DWORD PTR [edx+8] fmul DWORD PTR [ecx+8] fmul DWORD PTR [ecx+12] fmul DWORD PTR [edx+12] fsubp ST(1), ST(0) fstp DWORD PTR tv332[esp-4] fld DWORD PTR tv332[esp-4] fstp DWORD PTR tv309[esp-4] movss xmm0, DWORD PTR tv309[esp-4] fld DWORD PTR [edx] fmul DWORD PTR [ecx+4] fld DWORD PTR [ecx] fmul DWORD PTR [edx+4] fsubp ST(1), ST(0) fld DWORD PTR [ecx+8] fmul DWORD PTR [edx+12] faddp ST(1), ST(0) fld DWORD PTR [ecx+12] fmul DWORD PTR [edx+8] fsubp ST(1), ST(0) fstp DWORD PTR tv323[esp-4] fld DWORD PTR tv323[esp-4] fstp DWORD PTR tv305[esp-4] movss xmm1, DWORD PTR tv305[esp-4] fld DWORD PTR [ecx+8] fmul DWORD PTR [edx] fld DWORD PTR [edx+8] fmul DWORD PTR [ecx] fld DWORD PTR [edx+12] fmul DWORD PTR [ecx+4] faddp ST(1), ST(0) fsubp ST(1), ST(0) fld DWORD PTR [ecx+12] fmul DWORD PTR [edx+4] faddp ST(1), ST(0) fstp DWORD PTR tv312[esp-4] fld DWORD PTR tv312[esp-4] fstp DWORD PTR tv302[esp-4] movss xmm2, DWORD PTR tv302[esp-4] fld DWORD PTR [edx+8] fmul DWORD PTR [ecx+4] fld DWORD PTR [ecx] fmul DWORD PTR [edx+12] fsubp ST(1), ST(0) unpcklps xmm2, xmm0 fld DWORD PTR [ecx+8] fmul DWORD PTR [edx+4] fsubp ST(1), ST(0) fld DWORD PTR [ecx+12] fmul DWORD PTR [edx] faddp ST(1), ST(0) fstp DWORD PTR tv311[esp-4] fld DWORD PTR tv311[esp-4] fstp DWORD PTR tv298[esp-4] movss xmm3, DWORD PTR tv298[esp-4] unpcklps xmm3, xmm1 unpcklps xmm3, xmm2 movaps XMMWORD PTR [eax], xmm3 ; 361 : } ret 8 ??DQuaternion@@QBE?AU0@ABU0@@Z ENDP ; Quaternion::operator* compile ENDS PUBLIC __mask@@NegFloat@ PUBLIC ??GQuaternion@@QBE?AU0@XZ ; Quaternion::operator- ; COMDAT __mask@@NegFloat@ CONST SEGMENT __mask@@NegFloat@ DB 00H, 00H, 00H, 080H, 00H, 00H, 00H, 080H, 00H, 00H, 00H DB 080H, 00H, 00H, 00H, 080H ; Function compile flags: /Ogspy CONST ENDS compile SEGMENT ___$ReturnUdt$ = 8 ; size = 4 ??GQuaternion@@QBE?AU0@XZ PROC ; Quaternion::operator- ; _this$ = ecx ; 365 : return _mm_set_ps(-x, -y, -z, -w); movss xmm0, DWORD PTR __mask@@NegFloat@ movss xmm1, DWORD PTR [ecx] movss xmm2, DWORD PTR [ecx+4] movss xmm3, DWORD PTR [ecx+8] movss xmm4, DWORD PTR [ecx+12] mov eax, DWORD PTR ___$ReturnUdt$[esp-4] xorps xmm4, xmm0 xorps xmm1, xmm0 xorps xmm2, xmm0 xorps xmm3, xmm0 unpcklps xmm4, xmm2 unpcklps xmm3, xmm1 unpcklps xmm4, xmm3 movaps XMMWORD PTR [eax], xmm4 ; 366 : } ret 4 ??GQuaternion@@QBE?AU0@XZ ENDP ; Quaternion::operator- compile ENDS PUBLIC ??XQuaternion@@QAEXABU0@@Z ; Quaternion::operator*= ; Function compile flags: /Ogspy compile SEGMENT $T18094 = -16 ; size = 16 _arg$ = 8 ; size = 4 ??XQuaternion@@QAEXABU0@@Z PROC ; Quaternion::operator*= ; _this$ = ecx ; 369 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 16 ; 00000010H ; 370 : _mm_store_ps(m, *this * arg); push DWORD PTR _arg$[ebp] lea eax, DWORD PTR $T18094[esp+20] push eax call ??DQuaternion@@QBE?AU0@ABU0@@Z ; Quaternion::operator* movaps xmm0, XMMWORD PTR [eax] movaps XMMWORD PTR [ecx], xmm0 ; 371 : } mov esp, ebp pop ebp ret 4 ??XQuaternion@@QAEXABU0@@Z ENDP ; Quaternion::operator*= compile ENDS PUBLIC ??YQuaternion@@QAEXABU0@@Z ; Quaternion::operator+= ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??YQuaternion@@QAEXABU0@@Z PROC ; Quaternion::operator+= ; _this$ = ecx ; 375 : _mm_store_ps(m, _mm_add_ps(*this, arg)); mov eax, DWORD PTR _arg$[esp-4] movaps xmm0, XMMWORD PTR [eax] addps xmm0, XMMWORD PTR [ecx] movaps XMMWORD PTR [ecx], xmm0 ; 376 : } ret 4 ??YQuaternion@@QAEXABU0@@Z ENDP ; Quaternion::operator+= compile ENDS PUBLIC ?rotate@Quaternion@@QAEXABU1@@Z ; Quaternion::rotate ; Function compile flags: /Ogspy compile SEGMENT $T18109 = -32 ; size = 16 $T18107 = -32 ; size = 16 $T18108 = -16 ; size = 16 _arg$ = 8 ; size = 4 ?rotate@Quaternion@@QAEXABU1@@Z PROC ; Quaternion::rotate ; _this$ = ecx ; 379 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 44 ; 0000002cH ; 380 : _mm_store_ps(m, -arg * *this * arg); mov eax, DWORD PTR _arg$[ebp] movss xmm1, DWORD PTR [eax] movss xmm0, DWORD PTR __mask@@NegFloat@ movss xmm2, DWORD PTR [eax+4] movss xmm3, DWORD PTR [eax+8] movss xmm4, DWORD PTR [eax+12] push esi push eax xorps xmm4, xmm0 xorps xmm1, xmm0 xorps xmm2, xmm0 xorps xmm3, xmm0 lea eax, DWORD PTR $T18109[esp+52] push eax mov esi, ecx push esi lea eax, DWORD PTR $T18108[esp+60] unpcklps xmm4, xmm2 unpcklps xmm3, xmm1 unpcklps xmm4, xmm3 push eax lea ecx, DWORD PTR $T18107[esp+64] movaps XMMWORD PTR $T18107[esp+64], xmm4 call ??DQuaternion@@QBE?AU0@ABU0@@Z ; Quaternion::operator* mov ecx, eax call ??DQuaternion@@QBE?AU0@ABU0@@Z ; Quaternion::operator* movaps xmm0, XMMWORD PTR [eax] movaps XMMWORD PTR [esi], xmm0 ; 381 : } pop esi mov esp, ebp pop ebp ret 4 ?rotate@Quaternion@@QAEXABU1@@Z ENDP ; Quaternion::rotate compile ENDS PUBLIC ?lengthSquared@Quaternion@@QBEMXZ ; Quaternion::lengthSquared ; Function compile flags: /Ogspy compile SEGMENT _temp$ = -16 ; size = 16 ?lengthSquared@Quaternion@@QBEMXZ PROC ; Quaternion::lengthSquared ; _this$ = ecx ; 384 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 16 ; 00000010H ; 385 : __m128 temp = _mm_mul_ps(*this, *this); movaps xmm0, XMMWORD PTR [ecx] mulps xmm0, xmm0 ; 386 : temp = _mm_hadd_ps(temp, temp); haddps xmm0, xmm0 ; 387 : temp = _mm_hadd_ps(temp, temp); haddps xmm0, xmm0 movaps XMMWORD PTR _temp$[esp+16], xmm0 ; 388 : return temp.m128_f32[0]; fld DWORD PTR _temp$[esp+16] ; 389 : } mov esp, ebp pop ebp ret 0 ?lengthSquared@Quaternion@@QBEMXZ ENDP ; Quaternion::lengthSquared compile ENDS PUBLIC ?length@Quaternion@@QBEMXZ ; Quaternion::length ; Function compile flags: /Ogspy compile SEGMENT $T19124 = -20 ; size = 4 _temp$19115 = -16 ; size = 16 ?length@Quaternion@@QBEMXZ PROC ; Quaternion::length ; _this$ = ecx ; 392 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 32 ; 00000020H ; 393 : return sqrt(lengthSquared()); movaps xmm0, XMMWORD PTR [ecx] mulps xmm0, xmm0 haddps xmm0, xmm0 haddps xmm0, xmm0 movaps XMMWORD PTR _temp$19115[esp+32], xmm0 fld DWORD PTR _temp$19115[esp+32] fsqrt fstp DWORD PTR $T19124[esp+32] fld DWORD PTR $T19124[esp+32] ; 394 : } mov esp, ebp pop ebp ret 0 ?length@Quaternion@@QBEMXZ ENDP ; Quaternion::length compile ENDS PUBLIC ?normalize@Quaternion@@QAEXXZ ; Quaternion::normalize ; Function compile flags: /Ogspy compile SEGMENT tv171 = -20 ; size = 4 _temp$19143 = -16 ; size = 16 ?normalize@Quaternion@@QAEXXZ PROC ; Quaternion::normalize ; _this$ = ecx ; 397 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 32 ; 00000020H ; 398 : _mm_store_ps(m, _mm_mul_ps(*this, _mm_set_ps1(_mm_rsqrt_ss(_mm_set_ps1(lengthSquared())).m128_f32[0]))); movaps xmm1, XMMWORD PTR [ecx] movaps xmm0, xmm1 mulps xmm0, xmm1 haddps xmm0, xmm0 haddps xmm0, xmm0 movaps XMMWORD PTR _temp$19143[esp+32], xmm0 fld DWORD PTR _temp$19143[esp+32] fstp DWORD PTR tv171[esp+32] movss xmm0, DWORD PTR tv171[esp+32] shufps xmm0, xmm0, 0 rsqrtss xmm0, xmm0 shufps xmm0, xmm0, 0 mulps xmm0, xmm1 movaps XMMWORD PTR [ecx], xmm0 ; 399 : } mov esp, ebp pop ebp ret 0 ?normalize@Quaternion@@QAEXXZ ENDP ; Quaternion::normalize compile ENDS PUBLIC ??0Matrix@@QAE@XZ ; Matrix::Matrix ; Function compile flags: /Ogspy compile SEGMENT ??0Matrix@@QAE@XZ PROC ; Matrix::Matrix ; _this$ = ecx ; 406 : { fld1 mov eax, ecx fst DWORD PTR [eax] fldz fst DWORD PTR [eax+4] fst DWORD PTR [eax+8] fst DWORD PTR [eax+12] fst DWORD PTR [eax+16] fst DWORD PTR [eax+24] fst DWORD PTR [eax+28] fxch ST(1) fst DWORD PTR [eax+20] fxch ST(1) fst DWORD PTR [eax+32] fst DWORD PTR [eax+36] fst DWORD PTR [eax+44] fxch ST(1) fst DWORD PTR [eax+40] fxch ST(1) fst DWORD PTR [eax+48] fst DWORD PTR [eax+52] fstp DWORD PTR [eax+56] fstp DWORD PTR [eax+60] ; 407 : }; ret 0 ??0Matrix@@QAE@XZ ENDP ; Matrix::Matrix compile ENDS PUBLIC ??0Matrix@@QAE@ABU0@@Z ; Matrix::Matrix ; Function compile flags: /Ogspy compile SEGMENT _arg$ = 8 ; size = 4 ??0Matrix@@QAE@ABU0@@Z PROC ; Matrix::Matrix ; _this$ = ecx ; 414 : { push esi mov esi, DWORD PTR _arg$[esp] push esi mov edx, ecx call ??0vec4@@QAE@ABU0@@Z ; vec4::vec4 lea eax, DWORD PTR [esi+16] push eax lea ecx, DWORD PTR [edx+16] call ??0vec4@@QAE@ABU0@@Z ; vec4::vec4 lea eax, DWORD PTR [esi+32] push eax lea ecx, DWORD PTR [edx+32] call ??0vec4@@QAE@ABU0@@Z ; vec4::vec4 add esi, 48 ; 00000030H push esi lea ecx, DWORD PTR [edx+48] call ??0vec4@@QAE@ABU0@@Z ; vec4::vec4 ; 415 : }; mov eax, edx pop esi ret 4 ??0Matrix@@QAE@ABU0@@Z ENDP ; Matrix::Matrix compile ENDS PUBLIC ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix ; Function compile flags: /Ogspy compile SEGMENT _R1$ = 8 ; size = 4 _R2$ = 12 ; size = 4 _R3$ = 16 ; size = 4 _R4$ = 20 ; size = 4 ??0Matrix@@QAE@ABUvec4@@000@Z PROC ; Matrix::Matrix ; _this$ = ecx ; 422 : { push DWORD PTR _R1$[esp-4] mov edx, ecx call ??0vec4@@QAE@ABU0@@Z ; vec4::vec4 push DWORD PTR _R2$[esp-4] lea ecx, DWORD PTR [edx+16] call ??0vec4@@QAE@ABU0@@Z ; vec4::vec4 push DWORD PTR _R3$[esp-4] lea ecx, DWORD PTR [edx+32] call ??0vec4@@QAE@ABU0@@Z ; vec4::vec4 push DWORD PTR _R4$[esp-4] lea ecx, DWORD PTR [edx+48] call ??0vec4@@QAE@ABU0@@Z ; vec4::vec4 ; 423 : }; mov eax, edx ret 16 ; 00000010H ??0Matrix@@QAE@ABUvec4@@000@Z ENDP ; Matrix::Matrix compile ENDS PUBLIC ??0Matrix@@QAE@PBM@Z ; Matrix::Matrix ; Function compile flags: /Ogspy compile SEGMENT _M$ = 8 ; size = 4 ??0Matrix@@QAE@PBM@Z PROC ; Matrix::Matrix ; _this$ = ecx ; 430 : { push esi mov esi, DWORD PTR _M$[esp] push esi mov edx, ecx call ??0vec4@@QAE@PBM@Z ; vec4::vec4 lea eax, DWORD PTR [esi+16] push eax lea ecx, DWORD PTR [edx+16] call ??0vec4@@QAE@PBM@Z ; vec4::vec4 lea eax, DWORD PTR [esi+32] push eax lea ecx, DWORD PTR [edx+32] call ??0vec4@@QAE@PBM@Z ; vec4::vec4 add esi, 48 ; 00000030H push esi lea ecx, DWORD PTR [edx+48] call ??0vec4@@QAE@PBM@Z ; vec4::vec4 ; 431 : }; mov eax, edx pop esi ret 4 ??0Matrix@@QAE@PBM@Z ENDP ; Matrix::Matrix compile ENDS PUBLIC ??0Matrix@@QAE@ABUQuaternion@@@Z ; Matrix::Matrix ; Function compile flags: /Ogspy compile SEGMENT _wy$ = -68 ; size = 4 _y2$ = -68 ; size = 4 _wz$ = -64 ; size = 4 _x2$ = -64 ; size = 4 _xy$ = -60 ; size = 4 _zz$ = -56 ; size = 4 _xz$ = -52 ; size = 4 _wx$ = -48 ; size = 4 _yz$ = -44 ; size = 4 _yy$ = -40 ; size = 4 _z2$ = -40 ; size = 4 _xx$ = -36 ; size = 4 $T18171 = -32 ; size = 16 $T18170 = -32 ; size = 16 $T18169 = -32 ; size = 16 $T18168 = -32 ; size = 16 _lQuaterion$ = -32 ; size = 16 _temp$19217 = -16 ; size = 16 _aQuaternion$ = 8 ; size = 4 ??0Matrix@@QAE@ABUQuaternion@@@Z PROC ; Matrix::Matrix ; _this$ = ecx ; 434 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 68 ; 00000044H fldz ; 435 : Quaternion lQuaterion(aQuaternion); mov eax, DWORD PTR _aQuaternion$[ebp] mov edx, ecx fst DWORD PTR [edx] fst DWORD PTR [edx+4] push ebx fst DWORD PTR [edx+8] push esi fst DWORD PTR [edx+12] push edi fst DWORD PTR [edx+16] fst DWORD PTR [edx+20] fst DWORD PTR [edx+24] fst DWORD PTR [edx+28] fst DWORD PTR [edx+32] fst DWORD PTR [edx+36] fst DWORD PTR [edx+40] fst DWORD PTR [edx+44] fst DWORD PTR [edx+48] fst DWORD PTR [edx+52] fst DWORD PTR [edx+56] fst DWORD PTR [edx+60] fld DWORD PTR [eax] fstp DWORD PTR _lQuaterion$[esp+80] fld DWORD PTR [eax+4] fstp DWORD PTR _lQuaterion$[esp+84] fld DWORD PTR [eax+8] fstp DWORD PTR _lQuaterion$[esp+88] fld DWORD PTR [eax+12] fstp DWORD PTR _lQuaterion$[esp+92] ; 436 : float lf_Length2 = lQuaterion.lengthSquared(); movaps xmm0, XMMWORD PTR _lQuaterion$[esp+80] mulps xmm0, xmm0 haddps xmm0, xmm0 haddps xmm0, xmm0 movaps XMMWORD PTR _temp$19217[esp+80], xmm0 ; 437 : if (lf_Length2 != 1.0 && lf_Length2 != 0.0) fld DWORD PTR _temp$19217[esp+80] fld1 fucompp fnstsw ax test ah, 68 ; 00000044H jnp SHORT $LN1@Matrix fld DWORD PTR _temp$19217[esp+80] fld ST(1) fucompp fnstsw ax test ah, 68 ; 00000044H jnp SHORT $LN1@Matrix ; 438 : { ; 439 : lQuaterion.normalize(); lea ecx, DWORD PTR _lQuaterion$[esp+80] fstp ST(0) call ?normalize@Quaternion@@QAEXXZ ; Quaternion::normalize fldz $LN1@Matrix: ; 440 : } ; 441 : ; 442 : float wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2; ; 443 : ; 444 : x2 = lQuaterion.m[0] + lQuaterion.m[0]; fld DWORD PTR _lQuaterion$[esp+80] ; 445 : y2 = lQuaterion.m[1] + lQuaterion.m[1]; ; 446 : z2 = lQuaterion.m[2] + lQuaterion.m[2]; ; 447 : ; 448 : xx = lQuaterion.m[0] * x2; ; 449 : xy = lQuaterion.m[0] * y2; ; 450 : xz = lQuaterion.m[0] * z2; ; 451 : ; 452 : yy = lQuaterion.m[1] * y2; ; 453 : yz = lQuaterion.m[1] * z2; ; 454 : zz = lQuaterion.m[2] * z2; ; 455 : ; 456 : wx = lQuaterion.m[3] * x2; ; 457 : wy = lQuaterion.m[3] * y2; ; 458 : wz = lQuaterion.m[3] * z2; ; 459 : ; 460 : r1 = vec4(1.0f - (yy + zz), xy - wz, xz + wy, 0.0f); lea esi, DWORD PTR $T18168[esp+80] fld ST(0) mov edi, edx fld ST(0) faddp ST(1), ST(0) fstp DWORD PTR _x2$[esp+80] fld DWORD PTR _lQuaterion$[esp+84] fld ST(0) faddp ST(1), ST(0) fstp DWORD PTR _y2$[esp+80] fld DWORD PTR _lQuaterion$[esp+88] fld ST(0) faddp ST(1), ST(0) fstp DWORD PTR _z2$[esp+80] fld ST(0) fmul DWORD PTR _x2$[esp+80] fstp DWORD PTR _xx$[esp+80] fld DWORD PTR _y2$[esp+80] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR _xy$[esp+80] fld DWORD PTR _z2$[esp+80] fld ST(0) fmulp ST(2), ST(0) fxch ST(1) fstp DWORD PTR _xz$[esp+80] fld DWORD PTR _lQuaterion$[esp+84] fmul DWORD PTR _y2$[esp+80] fstp DWORD PTR _yy$[esp+80] fld ST(0) fmul DWORD PTR _lQuaterion$[esp+84] fstp DWORD PTR _yz$[esp+80] fld DWORD PTR _lQuaterion$[esp+88] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR _zz$[esp+80] fld DWORD PTR _lQuaterion$[esp+92] fmul DWORD PTR _x2$[esp+80] fstp DWORD PTR _wx$[esp+80] fld DWORD PTR _lQuaterion$[esp+92] fmul DWORD PTR _y2$[esp+80] fstp DWORD PTR _wy$[esp+80] fmul DWORD PTR _lQuaterion$[esp+92] fstp DWORD PTR _wz$[esp+80] fld DWORD PTR _zz$[esp+80] fadd DWORD PTR _yy$[esp+80] fld1 fld ST(0) fsubrp ST(2), ST(0) fxch ST(1) fstp DWORD PTR $T18168[esp+80] fld DWORD PTR _xy$[esp+80] fsub DWORD PTR _wz$[esp+80] fstp DWORD PTR $T18168[esp+84] fld DWORD PTR _wy$[esp+80] fadd DWORD PTR _xz$[esp+80] fstp DWORD PTR $T18168[esp+88] fxch ST(1) fst DWORD PTR $T18168[esp+92] movsd ; 461 : r2 = vec4(xy + wz, 1.0f - (xx + zz), yz - wx, 0.0f); fld DWORD PTR _wz$[esp+80] fadd DWORD PTR _xy$[esp+80] movsd movsd movsd fstp DWORD PTR $T18169[esp+80] fld DWORD PTR _zz$[esp+80] fadd DWORD PTR _xx$[esp+80] lea esi, DWORD PTR $T18169[esp+80] fld ST(2) lea edi, DWORD PTR [edx+16] fsubrp ST(1), ST(0) fstp DWORD PTR $T18169[esp+84] fld DWORD PTR _yz$[esp+80] fsub DWORD PTR _wx$[esp+80] fstp DWORD PTR $T18169[esp+88] fst DWORD PTR $T18169[esp+92] movsd movsd movsd ; 462 : r3 = vec4(xz - wy, yz + wx, 1.0f - (xx + yy), 0.0f); fld DWORD PTR _xz$[esp+80] movsd fsub DWORD PTR _wy$[esp+80] lea esi, DWORD PTR $T18170[esp+80] lea edi, DWORD PTR [edx+32] fstp DWORD PTR $T18170[esp+80] ; 463 : r4 = vec4(0.0f, 0.0f, 0.0f, 1.0f); ; 464 : }; mov eax, edx fld DWORD PTR _wx$[esp+80] fadd DWORD PTR _yz$[esp+80] fstp DWORD PTR $T18170[esp+84] fld DWORD PTR _yy$[esp+80] fadd DWORD PTR _xx$[esp+80] fsubp ST(2), ST(0) fxch ST(1) fstp DWORD PTR $T18170[esp+88] fst DWORD PTR $T18170[esp+92] movsd movsd movsd movsd fst DWORD PTR $T18171[esp+80] fst DWORD PTR $T18171[esp+84] fstp DWORD PTR $T18171[esp+88] lea esi, DWORD PTR $T18171[esp+80] fld1 lea edi, DWORD PTR [edx+48] fstp DWORD PTR $T18171[esp+92] movsd movsd movsd movsd pop edi pop esi pop ebx mov esp, ebp pop ebp ret 4 ??0Matrix@@QAE@ABUQuaternion@@@Z ENDP ; Matrix::Matrix compile ENDS PUBLIC ??AMatrix@@QAEAAMH@Z ; Matrix::operator[] ; Function compile flags: /Ogspy compile SEGMENT _i$ = 8 ; size = 4 ??AMatrix@@QAEAAMH@Z PROC ; Matrix::operator[] ; _this$ = ecx ; 468 : return m[i]; mov eax, DWORD PTR _i$[esp-4] lea eax, DWORD PTR [ecx+eax*4] ; 469 : } ret 4 ??AMatrix@@QAEAAMH@Z ENDP ; Matrix::operator[] compile ENDS PUBLIC ??DMatrix@@QBE?AUvec4@@ABU1@@Z ; Matrix::operator* ; Function compile flags: /Ogspy compile SEGMENT $T19252 = -8 ; size = 4 $T19253 = -4 ; size = 4 ___$ReturnUdt$ = 8 ; size = 4 $T19254 = 12 ; size = 4 _arg$ = 12 ; size = 4 ??DMatrix@@QBE?AUvec4@@ABU1@@Z PROC ; Matrix::operator* ; _this$ = ecx ; 472 : { push ebp mov ebp, esp push ecx push ecx ; 473 : return vec4(dot(r1, arg), dot(r2, arg), dot(r3, arg), dot(r4, arg)); mov edx, DWORD PTR _arg$[ebp] lea eax, DWORD PTR [ecx+16] push edx push eax call ?dot@@YAMABUvec4@@0@Z ; dot fstp DWORD PTR $T19254[ebp] lea eax, DWORD PTR [ecx+32] push edx push eax call ?dot@@YAMABUvec4@@0@Z ; dot fstp DWORD PTR $T19253[ebp] lea eax, DWORD PTR [ecx+48] push edx push eax call ?dot@@YAMABUvec4@@0@Z ; dot fstp DWORD PTR $T19252[ebp] push edx push ecx call ?dot@@YAMABUvec4@@0@Z ; dot mov eax, DWORD PTR ___$ReturnUdt$[ebp] fstp DWORD PTR [eax] add esp, 32 ; 00000020H fld DWORD PTR $T19254[ebp] fstp DWORD PTR [eax+4] fld DWORD PTR $T19253[ebp] fstp DWORD PTR [eax+8] fld DWORD PTR $T19252[ebp] fstp DWORD PTR [eax+12] ; 474 : } leave ret 8 ??DMatrix@@QBE?AUvec4@@ABU1@@Z ENDP ; Matrix::operator* compile ENDS PUBLIC ??DMatrix@@QBE?AU0@ABU0@@Z ; Matrix::operator* ; Function compile flags: /Ogspy compile SEGMENT tv400 = -20 ; size = 4 tv386 = -16 ; size = 4 tv375 = -12 ; size = 4 tv367 = -8 ; size = 4 _value$18196 = -4 ; size = 4 ___$ReturnUdt$ = 8 ; size = 4 _arg$ = 12 ; size = 4 ??DMatrix@@QBE?AU0@ABU0@@Z PROC ; Matrix::operator* ; _this$ = ecx ; 477 : { sub esp, 20 ; 00000014H mov edx, ecx ; 478 : Matrix temp; mov ecx, DWORD PTR ___$ReturnUdt$[esp+16] call ??0Matrix@@QAE@XZ ; Matrix::Matrix push 4 mov eax, ecx ; 479 : for (int i = 0; i < 4; ++i) // zeile mov ecx, edx pop edx push ebx push esi sub ecx, eax mov DWORD PTR tv400[esp+28], edx push edi $LL9@operator: ; 480 : { ; 481 : for (int j = 0; j < 4; ++j) // spalte mov esi, DWORD PTR _arg$[esp+28] lea ebx, DWORD PTR [ecx+eax] mov DWORD PTR tv367[esp+32], esi mov DWORD PTR tv375[esp+32], eax mov DWORD PTR tv386[esp+32], edx $LL18@operator: ; 482 : { ; 483 : float value = 0; fldz mov esi, DWORD PTR tv367[esp+32] fstp DWORD PTR _value$18196[esp+32] mov edi, ebx mov eax, edx $LL3@operator: ; 484 : for (int k = 0; k < 4; ++k) ; 485 : { ; 486 : value += m[i*4+k] * arg.m[k*4+j]; fld DWORD PTR [esi] add esi, 16 ; 00000010H fmul DWORD PTR [edi] add edi, edx dec eax fadd DWORD PTR _value$18196[esp+32] fstp DWORD PTR _value$18196[esp+32] jne SHORT $LL3@operator ; 487 : } ; 488 : temp.m[i*4+j] = value; mov eax, DWORD PTR tv375[esp+32] fld DWORD PTR _value$18196[esp+32] add DWORD PTR tv367[esp+32], edx fstp DWORD PTR [eax] add eax, edx dec DWORD PTR tv386[esp+32] mov DWORD PTR tv375[esp+32], eax jne SHORT $LL18@operator ; 479 : for (int i = 0; i < 4; ++i) // zeile dec DWORD PTR tv400[esp+32] jne SHORT $LL9@operator ; 489 : } ; 490 : } ; 491 : return temp; mov eax, DWORD PTR ___$ReturnUdt$[esp+28] pop edi pop esi pop ebx ; 492 : } add esp, 20 ; 00000014H ret 8 ??DMatrix@@QBE?AU0@ABU0@@Z ENDP ; Matrix::operator* compile ENDS PUBLIC ??XMatrix@@QAEXABU0@@Z ; Matrix::operator*= ; Function compile flags: /Ogspy compile SEGMENT $T18209 = -80 ; size = 16 $T18208 = -80 ; size = 16 $T18207 = -80 ; size = 16 $T18206 = -80 ; size = 16 _lTemp$ = -64 ; size = 64 _arg$ = 8 ; size = 4 ??XMatrix@@QAEXABU0@@Z PROC ; Matrix::operator*= ; _this$ = ecx ; 495 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 84 ; 00000054H push ebx push esi mov ebx, ecx push edi ; 496 : Matrix lTemp = *this; push ebx lea ecx, DWORD PTR _lTemp$[esp+100] call ??0Matrix@@QAE@ABU0@@Z ; Matrix::Matrix ; 497 : r1 = lTemp * arg.r1; push DWORD PTR _arg$[ebp] lea eax, DWORD PTR $T18206[esp+100] push eax lea ecx, DWORD PTR _lTemp$[esp+104] call ??DMatrix@@QBE?AUvec4@@ABU1@@Z ; Matrix::operator* mov esi, eax ; 498 : r2 = lTemp * arg.r2; mov eax, DWORD PTR _arg$[ebp] mov edi, ebx movsd movsd add eax, 16 ; 00000010H movsd push eax lea eax, DWORD PTR $T18207[esp+100] push eax movsd call ??DMatrix@@QBE?AUvec4@@ABU1@@Z ; Matrix::operator* mov esi, eax ; 499 : r3 = lTemp * arg.r3; mov eax, DWORD PTR _arg$[ebp] lea edi, DWORD PTR [ebx+16] movsd movsd add eax, 32 ; 00000020H movsd push eax lea eax, DWORD PTR $T18208[esp+100] push eax movsd call ??DMatrix@@QBE?AUvec4@@ABU1@@Z ; Matrix::operator* mov esi, eax ; 500 : r4 = lTemp * arg.r4; mov eax, DWORD PTR _arg$[ebp] lea edi, DWORD PTR [ebx+32] movsd movsd add eax, 48 ; 00000030H movsd push eax lea eax, DWORD PTR $T18209[esp+100] push eax movsd call ??DMatrix@@QBE?AUvec4@@ABU1@@Z ; Matrix::operator* lea edi, DWORD PTR [ebx+48] mov esi, eax movsd movsd movsd movsd ; 501 : } pop edi pop esi pop ebx mov esp, ebp pop ebp ret 4 ??XMatrix@@QAEXABU0@@Z ENDP ; Matrix::operator*= compile ENDS PUBLIC ?rotateX@Matrix@@SA?AU1@M@Z ; Matrix::rotateX ; Function compile flags: /Ogspy compile SEGMENT _c$ = -72 ; size = 4 _s$ = -68 ; size = 4 $T18219 = -64 ; size = 16 $T18218 = -48 ; size = 16 $T18217 = -32 ; size = 16 $T18216 = -16 ; size = 16 ___$ReturnUdt$ = 8 ; size = 4 _af_Rad$ = 12 ; size = 4 ?rotateX@Matrix@@SA?AU1@M@Z PROC ; Matrix::rotateX ; 504 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 80 ; 00000050H ; 505 : float s = sin(af_Rad); fld DWORD PTR _af_Rad$[ebp] fsin fstp DWORD PTR _s$[esp+80] ; 506 : float c = cos(af_Rad); fld DWORD PTR _af_Rad$[ebp] fcos fstp DWORD PTR _c$[esp+80] ; 507 : return Matrix( ; 508 : vec4(1,0,0,0), ; 509 : vec4(0,c,-s,0), ; 510 : vec4(0,s,c,0), ; 511 : vec4(0,0,0,1)); fldz mov ecx, DWORD PTR ___$ReturnUdt$[ebp] fst DWORD PTR $T18219[esp+80] lea eax, DWORD PTR $T18219[esp+80] fst DWORD PTR $T18219[esp+84] push eax fst DWORD PTR $T18219[esp+92] lea eax, DWORD PTR $T18218[esp+84] fld1 push eax fst DWORD PTR $T18219[esp+100] lea eax, DWORD PTR $T18217[esp+88] fxch ST(1) push eax fst DWORD PTR $T18218[esp+92] lea eax, DWORD PTR $T18216[esp+92] fld DWORD PTR _s$[esp+92] push eax fstp DWORD PTR $T18218[esp+100] fld DWORD PTR _c$[esp+96] fstp DWORD PTR $T18218[esp+104] fst DWORD PTR $T18218[esp+108] fst DWORD PTR $T18217[esp+96] fld DWORD PTR _c$[esp+96] fstp DWORD PTR $T18217[esp+100] fld DWORD PTR _s$[esp+96] fchs fstp DWORD PTR $T18217[esp+104] fst DWORD PTR $T18217[esp+108] fst DWORD PTR $T18216[esp+100] fst DWORD PTR $T18216[esp+104] fstp DWORD PTR $T18216[esp+108] fstp DWORD PTR $T18216[esp+96] call ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; 512 : } mov esp, ebp pop ebp ret 0 ?rotateX@Matrix@@SA?AU1@M@Z ENDP ; Matrix::rotateX compile ENDS PUBLIC ?rotateY@Matrix@@SA?AU1@M@Z ; Matrix::rotateY ; Function compile flags: /Ogspy compile SEGMENT _c$ = -72 ; size = 4 _s$ = -68 ; size = 4 $T18230 = -64 ; size = 16 $T18229 = -48 ; size = 16 $T18228 = -32 ; size = 16 $T18227 = -16 ; size = 16 ___$ReturnUdt$ = 8 ; size = 4 _af_Rad$ = 12 ; size = 4 ?rotateY@Matrix@@SA?AU1@M@Z PROC ; Matrix::rotateY ; 515 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 80 ; 00000050H ; 516 : float s = sin(af_Rad); fld DWORD PTR _af_Rad$[ebp] fsin fstp DWORD PTR _s$[esp+80] ; 517 : float c = cos(af_Rad); fld DWORD PTR _af_Rad$[ebp] fcos fstp DWORD PTR _c$[esp+80] ; 518 : return Matrix( ; 519 : vec4(c,0,s,0), ; 520 : vec4(0,1,0,0), ; 521 : vec4(-s,0,c,0), ; 522 : vec4(0,0,0,1)); fldz mov ecx, DWORD PTR ___$ReturnUdt$[ebp] fst DWORD PTR $T18230[esp+80] lea eax, DWORD PTR $T18230[esp+80] fst DWORD PTR $T18230[esp+84] push eax fst DWORD PTR $T18230[esp+92] lea eax, DWORD PTR $T18229[esp+84] fld1 push eax fst DWORD PTR $T18230[esp+100] lea eax, DWORD PTR $T18228[esp+88] fld DWORD PTR _s$[esp+88] push eax fchs lea eax, DWORD PTR $T18227[esp+92] fstp DWORD PTR $T18229[esp+92] push eax fxch ST(1) fst DWORD PTR $T18229[esp+100] fld DWORD PTR _c$[esp+96] fstp DWORD PTR $T18229[esp+104] fst DWORD PTR $T18229[esp+108] fst DWORD PTR $T18228[esp+96] fst DWORD PTR $T18228[esp+104] fst DWORD PTR $T18228[esp+108] fxch ST(1) fstp DWORD PTR $T18228[esp+100] fld DWORD PTR _c$[esp+96] fstp DWORD PTR $T18227[esp+96] fst DWORD PTR $T18227[esp+100] fld DWORD PTR _s$[esp+96] fstp DWORD PTR $T18227[esp+104] fstp DWORD PTR $T18227[esp+108] call ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; 523 : } mov esp, ebp pop ebp ret 0 ?rotateY@Matrix@@SA?AU1@M@Z ENDP ; Matrix::rotateY compile ENDS PUBLIC ?rotateZ@Matrix@@SA?AU1@M@Z ; Matrix::rotateZ ; Function compile flags: /Ogspy compile SEGMENT _c$ = -72 ; size = 4 _s$ = -68 ; size = 4 $T18241 = -64 ; size = 16 $T18240 = -48 ; size = 16 $T18239 = -32 ; size = 16 $T18238 = -16 ; size = 16 ___$ReturnUdt$ = 8 ; size = 4 _af_Rad$ = 12 ; size = 4 ?rotateZ@Matrix@@SA?AU1@M@Z PROC ; Matrix::rotateZ ; 526 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 80 ; 00000050H ; 527 : float s = sin(af_Rad); fld DWORD PTR _af_Rad$[ebp] fsin fstp DWORD PTR _s$[esp+80] ; 528 : float c = cos(af_Rad); fld DWORD PTR _af_Rad$[ebp] fcos fstp DWORD PTR _c$[esp+80] ; 529 : return Matrix( ; 530 : vec4(c,-s,0,0), ; 531 : vec4(s,c,0,0), ; 532 : vec4(0,0,1,0), ; 533 : vec4(0,0,0,1)); fldz mov ecx, DWORD PTR ___$ReturnUdt$[ebp] fst DWORD PTR $T18241[esp+80] lea eax, DWORD PTR $T18241[esp+80] fst DWORD PTR $T18241[esp+84] push eax fst DWORD PTR $T18241[esp+92] lea eax, DWORD PTR $T18240[esp+84] fld1 push eax fst DWORD PTR $T18241[esp+100] lea eax, DWORD PTR $T18239[esp+88] fstp DWORD PTR $T18240[esp+96] push eax lea eax, DWORD PTR $T18238[esp+92] push eax fst DWORD PTR $T18240[esp+96] fst DWORD PTR $T18240[esp+100] fst DWORD PTR $T18240[esp+108] fld DWORD PTR _s$[esp+96] fstp DWORD PTR $T18239[esp+96] fld DWORD PTR _c$[esp+96] fstp DWORD PTR $T18239[esp+100] fst DWORD PTR $T18239[esp+104] fst DWORD PTR $T18239[esp+108] fld DWORD PTR _c$[esp+96] fstp DWORD PTR $T18238[esp+96] fld DWORD PTR _s$[esp+96] fchs fstp DWORD PTR $T18238[esp+100] fst DWORD PTR $T18238[esp+104] fstp DWORD PTR $T18238[esp+108] call ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; 534 : } mov esp, ebp pop ebp ret 0 ?rotateZ@Matrix@@SA?AU1@M@Z ENDP ; Matrix::rotateZ compile ENDS PUBLIC ?scale@Matrix@@SA?AU1@M@Z ; Matrix::scale ; Function compile flags: /Ogspy compile SEGMENT $T18250 = -64 ; size = 16 $T18249 = -48 ; size = 16 $T18248 = -32 ; size = 16 $T18247 = -16 ; size = 16 ___$ReturnUdt$ = 8 ; size = 4 _s$ = 12 ; size = 4 ?scale@Matrix@@SA?AU1@M@Z PROC ; Matrix::scale ; 537 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 64 ; 00000040H ; 538 : return Matrix( ; 539 : vec4(s,0,0,0), ; 540 : vec4(0,s,0,0), ; 541 : vec4(0,0,s,0), ; 542 : vec4(0,0,0,1)); fldz mov ecx, DWORD PTR ___$ReturnUdt$[ebp] fst DWORD PTR $T18250[esp+64] lea eax, DWORD PTR $T18250[esp+64] fst DWORD PTR $T18250[esp+68] push eax fst DWORD PTR $T18250[esp+76] lea eax, DWORD PTR $T18249[esp+68] fld1 push eax fstp DWORD PTR $T18250[esp+84] lea eax, DWORD PTR $T18248[esp+72] push eax lea eax, DWORD PTR $T18247[esp+76] push eax fst DWORD PTR $T18249[esp+80] fst DWORD PTR $T18249[esp+84] fld DWORD PTR _s$[ebp] fstp DWORD PTR $T18249[esp+88] fst DWORD PTR $T18249[esp+92] fst DWORD PTR $T18248[esp+80] fld DWORD PTR _s$[ebp] fstp DWORD PTR $T18248[esp+84] fst DWORD PTR $T18248[esp+88] fst DWORD PTR $T18248[esp+92] fld DWORD PTR _s$[ebp] fstp DWORD PTR $T18247[esp+80] fst DWORD PTR $T18247[esp+84] fst DWORD PTR $T18247[esp+88] fstp DWORD PTR $T18247[esp+92] call ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; 543 : } mov esp, ebp pop ebp ret 0 ?scale@Matrix@@SA?AU1@M@Z ENDP ; Matrix::scale compile ENDS PUBLIC ?scale@Matrix@@SA?AU1@ABUvec4@@@Z ; Matrix::scale ; Function compile flags: /Ogspy compile SEGMENT $T18259 = -64 ; size = 16 $T18258 = -48 ; size = 16 $T18257 = -32 ; size = 16 $T18256 = -16 ; size = 16 ___$ReturnUdt$ = 8 ; size = 4 _s$ = 12 ; size = 4 ?scale@Matrix@@SA?AU1@ABUvec4@@@Z PROC ; Matrix::scale ; 546 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 64 ; 00000040H ; 547 : return Matrix( ; 548 : vec4(s.x,0,0,0), ; 549 : vec4(0,s.y,0,0), ; 550 : vec4(0,0,s.z,0), ; 551 : vec4(0,0,0,1)); fldz mov eax, DWORD PTR _s$[ebp] fst DWORD PTR $T18259[esp+64] mov ecx, DWORD PTR ___$ReturnUdt$[ebp] fst DWORD PTR $T18259[esp+68] fst DWORD PTR $T18259[esp+72] fld1 fstp DWORD PTR $T18259[esp+76] fst DWORD PTR $T18258[esp+64] fst DWORD PTR $T18258[esp+68] fld DWORD PTR [eax+8] fstp DWORD PTR $T18258[esp+72] fst DWORD PTR $T18258[esp+76] fst DWORD PTR $T18257[esp+64] fld DWORD PTR [eax+4] fstp DWORD PTR $T18257[esp+68] fst DWORD PTR $T18257[esp+72] fst DWORD PTR $T18257[esp+76] fld DWORD PTR [eax] lea eax, DWORD PTR $T18259[esp+64] push eax fstp DWORD PTR $T18256[esp+68] lea eax, DWORD PTR $T18258[esp+68] push eax fst DWORD PTR $T18256[esp+76] lea eax, DWORD PTR $T18257[esp+72] fst DWORD PTR $T18256[esp+80] push eax fstp DWORD PTR $T18256[esp+88] lea eax, DWORD PTR $T18256[esp+76] push eax call ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; 552 : } mov esp, ebp pop ebp ret 0 ?scale@Matrix@@SA?AU1@ABUvec4@@@Z ENDP ; Matrix::scale compile ENDS PUBLIC ?translate@Matrix@@SA?AU1@ABUvec4@@@Z ; Matrix::translate ; Function compile flags: /Ogspy compile SEGMENT $T18268 = -64 ; size = 16 $T18267 = -48 ; size = 16 $T18266 = -32 ; size = 16 $T18265 = -16 ; size = 16 ___$ReturnUdt$ = 8 ; size = 4 _aTranslation$ = 12 ; size = 4 ?translate@Matrix@@SA?AU1@ABUvec4@@@Z PROC ; Matrix::translate ; 555 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 64 ; 00000040H ; 556 : return Matrix( ; 557 : vec4(1,0,0,aTranslation.x), ; 558 : vec4(0,1,0,aTranslation.y), ; 559 : vec4(0,0,1,aTranslation.z), ; 560 : vec4(0,0,0,1)); fldz mov eax, DWORD PTR _aTranslation$[ebp] fst DWORD PTR $T18268[esp+64] mov ecx, DWORD PTR ___$ReturnUdt$[ebp] fst DWORD PTR $T18268[esp+68] fst DWORD PTR $T18268[esp+72] fld1 fst DWORD PTR $T18268[esp+76] fst DWORD PTR $T18267[esp+72] fxch ST(1) fst DWORD PTR $T18267[esp+64] fst DWORD PTR $T18267[esp+68] fld DWORD PTR [eax+8] fstp DWORD PTR $T18267[esp+76] fst DWORD PTR $T18266[esp+64] fst DWORD PTR $T18266[esp+72] fxch ST(1) fst DWORD PTR $T18266[esp+68] fld DWORD PTR [eax+4] fstp DWORD PTR $T18266[esp+76] fstp DWORD PTR $T18265[esp+64] fst DWORD PTR $T18265[esp+68] fstp DWORD PTR $T18265[esp+72] fld DWORD PTR [eax] lea eax, DWORD PTR $T18268[esp+64] push eax fstp DWORD PTR $T18265[esp+80] lea eax, DWORD PTR $T18267[esp+68] push eax lea eax, DWORD PTR $T18266[esp+72] push eax lea eax, DWORD PTR $T18265[esp+76] push eax call ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; 561 : } mov esp, ebp pop ebp ret 0 ?translate@Matrix@@SA?AU1@ABUvec4@@@Z ENDP ; Matrix::translate compile ENDS PUBLIC ?transpose@Matrix@@QAEXXZ ; Matrix::transpose ; Function compile flags: /Ogspy compile SEGMENT tv233 = -136 ; size = 4 tv236 = -132 ; size = 4 $T18275 = -128 ; size = 16 $T18274 = -112 ; size = 16 $T18273 = -96 ; size = 16 $T18276 = -80 ; size = 16 _lTemp$ = -64 ; size = 64 ?transpose@Matrix@@QAEXXZ PROC ; Matrix::transpose ; _this$ = ecx ; 564 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 148 ; 00000094H push ebx push esi push edi mov edi, ecx ; 565 : Matrix lTemp( ; 566 : vec4(r1.x, r2.x, r3.x, r4.x), ; 567 : vec4(r1.y, r2.y, r3.y, r4.y), ; 568 : vec4(r1.z, r2.z, r3.z, r4.z), ; 569 : vec4(r1.w, r2.w, r3.w, r4.w)); fld DWORD PTR [edi+12] lea ebx, DWORD PTR [edi+16] fstp DWORD PTR $T18276[esp+160] lea eax, DWORD PTR [edi+32] fld DWORD PTR [edi+28] mov DWORD PTR tv233[esp+160], eax fstp DWORD PTR $T18276[esp+164] lea ecx, DWORD PTR _lTemp$[esp+160] fld DWORD PTR [edi+44] fstp DWORD PTR $T18276[esp+168] fld DWORD PTR [edi+60] fstp DWORD PTR $T18276[esp+172] fld DWORD PTR [edi+8] fstp DWORD PTR $T18275[esp+160] fld DWORD PTR [edi+24] fstp DWORD PTR $T18275[esp+164] fld DWORD PTR [edi+40] fstp DWORD PTR $T18275[esp+168] fld DWORD PTR [edi+56] fstp DWORD PTR $T18275[esp+172] fld DWORD PTR [edi+4] fstp DWORD PTR $T18274[esp+160] fld DWORD PTR [edi+20] fstp DWORD PTR $T18274[esp+164] fld DWORD PTR [edi+36] fstp DWORD PTR $T18274[esp+168] fld DWORD PTR [edi+52] fstp DWORD PTR $T18274[esp+172] fld DWORD PTR [edi] fstp DWORD PTR $T18273[esp+160] fld DWORD PTR [ebx] fstp DWORD PTR $T18273[esp+164] fld DWORD PTR [eax] lea eax, DWORD PTR [edi+48] mov DWORD PTR tv236[esp+160], eax fstp DWORD PTR $T18273[esp+168] fld DWORD PTR [eax] lea eax, DWORD PTR $T18276[esp+160] push eax fstp DWORD PTR $T18273[esp+176] lea eax, DWORD PTR $T18275[esp+164] push eax lea eax, DWORD PTR $T18274[esp+168] push eax lea eax, DWORD PTR $T18273[esp+172] push eax call ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix ; 570 : r1 = lTemp.r1; lea esi, DWORD PTR _lTemp$[esp+160] movsd movsd movsd movsd ; 571 : r2 = lTemp.r2; mov edi, ebx lea esi, DWORD PTR _lTemp$[esp+176] movsd movsd movsd movsd ; 572 : r3 = lTemp.r3; mov edi, DWORD PTR tv233[esp+160] lea esi, DWORD PTR _lTemp$[esp+192] movsd movsd movsd movsd ; 573 : r4 = lTemp.r4; mov edi, DWORD PTR tv236[esp+160] lea esi, DWORD PTR _lTemp$[esp+208] movsd movsd movsd movsd ; 574 : } pop edi pop esi pop ebx mov esp, ebp pop ebp ret 0 ?transpose@Matrix@@QAEXXZ ENDP ; Matrix::transpose compile ENDS PUBLIC ?Determinante2x2@Matrix@@QAEMMMMM@Z ; Matrix::Determinante2x2 ; Function compile flags: /Ogspy compile SEGMENT tv134 = 8 ; size = 4 _a1$ = 8 ; size = 4 _a2$ = 12 ; size = 4 _b1$ = 16 ; size = 4 _b2$ = 20 ; size = 4 ?Determinante2x2@Matrix@@QAEMMMMM@Z PROC ; Matrix::Determinante2x2 ; _this$ = ecx ; 577 : { push ebp mov ebp, esp ; 578 : return a1 * b2 - b1 * a2; fld DWORD PTR _a1$[ebp] fmul DWORD PTR _b2$[ebp] fld DWORD PTR _a2$[ebp] fmul DWORD PTR _b1$[ebp] fsubp ST(1), ST(0) fstp DWORD PTR tv134[ebp] fld DWORD PTR tv134[ebp] ; 579 : } pop ebp ret 16 ; 00000010H ?Determinante2x2@Matrix@@QAEMMMMM@Z ENDP ; Matrix::Determinante2x2 compile ENDS PUBLIC ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 ; Function compile flags: /Ogspy compile SEGMENT tv220 = -4 ; size = 4 _a1$ = 8 ; size = 4 _a2$ = 12 ; size = 4 _a3$ = 16 ; size = 4 _b1$ = 20 ; size = 4 _b2$ = 24 ; size = 4 _b3$ = 28 ; size = 4 _c1$ = 32 ; size = 4 _c2$ = 36 ; size = 4 tv201 = 40 ; size = 4 tv195 = 40 ; size = 4 tv193 = 40 ; size = 4 _c3$ = 40 ; size = 4 ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z PROC ; Matrix::Determinante3x3 ; _this$ = ecx ; 584 : { push ebp mov ebp, esp push ecx ; 585 : return a1 * Determinante2x2( b2, b3, c2, c3 ) - b1 * Determinante2x2( a2, a3, c2, c3 ) + c1 * Determinante2x2( a2, a3, b2, b3 ); fld DWORD PTR _b2$[ebp] fmul DWORD PTR _c3$[ebp] fld DWORD PTR _b3$[ebp] fmul DWORD PTR _c2$[ebp] fsubp ST(1), ST(0) fstp DWORD PTR tv220[ebp] fld DWORD PTR tv220[ebp] fmul DWORD PTR _a1$[ebp] fld DWORD PTR _a2$[ebp] fmul DWORD PTR _c3$[ebp] fld DWORD PTR _a3$[ebp] fmul DWORD PTR _c2$[ebp] fsubp ST(1), ST(0) fstp DWORD PTR tv201[ebp] fld DWORD PTR tv201[ebp] fmul DWORD PTR _b1$[ebp] fsubp ST(1), ST(0) fld DWORD PTR _a2$[ebp] fmul DWORD PTR _b3$[ebp] fld DWORD PTR _a3$[ebp] fmul DWORD PTR _b2$[ebp] fsubp ST(1), ST(0) fstp DWORD PTR tv195[ebp] fld DWORD PTR tv195[ebp] fmul DWORD PTR _c1$[ebp] faddp ST(1), ST(0) fstp DWORD PTR tv193[ebp] fld DWORD PTR tv193[ebp] ; 586 : } leave ret 36 ; 00000024H ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ENDP ; Matrix::Determinante3x3 compile ENDS PUBLIC ?inverse@Matrix@@QAEXXZ ; Matrix::inverse ; Function compile flags: /Ogspy compile SEGMENT _lf_Det$ = -68 ; size = 4 _lResult$ = -64 ; size = 64 ?inverse@Matrix@@QAEXXZ PROC ; Matrix::inverse ; _this$ = ecx ; 589 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 72 ; 00000048H push esi mov edx, ecx push edi ; 590 : Matrix lResult; lea ecx, DWORD PTR _lResult$[esp+80] call ??0Matrix@@QAE@XZ ; Matrix::Matrix ; 591 : lResult.m[0] = Determinante3x3( m[5], m[9], m[13], m[6], m[10], m[14], m[7], m[11], m[15] ); fld DWORD PTR [edx+60] sub esp, 36 ; 00000024H fstp DWORD PTR [esp+32] mov ecx, edx fld DWORD PTR [edx+44] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+28] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+56] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+40] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+24] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+52] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+36] fstp DWORD PTR [esp+4] fld DWORD PTR [edx+20] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fstp DWORD PTR _lResult$[esp+80] ; 592 : lResult.m[4] = -Determinante3x3( m[4], m[8], m[12], m[6], m[10], m[14], m[7], m[11], m[15] ); sub esp, 36 ; 00000024H fld DWORD PTR [edx+60] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+44] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+28] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+56] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+40] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+24] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+48] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+32] fstp DWORD PTR [esp+4] fld DWORD PTR [edx+16] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fchs ; 593 : lResult.m[8] = Determinante3x3( m[4], m[8], m[12], m[5], m[9], m[13], m[7], m[11], m[15] ); sub esp, 36 ; 00000024H fstp DWORD PTR _lResult$[esp+132] fld DWORD PTR [edx+60] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+44] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+28] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+52] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+36] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+20] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+48] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+32] fstp DWORD PTR [esp+4] fld DWORD PTR [edx+16] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fstp DWORD PTR _lResult$[esp+112] ; 594 : lResult.m[12] = -Determinante3x3( m[4], m[8], m[12], m[5], m[9], m[13], m[6], m[10], m[14] ); sub esp, 36 ; 00000024H fld DWORD PTR [edx+56] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+40] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+24] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+52] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+36] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+20] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+48] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+32] fstp DWORD PTR [esp+4] fld DWORD PTR [edx+16] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fchs ; 595 : ; 596 : lResult.m[1] = -Determinante3x3( m[1], m[9], m[13], m[2], m[10], m[14], m[3], m[11], m[15] ); sub esp, 36 ; 00000024H fstp DWORD PTR _lResult$[esp+164] fld DWORD PTR [edx+60] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+44] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+12] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+56] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+40] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+8] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+52] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+36] fstp DWORD PTR [esp+4] fld DWORD PTR [edx+4] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fchs ; 597 : lResult.m[5] = Determinante3x3( m[0], m[8], m[12], m[2], m[10], m[14], m[3], m[11], m[15] ); sub esp, 36 ; 00000024H fstp DWORD PTR _lResult$[esp+120] fld DWORD PTR [edx+60] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+44] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+12] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+56] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+40] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+8] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+48] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+32] fstp DWORD PTR [esp+4] fld DWORD PTR [edx] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fstp DWORD PTR _lResult$[esp+100] ; 598 : lResult.m[9] = -Determinante3x3( m[0], m[8], m[12], m[1], m[9], m[13], m[3], m[11], m[15] ); sub esp, 36 ; 00000024H fld DWORD PTR [edx+60] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+44] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+12] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+52] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+36] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+4] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+48] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+32] fstp DWORD PTR [esp+4] fld DWORD PTR [edx] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fchs ; 599 : lResult.m[13] = Determinante3x3( m[0], m[8], m[12], m[1], m[9], m[13], m[2], m[10], m[14] ); sub esp, 36 ; 00000024H fstp DWORD PTR _lResult$[esp+152] fld DWORD PTR [edx+56] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+40] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+8] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+52] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+36] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+4] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+48] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+32] fstp DWORD PTR [esp+4] fld DWORD PTR [edx] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fstp DWORD PTR _lResult$[esp+132] ; 600 : ; 601 : lResult.m[2] = Determinante3x3( m[1], m[5], m[13], m[2], m[6], m[14], m[3], m[7], m[15] ); sub esp, 36 ; 00000024H fld DWORD PTR [edx+60] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+28] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+12] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+56] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+24] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+8] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+52] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+20] fstp DWORD PTR [esp+4] fld DWORD PTR [edx+4] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fstp DWORD PTR _lResult$[esp+88] ; 602 : lResult.m[6] = -Determinante3x3( m[0], m[4], m[12], m[2], m[6], m[14], m[3], m[7], m[15] ); sub esp, 36 ; 00000024H fld DWORD PTR [edx+60] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+28] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+12] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+56] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+24] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+8] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+48] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+16] fstp DWORD PTR [esp+4] fld DWORD PTR [edx] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fchs ; 603 : lResult.m[10] = Determinante3x3( m[0], m[4], m[12], m[1], m[5], m[13], m[3], m[7], m[15] ); sub esp, 36 ; 00000024H fstp DWORD PTR _lResult$[esp+140] fld DWORD PTR [edx+60] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+28] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+12] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+52] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+20] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+4] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+48] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+16] fstp DWORD PTR [esp+4] fld DWORD PTR [edx] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fstp DWORD PTR _lResult$[esp+120] ; 604 : lResult.m[14] = -Determinante3x3( m[0], m[4], m[12], m[1], m[5], m[13], m[2], m[6], m[14] ); sub esp, 36 ; 00000024H fld DWORD PTR [edx+56] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+24] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+8] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+52] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+20] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+4] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+48] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+16] fstp DWORD PTR [esp+4] fld DWORD PTR [edx] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fchs ; 605 : ; 606 : lResult.m[3] = -Determinante3x3( m[1], m[5], m[9], m[2], m[6], m[10], m[3], m[7], m[11] ); sub esp, 36 ; 00000024H fstp DWORD PTR _lResult$[esp+172] fld DWORD PTR [edx+44] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+28] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+12] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+40] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+24] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+8] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+36] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+20] fstp DWORD PTR [esp+4] fld DWORD PTR [edx+4] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fchs ; 607 : lResult.m[7] = Determinante3x3( m[0], m[4], m[8], m[2], m[6], m[10], m[3], m[7], m[11] ); sub esp, 36 ; 00000024H fstp DWORD PTR _lResult$[esp+128] fld DWORD PTR [edx+44] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+28] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+12] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+40] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+24] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+8] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+32] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+16] fstp DWORD PTR [esp+4] fld DWORD PTR [edx] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fstp DWORD PTR _lResult$[esp+108] ; 608 : lResult.m[11] = -Determinante3x3( m[0], m[4], m[8], m[1], m[5], m[9], m[3], m[7], m[11] ); sub esp, 36 ; 00000024H fld DWORD PTR [edx+44] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+28] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+12] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+36] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+20] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+4] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+32] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+16] fstp DWORD PTR [esp+4] fld DWORD PTR [edx] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fchs ; 609 : lResult.m[15] = Determinante3x3( m[0], m[4], m[8], m[1], m[5], m[9], m[2], m[6], m[10] ); sub esp, 36 ; 00000024H fstp DWORD PTR _lResult$[esp+160] fld DWORD PTR [edx+40] fstp DWORD PTR [esp+32] fld DWORD PTR [edx+24] fstp DWORD PTR [esp+28] fld DWORD PTR [edx+8] fstp DWORD PTR [esp+24] fld DWORD PTR [edx+36] fstp DWORD PTR [esp+20] fld DWORD PTR [edx+20] fstp DWORD PTR [esp+16] fld DWORD PTR [edx+4] fstp DWORD PTR [esp+12] fld DWORD PTR [edx+32] fstp DWORD PTR [esp+8] fld DWORD PTR [edx+16] fstp DWORD PTR [esp+4] fld DWORD PTR [edx] fstp DWORD PTR [esp] call ?Determinante3x3@Matrix@@QAEMMMMMMMMMM@Z ; Matrix::Determinante3x3 fstp DWORD PTR _lResult$[esp+140] ; 610 : ; 611 : float lf_Det = (m[0] * lResult.m[0]) + (m[1] * lResult.m[4]) + (m[2] * lResult.m[8]) + (m[3] * lResult.m[12]); fld DWORD PTR [edx] fmul DWORD PTR _lResult$[esp+80] fld DWORD PTR _lResult$[esp+96] fmul DWORD PTR [edx+4] faddp ST(1), ST(0) fld DWORD PTR [edx+8] fmul DWORD PTR _lResult$[esp+112] faddp ST(1), ST(0) fld DWORD PTR [edx+12] fmul DWORD PTR _lResult$[esp+128] faddp ST(1), ST(0) fstp DWORD PTR _lf_Det$[esp+80] ; 612 : if (lf_Det == 0.0f) fld DWORD PTR _lf_Det$[esp+80] fldz fucompp fnstsw ax test ah, 68 ; 00000044H jnp $LN2@inverse ; 613 : return; // matrix is singular ; 614 : ; 615 : lf_Det = 1.0f / lf_Det; fld DWORD PTR _lf_Det$[esp+80] ; 616 : ; 617 : *this = lResult; push 16 ; 00000010H fld1 pop ecx fdivrp ST(1), ST(0) lea esi, DWORD PTR _lResult$[esp+80] mov edi, edx rep movsd fstp DWORD PTR _lf_Det$[esp+80] ; 618 : ; 619 : m[0] *= lf_Det; fld DWORD PTR [edx] fld DWORD PTR _lf_Det$[esp+80] fld ST(0) fmulp ST(2), ST(0) fxch ST(1) fstp DWORD PTR [edx] ; 620 : m[4] *= lf_Det; fld DWORD PTR [edx+16] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+16] ; 621 : m[8] *= lf_Det; fld DWORD PTR [edx+32] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+32] ; 622 : m[12] *= lf_Det; fld ST(0) fmul DWORD PTR [edx+48] fstp DWORD PTR [edx+48] ; 623 : ; 624 : m[1] *= lf_Det; fld ST(0) fmul DWORD PTR [edx+4] fstp DWORD PTR [edx+4] ; 625 : m[5] *= lf_Det; fld ST(0) fmul DWORD PTR [edx+20] fstp DWORD PTR [edx+20] ; 626 : m[9] *= lf_Det; fld DWORD PTR [edx+36] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+36] ; 627 : m[13] *= lf_Det; fld DWORD PTR [edx+52] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+52] ; 628 : ; 629 : m[2] *= lf_Det; fld DWORD PTR [edx+8] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+8] ; 630 : m[6] *= lf_Det; fld DWORD PTR [edx+24] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+24] ; 631 : m[10] *= lf_Det; fld ST(0) fmul DWORD PTR [edx+40] fstp DWORD PTR [edx+40] ; 632 : m[14] *= lf_Det; fld DWORD PTR [edx+56] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+56] ; 633 : ; 634 : m[3] *= lf_Det; fld DWORD PTR [edx+12] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+12] ; 635 : m[7] *= lf_Det; fld DWORD PTR [edx+28] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+28] ; 636 : m[11] *= lf_Det; fld DWORD PTR [edx+44] fld ST(1) fmulp ST(1), ST(0) fstp DWORD PTR [edx+44] ; 637 : m[15] *= lf_Det; fmul DWORD PTR [edx+60] fstp DWORD PTR [edx+60] $LN2@inverse: ; 638 : } pop edi pop esi mov esp, ebp pop ebp ret 0 ?inverse@Matrix@@QAEXXZ ENDP ; Matrix::inverse compile ENDS PUBLIC __real@bf800000 PUBLIC __real@3fe0000000000000 PUBLIC ?Perspective@Matrix@@SA?AU1@MMMM@Z ; Matrix::Perspective ; COMDAT __real@bf800000 CONST SEGMENT __real@bf800000 DD 0bf800000r ; -1 CONST ENDS ; COMDAT __real@3fe0000000000000 CONST SEGMENT __real@3fe0000000000000 DQ 03fe0000000000000r ; 0.5 ; Function compile flags: /Ogspy CONST ENDS compile SEGMENT _m$ = -72 ; size = 4 tv233 = -68 ; size = 4 _f$ = -68 ; size = 4 $T18315 = -64 ; size = 16 $T18314 = -48 ; size = 16 $T18313 = -32 ; size = 16 $T18312 = -16 ; size = 16 ___$ReturnUdt$ = 8 ; size = 4 _fov$ = 12 ; size = 4 _aspectRatio$ = 16 ; size = 4 _zNear$ = 20 ; size = 4 _zFar$ = 24 ; size = 4 ?Perspective@Matrix@@SA?AU1@MMMM@Z PROC ; Matrix::Perspective ; 641 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 80 ; 00000050H ; 642 : float f = 1.0f / tan(fov / 2.0f); fld DWORD PTR _fov$[ebp] push ecx fmul QWORD PTR __real@3fe0000000000000 fstp DWORD PTR tv233[esp+84] fld DWORD PTR tv233[esp+84] fstp DWORD PTR [esp] call _tan fld1 ; 643 : float m = zNear - zFar; ; 644 : Matrix M( ; 645 : vec4(f / aspectRatio, 0, 0, 0), ; 646 : vec4(0, f, 0, 0), ; 647 : vec4(0, 0, (zFar + zNear) / m, (2 * zFar * zNear) / m), ; 648 : vec4(0, 0, -1, 0)); mov ecx, DWORD PTR ___$ReturnUdt$[ebp] fdivrp ST(1), ST(0) add esp, 4 lea eax, DWORD PTR $T18315[esp+80] push eax lea eax, DWORD PTR $T18314[esp+84] push eax lea eax, DWORD PTR $T18313[esp+88] push eax lea eax, DWORD PTR $T18312[esp+92] push eax fstp DWORD PTR _f$[esp+96] fld DWORD PTR _zNear$[ebp] fsub DWORD PTR _zFar$[ebp] fstp DWORD PTR _m$[esp+96] fldz fst DWORD PTR $T18315[esp+96] fst DWORD PTR $T18315[esp+100] fld DWORD PTR __real@bf800000 fstp DWORD PTR $T18315[esp+104] fst DWORD PTR $T18315[esp+108] fst DWORD PTR $T18314[esp+96] fst DWORD PTR $T18314[esp+100] fld DWORD PTR _zNear$[ebp] fadd DWORD PTR _zFar$[ebp] fdiv DWORD PTR _m$[esp+96] fstp DWORD PTR $T18314[esp+104] fld DWORD PTR _zFar$[ebp] fadd ST(0), ST(0) fmul DWORD PTR _zNear$[ebp] fdiv DWORD PTR _m$[esp+96] fstp DWORD PTR $T18314[esp+108] fst DWORD PTR $T18313[esp+96] fld DWORD PTR _f$[esp+96] fstp DWORD PTR $T18313[esp+100] fst DWORD PTR $T18313[esp+104] fst DWORD PTR $T18313[esp+108] fld DWORD PTR _f$[esp+96] fdiv DWORD PTR _aspectRatio$[ebp] fstp DWORD PTR $T18312[esp+96] fst DWORD PTR $T18312[esp+100] fst DWORD PTR $T18312[esp+104] fstp DWORD PTR $T18312[esp+108] call ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix ; 649 : return M; mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; 650 : } mov esp, ebp pop ebp ret 0 ?Perspective@Matrix@@SA?AU1@MMMM@Z ENDP ; Matrix::Perspective compile ENDS PUBLIC ?LookAt@Matrix@@SA?AU1@AAUvec4@@00@Z ; Matrix::LookAt ; Function compile flags: /Ogspy compile SEGMENT $T18331 = -128 ; size = 16 _f$ = -128 ; size = 16 $T18332 = -112 ; size = 16 $T18330 = -112 ; size = 16 _u$ = -96 ; size = 16 $T18334 = -80 ; size = 16 _s$ = -80 ; size = 16 $T18324 = -80 ; size = 16 $T18335 = -64 ; size = 64 ___$ReturnUdt$ = 8 ; size = 4 _eye$ = 12 ; size = 4 _center$ = 16 ; size = 4 _up$ = 20 ; size = 4 ?LookAt@Matrix@@SA?AU1@AAUvec4@@00@Z PROC ; Matrix::LookAt ; 653 : { push ebp mov ebp, esp and esp, -16 ; fffffff0H sub esp, 132 ; 00000084H ; 654 : vec4 f = normalize(center - eye); mov eax, DWORD PTR _center$[ebp] movaps xmm1, XMMWORD PTR [eax] push ebx mov ebx, DWORD PTR _eye$[ebp] subps xmm1, XMMWORD PTR [ebx] push esi push edi lea eax, DWORD PTR $T18324[esp+144] push eax lea eax, DWORD PTR _f$[esp+148] push eax movaps XMMWORD PTR $T18324[esp+152], xmm1 call ?normalize@@YA?AUvec4@@ABU1@@Z ; normalize ; 655 : vec4 u = normalize(up); push DWORD PTR _up$[ebp] lea eax, DWORD PTR _u$[esp+156] push eax call ?normalize@@YA?AUvec4@@ABU1@@Z ; normalize ; 656 : vec4 s = cross(f, u); lea eax, DWORD PTR _u$[esp+160] push eax lea eax, DWORD PTR _f$[esp+164] push eax lea eax, DWORD PTR _s$[esp+168] push eax call ?cross@@YA?AUvec4@@AAU1@0@Z ; cross ; 657 : u = cross(s, f); lea eax, DWORD PTR _f$[esp+172] push eax lea eax, DWORD PTR _s$[esp+176] push eax lea eax, DWORD PTR $T18330[esp+180] push eax call ?cross@@YA?AUvec4@@AAU1@0@Z ; cross ; 658 : s[3] = u[3] = f[3] = 0; fldz ; 659 : Matrix M(s, u, -f, vec4(0, 0, 0, 1)); movaps xmm0, XMMWORD PTR __xmm@0 fst DWORD PTR _f$[esp+196] movaps xmm1, XMMWORD PTR _f$[esp+184] mov ecx, DWORD PTR ___$ReturnUdt$[ebp] mov esi, eax lea edi, DWORD PTR _u$[esp+184] movsd movsd movsd add esp, 40 ; 00000028H movsd fst DWORD PTR _u$[esp+156] fst DWORD PTR _s$[esp+156] lea eax, DWORD PTR $T18332[esp+144] fst DWORD PTR $T18332[esp+144] push eax fst DWORD PTR $T18332[esp+152] lea eax, DWORD PTR $T18331[esp+148] fstp DWORD PTR $T18332[esp+156] fld1 push eax lea eax, DWORD PTR _u$[esp+152] fstp DWORD PTR $T18332[esp+164] push eax lea eax, DWORD PTR _s$[esp+156] movaps xmm2, xmm0 mulps xmm1, xmm2 push eax movaps XMMWORD PTR $T18331[esp+160], xmm1 call ??0Matrix@@QAE@ABUvec4@@000@Z ; Matrix::Matrix ; 660 : //M.transpose(); ; 661 : M *= Matrix::translate(-eye); movaps xmm1, XMMWORD PTR [ebx] lea eax, DWORD PTR $T18334[esp+144] push eax lea eax, DWORD PTR $T18335[esp+148] mulps xmm1, xmm0 push eax movaps XMMWORD PTR $T18334[esp+152], xmm1 call ?translate@Matrix@@SA?AU1@ABUvec4@@@Z ; Matrix::translate pop ecx pop ecx mov ecx, DWORD PTR ___$ReturnUdt$[ebp] push eax call ??XMatrix@@QAEXABU0@@Z ; Matrix::operator*= ; 662 : return M; mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; 663 : } pop edi pop esi pop ebx mov esp, ebp pop ebp ret 0 ?LookAt@Matrix@@SA?AU1@AAUvec4@@00@Z ENDP ; Matrix::LookAt compile ENDS PUBLIC __real@4066800000000000 PUBLIC ??0Quaternion@@QAE@MMMM_N@Z ; Quaternion::Quaternion ; COMDAT __real@4066800000000000 CONST SEGMENT __real@4066800000000000 DQ 04066800000000000r ; 180 ; Function compile flags: /Ogspy CONST ENDS compile SEGMENT _X$ = 8 ; size = 4 _Y$ = 12 ; size = 4 _Z$ = 16 ; size = 4 tv173 = 20 ; size = 4 $T19614 = 20 ; size = 4 $T19613 = 20 ; size = 4 _W$ = 20 ; size = 4 tv181 = 24 ; size = 4 tv177 = 24 ; size = 4 $T19622 = 24 ; size = 4 $T19623 = 24 ; size = 4 $T19609 = 24 ; size = 4 _ab_Rotation$ = 24 ; size = 1 ??0Quaternion@@QAE@MMMM_N@Z PROC ; Quaternion::Quaternion ; _this$ = ecx ; 333 : if (ab_Rotation) cmp BYTE PTR _ab_Rotation$[esp-4], 0 fld DWORD PTR _X$[esp-4] fstp DWORD PTR [ecx] fld DWORD PTR _Y$[esp-4] fstp DWORD PTR [ecx+4] fld DWORD PTR _Z$[esp-4] fstp DWORD PTR [ecx+8] fld DWORD PTR _W$[esp-4] fstp DWORD PTR [ecx+12] je SHORT $LN1@Quaternion ; 334 : { ; 335 : W *= pi(); fldpi fstp DWORD PTR $T19609[esp-4] ; 336 : W /= 180.0; fld DWORD PTR $T19609[esp-4] fmul DWORD PTR _W$[esp-4] fstp DWORD PTR tv181[esp-4] fld DWORD PTR tv181[esp-4] fdiv QWORD PTR __real@4066800000000000 fstp DWORD PTR _W$[esp-4] ; 337 : w = 0.0f; fldz fstp DWORD PTR [ecx+12] ; 338 : normalize(); call ?normalize@Quaternion@@QAEXXZ ; Quaternion::normalize ; 339 : _mm_store_ps(m, _mm_mul_ps(*this, _mm_set_ps1(sin(W / 2.0f)))); fld DWORD PTR _W$[esp-4] fmul QWORD PTR __real@3fe0000000000000 fstp DWORD PTR tv177[esp-4] fld DWORD PTR tv177[esp-4] fstp DWORD PTR $T19613[esp-4] fld DWORD PTR $T19613[esp-4] fsin movaps xmm1, XMMWORD PTR [ecx] fstp DWORD PTR $T19614[esp-4] fld DWORD PTR $T19614[esp-4] fstp DWORD PTR tv173[esp-4] movss xmm0, DWORD PTR tv173[esp-4] ; 340 : w = cos(W / 2.0f); fld DWORD PTR tv177[esp-4] shufps xmm0, xmm0, 0 mulps xmm1, xmm0 fstp DWORD PTR $T19622[esp-4] movaps XMMWORD PTR [ecx], xmm1 fld DWORD PTR $T19622[esp-4] fcos fstp DWORD PTR $T19623[esp-4] fld DWORD PTR $T19623[esp-4] fstp DWORD PTR [ecx+12] $LN1@Quaternion: ; 341 : } ; 342 : }; mov eax, ecx ret 20 ; 00000014H ??0Quaternion@@QAE@MMMM_N@Z ENDP ; Quaternion::Quaternion compile ENDS END