为什么gcc不使用Cortex M7的S16-S31寄存器?

问题描述 投票:0回答:1

具有 FPv5 扩展的 Cortex M7 有 32 个单精度浮点寄存器(或 16 个双精度寄存器)。 GCC

version 10.3.1 20210824 (release) (GNU Arm Embedded Toolchain 10.3-2021.10)
似乎生成仅使用前 16 个单精度寄存器的代码。为什么会这样呢?当仅使用单精度数学时,有没有办法让它使用另一半?

我正在使用

-mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfp16-format=ieee

进行编译
gcc arm cortex-m fpu
1个回答
0
投票

好吧,我实际上错了,gcc 确实发出了使用这些带有这些标志的 S16-S31 寄存器的代码。只是不在我关注的功能中。显然,它决定了它们在那里毫无用处。优化信息似乎并未涵盖此类细节。 我猜标志的“-d16”部分指的是 16 个双精度寄存器。

© www.soinside.com 2019 - 2024. All rights reserved.