親指命令セットとKeil実数コンパイラを使用してARMコアを使用すると、32ビット整数に安全にアクセスできますか?サムレジスタセットは16ビットなので、32ビットintをフェッチするには2つのマシン命令が必要です。その場合、32ビットにアクセスすることはアトミックではありません。私の心配が真実なら、int代入はクリティカルな地域によって保護されるべきですか?ARM Thumb命令セットを使用する場合、32ビット整数にアクセス(ロード/ストア)するのはアトミックですか?
2
A
答えて
1
ThumbはARMと同じ32ビットレジスタを使用しているため、問題はありません。半分になっているのは、の指示のサイズです(Thumb-2の場合でも厳密にはそうではありません)。
Thumbにコンパイルする場合は、コードを変更する必要はありません。
0
命令サイズは、サムサイズでは16ビットであり、レジスタサイズではありません。
これは、i=1;
のような定数割り当てがアトミックであるとみなされることを意味します。複数の命令が生成されますが、i
がint32_t
であっても、i
のメモリ位置が1つだけ変更されます。
しかし、あなたは一度i=i+1
のようなものにクリティカルセクションが必要です。それはもちろん原子ではありません。
関連する問題
- 1. ARM/Thumb(IOS)でのBLX命令のデコード
- 2. Apple ASとARM/Thumb ADDS命令
- 3. mipsには32ビットのアドレスと32ビットの命令がありますか?
- 4. Gem5でのARMプロセッサの命令アクセス
- 5. どのように32ビットIRホールドロード命令ですか?(RISCスタイルの32ビットアーキテクチャ)
- 6. Direction/Sign x86命令セットのビット拡張
- 7. ARMのプリフェッチ命令
- 8. 32ビットレジスタ/命令をリアルモードで使用できますか?
- 9. OpenCL:GPU上の32ビットおよび64ビットpopcnt命令?
- 10. 次のARM命令セットはストールを生成しますか? ARM11MP VFPUプログラミング
- 11. ARM Thumb/Thumb-2パフォーマンス
- 12. 符号付き32ビット整数を符号なし32ビット整数に変換する方法は?
- 13. 64ビットCPUで一般的な操作に32ビット整数を使用する理由はありますか?
- 14. Python on Arm、不正命令
- 15. minSdkVersion正の32ビット整数
- 16. ARMプログラムで実行される命令数を数えるには?
- 17. 64ビットアセンブリの命令の32ビットのもの
- 18. 32ビット整数のビット操作
- 19. アトミック命令はキャッシュラインにまたがることができますか?
- 20. 32ビットLinuxが64ビットIntelアーキテクチャで動作する場合、どのタイプのページングが使用されますか?
- 21. 32ビット固定長のバイナリで整数を出力する
- 22. PLD命令の使用
- 23. SQL多命令アトミック性質問
- 24. Rubyで2つの32ビット整数に64ビット整数を格納する方法
- 25. C++の8ビット整数と32ビット整数のビット単位の論理和
- 26. 逆順の整数をロードするSSE2命令
- 27. MIPSの32ビット整数のMSBを取得する
- 28. 異なるARM製造元が異なる命令セットを提供していますか?
- 29. エミュレータの開発で命令セットを知るには?
- 30. Pythonで32ビットIEEE値の整数値を取得するには
同様に、thumbとthumb2の両方の場合、ldm/stm命令を保持します。命令ごとに最大8つのレジスタがサムであり、サムのARMとして完全補数になります。基本的にARMの動作に満足していたら、thumb/thumb2について心配しないでください。実行命令ではなく命令デコーダのことです。 –
しかし、LDM/STM命令は、最大8個のレジスタのセット全体に対してアトミックではありません。アトミシティは、32ビットワードごとに保証されています。 – unixsmurf