首页 > 解决方案 > 将 Codewarrior 的 Inline Assembler 翻译成 GCC Inline Assembler

问题描述

我正在执行一项任务,将一个大型项目从旧的 Codewarrior IDE 转移到 NXP 的 S32DS,它使用 GCC 4.9 的编译器。不幸的是,我在 S32DS 中编译内联汇编代码时遇到了很大的麻烦,因为内联汇编的语法与 codewarrior 和 GCC 完全不同。有什么想法可以在不逐句重写的情况下解决这个问题吗?任何快速翻译工具作为快捷方式?谢谢!

标签: gccinline-assemblygcc4nxp-microcontrollercodewarrior

解决方案


您的选择包括移植到纯 C (通常最适合内联汇编,这是对旧的不良编译器的性能优化,但现代编译器可以自己做。或者与另一个 ISA 无关)。

否则是的,您必须移植到独立的 asm 函数或 GNU C 内联 asm 语法。独立的 asm 函数避免了必须正确设置所有约束,并且对于较大的块可能是一个不错的选择。


通常不存在 Asm 到 asm 的翻译,尤其是GNU C 内联 asm。(或者至少我从未见过有人在 Stack Overflow 上提到过)。

顺便说一句,GCC4.9 已经很老了。GCC7 和 8 具有一些不错的新优化功能,例如加载/存储合并(通过一个全寄存器宽度加载或存储加载/存储多个窄结构或数组成员)。当您还没有工作代码库时,我建议您从当前的 GCC 版本开始,这样就不存在编译器更改引入回归的风险。

此外,GCC6 引入了内联 asm 的标志输出操作数:分支条件可以是 asm 的布尔输出。


推荐阅读