有没有办法让GCC生成代码,以一种不同于该架构的标准ABI的方式使用寄存器。
我正在使用ARMv4芯片(LPC2000),我需要我的快速中断更快。
我有一个FIQ例程,但我必须将r0..r7存储在堆栈上,这对于FIQ模式来说似乎没有意义,因为它有自己的寄存器组R8..r15。我想用它们来代替,并节省16个指令周期,用来将东西从堆栈中推入和弹出。
在任何人说出显而易见的事情之前:用汇编语言重写FIQ处理程序,是的,我知道我可以做到,这个问题更具体。
是否有一个#杂注、__attribute__或开关来告诉GCC4更改它在函数中分配寄存器的顺序?
发布于 2012-05-16 21:51:21
答:当你用interrupt编译指示声明函数时,这应该被正确地优化:
void f () __attribute__ ((interrupt ("FIQ")));来源:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function-Attributes
B. 但是我发现了一个开放的bug报告,它当前并没有优化相关寄存器的推送/弹出。该错误报告已被归类为“错过的优化”,并自2011年6月确认以来一直开放。
来源:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48429
https://stackoverflow.com/questions/10619388
复制相似问题