私は必要なNEONの組み込み関数を見つけることができません。私はint64x2_t
として128ビットの値を持っています、そして、私は低い64ビットを高い64ビットにコピーする必要があります。私はまた、高64ビットを時折低64ビットにコピーする必要があります。int64x2_tベクトルを使用して64ビットから64ビットにローレベルをコピーしますか?
NEONはlane dupですが、int64x1_t
を返し、int64x1_t
を返します。
int64x1_t vdup_lane_s64(int64x1_t vec, __constrange(0,0) int lane);
私は1または2を選択することができるはずのように、(たぶんこれは私の一部に誤解である)ようですので、範囲もオフに思えます。
int64x2_t
の下位64ビットを上位64ビットにコピーするにはどうすればよいですか?
私は(high >> x) | (low << x)
パターンを以下のように使用していません。まず、そのundefined behavior in C/C++ when x
is 0。第二に、値はがNEON SIMDレジスタになければならないので、私は誤ってそれを往復させたくありません。第三に、GCC is not generating the code I hoped forだから、私はGCCにもっと遅くなる機会を与えたくありません。
どのような標準タイプを使用していますか? 32ビット整数の上位16ビットをスワップしたいとします。どのようにしますか?どのようなビット操作を使用しますか? 'int64x2_t'と' int64x1_t'にも同様の組み込み関数がありますか? –
'int64x2_t vdupq_n_s64(int64_t値); // VMOV d0、r0、r0' – user3528438
@JoachimPileborg - 'int64x2_t'(事実上のポインタ)と' vdup_lane_s64'のような関数を使ったCでのビットを使って、コンパイラエラーを押しつぶすためにキャストを実行します。その安全がここでできるかどうかは私には分かりません。それゆえ、私は物事を行う "ネオン"の方法を探しています。 – jww