跳到主要內容

發表文章

目前顯示的是 2月, 2013的文章

Side Effects of Pipeline

這幾天跟同事在實作 IC 的 ROM code 時遇到一個難纏的問題,後來發現與 ARM 的 pipeline 機制有關係,問題是這樣的,看看以下的程式碼(實際上作了什麼事不重要,主要在流程): int  SDRM_BN_Cmp ( SDRM_BIG_NUM  * BN_Src1, SDRM_BIG_NUM  * BN_Src2 ) { effecda8 :        e92d4008        push     { r3, lr } effecdac :        e1a02000        mov     r2, r0 effecdb0 :        e1a0e001        mov     lr, r1          if   ( BN_Src1 - >Length > =  BN_Src2 - >Length )   { effecdb4 :        e5903004        ldr     r3,  [ r0,  #4] effecdb8 :        e591c004        ldr     ip,  [ r1,  #4] effecdbc :        e153000c        cmp     r3, ip effecdc0 :        3a000005        bcc     effecddc <SDRM_BN_Cmp + 0x34>                  return   SDRM_DWD_Cmp ( BN_Src1 - >pData, BN_Src1 - >Length, effecdc4 :        e590000c        ldr     r0,  [ r0,  #12] effecdc8 :        e1a01003        mov     r1, r3 effecdcc :        e59e200c        ldr     r2,  [ lr,  #12] effecdd0 :        e1a0300c        mov     r3, ip effecdd4 :