0

NEON に移植する必要がある SSE 命令を使用して記述されたインライン ASM コードのセクションがあります。全体をまとめて変換するのではなく、基本を自分で学び、ステップバイステップでできるかどうかを確認したいと思います。

したがって、最初のステップはロードとストアを学習することです。検討 ...

float input[4] = { 1.0f, 2.0f, 3.0f, 4.0f };
float output[4] = { 0 };
asm volatile
(
    "movups %[I], %%xmm0 \n\t"
    "movups %%xmm0, %[O] \n\t"
    : [O] "=m" (output[0])
    : [I] "m" (input[0])
    : "memory", "xmm0"
);

vld1.32 命令を使用することになっていることはわかっています (と思います) が、それを以前に使用した他の GCC ASM 構造 (名前付き変数など) と組み合わせることについては少し曖昧です。

4

1 に答える 1

0
vld1.32 {d0,d1}, [%[I]]; 
vst1.32 {q0}, [%[O]];   

gcc のバージョンによっては、q0 を d0、d1 として認識します。また、float を汎用レジスタにロードする代わりに、(&output[0]) または単に (output) と (input) が必要だと思います。

ARM では、ポインターをポストインクリメントすることもできます。xxx { }, [%[I]!]

例としてこれを参照してください。

于 2012-12-05T18:09:10.810 に答える