2

私は、Cortex-A8プロセッサ上のWindows Embedded Compact 7 ARMアセンブラを使用して、ARMWebサイトからのプリロード実装を備えた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 に答える