gpt4 book ai didi

c - 打印一个 __m128i 变量

转载 作者:太空狗 更新时间:2023-10-29 16:26:44 24 4
gpt4 key购买 nike

我正在尝试学习使用内在函数进行编码,下面是执行加法的代码

使用的编译器:icc

#include<stdio.h>
#include<emmintrin.h>
int main()
{
__m128i a = _mm_set_epi32(1,2,3,4);
__m128i b = _mm_set_epi32(1,2,3,4);
__m128i c;
c = _mm_add_epi32(a,b);
printf("%d\n",c[2]);
return 0;
}

我收到以下错误:

test.c(9): error: expression must have pointer-to-object type
printf("%d\n",c[2]);

如何打印 __m128i 类型的变量 c 中的值

最佳答案

使用这个函数来打印它们:

#include <stdint.h>
#include <string.h>

void print128_num(__m128i var)
{
uint16_t val[8];
memcpy(val, &var, sizeof(val));
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 位拆分和打印的方式:

#include <inttypes.h>

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

注意:&var 直接转换为 int*uint16_t* 也适用于 MSVC,但是这违反了严格的别名并且是未定义的行为。使用 memcpy 是执行相同操作的标准兼容方式,并且只需进行最少的优化,编译器就会生成完全相同的二进制代码。

关于c - 打印一个 __m128i 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13257166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com