。所以下面的代码有一个错误: float_t fRatio = (float_t)srcWidth/dstWidth; //-6ren">
gpt4 book ai didi

c - NEON 上有类似 "emms"的东西吗?

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:29 26 4
gpt4 key购买 nike

我们知道在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 上执行此操作?我的临时解决方案是在 vertStepLuma 上使用 volatile。有没有更好的办法?谢谢!

最佳答案

您使用的是 gcc 内联汇编吗?然后使用 clobber 列表。您通知 GCC 您将使用特定的寄存器并且 gcc 不会在内联 asm block 之后将值存储在其中。在这里阅读:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.3

否则,如果它是在别处实现的外部函数,则 ABI 规定您只能破坏 q4、q5、q6 和 q7 寄存器:ARM to C calling convention, NEON registers to save修复函数以保留寄存器 (q0-q3),或者在您自己保存这些寄存器的地方围绕它创建一个内联汇编。

关于c - NEON 上有类似 "emms"的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9961685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com