关于memory、address operand predicate和constraintde的问题

1 view
Skip to first unread message

daniel tian

unread,
Dec 22, 2009, 1:48:43 AM12/22/09
to hell...@googlegroups.com
大家好:

这是我发到maillist上的消息。
http://gcc.gnu.org/ml/gcc/2009-12/msg00291.html

有人遇到了相同的问题吗?
就是说当LOAD、STORE的时候,内存地址的描述必须是寄存器, 或寄存器加立即数, 或寄存器加寄存器。
但是CALL的时候,那个memory是可以用SYMBOL_REF来表示的。所以在GO_IF_LEGITIMATE_ADDRESS宏里面
就定了SYMBOL_REF也是合法的,结果在define_insn模板里面,用了memory_operand的时候,会生成这种
MEM:(SYMBOL_REF)的内存描述。所以把模板改了一下,换了个类似于address_operand的predicate。
但是会提示RTL无法匹配模板的constraint。

有兄弟遇到过这种问题吗?

谢谢

Eric Fisher

unread,
Dec 22, 2009, 2:13:31 AM12/22/09
to hell...@googlegroups.com
大体上而言,如果constraint不匹配,gcc就会自动的通过其它insn
pattern来尝试将操作数转换为符合constraint。如果predicate中可以接受SYMBOL_REF,而你不想在操作数中用到SYMBOL_REF,则可以通过constraint来微调,把constraint指定为寄存器,立即数等。

2009/12/22 daniel tian <daniel...@gmail.com>:

> --
>
> 您收到此邮件是因为您订阅了 Google 网上论坛的“HelloGcc Workshop”论坛。
> 要向此网上论坛发帖,请发送电子邮件至 hell...@googlegroups.com
> 要取消订阅此网上论坛,请发送电子邮件至 hellogcc+u...@googlegroups.com
> 若有更多问题,请通过 http://groups.google.com/group/hellogcc?hl=zh-CN 访问此网上论坛。
>
>
>

Reply all
Reply to author
Forward
0 new messages