ビットバイトからメモリにバイトを設定したいのですが、指定された透過バイト値と等しくない値のバイトを設定します。
概略的にやりたいこと:
for (char *src=start;src<end;src++,dst++)
{
if (*src!=VALUE) {
*dst=*src;
}
}
つまり、Cまたはアセンブリ(またはCがアセンブリから逆変換されたもの)で、値とは異なるバイトのみを設定します。
より高速にするために、32ビットロード、srcとdst間のSEL操作、および32ビットストアの使用を検討しました。ただし、APSR.GEにあるマスクを設定する必要があります。
私が間違っていない場合、VALUEでSIMD比較(USUB8を使用)を実行すると、結果がVALUEに対して> =または<であるかどうかのみがチェックされ、それらが等しいかどうかをチェックすることはできません。(もちろん、VALUEを0または255に制限して、1日と呼ぶこともできます...)
もう1つの可能性は、srcで事前に計算されたマスクを使用してから、手動でAPSR.GEを設定することです(可能ですか?)が、1)メモリを使用します、2)3)前にデータを保持することが常に可能であるとは限りません。バイトごとのアクセスよりも高速です。