我在 Cortex-A8 处理器上使用带有 Windows Embedded Compact 7 ARM 汇编程序的 ARM 网站上的预加载实现的 NEON 内存副本。
我注意到当我为该函数提供非字对齐值时出现数据类型未对齐异常
例如:
; 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 命令的预期吗?文章没有提到这个实现仅限于字对齐的值。它可以修复吗?如果是这样,怎么做?