我有一个__mmask64掩码寄存器,我需要将其切换成4个__mmask16掩码寄存器。
我(错误地)假设以下代码行已经完成了这个技巧:
__mmask16 mask_16 = static_cast<__mmask16>(mask_64 >> 16);
但我得到(英特尔c ++编译器18.0):
kmovq r14,k1
shr r15,10h
kmovw k2,r15d
由于Intel Intrinsics Guide没有像_mm512_kshift(k,imm8)这样的东西,例如_mm512_kand的定义只是:
#define _mm512_kand(k1, k2) ((__mmask16) ((k1) & (k2)))
我认为换班会给我一个KSHIFTRW。
问题:如何使用C ++生成KSHIFTRW。
修改:我刚刚找到了一个相关问题并给出了足够的答案:Missing AVX-512 intrinsics for masks?