Next: , Previous: Floating Point, Up: Target Macros


17.24 机器模式切换指令

下列的宏用来控制模式切换优化:

— Macro: OPTIMIZE_MODE_SWITCHING (entity)

定义该宏,如果在优化编译中,port需要为机器模式切换插入额外的指令。

例如,SH4可以执行单精度和双精度的浮点运算,但是执行单精度运算时, 必须清除FPSCR PR位,而执行双精度运算时,必须设置该位。 改变PR位需要一个通用寄存器来作为草稿寄存器, 因此这些FPSCR设置必须在重载之前被插入, 即你不能将它放在指令输出或者TARGET_MACHINE_DEPENDENT_REORG阶段。

你可以具有多个具有模式切换的实体,并且在运行时选择哪些实体实际需要。 对于任何需要模式切换的entityOPTIMIZE_MODE_SWITCHING应该返回非零。 如果你定义了该宏,你还必须定义NUM_MODES_FOR_MODE_SWITCHING, MODE_NEEDED, MODE_PRIORITY_TO_MODEEMIT_MODE_SETMODE_AFTER, MODE_ENTRYMODE_EXIT是可选的。

— Macro: NUM_MODES_FOR_MODE_SWITCHING

如果你定义了OPTIMIZE_MODE_SWITCHING,你必须定义该宏, 作为整数数组的初始化。每个初始化元素N引用一个需要模式切换的实体, 并且指定了该实体可能需要被设置的不同模式的数目。 初始化的位置——起始于0——确定了被用于引用有问题的模式切换实体的整数。

— Macro: MODE_NEEDED (entity, insn)

entity为一个整数指定了模式切换的实体。 如果定义了OPTIMIZE_MODE_SWITCHING, 则必须定义该宏来返回一个不大于在NUM_MODES_FOR_MODE_SWITCHING 中相应元素的整数值,来指示entity在执行insn前必须被切换成的模式。

— Macro: MODE_AFTER (mode, insn)

如果定义该宏,其在模式切换过程中对于每个insn进行求值。 其确定一个insn的结果时的模式(如果与输入时的模式不同)。

— Macro: MODE_ENTRY (entity)

如果定义该宏,其对每个需要模式切换的entity进行求值。 结果为一个整数,为entity在函数入口处被假定切换成的模式。 如果定义了MODE_ENTRY,则必须定义MODE_EXIT

— Macro: MODE_EXIT (entity)

如果定义该宏,其对每个需要模式切换的实体进行求值。结果为一个整数, 为实体在函数出口处被假定切换成的模式。如果定义了MODE_EXIT, 则必须定义MODE_ENTRY

— Macro: MODE_PRIORITY_TO_MODE (entity, n)

该宏指定了被处理的entity的模式顺序。0为最高优先级, NUM_MODES_FOR_MODE_SWITCHING[entity] - 1为最低。 宏的值应该为一个整数,表示entity的一个模式。对于任何固定的entitymode_priority_to_mode(entity, n))应该为0... num_modes_for_mode_switching[entity] - 1之间的双向影射。

— Macro: EMIT_MODE_SET (entity, mode, hard_regs_live)

生成一个或多个insn来将entity设为modehard_reg_live是在insn被插入点处的硬件寄存器活跃集。