如何创建自定义变量属性以将mov引导到不同的地址空间?

时间:2011-06-23 18:53:47

标签: gcc

所以,我正在为处理器的GCC构建一个自定义后端。该处理器有4个地址空间:local,global,mmm和mmr。我想这样做,当编写c代码时,你可以这样做:

int global x = 5;

会导致编译器吐出这样的指令:

ldi.g %reg, 5

我知道像blackfin和MeP这样的某些处理器会做类似的事情,所以我认为它可以做到,但我不知道该怎么做。应该允许我这样做的技术是variable attribute

关于如何做到这一点的任何建议?

1 个答案:

答案 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。

中测试此标记