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

所以,我正在为GCC构建一个处理器的自定义后端。该处理器有4个地址空间:本地,全局,mmm和mmr。我想让它这样写C代码时,你可以这样做:如何创建自定义变量属性以将movs引导到不同的地址空间中?

int global x = 5;

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

ldi.g %reg, 5

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

有关我该如何去做这件事的任何建议?

回答:

如GCC internals documentation中所述,您可以使用TARGET_ATTRIBUTE_TABLE通过注册struct attribute_spec表添加目标特定属性。有关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(如文档建议)。您可以define a predicate在.md中测试此标志。

以上是 如何创建自定义变量属性以将movs引导到不同的地址空间中? 的全部内容, 来源链接: utcz.com/qa/257723.html

回到顶部