2012-12-10 34 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位值作为十六进制字符串。