[llvm-uc] Re: uc32 function ret 的匯編應該長什麼樣子?

  • From: 陳韋任 (Wei-Ren Chen) <chenwj@xxxxxxxxxxxxxxxxx>
  • To: llvm-uc@xxxxxxxxxxxxx
  • Date: Wed, 12 Dec 2012 17:16:55 +0800

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

Other related posts: