X86 如何在256位AVX(YMM)寄存器中交换中间的两个64位

X86 如何在256位AVX(YMM)寄存器中交换中间的两个64位,x86,simd,avx,X86,Simd,Avx,有没有办法在256位AVX(YMM)寄存器中交换中间的两个64位 我知道我们可以利用VPERM2F128来交换低128位和高128位,而vshufps似乎只能在高128位和低128位内部工作 所以我想知道,对于这种典型情况,有没有有效的指导 提前谢谢 谢谢大家!我发现AVX2 vpermq很可能适用于此。您需要同时使用洗牌和排列。没有既具有64位粒度又可以跨越128位边界的指令。我认为AVX2可以在一条指令中完成这项工作。我怀疑在YMM寄存器的两半之间存在某种结构障碍。AVX参考文件特别指出,对

有没有办法在256位AVX(YMM)寄存器中交换中间的两个64位

我知道我们可以利用VPERM2F128来交换低128位和高128位,而vshufps似乎只能在高128位和低128位内部工作

所以我想知道,对于这种典型情况,有没有有效的指导


提前谢谢

谢谢大家!我发现AVX2 vpermq很可能适用于此。

您需要同时使用洗牌和排列。没有既具有64位粒度又可以跨越128位边界的指令。我认为AVX2可以在一条指令中完成这项工作。我怀疑在YMM寄存器的两半之间存在某种结构障碍。AVX参考文件特别指出,对于VPERMILPS/VPERMILPD,如果没有问题,它应该能够完成这项工作,“源元素被限制在与目标相同的源128位区域”。