GNU 支持 cortex m7 双精度 FPU 的扩展内联汇编程序
GNU support for extended inline assembler for cortex m7 double precision FPU
GCC 程序套件为 Cortex M4 和 M7 MPU 的单精度 FPU 代码提供了扩展的内联汇编程序约束,因此可以直接编写 FPU 性能检查代码。
但是,此功能不适用于双精度 FPU(可用于 Cortex M7),需要额外编码。有谁知道 GNU 是否正在致力于提供这样的设施?
我的主要问题是能够从我的内联汇编器输出双精度 return。在没有编译器识别双重约束的情况下(GNU 将其明确记录为在 Thumb 指令上不可用),没有明显的方法来实现这一点。但是,通过检查发出的汇编器的双 returning 函数,我注意到编译器总是将 D7 寄存器移动到 D0 寄存器(作为其最后的指令之一),并且 D0 当然是约定俗成的函数输出寄存器。所以我修改了我的代码以使用 D7 寄存器来存储我的 returned double 并且它有效!
在上述之后,Nate Eldridge 提请我注意一个未记录的 GCC 修饰符 (%P) 与(已记录但不应该与 THUMB 指令一起使用)“w”约束相关联。双精度代码现在可以工作了。有趣的是,当使用 %P 修饰符时,编译器发出 D7 作为 DP 算法的寄存器选择; D7 到 D0 的后续移动仍然存在,但这次效果很好。
GCC 程序套件为 Cortex M4 和 M7 MPU 的单精度 FPU 代码提供了扩展的内联汇编程序约束,因此可以直接编写 FPU 性能检查代码。
但是,此功能不适用于双精度 FPU(可用于 Cortex M7),需要额外编码。有谁知道 GNU 是否正在致力于提供这样的设施?
我的主要问题是能够从我的内联汇编器输出双精度 return。在没有编译器识别双重约束的情况下(GNU 将其明确记录为在 Thumb 指令上不可用),没有明显的方法来实现这一点。但是,通过检查发出的汇编器的双 returning 函数,我注意到编译器总是将 D7 寄存器移动到 D0 寄存器(作为其最后的指令之一),并且 D0 当然是约定俗成的函数输出寄存器。所以我修改了我的代码以使用 D7 寄存器来存储我的 returned double 并且它有效!
在上述之后,Nate Eldridge 提请我注意一个未记录的 GCC 修饰符 (%P) 与(已记录但不应该与 THUMB 指令一起使用)“w”约束相关联。双精度代码现在可以工作了。有趣的是,当使用 %P 修饰符时,编译器发出 D7 作为 DP 算法的寄存器选择; D7 到 D0 的后续移动仍然存在,但这次效果很好。