我需要实现一个没有 AVX2 的类似 vpgatherdd 的机制。
说,我有 4 个 i32 偏移量包装在 xmm0 中。我需要提取 xmm0 中的每个元素来完成这项mov reg, [base + offset]
工作。
问题是我应该如何提取元素?
有pextrd
,其延迟为 3。而且我并没有像流式一样这样做,每次运行时都会以 8 或 4 计算偏移量。
还有psrldq
,其延迟为 1 ,有 1 movd
,似乎我可以在 2 个周期内完成提取工作。
虽然1个周期不多,但我想知道这里哪个更好。下一个 8-offsets-extraction 是否可以隐藏这种延迟?
是否有选择长延迟指令与短延迟指令组的一般规则?