+ -
当前位置:首页 → 问答吧 → AT&T 转 INTEL 的问题,大家帮忙看下哪里有问题

AT&T 转 INTEL 的问题,大家帮忙看下哪里有问题

时间:2011-09-12

来源:互联网

大家帮忙看下,写的哪里有问题

C/C++ code

typedef struct SIMDx86Matrix
{
    float m[16];
} SIMDx86Matrix;

void SIMDx86Matrix_AlignedSum(SIMDx86Matrix* Out, const SIMDx86Matrix* In)

    #if 0
    // 下面是AT&T的汇编代码, 用了SSE指令
    asm(
    "movaps   (%0), %%xmm0\n"
    "movaps 16(%0), %%xmm1\n"
    "movaps 32(%0), %%xmm2\n"
    "movaps 48(%0), %%xmm3\n"
    "addps   (%1), %%xmm0\n"
    "addps 16(%1), %%xmm1\n"
    "addps 32(%1), %%xmm2\n"
    "addps 48(%1), %%xmm3\n"
    "movaps %%xmm0,   (%0)\n"
    "movaps %%xmm1, 16(%0)\n"
    "movaps %%xmm2, 32(%0)\n"
    "movaps %%xmm3, 48(%0)\n"
    :
    : "r" (Out), "r" (In)
    );
    #else
    //这个是我转的INTEL的
    __asm {
        movaps xmm0, xmmword ptr [Out];
        movaps xmm1, xmmword ptr [Out + 16];
        movaps xmm2, xmmword ptr [Out + 32];
        movaps xmm3, xmmword ptr [Out + 48];
        addps  xmm0, xmmword ptr [In];
        addps  xmm1, xmmword ptr [In + 16];
        addps  xmm2, xmmword ptr [In + 32];
        addps  xmm3, xmmword ptr [In + 48];
        movaps xmmword ptr [Out], xmm0;
        movaps xmmword ptr [Out + 16], xmm1;
        movaps xmmword ptr [Out + 32], xmm2;
        movaps xmmword ptr [Out + 48], xmm3;
    }
    #endif

    // 以下省略




另外, 在vc2008总提示
warning C4405: 'Out' : identifier is reserved word
warning C4405: 'In' : identifier is reserved word

作者: needallcodes   发布时间: 2011-09-12

看下面的提示嘛
是提示说 In 和 Out是保留字,不能随便用
我猜可能是因为汇编器不一样造成的吧。在前面的代码中汇编器IO指令可能用的不是in out所以没问题
后面的VS中,用的应该是微软自家的汇编器MASM, 在MASM中In out都是IO指令中得关键字。

你把In Out换个名字试试(注意参数中得也要换~)。仅是猜测~~~~~ 

作者: wangzaiwei2006   发布时间: 2011-09-12

热门下载

更多