Next: , Up: Mode Iterators


16.22.1.1 定义机器模式迭代器

定义一个机器模式迭代器的语法为:

     (define_mode_iterator name [(mode1 "cond1") ... (moden "condn")])

这将允许后续的 .md 文件结构可以使用机器模式suffix :name。每个这样的结构将被扩展 n 次,一次使用 :mode1 来替换,一次使用 :mode2 来替换,等等。 在扩展 modei 时,每个C条件 condi 还要为真。

例如:

     (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])

定义了一个新的机器模式后缀 :P。每个使用 :P 的结构将被扩展 两次,一次由 :SI 来替换 :P,一次由 :DI 来替换 :P。其中 :SI 版本的只有当 Pmode == SImode 时才被应 用,:DI 版本的只有当 Pmode == DImode 时才被应用。

就像其它 .md 条件,一个空字符串被当作“总为真”。(mode "") 也可以被缩写为 mode。例如:

     (define_mode_iterator GPR [SI (DI "TARGET_64BIT")])

意味着 :DI 扩展只有为 TARGET_64BIT 时被应用,但 :SI 扩展却没有这样的限制。

迭代器按照它们定义的顺序被应用。这在当两个迭代器用于一个结构中需要替换时 会变的很重要。参见Substitutions