1

そのアーキテクチャの標準ABIとは異なる方法でレジスタを使用するコードを生成するようにGCCに依頼する方法はありますか?

ARMv4 チップ (LPC2000) を使用していますが、高速割り込みを高速化する必要があります。

FIQ ルーチンがありますが、スタックに r0..r7 を格納する必要があります。これは、レジスタ R8..r15 の独自のバンクであるため、FIQ モードとしては無意味に思えます。代わりにそれらを使用して、スタックからのプッシュとポップに使用される 16 命令サイクルを節約したいと考えています。

誰かが明白なことを述べる前に: アセンブリ言語で FIQ ハンドラーを書き直してください。はい、それができることはわかっています。この質問はより具体的です。

関数内でレジスタを割り当てる順序を変更するよう GCC4 に指示する #pragma または __attribute__ またはスイッチはありますか?

4

1 に答える 1

3

A.プラグマを使用して関数を宣言すると、これは正しく最適化されて除去されるはずです。interrupt

void f () __attribute__ ((interrupt ("FIQ")));

ソース: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function-Attributes

B.しかし、現在、関連するレジスタのプッシュ/ポップを最適化していないという未解決のバグ レポートを見つけました。バグ レポートは「最適化の失敗」として分類され、2011 年 6 月に確認されて以来公開されています。

ソース: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48429

于 2012-05-16T13:51:20.563 に答える