GNU

2016-09-01 3 views
1

SPARC V8プロセッサ状態レジスタ(PSR)はhttp://sparc.org/technical-documents/GNU

で入手可能な8トラップを無効にするSPARCアーキテクチャマニュアルバージョンで詳述するように/無効トラップ(ET)を有効にするビットが含まれては非アトミック操作は、のように明示的に手動で次のように述べた。

トラップが有効になっている場合(ET = 1)のソフトウェアは、彼らに (= 0 ET)を無効にする場合は、注意が必要です。 「RDPSR、WRPSR」シーケンスは中断可能であるため、 PSRを2つの命令間で変更することができます。このシーケンスはトラップを無効にするメカニズムではありません。

SPARC-V8 SPARC-V8Eへの組み込みサプリメントは、この軽減するための部分WRPSR命令追加:非ヌルRDとWRPSR命令が実行されると

を、 PSRの唯一のいくつかのフィールドが書かれていますPSRの定義されたすべてのフィールドではなく、マッピング "RD =>フィールド"はtbdです。しかし:

RD = 0:

RD = TBD(互換性のために)書かれたすべてのフィールド:ETのみが書き込まれます。

第2のポイントは、明示的に述べられているV8の弱点(上記のWRPSR命令のプログラミングノート)を克服することができます。

私は机の上でそれをサポートする実装をしていますが、GNUアセンブラ(GAS)はこの命令をサポートしていないため、使用方法はわかります。即時の書き込みまたは%PSRの値を登録するには、私が知っている唯一の方法は、MOVである:

mov %g0, %psr/mov 0, %psr 

GNU binutilsのガス源を見ることによって、私は命令のRDの一部を指定するための構文はありませんことを理解しコードなので、GNU ASでET = 0をアトミックに設定する方法はありません。それとも、私は何かが恋しいですか?

GASマニュアルのいくつかの-Av8plusXコマンドラインオプションに気付きましたが、V8Eまたは部分的なWRPSRに関連していないようです。

この命令を出力するためのGAS構文または他の方法はありますか?可能でない場合は、パッチを作成するために何を知る必要がありますか?構文はどのように見えますか?

パーシャルWRPSRをサポートするコンパイラはありますか?私は最近SPARCサポートのためにLLVMをチェックしましたが、まだ実験的/不完全でした。

ありがとうございました。私は1つのトラップを無効にするには、以下のように、たとえば、命令の代わりに定数を使用してアセンブラコードに直接挿入できることを学びました。一方で

答えて