SSE2汇编指令和C++混合编程问题
按照Intel Architecture Optimization Manual得Sample
我定义了一个顶点结构体
__declspec(align(16)) struct Vertex{
float x,y,z,w;
};
16字节对齐,内存结构和_m128一样,_m128只不过是一个float[4],这样应该符合SIMD的对齐要求,而且声明在main的外部
写了个小函数
float Dot(Vertex* v1,Vertex* v2)
{
Vertex* tmp = new Vertex;
__asm{
MOVAPS XMM0,[v1];
MOVAPS XMM1,[v2];
MULPS XMM0,XMM1;
MOV EDX,tmp;
MOVAPS [EDX],XMM0;
};
return tmp->x + tmp->y + tmp->z;
};
按道理说应该是完全正确的,把顶点的数值传入XMM0 XMM1,乘法计算,然后存入一个临时变量,返回xyz项相加之和
int main()
{
Vertex V1 = {0.1f,0.1f,0.1f,0.1f};
Vertex V2 = {0.1f,0.1f,0.1f,0.1f};
cout<<Dot(&V1,&V2)<<endl;
system("PAUSE");
return 0;
}
编译链接都正确,可是运行的时候显示
0x0041c6c7异常,读取0xC0000005,读取0xffffffff发生访问冲突
求教!谢谢