2

我在 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 命令的预期吗?文章没有提到这个实现仅限于字对齐的值。它可以修复吗?如果是这样,怎么做?

4

1 回答 1

0

即使您没有指定明确的对齐要求,您仍然需要在元素边界(即本例中的双字边界)上对齐数据。这条规则有一些例外,但最好不要依赖它们,除非你有充分的理由这样做。

有关详细信息,请参阅 Cortex-A8 技术参考手册 (ARM DDI 0344J)。

于 2012-12-10T16:04:44.880 回答