我有一个 __mmask64 掩码寄存器,我需要将它分成 4 个 __mmask16 掩码寄存器。
我(错误地)假设以下代码行可以解决问题:
__mmask16 mask_16 = static_cast<__mmask16>(mask_64 >> 16);
但我得到(英特尔 c++ 编译器 18.0):
kmovq r14,k1
shr r15,10h
kmovw k2,r15d
由于英特尔内部指南没有类似 _mm512_kshift(k, imm8) 的内容,例如 _mm512_kand 的定义只是:
#define _mm512_kand(k1, k2) ((__mmask16) ((k1) & (k2)))
我认为换档会给我一个KSHIFTRW。
问题:如何使用 C++ 生成 KSHIFTRW。
编辑:我刚刚找到了一个相关的问题,答案很充分:Missing AVX-512 intrinsics for mask?