Next: MODE_CC Condition Codes, Up: Condition Code
(cc0)
文件conditions.h定义了变量cc_status
,
用来描述条件代码如何被计算(对于条件代码的解释取决于设置它的指令的情况)。
该变量包含了条件码目前基于的RTL表达式,以及一些标准的标记。
有时额外的机器特定的标记必须被定义,在机器描述头文件中。
其还可以增加额外的机器特定信息,通过定义CC_STATUS_MDEP
。
一个C表达式,用来初始化
mdep
域为“空”。缺省定义不做任何事, 因为大多数机器不使用该域。如果你想使用该域,则可能应该定义该宏来初始化它。该宏在不使用
cc0
的机器上不被使用。
一个C复合语句,用来适当的为主体为exp的insn, 设置
cc_status
的部件。 该宏负责识别insn将条件码设置作为副产品以及显示的set(cc0)
。该宏在不使用
cc0
的机器上不被使用。如果insn不设置条件码,但修改其它机器寄存器, 则该宏必须检查它们是否使得记录条件码的表达式变为无效。例如,在68000上, 在地址寄存器上存储insn不设置条件码, 其意味着通常
NOTICE_UPDATE_CC
对于这样的insn可以不修改cc_status
。 但是假设之前的insn将条件码设成基于位置‘a4@(102)’, 并且当前insn在‘a4’上存储了一个新值。虽然条件码没有被改变, 但其不再为真,因为其反映了‘a4@(102)’的内容。因此对于这种情况,NOTICE_UPDATE_CC
必须修改cc_status
,来表示条件码值不可知。
NOTICE_UPDATE_CC
的定义必须要准备处理窥孔优化的结果: insn的指令模式为parallel
RTXs,其包含了不同的reg
,mem
或者常量操作数。这些insn的RTL结构体不足以表明insn实际要做的事情。NOTICE_UPDATE_CC
应该做的是当遇到这样的,就直接运行CC_STATUS_INIT
。
NOTICE_UPDATE_CC
可能的定义为调用一个函数, 来查看一个属性(参见Insn Attributes),例如名为‘cc’。这避免了在两个地方, md文件和NOTICE_UPDATE_CC
中具有指令模式的详细信息。