0
下面的彙編代碼會在iPad air2上的Xcode6.1.1 target上產生「exc_bad_access code = 259」。爲什麼aarch64強制qword對齊連轉移大小是dword?
// SP default 16 aligned on function entry,
sub sp,sp,#8
st1 {v8.1d},[sp],#8
而新的版本將不會
sub sp,sp,#16
st1 {v8.1d},[sp],#8
我發現ARMv8_ISA文件提到的 「對齊」
章$ 3:對齊地址允許大部分加載和存儲,包括... SIMD註冊 章節$ 5.8.24.1:...如果存在增量立即數,必須是8/16/24/32/48/64,具體取決於傳輸元素的數量。
以上代碼傳輸大小是dword(8字節),爲什麼強制qword對齊?順便說一下,我沒有在Android ndk r10上測試過它,所以我沒有確認它是對aarch64還是Xcode的限制? 有什麼建議嗎?謝謝!
謝謝您的回答。雖然aarch64要求「通過#imm進行後增加必須等於內存中的字節數」。所以'st1 {v8.1d},[sp],#16'無法通過編譯,適當的版本是'st1 {v8.2d},[sp],#16'。你能幫我分享一些關於X64的案例嗎?這可能有助於區分它是否是類似/不同的案例。 – charlie 2015-03-02 14:22:31