TOPPERS/JSPをgnu環境でビルドするには、Blackfin用のgccをelf用にビルドしたbfin-elf-gccを用います。以下では、特に断らない限りbfin-elf-gcc 3.4.1についてVisualDSP++ 4.5のコンパイラとの差異を説明します。
コンパイル環境はあらかじめ宣言されているマクロの有無によって容易に知ることができます。
TOPPERS/JSP for Blackfinでは、どちらも宣言されていない場合にエラーメッセージを表示するようにしています。
インライン・アセンブラの呼び出し方法はVisualDSP++とgnuの間で異なります。
さて、両者のインライン・アセンブラの使い方はおおむね同じです。これはVisualDSP++のCコンパイラがgccをお手本にしたためです。しかしながらrestictionの指定方法が異なりますので注意が必要です。
restrictionは、インライン・アセンブラにパラメータがどのようなレジスタであるべきかを指定する文字列です。この文字列はVisualDSP++のコンパイラととgccの間で異なりますので、気をつけてください。
また、gccのrestictionにはレジスタ・ハーフを指定する方法が用意されていません。
bfin-elf-gccでは、.hファイルの中でinline定義した関数はstatic修飾を行う必要があります。そうしなければ複数のファイルからインクルードした場合に名前の衝突が起きます。VisualDSP++ 4.5のCコンパイラにはこの制限はありません。
inline int foo(void); // 複数のファイルからインクルードして使うとエラーが起きる static inline int bar(void); // 複数のファイルからインクルードして使っても大丈夫