gpt4 book ai didi

gcc - 内联汇编代码来读/写 XMM 和 YMM 寄存器?

转载 作者:行者123 更新时间:2023-12-03 19:25:50 25 4
gpt4 key购买 nike

我有 2 个变量来模拟 X86 XMM 和 YMM,如下所示:

uint64_t xmm_value[2];
uint64_t ymm_value[4];

现在我想使用内联汇编来读写 XMM/YMM 寄存器。
  • 如何编写 GCC 内联汇编来复制 xmm_value注册XMM0 ?
  • 如何编写 GCC 内联汇编来复制寄存器 YMM0ymm_value ?

  • 我已经尝试搜索执行此操作的示例内联汇编,但找不到任何好的答案。谢谢!

    因此,在一些帮助下,我编写了这段代码,并且编译成功。我用 movups XMM 和 vmovups对于 YMM,如下所示。这是正确的,我还能优化我的代码吗?
    __m128 xmm0;
    __m256 ymm0;

    // write to XMM0, and read from YMM0
    __asm__("movups %1, %%xmm0\n\t"
    "vmovups %%ymm0, %0"
    : "=m"(ymm0)
    : "m"(xmm0)
    : "xmm0", "ymm0");

    更新 2:这是我的完整代码(添加了 vpbroadcastb)
    __m128 xmm0;
    __m256 ymm0;

    // write to XMM0, and read from YMM0
    __asm__("movups %1, %%xmm0\n\t"
    "vpbroadcastb %%xmm0, %%ymm0\n\t"
    "vmovups %%ymm0, %0"
    : "=m"(ymm0)
    : "m"(xmm0)
    : "xmm0", "ymm0");

    想法是我想将 xmm0(变量)复制到 XMM0,然后运行 ​​ vpbroadcastb ,然后将 YMM0 中的结果复制到 ymm0(变量)。现在我意识到XMM0是YMM0的下半部分,那么这段代码还可以改进吗?

    最佳答案

    第一步是 #include <immintrin.h> ,其中包括所需类型的所有定义以及用于访问所有 MMX/SSE/AVX 指令的所有 Intel Intrinsics。对于大多数目的,您希望使用这些内在函数而不是内联汇编,因为它们更清晰、更便携,但如果您真的想使用内联汇编,您可以使用内在类型( __m64__m128__m128d__m256 等)以及 x 约束以绑定(bind)到正确类型的 xmm/ymm 寄存器。

    关于gcc - 内联汇编代码来读/写 XMM 和 YMM 寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57313195/

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