实现关于目标处理器指令集的 TableGen 描述 以及继承并实现 TargetInstrInfo 类,也即需要实现文件“XXXInstrInfo.td”、 “XXXInstrInfo.h”和“XXXInstrInfo.cpp”。
在文件“XXXInstrInfo.td”中,需要描述目标处理器的指令集,指令功能,指令的寻址方式,指令操作数,指令编码,指令汇编代码的输出格式,以及指令与 LLVM 虚拟指令集的匹配关系等,这些描述可以由以下几个 TableGen 提供的记录类实现:
Operand 类用于描述指令操作数,包含的数据有:
类型 | 说明 |
---|---|
ValueType Type | 操作数的数据类型 |
string PrintMethod | 打印输出操作数的函数的名字 |
int NumMIOperands | 操作数对应的目标处理器的操作数的个数 |
dag MIOperandInfo | 操作数对应的目标处理器的操作数的信息 |
记录定义 ops,用于标识指令的操作数列表。例如:
ops GPRC:$dst, GPRC:$src
,表明指令有两个操作数 dst 和 src,且都是 GPRC 类型的。
Predicate 类 用于描述指令进行匹配选择时所需的特定条件,Requires 类为这些 特定条件的组合,它是一个以 Predicate 类为元素的列表。这两个记录类的结