- 论坛徽章:
- 0
|
要优化一段在linux下的代码,有类似的嵌入Intel汇编的vector.cpp文件一个,如果我装了NASM的话,可以直接使用这个vector.cpp吗?如果可以,该如何修改gcc,让它自动调用NASM来汇编,而不是调用AS,请大牛指点一下!具体些或者给出个链接!
谢谢了!
下面是vector.cpp代码:
class vector
{
public:
float x,y,z,w;
inline vector()
{ ; };
inline vector(float x0,float y0,float z0)
{ x=x0; y=y0; z=z0; };
inline vector(float x0,float y0,float z0,float w0)
{ x=x0; y=y0; z=z0; w=w0; };
inline vector(vector &v)
{ *this=v; };
inline void null(void)
{ x=y=z=0; };
inline float length(void)
{ return (float)sqrt(x*x+y*y+z*z); };
inline void vec(float x0,float y0,float z0)
{ x=x0; y=y0; z=z0; };
inline void vec(float x0,float y0,float z0,float w0)
{ x=x0; y=y0; z=z0; w=w0; };
inline void negate(void)
{ x=-x; y=-y; z=-z; };
inline void cross(vector& v1,vector& v2)
{
#ifdef P3SIMD
__asm
{
mov esi, v1
mov edi, v2
movups xmm0, [esi]
movups xmm1, [edi]
movups xmm2, xmm0
movups xmm3, xmm1
shufps xmm0, xmm0, 0xc9
shufps xmm1, xmm1, 0xd2
mulps xmm0, xmm1
shufps xmm2, xmm2, 0xd2
shufps xmm3, xmm3, 0xc9
mulps xmm2, xmm3
subps xmm0, xmm2
mov esi, this
movups [esi],xmm0
}
#else
x=v1.y*v2.z-v1.z*v2.y;
y=v1.z*v2.x-v1.x*v2.z;
z=v1.x*v2.y-v1.y*v2.x;
#endif
}
inline void normalize(void)
{
float len=(float)sqrt(x*x+y*y+z*z);
if (FP_BITS(len)==0) return;
len=1.0f/len;
x*=len; y*=len; z*=len;
}
inline float& operator[](int i) { return (&x)[i]; };
}; |
|
|