gencodes
gencodes的功能是读取机器描述文件,选择其中为define_insn和define_expand的条目,生成insn_code枚举类型。枚举类型定义如下。
enum insn_code{
CODE_FOR_nothing = 0,
CODE_FOR_%s,
……
}
类型定义中的%s代表define_insn或者define_expand中的名字。
程序主要包括两个函数。
init_rtx_reader_args,从md文件中读取条目,组成insn。
gen_insn,获取第一步生成的insn的名字。只处理define_insn和define_expand两种类型的,条目,为它们分配一个CODE_FOR_…枚举值。
gengenrtl
本程序的主要功能是读取rtl.def文件,生成genrtl.h文件。生成的genrtl.h文件又被include进rtl.h文件中。genrtl.h文件中定义了返回值为rtx表达式的、形式为gen_rtx_fmt_xxx_stat形式的函数,这些函数以rtl.def中的宏定义条目中包含的信息为依据来定义。
rtl.def文件主要使用宏DEF_RTX_EXPR定义了RTL语言中的表达式RTX(Register Transfer Expression)。宏的一个示例如下。
DEF_RTL_EXPR(INSN_LIST, “insn_list”, “ue”, RTX_EXTRA)
宏定义的括号中,主要包括以下几个域。
- 内部名字。用于C代码源文件中的,是rtl.h文件中枚举类型rtx_code的成员。常用大写字母,例如例子中的INSN_LIST。
- 外部名字,为ASCII字母形式&#