2

アーム情報センターによると、vadd は条件付きで実行できますが、試してみると

vaddeq.f32 d0,d0,d1

Xcode が返す

65:instruction cannot be conditional -- vaddeq.f32 d0,d0,d1

私が気づいたことの 1 つは、このエラーが発生するのは NEON 命令のみのように思われることです。VFP 命令では、これらのエラーは発生しません。

NEON 条件付き命令を有効にするために設定する必要があるコンパイラ フラグはありますか?

4

3 に答える 3

5

ARMアーキテクチャリファレンスマニュアルには次のように書かれています。

 An ARM Advanced SIMD VADD instruction must be unconditional.

つまり、ARMモードの場合、これらの命令は条件付きではありません。ITブロックに入れると、Thumb-2で条件付きで使用できます。

  .syntax unified
  .code 16
  .globl _foo
_foo:
  cmp r0, #0
  it eq
  vaddeq.f32 d0, d0, d1
  bx lr
于 2011-08-10T03:18:41.290 に答える
1

条件付きで実行できるのは、NEON と VFP で共有される命令のみです。

(たとえば、vldmia)。

私にとっては、条件付き実行がいくつかの小さな頭痛の種から私を救ったかもしれないいくつかの状況がありましたが、一般的に、あなたはそれをそれほどひどく必要としません.

NEON の論理演算と比較演算を注意深く見てください。これらは、NEON がどのようにプログラムされるべきかをよく示しています。

ちゃ。

于 2011-11-01T14:11:31.437 に答える
1

条件付き NEON 命令が ARM モードで使用できない理由は、条件フィールドが NV (決して) に設定されたエンコーディングを使用するためです。条件分岐を使用するか、(より良い) 比較結果を直接使用しないようにコードを書き直す必要があります。たとえば、結果に応じてレジスタを 0 または 1 に設定し、その値を以降の操作で使用します。

于 2011-08-22T10:17:37.350 に答える