setzero原始碼。
在此 Shady 簡略談及 ELF ABI ,
若想詳細了解,請參考 Shady 給的連結。
在 Linux 下的 ELF ABI 下撰寫組語程式,
函式的整數參數會依序放在 GPR3 ~ GPR10 共8個,
其中的 GPR3 也是回傳值的存放處。
其它詳細資訊請參考 Shady 文章開頭給的第二個連結。
另外 Shady 還要說明 32 bits 寬度的 "條件暫存器" (CR),
CR 被分成八個域:CR0 ~ CR7,
一個域有 4 bits 寬。
其它詳細資訊請參考 Shady 給的連結。
最後要注意的是,
組語中的暫存器,如:GPR0 ~ 31、FPR0 ~ 31、VR0 ~ 31,
這三種暫存器的名稱在相關指令下以編號替代,
如 GPR0 在整數指令下用 0 代替。
若指令結尾為 i,如:addi、cmpldi等,
其最後的運算元必為立即數。
若想多了解 PowerPC 組語者可至 IBM 的官網搜索相關文章。
最後公佈 setzero 函式的成績,
以 4KB 為測試且有對齊 128 Bytes 記憶體邊界:
4096 Bytes / ( 25 ticks * 40 cycles ) * 3.192GHz = 13.07 GB/s。
若無對齊 128 Bytes 的狀況下,
會比有對齊多出約 10 ~ 15 ticks 不等。
以後 Shady 會不定時放出與 bzero 這種字串函式相關的組語函式。
沒有留言:
張貼留言