我们正在将一个主要应用程序从Arm32移植到Arm64.我们的算法经常使用SSAT
和USAT
指令.它们非常有用,执行任何大小的左移或右移,然后有符号或无符号饱和到任意数量的位.这对于图像处理算法非常有用,因为我们可以执行一些生成32位整数结果的数学运算,然后从中获取所需的任何位(饱和到输出图像的位深度的最大值/最小值),一条指令.
这些指令在Arm64中莫名其妙地消失了,我们发现的最接近的替代方法是SQSHRN
/ UQSHRN
/ SQSHLN
/ UQSHLN
执行移位和饱和但在它们执行的饱和度方面受到更多限制(USAT
可以饱和到任何宽度,甚至7位;新指令可以仅饱和到输入宽度的一半,例如在32位输入的情况下为16位,这将需要额外的处理以实现所需的结果).
有人可以解释为什么删除这些指令,以及有效移植使用它们的现有代码的最佳方法是什么?