« toyVMで遊ぶ | メイン | fast strlen and memchr by SSE2 »

x64(64bit)対応JITアセンブラXbyakリリース

最近,Visual C++ のことを高機能なマクロアセンブラだと思っている光成です.
その考えを64bit Windows/Linuxにも押し進めるため,64bitに対応したJITアセンブラXbyakを公開しました.
64bit Visual Studioではインラインアセンブラが廃止されたため,何かと便利になるのではないかと思います.

ところでWikipediaのAMD64などには64bit Windowsに関して


64ビットアプリケーションではx87命令・MMX命令及び3DNow!命令をサポートしない(x87レジスタをコンテキストスイッチの際にセーブしない)

という記述があるのですが,試したところちゃんとセーブされているようです.

テスト方法
test_mmx.cppをコンパイルして(binary)
コマンドプロンプトを二つ開いて

test_mmx 1
test_mmx 3

と実行します.それぞれスレッドを起動して,1, 2, 3, 4という数値が表示され続けました.

もしMMXレジスタがコンテクストスイッチで保存されていなければ全て同じものになるはずなので,保存されていると推測されます.

Legacy Floating-Point Supportにも

The MMX and floating-point stack registers (MM0-MM7/ST0-ST7) are preserved across context switches

とあるので保存されているように思われます.

一つ気になるのは私がテストしたのは32bit WindowsのVMware上の64bit Xpだったという点です.素の64bit環境でテストした場合どうなるかどなたか試していただけますでしょうか.

追記
さんから英語版Wikipediaには使えると書いてますよという情報をいただきました.
#見るの忘れてました.迂闊だった….

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)