2009年11月27日

ARM v7 アーキテクチャから SWP 命令が廃止されました。

主にセマフォの実装などに使用されてきた SWP/SWPB 命令は、もともと ARM v6 アーキテクチャ以降では廃止予定扱い(deprecated) になっていたのですが、ついに v7 からは、デフォルトで未定義命令扱いになり、実行すると例外が飛ぶようになったようです。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204gj/Chdbbbai.html

例えば v7 アーキテクチャ向けに Linux や root filesystem をビルドする時、コンパイラのターゲットアーキテクチャオプションが v7 になっていないと、これが生成されてしまい、システムの奥底で突然謎の例外が発生してクラッシュしたりという、わかりにくい不具合の原因にも成り得るので注意が必要です。

より正確には、v7 でも完全に廃止されたわけではないようです。ARM Architecture Reference Manual (ARMARM) v7-A and v7-R を紐解いてみると、ARM v7-A の場合は System Control Register (SCTLR) というレジスタが存在し、bit[10] が SWP/SWPB Enable bit ということで、これが 1 の場合は実行が可能なようです。(reset 時は 0 。)

v6 以降では、新しく追加された LDREX/STREX を使うことが推奨されています。

それにしても、x86 に慣れた身からすると、プロセッサが後方互換性を捨てるなんていうのはありえない気がします。しかも完全に廃止したわけではなく、回路は残していて、実行も一応は可能というのも不思議です。

この変更は multiprocessing 向け対応の 1 つなのだそうです。ARM はこれからますますマルチコアやマルチプロセッサに対してアグレッシブに取り組んでいくぞという意思表示なのでしょうか。

トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード