汇编程序代码将导致" exc_bad_access code = 259"在iPad air2上的Xcode6.1.1目标。
// 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的限制? 有什么建议吗?谢谢!
答案 0 :(得分:1)
你确定导致崩溃的是“st1”指令吗?
您可以使用以下代码进行检查:
sub sp,sp,#16
st1 {v8.1d},[sp],#16
我在x64上遇到了类似的问题;那是另一条指令需要一个正确对齐的堆栈并导致崩溃。
---编辑---
对不起。我混淆了“[sp,#16]”和“[sp],#16”。
如果“[sp],#16”为后递增,则测试应如下所示:
sub sp,sp,#16
st1 {v8.1d},[sp,#8]
add sp,sp,#8
或者:
sub sp,sp,#8
st1 {v8.1d},[sp]