如何创建自定义变量属性以将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