Next: Target Attributes, Previous: Floating Point, Up: Target Macros
定义该宏,如果在优化编译中,port需要为机器模式切换插入额外的指令。
例如,SH4可以执行单精度和双精度的浮点运算,但是执行单精度运算时, 必须清除FPSCR PR位,而执行双精度运算时,必须设置该位。 改变PR位需要一个通用寄存器来作为草稿寄存器, 因此这些FPSCR设置必须在重载之前被插入, 即你不能将它放在指令输出或者
TARGET_MACHINE_DEPENDENT_REORG
阶段。你可以具有多个具有模式切换的实体,并且在运行时选择哪些实体实际需要。 对于任何需要模式切换的entity,
OPTIMIZE_MODE_SWITCHING
应该返回非零。 如果你定义了该宏,你还必须定义NUM_MODES_FOR_MODE_SWITCHING
,MODE_NEEDED
,MODE_PRIORITY_TO_MODE
和EMIT_MODE_SET
。MODE_AFTER
,MODE_ENTRY
和MODE_EXIT
是可选的。
如果你定义了
OPTIMIZE_MODE_SWITCHING
,你必须定义该宏, 作为整数数组的初始化。每个初始化元素N引用一个需要模式切换的实体, 并且指定了该实体可能需要被设置的不同模式的数目。 初始化的位置——起始于0——确定了被用于引用有问题的模式切换实体的整数。
entity为一个整数指定了模式切换的实体。 如果定义了
OPTIMIZE_MODE_SWITCHING
, 则必须定义该宏来返回一个不大于在NUM_MODES_FOR_MODE_SWITCHING
中相应元素的整数值,来指示entity在执行insn前必须被切换成的模式。
如果定义该宏,其对每个需要模式切换的entity进行求值。 结果为一个整数,为entity在函数入口处被假定切换成的模式。 如果定义了
MODE_ENTRY
,则必须定义MODE_EXIT
。
如果定义该宏,其对每个需要模式切换的实体进行求值。结果为一个整数, 为实体在函数出口处被假定切换成的模式。如果定义了
MODE_EXIT
, 则必须定义MODE_ENTRY
。