5

Cortex-A9コア(VFP命令が許可されている)のNEONレジスタ(Q0とQ3など)に格納された値を比較する最速の方法(最小サイクル数)を見つけることに興味があります。

これまでのところ、次のものがあります。

(1) VFP 浮動小数点比較の使用:

vcmp.f64        d0, d6
vmrs            APSR_nzcv, fpscr
vcmpeq.f64      d1, d7
vmrseq          APSR_nzcv, fpscr

64 ビットの「float」が NaN と同等の場合、このバージョンは機能しません。

(2) NEON ナローイングと VFP 比較の使用 (今回は NaN セーフな方法で 1 回のみ):

vceq.i32        q15, q0, q3
vmovn.i32       d31, q15
vshl.s16        d31, d31, #8
vcmp.f64        d31, d29
vmrs            APSR_nzcv, fpscr

D29 レジスタには、事前に正しい 16 ビット パターンがプリロードされています。

vmov.i16        d29, #65280     ; 0xff00

私の質問は: これより良いものはありますか? 私はそれを行うための明白な方法を監督していますか?

4

1 に答える 1

2

1命令で削減できると思います。左シフトと挿入 (VLSI) を使用すると、Q15 の 4 つの 32 ビット値を D31 の 4 つの 16 ビット値に結合できます。次に、0 と比較して、浮動小数点フラグを取得できます。

vceq.i32  q15, q0, q3
vlsi.32   d31, d30, #16
vcmp.f64  d31, #0
vmrs      APSR_nzcv, fpscr
于 2012-01-31T19:20:59.177 に答える