gcc—将双精度复制为整数的高执行时间

gcc—将双精度复制为整数的高执行时间,gcc,floating-point,arm,double,Gcc,Floating Point,Arm,Double,我正在实施一个过滤器,我需要尽可能优化实施。我意识到有一条指令需要很多周期,我不明白为什么: bool filters_apply(...) { short sSample; double dSample; ... ... sSample = (short) dSample; //needs a lot of cycles to execute ... ... } 我正在使用de GCC选项:-mcpu=arm926ej-s-mfloat abi=

我正在实施一个过滤器,我需要尽可能优化实施。我意识到有一条指令需要很多周期,我不明白为什么:

bool filters_apply(...)
{
   short sSample;
   double dSample;
   ...
   ...
   sSample = (short) dSample;   //needs a lot of cycles to execute
   ...
   ...
}
我正在使用de GCC选项:-mcpu=arm926ej-s-mfloat abi=softfp-mfpu=vfp 我曾尝试使用FP ABI“hard”进行编译,以查看是否存在差异,但编译器没有实现它

谁能解释一下为什么指令需要这么多周期


非常感谢

只需查看您提供的信息,这可能是因为您将数据从浮点寄存器传输到arm寄存器时发生了暂停

这表明,这种操作大约需要20个周期


尽量使用浮点变量,例如将
sSample
转换为浮点。您的(
vfpv2
)应该提供32个单精度(16个双精度)寄存器。

可能是因为您将值从fp处理器寄存器移动到arm寄存器吗?我必须稍后将sSample传输到一个短缓冲区,以实现音频设备的帧。这意味着我迟早要从双倍转投到空头。