4

我有一些使用 SIMD 优化和各种 __m128i 变量的代码。显然, printf 无法处理它们。有没有一种简单的方法可以打印它们的内容?我正在使用带有 C/C++ 的 Visual Studio 2010。

4

2 回答 2

4

使用此功能打印它们:

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]);
}

如果您想要输出,请替换llx为。lldint

于 2012-12-10T18:15:58.507 回答
2

我根据 Vlad 的方法找到了答案:

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

这会将整个 128 位值打印为十六进制字符串。

于 2012-12-10T17:08:00.830 回答