【发布时间】:2012-12-10 15:44:05
【问题描述】:
我正在使用 ARM 网站上的 NEON memory copy with preload 实现和 Cortex-A8 处理器上的 Windows Embedded Compact 7 ARM 汇编程序。
我注意到,当我为该函数提供非字对齐值时,我得到了数据类型未对齐异常
例如:
; NEON memory copy with preload
ALIGN
LEAF_ENTRY NEONCopyPLD
PLD [r1, #0xC0]
VLDM r1!,{d0-d7} ;datatype misalignment
VSTM r0!,{d0-d7}
SUBS r2,r2,#0x40
MOV R0, #0
MOV PC, LR
ENTRY_END
size_t size = /* arbitrary */;
size_t offset = 1;
char* src = new char[ size + offset ];
char* dst = new char[ size ];
NEONCopyPLD( dst, src + offset, size );
memcpy( dst, src + offset, size ); /* works perfectly */
VLDM 命令是否需要这样做?文章没有提到这个实现仅限于字对齐的值。它可以修复吗?如果有,怎么做?
【问题讨论】: