我们知道在 NEON 上,SIMD 寄存器q0
~q7
与浮点寄存器s0
~共享s31
。所以下面的代码有一个bug:
float_t fRatio = (float_t)srcWidth/dstWidth;
// NEON asm modified q0~q7
MyNeonFunctionPtr1(pData, Stride, (int32_t)(fHorRatio*m_iHorScale));
// following sentence use wrong "fHorRatio",
// which is modified by "MyNeonFunctionPtr1";
int32_t vertStepLuma = (int32_t)(fHorRatio*m_iVertScale);
在 x86 中,emms 可以解决。但是我如何在 NEON 上做到这一点?我的临时解决方案是使用volatile
on vertStepLuma
。有没有更好的办法?谢谢!