San*_*mar 4 linux compiler-construction gcc cpu-registers
假设我有一个非常大的源代码,并且打算rdx在执行期间完全不使用寄存器,即,在生成汇编代码时,我只想通知我的编译器(GCC)它根本不应该使用rdx。
注意:注册rdx只是一个例子。我可以使用任何可用的 Intel x86 寄存器。
我什至很高兴更新编译器的源代码并使用我的自定义 GCC。但是需要对源代码进行哪些更改?
您可以将一些全局变量放入该寄存器。对于 ARM CPU,您可以这样做:
register volatile type *global_ptr asm ("r8")
该指令使用通用寄存器“r8”来保存global_ptr指针的值。
有关实际示例,请参阅 U-Boot 中的源代码:
文件 arch/arm/include/asm/global_data.h(第 ~83 行)。
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")