On Wed, Dec 12, 2012 at 05:06:09PM +0800, 刘智猷 wrote: > chenwj, > > O1和O0生成代码部分对返回值的处理是一样的:将返回值存入r0寄存器中。 > > 不一样的地方只在于:uc32中O1生成的代码与O0生成代码的区别在于O0的代码在栈上创建 > 了类似于x86的栈帧结构,将lr的值保存在栈上,其后通过弹栈指令ldm将原来压在栈上的 > lr寄存器值恢复到pc中,这就相当于jump lr。 為什麼 -O0 還要多出將 lr 壓/出棧這道指令? > 如果能保证在Ret发生时lr寄存器的值和刚进入该函数时的值一样,固定用jump lr是没有 > 问题的。 你的意思是如果能保證 lr 在該函數內不被使用,我就能固定使用 "jump lr" 這個 pattern,對嗎? -- Wei-Ren Chen (陳韋任) Computer Systems Lab, Institute of Information Science, Academia Sinica, Taiwan (R.O.C.) Tel:886-2-2788-3799 #1667 Homepage: http://people.cs.nctu.edu.tw/~chenwj