1

有没有办法让 GCC 以不同于该架构的标准 ABI 的方式生成使用寄存器的代码。

我正在使用 ARMv4 芯片(LPC2000),我需要我的快速中断更快。

我有一个 FIQ 例程,但我必须将 r0..r7 存储在堆栈上,这对于 FIQ 模式似乎毫无意义,因为它有自己的寄存器组 R8..r15。我想改用它们并节省 16 个指令周期,用于从堆栈中推送和弹出内容。

在任何人陈述明显之前:用汇编语言重新编写 FIQ 处理程序,是的,我知道我可以做到,这个问题更具体。

是否有 #pragma 或 __attribute__ 或开关告诉 GCC4 更改它在函数中分配寄存器的顺序?

4

1 回答 1

3

A.当您使用pragma声明函数时,这应该被正确优化掉:interrupt

void f () __attribute__ ((interrupt ("FIQ")));

来源: http: //gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function-Attributes

B.但是我发现一个开放的错误报告,这目前没有优化相关寄存器的推送/弹出。该错误报告已被归类为“错过的优化”,自 2011 年 6 月确认以来一直开放。

来源:http ://gcc.gnu.org/bugzilla/show_bug.cgi?id=48429

于 2012-05-16T13:51:20.563 回答