1

GNUARM C コンパイラを使用してレガシー コードを構築し、関数のすべての暗黙的な宣言を解決しようとしています。

ARM 固有の関数をいくつか見つけましたが、これらの関数の宣言を含むヘッダー ファイルが見つかりません。

get_pc 
get_cpsr 
get_sp

Web を検索したところ、非標準のインクルード ファイルを使用せずに、これらの関数を含むソース コードしか見つかりませんでした。

関数宣言についても解決します。

Cygwin / Windows プラットフォームにもコードを移植するので、Cygwin GNU GCC の同等の宣言は何ですか?

ありがとう。

4

2 に答える 2

3

これらの関数が本当に必要な場合は、独自に記述してください。asmはインラインasmよりも簡単です。

.globl get_pc
get_pc:
    mov r0,pc
    bx lr

.globl get_sp
get_sp:
    mov r0,sp
    bx lr

.globl get_cpsr
get_cpsr:
    mrs r0,cpsr
    bx lr

少なくとも腕については。x86に移植していて、同等のものが必要な場合は、とにかくそれらのコードで何が必要か疑問に思う必要があります。特にcpsrでは、プロセッサベンダー/ファミリ間でステータスレジスタがほとんど一致しないため、結果を使用するコードを変更する必要があります。x86に相当するものは、それでもほぼ同じレベルの労力であり、コードを書くだけの場合よりも、グーグル検索を実行して結果を読み取るのに時間がかかります(プロセッサを知っている場合)。

アプリケーションが何をしているかにもよりますが、これらの関数を呼び出したり、戻り値を使用したりするコードはコメントアウトする方がよいでしょう。これらのアイテムが使用される理由はいくつか想像できますが、アーキテクチャ固有のものに入る可能性があり、いくつかのレジスタ読み取り関数を移植するよりも複雑です。したがって、user786653が尋ねたのは重要な質問です。これらの関数はどのように使用されますか?どこで見つけることができますが、どのように使用され、なぜ必要だと思いますか。

于 2011-11-04T19:02:58.997 に答える
2

それらが関数であると確信していますか?私は ARM にあまり詳しくありませんが、それらはコンパイラの組み込み関数のように聞こえます。GCC に移行する場合は、それらをインライン アセンブリに置き換えた方がよい場合があります。

于 2011-11-03T18:43:34.263 に答える