我希望將高度優化的加密ASM實現移植到Go ASM。關于Go Arm Assembly的唯一文檔是快速指南,它提到了以下內容:寄存器 R10 和 R11 由編譯器和鏈接器保留。R10指向g(戈魯汀)結構。在匯編程序源代碼中,此指針必須稱為 g;無法識別名稱 R10。手寫匯編可以使用R11,但這樣做需要確保鏈接器也沒有使用它來實現函數中的任何其他指令。我希望移植使用的ASM,所以我的問題是:R10R11我可以使用R10/g嗎?如果我使用R10 / g,只要我在堆棧上調用開始時存儲R10值,然后在結束時加載它,會有任何問題嗎?(假設用于停止搶占行為)go:nosplit只要我沒有從Go ASM調用任何其他函數,那么我就不必擔心鏈接器對R11的限制,對嗎?
1 回答

森欄
TA貢獻1810條經驗 獲得超5個贊
例如,如果您的代碼被搶占或發生恐慌,您不應該觸摸。我相信指南對此非常清楚。R10
R11
鏈接器用于合成一些指令,例如對全局變量的引用。最好檢查是否通過組裝然后反匯編代碼來使用。在反匯編中,鏈接器引入的任何引用都應該是可見的。R11
R11
- 1 回答
- 0 關注
- 254 瀏覽
添加回答
舉報
0/150
提交
取消