mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +00:00
(R): Remove unused asm code from 3DMath.h
This commit is contained in:
parent
829e5ad4ff
commit
a3c59d643c
496
3DMath.h
496
3DMath.h
|
@ -2,11 +2,9 @@
|
|||
#define _3DMATH_H
|
||||
#include <memory.h>
|
||||
|
||||
#undef X86_ASM
|
||||
|
||||
inline void CopyMatrix( float m0[4][4], float m1[4][4] )
|
||||
{
|
||||
#ifndef __LINUX__
|
||||
#ifdef WIN32
|
||||
__asm {
|
||||
mov esi, [m1]
|
||||
mov edi, [m0]
|
||||
|
@ -48,57 +46,13 @@ inline void CopyMatrix( float m0[4][4], float m1[4][4] )
|
|||
mov dword ptr [edi+3Ch], eax
|
||||
}
|
||||
#else
|
||||
# ifdef X86_ASM
|
||||
__asm__ __volatile__(
|
||||
".intel_syntax noprefix" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x00]" "\n\t"
|
||||
" mov dword ptr [edi+0x00], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x04]" "\n\t"
|
||||
" mov dword ptr [edi+0x04], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x08]" "\n\t"
|
||||
" mov dword ptr [edi+0x08], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x0C]" "\n\t"
|
||||
" mov dword ptr [edi+0x0C], eax" "\n\t"
|
||||
|
||||
" mov eax, dword ptr [esi+0x10]" "\n\t"
|
||||
" mov dword ptr [edi+0x10], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x14]" "\n\t"
|
||||
" mov dword ptr [edi+0x14], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x18]" "\n\t"
|
||||
" mov dword ptr [edi+0x18], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x1C]" "\n\t"
|
||||
" mov dword ptr [edi+0x1C], eax" "\n\t"
|
||||
|
||||
" mov eax, dword ptr [esi+0x20]" "\n\t"
|
||||
" mov dword ptr [edi+0x20], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x24]" "\n\t"
|
||||
" mov dword ptr [edi+0x24], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x28]" "\n\t"
|
||||
" mov dword ptr [edi+0x28], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x2C]" "\n\t"
|
||||
" mov dword ptr [edi+0x2C], eax" "\n\t"
|
||||
|
||||
" mov eax, dword ptr [esi+0x30]" "\n\t"
|
||||
" mov dword ptr [edi+0x30], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x34]" "\n\t"
|
||||
" mov dword ptr [edi+0x34], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x38]" "\n\t"
|
||||
" mov dword ptr [edi+0x38], eax" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x3C]" "\n\t"
|
||||
" mov dword ptr [edi+0x3C], eax" "\n\t"
|
||||
".att_syntax prefix" "\n\t"
|
||||
: /* no output */
|
||||
: "S"(m1), "D"(m0)
|
||||
: "%eax", "memory" );
|
||||
# else // X86_ASM
|
||||
memcpy( m0, m1, 16 * sizeof( float ) );
|
||||
# endif // !X86_ASM
|
||||
#endif
|
||||
#endif // WIN32
|
||||
}
|
||||
|
||||
inline void MultMatrix( float m0[4][4], float m1[4][4] )
|
||||
{
|
||||
#ifndef __LINUX__
|
||||
#ifdef WIN32
|
||||
__asm {
|
||||
mov esi, dword ptr [m0]
|
||||
mov edi, dword ptr [m1]
|
||||
|
@ -168,77 +122,7 @@ MultMatrix_Loop:
|
|||
cmp cx, 0
|
||||
ja MultMatrix_Loop
|
||||
}
|
||||
#else // !__LINUX__
|
||||
# ifdef X86_ASM
|
||||
__asm__ __volatile__(
|
||||
".intel_syntax noprefix" "\n\t"
|
||||
"MultMatrix_Loop:" "\n\t"
|
||||
" fld dword ptr [esi+0x30]" "\n\t"
|
||||
" fld dword ptr [esi+0x20]" "\n\t"
|
||||
" fld dword ptr [esi+0x10]" "\n\t"
|
||||
" fld dword ptr [esi]" "\n\t"
|
||||
|
||||
" fld dword ptr [edi]" "\n\t"
|
||||
" fmul ST, ST(1)" "\n\t"
|
||||
" fld dword ptr [edi+0x04]" "\n\t"
|
||||
" fmul ST, ST(3)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [edi+0x08]" "\n\t"
|
||||
" fmul ST, ST(4)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [edi+0x0C]" "\n\t"
|
||||
" fmul ST, ST(5)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fstp dword ptr [esi]" "\n\t"
|
||||
|
||||
" fld dword ptr [edi+0x10]" "\n\t"
|
||||
" fmul ST, ST(1)" "\n\t"
|
||||
" fld dword ptr [edi+0x14]" "\n\t"
|
||||
" fmul ST, ST(3)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [edi+0x18]" "\n\t"
|
||||
" fmul ST, ST(4)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [edi+0x1C]" "\n\t"
|
||||
" fmul ST, ST(5)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fstp dword ptr [esi+0x10]" "\n\t"
|
||||
|
||||
" fld dword ptr [edi+0x20]" "\n\t"
|
||||
" fmul ST, ST(1)" "\n\t"
|
||||
" fld dword ptr [edi+0x24]" "\n\t"
|
||||
" fmul ST, ST(3)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [edi+0x28]" "\n\t"
|
||||
" fmul ST, ST(4)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [edi+0x2C]" "\n\t"
|
||||
" fmul ST, ST(5)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fstp dword ptr [esi+0x20]" "\n\t"
|
||||
|
||||
" fld dword ptr [edi+0x30]" "\n\t"
|
||||
" fmulp ST(1), ST" "\n\t"
|
||||
" fld dword ptr [edi+0x34]" "\n\t"
|
||||
" fmulp ST(2), ST" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [edi+0x38]" "\n\t"
|
||||
" fmulp ST(2), ST" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [edi+0x3C]" "\n\t"
|
||||
" fmulp ST(2), ST" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fstp dword ptr [esi+0x30]" "\n\t"
|
||||
|
||||
" add esi, 4" "\n\t"
|
||||
" dec cx" "\n\t"
|
||||
" cmp cx, 0" "\n\t"
|
||||
" ja MultMatrix_Loop" "\n\t"
|
||||
".att_syntax prefix" "\n\t"
|
||||
: /* no output */
|
||||
: "S"(m0), "D"(m1), "c"(4)
|
||||
: "memory" );
|
||||
# else // X86_ASM
|
||||
#else // WIN32
|
||||
int i;
|
||||
float dst[4][4];
|
||||
|
||||
|
@ -250,13 +134,12 @@ MultMatrix_Loop:
|
|||
dst[3][i] = m0[3][i]*m1[3][3] + m0[2][i]*m1[3][2] + m0[1][i]*m1[3][1] + m0[0][i]*m1[3][0];
|
||||
}
|
||||
memcpy( m0, dst, sizeof(float) * 16 );
|
||||
# endif // !X86_ASM
|
||||
#endif // __LINUX__
|
||||
#endif // WIN32
|
||||
}
|
||||
|
||||
inline void Transpose3x3Matrix( float mtx[4][4] )
|
||||
{
|
||||
#ifndef __LINUX__
|
||||
#ifdef WIN32
|
||||
__asm
|
||||
{
|
||||
mov esi, [mtx]
|
||||
|
@ -276,29 +159,7 @@ inline void Transpose3x3Matrix( float mtx[4][4] )
|
|||
mov dword ptr [esi+18h], ebx
|
||||
mov dword ptr [esi+24h], eax
|
||||
}
|
||||
#else // !__LINUX__
|
||||
# ifdef X86_ASM
|
||||
__asm__ __volatile__(
|
||||
".intel_syntax noprefix" "\n\t"
|
||||
" mov eax, dword ptr [esi+0x04]" "\n\t"
|
||||
" mov ebx, dword ptr [esi+0x10]" "\n\t"
|
||||
" mov dword ptr [esi+0x04], ebx" "\n\t"
|
||||
" mov dword ptr [esi+0x10], eax" "\n\t"
|
||||
|
||||
" mov eax, dword ptr [esi+0x08]" "\n\t"
|
||||
" mov ebx, dword ptr [esi+0x20]" "\n\t"
|
||||
" mov dword ptr [esi+0x08], ebx" "\n\t"
|
||||
" mov dword ptr [esi+0x20], eax" "\n\t"
|
||||
|
||||
" mov eax, dword ptr [esi+0x18]" "\n\t"
|
||||
" mov ebx, dword ptr [esi+0x24]" "\n\t"
|
||||
" mov dword ptr [esi+0x18], ebx" "\n\t"
|
||||
" mov dword ptr [esi+0x24], eax" "\n\t"
|
||||
".att_syntax prefix" "\n\t"
|
||||
: /* no output */
|
||||
: "S"(mtx)
|
||||
: "%eax", "%ebx", "memory" );
|
||||
# else // X86_ASM
|
||||
#else // WIN32
|
||||
float tmp;
|
||||
|
||||
tmp = mtx[0][1];
|
||||
|
@ -312,13 +173,12 @@ inline void Transpose3x3Matrix( float mtx[4][4] )
|
|||
tmp = mtx[1][2];
|
||||
mtx[1][2] = mtx[2][1];
|
||||
mtx[2][1] = tmp;
|
||||
# endif // !X86_ASM
|
||||
#endif // __LINUX__
|
||||
#endif // WIN32
|
||||
}
|
||||
|
||||
inline void TransformVertex( float vtx[4], float mtx[4][4] )//, float perspNorm )
|
||||
{
|
||||
#ifndef __LINUX__
|
||||
#ifdef WIN32
|
||||
__asm {
|
||||
mov esi, dword ptr [vtx]
|
||||
mov ebx, dword ptr [mtx]
|
||||
|
@ -375,66 +235,7 @@ inline void TransformVertex( float vtx[4], float mtx[4][4] )//, float perspNorm
|
|||
// fmul dword ptr [perspNorm] // (vtx2*mtx23+vtx1*mtx13+vtx0*mtx03+mtx33)*perspNorm
|
||||
fstp dword ptr [esi+0Ch] //
|
||||
}
|
||||
#else // !__LINUX__
|
||||
# ifdef X86_ASM
|
||||
__asm__ __volatile__(
|
||||
".intel_syntax noprefix" "\n\t"
|
||||
" fld dword ptr [esi+8]" "\n\t"
|
||||
" fld dword ptr [esi+4]" "\n\t"
|
||||
" fld dword ptr [esi]" "\n\t"
|
||||
|
||||
" fld dword ptr [ebx]" "\n\t"
|
||||
" fmul ST, ST(1)" "\n\t"
|
||||
" fld dword ptr [ebx+0x10]" "\n\t"
|
||||
" fmul ST, ST(3)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [ebx+0x20]" "\n\t"
|
||||
" fmul ST, ST(4)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fadd dword ptr [ebx+0x30]" "\n\t"
|
||||
// " fmul dword ptr [perspNorm]" "\n\t"
|
||||
" fstp dword ptr [esi]" "\n\t"
|
||||
|
||||
" fld dword ptr [ebx+0x04]" "\n\t"
|
||||
" fmul ST, ST(1)" "\n\t"
|
||||
" fld dword ptr [ebx+0x14]" "\n\t"
|
||||
" fmul ST, ST(3)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [ebx+0x24]" "\n\t"
|
||||
" fmul ST, ST(4)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fadd dword ptr [ebx+0x34]" "\n\t"
|
||||
// " fmul dword ptr [perspNorm]" "\n\t"
|
||||
" fstp dword ptr [esi+0x04]" "\n\t"
|
||||
|
||||
" fld dword ptr [ebx+0x08]" "\n\t"
|
||||
" fmul ST, ST(1)" "\n\t"
|
||||
" fld dword ptr [ebx+0x18]" "\n\t"
|
||||
" fmul ST, ST(3)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [ebx+0x28]" "\n\t"
|
||||
" fmul ST, ST(4)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fadd dword ptr [ebx+0x38]" "\n\t"
|
||||
// " fmul dword ptr [perspNorm]" "\n\t"
|
||||
" fstp dword ptr [esi+0x08]" "\n\t"
|
||||
|
||||
" fld dword ptr [ebx+0x0C]" "\n\t"
|
||||
" fmulp ST(1), ST" "\n\t"
|
||||
" fld dword ptr [ebx+0x1C]" "\n\t"
|
||||
" fmulp ST(2), ST" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [ebx+0x2C]" "\n\t"
|
||||
" fmulp ST(2), ST" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fadd dword ptr [ebx+0x3C]" "\n\t"
|
||||
// " fmul dword ptr [perspNorm]" "\n\t"
|
||||
" fstp dword ptr [esi+0x0C]" "\n\t"
|
||||
".att_syntax prefix" "\n\t"
|
||||
: /* no output */
|
||||
: "S"(vtx), "b"(mtx)
|
||||
: "memory" );
|
||||
# else // X86_ASM
|
||||
#else // WIN32
|
||||
float x, y, z, w;
|
||||
x = vtx[0];
|
||||
y = vtx[1];
|
||||
|
@ -461,13 +262,12 @@ inline void TransformVertex( float vtx[4], float mtx[4][4] )//, float perspNorm
|
|||
vtx[1] += mtx[3][1];
|
||||
vtx[2] += mtx[3][2];
|
||||
vtx[3] += mtx[3][3];
|
||||
# endif // X86_ASM
|
||||
#endif // __LINUX__
|
||||
#endif // WIN32
|
||||
}
|
||||
|
||||
inline void TransformVector( float vec[3], float mtx[4][4] )
|
||||
{
|
||||
#ifndef __LINUX__
|
||||
#ifdef WIN32
|
||||
__asm {
|
||||
mov esi, dword ptr [vec]
|
||||
mov ebx, dword ptr [mtx]
|
||||
|
@ -506,48 +306,7 @@ inline void TransformVector( float vec[3], float mtx[4][4] )
|
|||
fadd // vec2*mtx22+vec1*mtx12+vec0*mtx02
|
||||
fstp dword ptr [esi+08h] //
|
||||
}
|
||||
#else // !__LINUX__
|
||||
# ifdef X86_ASM
|
||||
__asm__ __volatile__(
|
||||
".intel_syntax noprefix" "\n\t"
|
||||
" fld dword ptr [esi+8]" "\n\t"
|
||||
" fld dword ptr [esi+4]" "\n\t"
|
||||
" fld dword ptr [esi]" "\n\t"
|
||||
|
||||
" fld dword ptr [ebx]" "\n\t"
|
||||
" fmul ST, ST(1)" "\n\t"
|
||||
" fld dword ptr [ebx+0x10]" "\n\t"
|
||||
" fmul ST, ST(3)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [ebx+0x20]" "\n\t"
|
||||
" fmul ST, ST(4)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fstp dword ptr [esi]" "\n\t"
|
||||
|
||||
" fld dword ptr [ebx+0x04]" "\n\t"
|
||||
" fmul ST, ST(1)" "\n\t"
|
||||
" fld dword ptr [ebx+0x14]" "\n\t"
|
||||
" fmul ST, ST(3)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [ebx+0x24]" "\n\t"
|
||||
" fmul ST, ST(4)" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fstp dword ptr [esi+0x04]" "\n\t"
|
||||
|
||||
" fld dword ptr [ebx+0x08]" "\n\t"
|
||||
" fmulp ST(1), ST" "\n\t"
|
||||
" fld dword ptr [ebx+0x18]" "\n\t"
|
||||
" fmulp ST(2), ST" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fld dword ptr [ebx+0x28]" "\n\t"
|
||||
" fmulp ST(2), ST" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fstp dword ptr [esi+0x08]" "\n\t"
|
||||
".att_syntax prefix" "\n\t"
|
||||
: /* no output */
|
||||
: "S"(vec), "b"(mtx)
|
||||
: "memory" );
|
||||
# else // X86_ASM
|
||||
#else // WIN32
|
||||
vec[0] = mtx[0][0] * vec[0]
|
||||
+ mtx[1][0] * vec[1]
|
||||
+ mtx[2][0] * vec[2];
|
||||
|
@ -557,13 +316,12 @@ inline void TransformVector( float vec[3], float mtx[4][4] )
|
|||
vec[2] = mtx[0][2] * vec[0]
|
||||
+ mtx[1][2] * vec[1]
|
||||
+ mtx[2][2] * vec[2];
|
||||
# endif // !X86_ASM
|
||||
#endif // __LINUX__
|
||||
#endif // WIN32
|
||||
}
|
||||
|
||||
inline void Normalize( float v[3] )
|
||||
{
|
||||
#ifndef __LINUX__
|
||||
#ifdef WIN32
|
||||
__asm {
|
||||
mov esi, dword ptr [v]
|
||||
// ST(6) ST(5) ST(4) ST(3) ST(2) ST(1) ST
|
||||
|
@ -594,41 +352,7 @@ inline void Normalize( float v[3] )
|
|||
End:
|
||||
finit
|
||||
}
|
||||
#else // !__LINUX__
|
||||
# ifdef X86_ASM
|
||||
__asm__ __volatile__(
|
||||
".intel_syntax noprefix" "\n\t"
|
||||
" fld dword ptr [esi+0x08]" "\n\t"
|
||||
" fld dword ptr [esi+0x04]" "\n\t"
|
||||
" fld dword ptr [esi]" "\n\t"
|
||||
" fld1" "\n\t"
|
||||
" fld ST(3)" "\n\t"
|
||||
" fmul ST, ST" "\n\t"
|
||||
" fld ST(3)" "\n\t"
|
||||
" fmul ST, ST" "\n\t"
|
||||
" fld ST(3)" "\n\t"
|
||||
" fmul ST, ST" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" ftst" "\n\t"
|
||||
" fstsw ax" "\n\t"
|
||||
" sahf" "\n\t"
|
||||
" jz End" "\n\t"
|
||||
" fsqrt" "\n\t"
|
||||
" fdiv" "\n\t"
|
||||
" fmul ST(3), ST" "\n\t"
|
||||
" fmul ST(2), ST" "\n\t"
|
||||
" fmul" "\n\t"
|
||||
" fstp dword ptr [esi]" "\n\t"
|
||||
" fstp dword ptr [esi+0x04]" "\n\t"
|
||||
" fstp dword ptr [esi+0x08]" "\n\t"
|
||||
"End:" "\n\t"
|
||||
" finit" "\n\t"
|
||||
".att_syntax prefix" "\n\t"
|
||||
: /* no output */
|
||||
: "S"(v)
|
||||
: "memory", "cc" );
|
||||
# else // X86_ASM
|
||||
#else // WIN32
|
||||
float len;
|
||||
|
||||
len = (float)(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
|
||||
|
@ -639,175 +363,13 @@ End:
|
|||
v[1] /= (float)len;
|
||||
v[2] /= (float)len;
|
||||
}
|
||||
# endif // X86_ASM
|
||||
#endif // __LINUX__
|
||||
#endif // WIN32
|
||||
}
|
||||
|
||||
inline void Normalize2D( float v[2] )
|
||||
{
|
||||
#ifndef __LINUX__
|
||||
__asm {
|
||||
mov esi, dword ptr [v]
|
||||
|
||||
// ST(6) ST(5) ST(4) ST(3) ST(2) ST(1) ST
|
||||
fld dword ptr [esi+04h] // v1
|
||||
fld dword ptr [esi] // v1 v0
|
||||
fld1 // v1 v0 1.0
|
||||
fld ST(2) // v1 v0 1.0 v1
|
||||
fmul ST, ST // v1 v0 1.0 v1*v1
|
||||
fld ST(2) // v1 v0 1.0 v1*v1 v0
|
||||
fmul ST, ST // v1 v0 1.0 v1*v1 v0*v0
|
||||
fadd // v1 v0 1.0 v1*v1+v0*v0
|
||||
fsqrt // v1 v0 1.0 len
|
||||
fdiv // v1 v0 1.0/len
|
||||
fmul ST(2), ST // v1*(1.0/len) v0 1.0/len
|
||||
fmul // v1*(1.0/len) v0*(1.0/len)
|
||||
fstp dword ptr [esi] // v1*(1.0/len)
|
||||
fstp dword ptr [esi+04h] //
|
||||
}
|
||||
#else // !__LINUX__
|
||||
# ifdef X86_ASM
|
||||
__asm__ __volatile__(
|
||||
".intel_syntax noprefix" "\n\t"
|
||||
" fld dword ptr [esi+0x04]" "\n\t"
|
||||
" fld dword ptr [esi]" "\n\t"
|
||||
" fld1" "\n\t"
|
||||
" fld ST(2)" "\n\t"
|
||||
" fmul ST, ST" "\n\t"
|
||||
" fld ST(2)" "\n\t"
|
||||
" fmul ST, ST" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fsqrt" "\n\t"
|
||||
" fdiv" "\n\t"
|
||||
" fmul ST(2), ST" "\n\t"
|
||||
" fmul" "\n\t"
|
||||
" fstp dword ptr [esi]" "\n\t"
|
||||
" fstp dword ptr [esi+0x04]" "\n\t"
|
||||
".att_syntax prefix" "\n\t"
|
||||
: /* no output */
|
||||
: "S"(v)
|
||||
: "memory" );
|
||||
# else // X86_ASM
|
||||
float len;
|
||||
|
||||
len = (float)sqrt( v[0]*v[0] + v[1]*v[1] );
|
||||
/* if (len != 0.0)
|
||||
{*/
|
||||
v[0] /= len;
|
||||
v[1] /= len;
|
||||
/* }
|
||||
else
|
||||
{
|
||||
v[0] = 0.0;
|
||||
v[1] = 0.0;
|
||||
}*/
|
||||
# endif // !X86_ASM
|
||||
#endif // __LINUX__
|
||||
}
|
||||
|
||||
|
||||
/*inline float Determinate4x4( float m[4][4] )
|
||||
{
|
||||
float m_2233_3223;
|
||||
float m_2133_3123;
|
||||
float m_2132_3122;
|
||||
float m_2033_3023;
|
||||
float m_2032_3022;
|
||||
float m_2031_3021;
|
||||
float det, ret;
|
||||
|
||||
__asm {
|
||||
mov esi, dword ptr [m]
|
||||
|
||||
// ST(7) ST(6) ST(5) ST(4) ST(3) ST(2) ST(1) ST
|
||||
fld dword ptr [esi+20h] // m20
|
||||
fld dword ptr [esi+30h] // m20 m30
|
||||
|
||||
fld dword ptr [esi+34h] // m20 m30 m31
|
||||
fmul ST, ST(2) // m20 m30 m20*m31
|
||||
fld dword ptr [esi+24h] // m20 m30 m20*m31 m21
|
||||
fmul ST, ST(2) // m20 m30 m20*m31 m30*m21
|
||||
fsub // m20 m30 m20*m31-m30*m21
|
||||
fstp dword ptr [m_2031_3021] // m20 m30
|
||||
|
||||
fld dword ptr [esi+38h] // m20 m30 m32
|
||||
fmul ST, ST(2) // m20 m30 m20*m32
|
||||
fld dword ptr [esi+28h] // m20 m30 m20*m32 m22
|
||||
fmul ST, ST(2) // m20 m30 m20*m32 m30*m22
|
||||
fsub // m20 m30 m20*m32-m30*m22
|
||||
fstp dword ptr [m_2032_3022] // m20 m30
|
||||
|
||||
fld dword ptr [esi+3Ch] // m20 m30 m33
|
||||
fmulp ST(2), ST // m20*m33 m30
|
||||
fld dword ptr [esi+2Ch] // m20*m33 m30 m23
|
||||
fmul // m20*m33 m30*m23
|
||||
fsub // m20*m33-m30*m23
|
||||
fstp dword ptr [m_2033_3023] //
|
||||
|
||||
fld dword ptr [esi+24h] // m21
|
||||
fld dword ptr [esi+34h] // m21 m31
|
||||
fld dword ptr [esi+38h] // m21 m31 m32
|
||||
fld dword ptr [esi+28h] // m21 m31 m32 m22
|
||||
|
||||
fld ST(1) // m21 m31 m32 m22 m32
|
||||
fmul ST, ST(4) // m21 m31 m32 m22 m21*m32
|
||||
fld ST(1) // m21 m31 m32 m22 m21*m32 m22
|
||||
fmul ST, ST(4) // m21 m31 m32 m22 m21*m32 m31*m22
|
||||
fsub // m21 m31 m32 m22 m21*m32-m31*m22
|
||||
fstp dword ptr [m_2132_3122] // m21 m31 m32 m22
|
||||
|
||||
fld dword ptr [esi+3Ch] // m21 m31 m32 m22 m33
|
||||
fxch ST(1), ST // m21 m31 m32 m33 m22
|
||||
fmul ST, ST(1) // m21 m31 m32 m33 m22*m33
|
||||
fld dword ptr [esi+2Ch] // m21 m31 m32 m33 m22*m33 m23
|
||||
fxch ST(3), ST // m21 m31 m23 m33 m22*m33 m32
|
||||
fmul ST, ST(3) // m21 m31 m23 m33 m22*m33 m32*m23
|
||||
fsub // m21 m31 m23 m33 m22*m33-m32*m23
|
||||
fstp dword ptr [m_2233_3223] // m21 m31 m23 m33
|
||||
|
||||
fmulp ST(3), ST // m21*m33 m31 m23
|
||||
fmul // m21*m33 m31*m23
|
||||
fsub // m21*m33-m31*m23
|
||||
tstp dword ptr [m_2133_3123] //
|
||||
|
||||
fld0 // 0.0
|
||||
fld dword ptr [esi+1Ch] // 0.0 m13
|
||||
fld dword ptr [esi+18h] // 0.0 m13 m12
|
||||
fld dword ptr [m_2233_3223] // 0.0 m13 m12 m_2233_3223
|
||||
|
||||
fld dword ptr [esi+14h] // 0.0 m13 m12 m_2233_3223 m11
|
||||
fmul ST, ST(1) // 0.0 m13 m12 m_2233_3223 m11*m_2233_3223
|
||||
fld dword ptr [m_2133_3123] // 0.0 m13 m12 m_2233_3223 m11*m_2233_3223 m_2133_3123
|
||||
fmul ST, ST(3) // 0.0 m13 m12 m_2233_3223 m11*m_2233_3223 m12*m_2133_3123
|
||||
fsub // 0.0 m13 m12 m_2233_3223 m11*m_2233_3223-m12*m_2133_3123
|
||||
fld dword ptr [m_2132_3122] // 0.0 m13 m12 m_2233_3223 m11*m_2233_3223-m12*m_2133_3123 m_2132_3122
|
||||
fmul ST, ST(4) // 0.0 m13 m12 m_2233_3223 m11*m_2233_3223-m12*m_2133_3123 m13*m_2132_3122
|
||||
fadd // 0.0 m13 m12 m_2233_3223 m11*m_2233_3223-m12*m_2133_3123+m13*m_2132_3122=det1
|
||||
fmul dword ptr [esi] // 0.0 m13 m12 m_2233_3223 det1*m00=res
|
||||
faddp ST(4), ST // res m13 m12 m_2233_3223
|
||||
// needs work from here on
|
||||
fmul dword ptr [esi+10h] // res m13 m12 m10*m_2233_3223
|
||||
fld dword ptr [m_2033_3023] // res m13 m12 m10*m_2233_3223 m_2033_3023
|
||||
fxch ST(2), ST // res m13 m_2033_3023 m10*m_2233_3223 m12
|
||||
fmul ST, ST(2) // res m13 m_2033_3023 m10*m_2233_3223 m12*m_2033_3023
|
||||
fsub // res m13 m_2033_3023 m10*m_2233_3223-m12*m_2033_3023
|
||||
fld dword ptr [m_2032_3022] // res m13 m_2033_3023 m10*m_2233_3223-m12*m_2033_3023 m_2032_3022
|
||||
fmul ST, ST(3) // res m13 m_2033_3023 m10*m_2233_3223-m12*m_2033_3023 m13*m_2032_3022
|
||||
fadd // res m13 m_2033_3023 m10*m_2233_3223-m12*m_2033_3023+m13*m_2032_3022=det
|
||||
fmul dword ptr [esi+04h] // res m13 m_2033_3023 det*m01
|
||||
fsubp ST(3), ST // res m13 m_2033_3023
|
||||
|
||||
fld dword ptr [esi+10h]
|
||||
|
||||
det = mr._21 * mr_3244_4234 - mr._22 * mr_3144_4134 + mr._24 * mr_3142_4132;
|
||||
res += mr._13 * det;
|
||||
}
|
||||
}*/
|
||||
|
||||
inline float DotProduct( float v0[3], float v1[3] )
|
||||
{
|
||||
float dot;
|
||||
#ifndef __LINUX__
|
||||
#ifdef WIN32
|
||||
__asm {
|
||||
mov esi, dword ptr [v0]
|
||||
mov edi, dword ptr [v1]
|
||||
|
@ -823,27 +385,9 @@ inline float DotProduct( float v0[3], float v1[3] )
|
|||
fadd
|
||||
fstp dword ptr [ebx]
|
||||
}
|
||||
#else // !__LINUX__
|
||||
# ifdef X86_ASM
|
||||
__asm__ __volatile__(
|
||||
".intel_syntax noprefix" "\n\t"
|
||||
" fld dword ptr [esi]" "\n\t"
|
||||
" fmul dword ptr [edi]" "\n\t"
|
||||
" fld dword ptr [esi+0x04]" "\n\t"
|
||||
" fmul dword ptr [edi+0x04]" "\n\t"
|
||||
" fld dword ptr [esi+0x08]" "\n\t"
|
||||
" fmul dword ptr [edi+0x08]" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fadd" "\n\t"
|
||||
" fstp dword ptr [ebx]" "\n\t"
|
||||
".att_syntax prefix" "\n\t"
|
||||
: /* no output */
|
||||
: "S"(v0), "D"(v1), "b"(&dot)
|
||||
: "memory" );
|
||||
# else // X86_ASM
|
||||
#else // WIN32
|
||||
dot = v0[0]*v1[0] + v0[1]*v1[1] + v0[2]*v1[2];
|
||||
# endif // !X86_ASM
|
||||
#endif // __LINUX__
|
||||
#endif // WIN32
|
||||
return dot;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user