gcc - 将 Codewarrior 的 Inline Assembler 翻译成 GCC Inline Assembler
问题描述
我正在执行一项任务,将一个大型项目从旧的 Codewarrior IDE 转移到 NXP 的 S32DS,它使用 GCC 4.9 的编译器。不幸的是,我在 S32DS 中编译内联汇编代码时遇到了很大的麻烦,因为内联汇编的语法与 codewarrior 和 GCC 完全不同。有什么想法可以在不逐句重写的情况下解决这个问题吗?任何快速翻译工具作为快捷方式?谢谢!
解决方案
您的选择包括移植到纯 C (通常最适合内联汇编,这是对旧的不良编译器的性能优化,但现代编译器可以自己做。或者与另一个 ISA 无关)。
否则是的,您必须移植到独立的 asm 函数或 GNU C 内联 asm 语法。独立的 asm 函数避免了必须正确设置所有约束,并且对于较大的块可能是一个不错的选择。
通常不存在 Asm 到 asm 的翻译,尤其是GNU C 内联 asm。(或者至少我从未见过有人在 Stack Overflow 上提到过)。
顺便说一句,GCC4.9 已经很老了。GCC7 和 8 具有一些不错的新优化功能,例如加载/存储合并(通过一个全寄存器宽度加载或存储加载/存储多个窄结构或数组成员)。当您还没有工作代码库时,我建议您从当前的 GCC 版本开始,这样就不存在编译器更改引入回归的风险。
此外,GCC6 引入了内联 asm 的标志输出操作数:分支条件可以是 asm 的布尔输出。
推荐阅读
- python - 在数据框中创建一个新列,其值为“bingo”或“nop”,具体取决于该行是否包含所有回文
- android - 如何从 Android Studio 启用详细日志记录以运行例如 adb shell setprop log.tag.FA VERBOSE?
- python - Pandas DataFrame - 如何在按另一列分组时获取每列的最新值
- gson - 带有 GSON 的 mapstruct
- c++ - 为 AVX、m256 实现 ln(x)
- vue.js - Vuejs 应用程序未加载 webpack4 和 splitchunks 'all'
- android - Android Studio:使用来自 firebase 实时数据库的数据填充列表视图
- google-analytics-api - Core Reporting API - 高级过滤器
- flutter - 用 Scaffold 小部件画一条线
- python - 如何在python中存储字符串变量并在函数中传递它们?