2012-12-10 61 views
4

我有一些代碼使用SIMD優化和各種__m128i變量。顯然,printf無法處理它們。有沒有簡單的方法讓我打印他們的內容? 我正在使用C/C++的Visual Studio 2010。printf SSE變量__m128i在Visual Studio中

+1

獲取底部和上部分爲int64_t並打印這些?將你自己的字符串轉換除以十,直到達到0,轉換爲ASCII,然後反轉字符串? – 2012-12-10 16:16:22

+0

這絕對是我考慮的一個選項。我希望有一個更簡單的解決方案(儘管這根本不難)。 –

回答

3

使用此功能可打印出來:

void print128_num(__m128i var) 
{ 
    uint16_t *val = (uint16_t*) &var;//can also use uint32_t instead of 16_t 
    printf("Numerical: %i %i %i %i %i %i %i %i \n", 
      val[0], val[1], val[2], val[3], val[4], val[5], 
      val[6], val[7]); 
} 

你打印前拆分成128位16位(或32位)。

這是64位的分裂和印刷的方式,如果您有可用的64位支持:

void print128_num(__m128i var) 
{ 
    int64_t *v64val = (int64_t*) &var; 
    printf("%.16llx %.16llx\n", v64val[1], v64val[0]); 
} 

更換llxlld如果u想int輸出。

+0

val [7],val [6],val [5],val [4],val [0] 3],val [2], val [1],val [0]);'似乎更符合邏輯打印順序。 – enthusiasticgeek

1

我發現基於弗拉德的做法答案:

__m128i var; 
printf("0x%I64x%I64x\n",var.m128i_i64[1], var.m128i_i64[0]); 

這將打印整個128位值作爲十六進制字符串。