我正在尝试实现一些内联汇编程序(在Visual Studio 2012 C++代码中)以利用SSE.我想添加7个数字1e9次,所以我把它们从RAM放到xmm0到xmm6的CPU寄存器中.当我使用此代码在visual studio 2012中使用内联汇编时:
C++代码:
for(int i=0;i<count;i++)
resVal+=val1+val2+val3+val4+val5+val6+val7;
Run Code Online (Sandbox Code Playgroud)
我的ASM代码:
int count=1000000000;
double resVal=0.0;
//placing values to register
__asm{
movsd xmm0,val1;placing var1 in xmm0 register
movsd xmm1,val2
movsd xmm2,val3
movsd xmm3,val4
movsd xmm4,val5
movsd xmm5,val6
movsd xmm6,val7
pxor xmm7,xmm7;//turns xmm7 to zero
}
for(int i=0;i<count;i++)
{
__asm
{
addsd xmm7,xmm0;//+=var1
addsd xmm7,xmm1;//+=var2
addsd xmm7,xmm2;
addsd xmm7,xmm3;
addsd xmm7,xmm4;
addsd xmm7,xmm5;
addsd xmm7,xmm6;//+=var7
}
}
__asm
{
movsd resVal,xmm7;//placing xmm7 into resVal
}
Run Code Online (Sandbox Code Playgroud)
这是来自C++编译器的代码'resVal + = val1 + val2 + …