小编ter*_*ert的帖子

适用于AVX512掩码寄存器(k1 ... k7)的GNU C内联asm输入约束?

AVX512为其算术命令引入了opmask功能。一个简单的示例:godbolt.org

#include <immintrin.h>
__m512i add(__m512i a, __m512i b) {
    __m512i sum;
    asm(
        "mov ebx, 0xAAAAAAAA;                                   \n\t"
        "kmovw k1, ebx;                                         \n\t"
        "vpaddd %[SUM] %{k1%}%{z%}, %[A], %[B];  # conditional add   "
        :   [SUM]   "=v"(sum)
        :   [A]     "v" (a),
            [B]     "v" (b)
        : "ebx", "k1"  // clobbers
       );
    return sum;
}
Run Code Online (Sandbox Code Playgroud)
-march=skylake-avx512 -masm=intel -O3
Run Code Online (Sandbox Code Playgroud)
 mov ebx,0xaaaaaaaa
 kmovw k1,ebx
 vpaddd zmm0{k1}{z},zmm0,zmm1
Run Code Online (Sandbox Code Playgroud)

问题是必须指定k1。

是否有类似于"r"整数的输入约束,除了它选择k寄存器而不是通用寄存器外?

c assembly gcc inline-assembly avx512

6
推荐指数
2
解决办法
222
查看次数

标签 统计

assembly ×1

avx512 ×1

c ×1

gcc ×1

inline-assembly ×1