簡體   English   中英

gcc內聯simd匯編錯誤:短型movdqu指令

[英]gcc inline simd assembly error : short type movdqu instruction

我正在研究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

使用內在函數而不是搞亂內聯匯編:

#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};

    __m128i v = _mm_loadu_si128((__m128i *)sArrayA);
    _mm_storeu_si128((__m128i *)sArrayB, v);

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

輸出:

sArrayB : 1, 2, 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM