

先般  
Zynqで割り込みが不調  
というタイトルの投稿をしたgammodlerと申します。  
英語サイトに投稿するつもりが、誤って日本語サイトを選択してしまいました。  
急きょ日本語に変更、数々のおきて破り申し訳ありません。  
nekketsuuu様 kunif様  
コメントおよび添削までしていただいて恐縮しております。  
以降は注意して投稿いたします。

まだ『おきて破り』があるかもしれません。ご指摘ください。

* * *

arm7-cortex9にあるNEONというDSP機能を使おうとしています。  
以下の記事を参考に作業をしており、以後これをTutorialと呼びます。

[ARM NEON intrinsic を書く -
Qiita](https://qiita.com/PowerPC7450/items/4b0e0104b57b42ecd882)

その中の以下コマンドを実行しようとしてさっそくつまづきました。

[code]

    raspberrypi:~/tmp> gcc -S add.c -mfpu=neon -march=armv7-a -O3
    
[/code]

Raspberry PiというのはHardware Platformの名称で、質問者はこれと類似性の高いMicroZedというものを使用しています。  
どちらもXilinx社のZynq-7000というchipを使用、cpuはarm7-cortex9です。

Tutorialではgccのoptionとして  
`-mfpu=neon -march=armv7-a`  
を指定していますが、Xilinx社が発行するDocumentではこれを  
`-mcpu=cortex-a9 -mfpu=neon`  
とするよう指定しています。そこで

[code]

    -$ gcc -S add.c  -march=cortex9 -mfpu=neon -O3
    
[/code]

を実行してみました。すると

[code]

    unrecognized command line option -mfpu=neon
    
[/code]

が出てしまいました。`add.c` のソースコードは末尾にあります。

`-march=cortex9(armv7-a)` は受け付けるが  
`-mfpu=neon` は拒絶、という結果になりました。

gccのVersionが関与している可能性を探りました。

質問者のOSはCentOS7

[code]

    gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
    
[/code]

です。

Ubuntuでも試みてみました：

[code]

    gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
    
[/code]

これもNGでした。

一方Tutorialでは

[code]

    gcc (Raspbian 4.9.2-10) 4.9.2
    
[/code]

Tutorialにはこの件に関しcommentはなく、問題になっていないようです。

なお、RaspbianというのはOSのようです：  
<https://ja.wikipedia.org/wiki/Raspbian>

そこでRaspbianでGO(?)であることを頼りに解決策を探った結果、この問題に最も触ると思われる  
<https://www.raspberrypi.org/forums/viewtopic.php?t=139091#p1059230>  
を発見しました。  
しかし問題提起者がGOに至ったわけでもないようです。  
このなかでneonについてもVersion指定が必要との指摘がありました。

その他、option指定方法にも工夫があるらしいことが分かりました。  
そこで、実際に使用されているCPUの詳細をチェックして、

[code]

    -$ gcc -S add.c  -march=cortex9 -mfpu=neon-vfpv3 -O3
    
[/code]

あるいは

[code]

    -$ gcc -S add.c  -march=cortex9 -mfpu=neon-vfpd32 -O3
    
[/code]

を試みましたが、いずれもNGでした。  
cpuの詳細はTarget側にある/proc/cpuinfoから取得しました：

[code]

    root@prg:/proc# cat cpuinfo
    processor       : 0
    model name      : ARMv7 Processor rev 0 (v7l)
    BogoMIPS        : 1332.01
    Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
    CPU implementer : 0x41
    CPU architecture: 7
    CPU variant     : 0x3
    CPU part        : 0xc09
    CPU revision    : 0
    
    processor       : 1
    model name      : ARMv7 Processor rev 0 (v7l)
    BogoMIPS        : 1332.01
    Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
    CPU implementer : 0x41
    CPU architecture: 7
    CPU variant     : 0x3
    CPU part        : 0xc09
    CPU revision    : 0
    
    Hardware        : Xilinx Zynq Platform
    Revision        : 0003
    Serial          : 0000000000000000
    root@prg:/proc#
    
[/code]

arm-cortex9でのneonの機能は多数使用されていると思います。

gccのVersion down？これがあれば全世界で問題噴出？

必要なconfigを実行していないなど、のミスがあるのかもしれません。  
解決に至る示唆をいただければ幸いです。

* * *

**add.c**

[code]

    #include <arm_neon.h>
    #include <stdio.h>
    
    int main(int argc, char ** argv)
    {
      uint32x2_t vx, vy, vz;
      uint32_t x[2] = {2, 4};
      uint32_t y[2] = {4, 8};
      uint32_t z[2];
    
      vx = vld1_u32(x);
      vy = vld1_u32(y);
      vz = vadd_u32(vx, vy);
      vst1_u32(z, vz);
      printf("z: %u %u\n", z[0], z[1]);
    }
    
[/code]


CC BY-SA 4.0
2019-11-05T03:41:39.867
60262
2019-11-05T04:31:28.763
2019-11-05T04:31:28.763
3060
36330
question
linux zynq
ARM NEONのCompile設定が分からない