Gcc 如何创建自定义变量属性以将MOV定向到不同的地址空间?

Gcc 如何创建自定义变量属性以将MOV定向到不同的地址空间?,gcc,Gcc,因此,我正在为处理器的GCC构建一个自定义后端。此处理器有4个地址空间:本地、全局、mmm和mmr。我希望在编写c代码时,您可以这样做: int global x = 5; int全局x=5; 这将导致编译器发出如下指令: ldi.g %reg, 5 本地设计院(ldi.g%)注册,5 我知道某些处理器,比如blackfin和MeP,会做类似的事情,所以我认为这是可能的,但我不知道如何做。应该允许我这样做的技术是 关于如何执行此操作的任何建议?您可以通过使用target\u attribute\

因此,我正在为处理器的GCC构建一个自定义后端。此处理器有4个地址空间:本地、全局、mmm和mmr。我希望在编写c代码时,您可以这样做:

int global x = 5; int全局x=5; 这将导致编译器发出如下指令:

ldi.g %reg, 5 本地设计院(ldi.g%)注册,5 我知道某些处理器,比如blackfin和MeP,会做类似的事情,所以我认为这是可能的,但我不知道如何做。应该允许我这样做的技术是


关于如何执行此操作的任何建议?

您可以通过使用
target\u attribute\u table
注册
struct attribute\u spec
表来添加特定于目标的属性,如中所述。可以在源代码(
gcc/tree.h
)中找到
struct attribute_spec
的详细信息

除了返回
NULL\u TREE
,这个处理程序不需要做任何事情,尽管通常它至少会做一些错误检查。(阅读
gcc/tree.h
中的注释,并查看其他目标中的示例。)

稍后,您可以使用
DECL\u attributes()
(请参阅)获取声明树节点的属性列表,并使用
lookup\u attribute()
(请再次参阅
gcc/tree.h
)查看列表中是否有给定的属性


您希望引用符号以根据新属性生成不同的程序集,因此您可能希望使用
TARGET\u ENCODE\u SECTION\u INFO
钩子在
symbol\u ref
上设置标志(如文档所示)。您可以在.md中测试此标志。

谢谢您的建议。因此,我在target.c文件中创建了属性表,并将其与target_attribute_table宏链接。然后我在属性表中有一个函数,它应该处理每个属性。那么,我是否应该评估列表中是否有给定的属性?最后,如何使用该函数调用重定向target.md文件中的movsi rtx?哪些信息被传递到.md部分,从而允许它在不同的地址空间之间进行选择?更新-您要求的详细信息比我想象的要多。