0

NEON 拡張レジスタは、16 クワッドワードまたは 32 ダブルワードと見なすことができます。ほとんどのプログラミングでは、使用する特定のレジスタが固定されています。例えば、

vmov.i8 d0, 0xff
vmov.i8 d1, 0xee
vmov.i8 d2, 0xdd

私の問題では、必要なダブル ワード レジスタの数は、関数呼び出しの引数に依存します。たとえば、引数が 2 の場合、次のようにする必要があります。

vmov.i8 d0, 0xff
vmov.i8 d1, 0xee

引数が4の場合、私はする必要があります

vmov.i8 d0, 0xff
vmov.i8 d1, 0xee
vmov.i8 d2, 0xdd
vmov.i8 d3, 0xcc

名前が変数に基づいているレジスタを選択する方法はありますか? つまり、この行に沿ったものです (以下は有効な ARM アセンブリ コードではありません)。

mov r0, #1
vmov.i8 d{r0}, 0xff
4

2 に答える 2

3

命令にはターゲット レジスタがハードコードされており、最新の CPU では自己変更コードを作成できないため、命令レベルでターゲット レジスタを選択することはできません。命令のエンコードについては、ARM ARMを参照してください。

もちろん、 if コンストラクト / 条件付き実行を使用して、さまざまな方法でこれを高レベルで行うことができます。

于 2013-02-08T00:37:18.217 に答える
0

最後の2つの命令を実行できます

vmov.i8 d2, 0xdd
vmov.i8 d3, 0xcc

引数が4であることを条件とします。

引数のすべての可能な値のコードを記述または生成することもできます。

引数が常に定数であり、計算されたものではない場合は、おそらくマクロを使用することもできます。

于 2013-02-07T18:45:42.907 に答える