Мы знаем, что в NEON SIMD-регистры q0
~ q7
используются совместно с плавающими регистрами s0
~ s31
.Поэтому в приведенном ниже коде есть ошибка:
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
на vertStepLuma
.Есть ли способ лучше?Спасибо!