2017-09-12 18 views
2

この質問はPower8 in-core crypto patchにありました。このパッチは、Power8ビルトインを使用してAESを提供します。 VSXレジスタをロードするときは、リトルエンディアンマシンで実行するときに128ビットのエンディアン反転を実行して、VSXレジスタが適切な値をロードするようにする必要があります。組み込み関数を使用して実行時にmsr.leをチェックする方法は?

コンパイル時に、__BYTE_ORDER__のようなマクロをチェックすることができます。しかし、実行時にマシンステータスレジスタをチェックするはずです。 msr.le=1の場合は、エンディアンスワップを実行します。また、AltiVec Programming Environment Manual、セクション3.1.4、p。も参照してください。 3-5。

ビルトインを使用して実行時にマシンステータスレジスタを確認するにはどうすればよいですか?

答えて

2

コンパイル時には知られている必要はありません。あなたのコンパイルされたコードの反対のエンディアンで実行している場合、あなたの指示は完全に間違ってエンコードされます。したがって、お使いのOSは、プログラムが実行可能ファイルのエンディアンに合わせて正しいMSR[LE]設定で実行されていることを確認します。

本質的に:MSR[LE]ビットは命令とデータロード/ストアを制御します。

本当にわからない場合は、エンディアンを検出するために使用できるいくつかの技がありますが、スーパー初期ブートコードを書いていない限り、その必要はありません。

+0

ありがとう@Jeremy。コンパイル時にチェックするだけです。実行時に確認する必要はありません。あれは正しいですか? – jww

+0

はい、正確です。すでに見つかったように、 '__BYTE_ORDER__'を使用してください。 LEビットが逆エンディアンに設定されていると、エンディアンをチェックするためのコードを実行することはできません:) –

+0

Ack、ありがとう。私は命令にも 'msr [le]'が適用されていることに気づいていませんでした。もし私がそれを知っていたら、おそらく最初の質問をしなかったでしょう: – jww

関連する問題