3
int main(){
__asm volatile
{
    // load data
    vld1.16 {q0, q1}, [r0]!

...

コマンドの使用

armcc --cpu=Cortex-A9 -O2 -Otime --vectorize --remarks -g --md --depend_format=unix_escaped --no_depend_system_headers -c -o test.o test.c

エラーが表示されます

"test.c", line 7: Error:  #20: identifier "q0" is undefined
      vld1.16 {q0, q1}, [r0]!
               ^
"test.c", line 8: Error:  #20: identifier "q2" is undefined
          vld1.16 {q2, q3}, [r0]!
                   ^

armccコマンドでフラグを見逃していませんか?

armccバージョンは

Product: ARM Compiler 5.05
Component: ARM Compiler 5.05 (build 41)
Tool: armcc [4d0eb9]
For support see http://www.arm.com/support/
Software supplied by: ARM Limited
4

1 に答える 1

3

私は armcc を使用していませんが、コンパイラが NEON のインライン アセンブリをサポートしているとは思えません。

https://static.docs.arm.com/dui0472/k/DUI0472K_armcc_user_guide.pdf

セクション 7.3 を見てください。

7.3 コンパイラのインラインアセンブラサポートに関する制限事項

コンパイラのインライン アセンブラは、多くの命令をサポートしていません。具体的には、インライン アセンブラは以下をサポートしません。

• Thumb-2 テクノロジを使用しないプロセッサでの Thumb アセンブリ言語。• VFPv3 以降で追加された VFP 命令。• NEON 命令。• ARMv6 SETEND 命令と一部のシステム拡張。• ARMv5 BX 、BLX 、および BXJ 命令。

おそらくほとんど機能している理由は、vld がサポートされている VFPv2 の一部であり、「q」に到達するまで混乱しないためです。

gcc/clang バリアントを使用している場合は、はい、-march=armv7-a -mfpu=neon基本 ISA と浮動小数点ユニット拡張の両方を指定して、NEON をターゲットに暗黙的にコンパイルする必要があることをお勧めしますが、インライン アセンブリではなく、コンパイラ組み込み関数のみを使用します。(コメントで述べたように)。

于 2016-11-03T21:57:12.593 に答える