2014-10-30 42 views
-1

使用编译器选项,是否可以限制例程使用某些寄存器组? 例如限制例程仅使用R0-R8;ARM:限制例程使用有限的寄存器

目的:如果某些编译器选项可用,那么我可以确保某些例程(如中断服务例程)只使用有限的寄存器集,从而限制上下文保存还原。

+0

这是关于[寄存器和线程]的类似问题(http://stackoverflow.com/questions/16718484/is-it-possible-to-share-a-register-between-threads)。由于它涉及ARM,IRQ已经拥有了'sp'和'lr'。 [FIQ](http://stackoverflow.com/questions/973933/what-is-the-difference-between-fiq-and-irq-interrupt-system)有更多的存储寄存器,它可能是你的解决方案。也可以使用'-ffixed-reg'。按照第一个链接,当你保留这样的**通用**寄存器时,你将阻碍编译器并强制它在大多数函数中使用内存。 – 2014-10-30 15:38:31

回答

1

When this was last discussed,一致认为,这是不可能在逐个功能的基础上。

可以在整个编译过程中限制寄存器的使用,所以如果你把中断例程放在一个单独的编译单元中,你可以使用the gcc switch -ffixed-reg。如果您希望编译器不使用R0生成代码,我相信它将用于像-ffixed-R0