有没有办法要求GCC以与该架构的标准ABI不同的方式生成使用寄存器的代码。
我正在使用ARMv4芯片(LPC2000),我需要快速中断更快。
我有一个FIQ例程,但是我必须将r0..r7存储在堆栈中,这似乎是无意义的FIQ模式,因为它是自己的寄存器组R8..r15。我希望使用它们,并保存16个指令周期,用于推送和弹出堆栈。
在任何人陈述明显之前:用汇编语言重写FIQ处理程序,是的我知道我可以这样做,这个问题更具体。
是否有#pragma或__attribute__或开关告诉GCC4更改它在函数中分配寄存器的顺序?
答案 0 :(得分:3)
一个。当您使用interrupt
pragma声明函数时,应正确优化:
void f () __attribute__ ((interrupt ("FIQ")));
来源:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function-Attributes
B中。 但是我发现一个开放的错误报告,当前没有优化相关寄存器的推送/弹出。该错误报告已被归类为“错过优化”,自2011年6月确认以来一直开放。