ZHCU876Z July 2001 – October 2023 SM320F28335-EP
如果函数在同一文件范围内定义,则链接后优化器会在调用函数后优化 DP 负载。例如,考虑下述链接后优化代码:
_main:
LCR #_foo
MOVB AL, #0
;<<REDUNDANT>> MOVZ DP,#_g2
MOV @_g2, #20
LRETR
.global _foo
_foo:
MOVZ DP, #g1
MOV @_g1, #10
LRETR
由于变量 _g1 和 _g2 在同一页面中,且函数 _foo 已经设置了 DP,因此,链接后优化器会删除对 _foo 的函数调用后的 MOVZ DP。
为了让链接后优化器跨函数调用进行优化,函数应该只有一条 return 语句。如果对手写的汇编运行链接后优化器,并且对于每个函数有不止一条 return 语句,则链接后优化器的输出可能不正确。通过在 -plink 选项之后指定 -nf 选项,可以关闭跨函数调用的优化。