所以,我正在为处理器的GCC构建一个自定义后端。该处理器有4个地址空间:local,global,mmm和mmr。我想这样做,当编写c代码时,你可以这样做:
int global x = 5;
会导致编译器吐出这样的指令:
ldi.g %reg, 5
我知道像blackfin和MeP这样的某些处理器会做类似的事情,所以我认为它可以做到,但我不知道该怎么做。应该允许我这样做的技术是variable attribute。
关于如何做到这一点的任何建议?
答案 0 :(得分:1)
您可以使用struct attribute_spec
注册TARGET_ATTRIBUTE_TABLE
表来添加特定于目标的属性,如GCC internals documentation中所述。 struct attribute_spec
的详细信息可以在来源(gcc/tree.h
)中找到。
此处理程序除了返回NULL_TREE
之外不会需要做任何事情,尽管通常它至少会进行一些错误检查。 (阅读gcc/tree.h
中的评论,并查看其他目标中的示例。)
稍后,您可以获取包含DECL_ATTRIBUTES()
的声明树节点的属性列表(请参阅the internals docs again),并使用lookup_attribute()
(请再次参阅gcc/tree.h
)查看如果列表中的给定属性。
您希望引用符号以根据新属性生成不同的程序集,因此您可能希望使用TARGET_ENCODE_SECTION_INFO
挂钩("Define this hook if references to a symbol or a constant must be treated differently depending on something about the variable or function named by the symbol")在symbol_ref
上设置标记(正如文档建议的那样)。您可以{。{3}}在.md。