gcc内联simd汇编错误:短类型movdqu指令

时间:2016-04-11 06:22:35

标签: c x86 sse inline-assembly simd

我正在研究Linux x64中的SIMD(SSE)编程。 我想将一个数组短类型分配给另一个短数组类型var。 但执行结果是错误的 这是我的来源。什么是问题?

#include <stdio.h>
#include <emmintrin.h>

int main( int argc, char* argv[] )
{
    short sArrayA[8] = {1,2,3,4,5,6,7,8};
    short sArrayB[8] = {0,0,0,0,0,0,0,0};

    __asm__ __volatile__(
       "movdqu %1, %%xmm0\n\t"
       "movdqu %%xmm0, %0"
       :"=g"(sArrayB)
       :"x"(sArrayA)
       :"%xmm0"
    );

    printf("sArrayB : %d, %d, %d\n", sArrayB[0], sArrayB[1], sArrayB[2] );
    return 0;
}

结果是:

sArrayB : -13600, -24676, 32767

0 个答案:

没有答案