小编kri*_*nan的帖子

使用 gcc 内联汇编加载和存储 YMM 寄存器


我正在尝试使用 gcc 内联 asm 加载和存储 YMM 寄存器。我使用 vmovdqa 来做这件事。

为了将 __m256i 存储到特定的 YMM 寄存器(比如 YMM10),我使用以下代码

__m256i addr;
//load value to addr
asm ("vmovdqa %0,%%ymm10\n\t"
            :
            : "x" (addr)
            :);
Run Code Online (Sandbox Code Playgroud)

为了将 YMM10 中的值加载到变量,我使用以下代码

__m256i readbuff;
asm ("vmovdqa %%ymm10,%0\n\t"\
            : "=x" (readbuff)\
            :\
            :);
Run Code Online (Sandbox Code Playgroud)

我在这里面临的问题是,在我用一个值加载 YMM10 之后,我只使用了加载了值的寄存器的一半。我的意思是只加载了 128 位,另一半全为零。

我做错了什么吗?我不确定要使用什么指令 - vmovdqa、vmovaps、vmovups。请就此给我建议。

c x86 gcc inline-assembly avx2

0
推荐指数
1
解决办法
143
查看次数

标签 统计

avx2 ×1

c ×1

gcc ×1

inline-assembly ×1

x86 ×1