将Codewarrior的内联汇编程序转换为GCC内联汇编程序

将Codewarrior的内联汇编程序转换为GCC内联汇编程序,gcc,inline-assembly,gcc4,nxp-microcontroller,codewarrior,Gcc,Inline Assembly,Gcc4,Nxp Microcontroller,Codewarrior,我正在做一项任务,将一个大型项目从旧的Codewarrior IDE迁移到NXP的S32DS,NXP使用GCC4.9编译器。不幸的是,我在S32DS中编译内联汇编代码时遇到了很大的麻烦,因为内联汇编的语法与codewarrior和GCC有很大的不同。有没有办法不用逐句重写就能解决这个问题?有没有快捷的翻译工具? 谢谢 您的选择包括移植到纯C(通常最适合内联asm,内联asm是旧的糟糕编译器的性能优化,但现代编译器可以自己完成,或者与其他ISA无关) 否则是的,您必须移植到独立asm函数或GNU

我正在做一项任务,将一个大型项目从旧的Codewarrior IDE迁移到NXP的S32DS,NXP使用GCC4.9编译器。不幸的是,我在S32DS中编译内联汇编代码时遇到了很大的麻烦,因为内联汇编的语法与codewarrior和GCC有很大的不同。有没有办法不用逐句重写就能解决这个问题?有没有快捷的翻译工具?
谢谢

您的选择包括移植到纯C(通常最适合内联asm,内联asm是旧的糟糕编译器的性能优化,但现代编译器可以自己完成,或者与其他ISA无关)

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


Asm到Asm的转换通常不存在,尤其是不存在到GNU C内联Asm的转换。(或者至少我从未见过有人提到堆栈溢出)

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


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

欢迎访问stackoverflow.com。请花些时间阅读,特别是命名和。也请和。最后请阅读。