Void *sySqStart( dstArray )
Void *dstArray
dstArray ストアキューの転送先アドレス
ストアキュー用の仮想アドレス
物理メモリに割当てられたストアキュー用の仮想アドレスを取得します。Shinobi2ライブラリでは、MMU がイネーブルになっているため、ストアキュー転送用の仮想アドレスを割当てています。 ストアキュー転送を行う場合には、転送を行いたい物理アドレスを sySqStart()関数に渡し、sySqInit()関数によって割当てられた対応する仮想アドレスを取得します。 その取得したアドレスに対して32バイト分のデータを書込み、PREF 命令を発行することで、ストアキュー転送が行われます。
Uint32 *sqArray; Uint32 *dstArray; Uint32 *srcArray; testArray = (Uint32 *)DEST_ADDRESS_ALIGN32; srcArray = (Uint32 *)SRC_ADDRESS_ALIGN32; sqArray = sySqStart(testArray); *sqArray++ = *srcArray++; *sqArray++ = *srcArray++; *sqArray++ = *srcArray++; *sqArray++ = *srcArray++; *sqArray++ = *srcArray++; *sqArray++ = *srcArray++; *sqArray++ = *srcArray++; *sqArray++ = *srcArray++; prefetch((int*)((int)(sqArray-8)));
ストアキュー転送を行っている最中に他のストアキュー転送を行うプログラムに割込まれると、ストアキューレジスタの中身が壊れるため、転送が正しく行われません。 Ninja2ライブラリおよび Kamui2ライブラリはストアキューを使用していますので、割込み内でのストアキューの使用は禁止とします。