Files
bluflame/4kgfx/Crinkler/vecmath.asm
2026-04-18 22:31:51 +02:00

4156 lines
89 KiB
NASM

; 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 (x<a) return 0.0f;
fld DWORD PTR _x$[ebp]
fld DWORD PTR _a$[ebp]
fcompp
fnstsw ax
test ah, 65 ; 00000041H
jne SHORT $LN2@smoothstep
fldz
; 103 : }
pop ebp
ret 0
$LN2@smoothstep:
; 100 : if (x>b) 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