The MMX and floating-point stack registers (MM0-MM7/ST0-ST7) are volatile. That is, these legacy floating-point stack registers do not have their state preserved across context switches.
これがドライバに限定されるのかどうかは、私も実際に実機で試したわけではないのではっきりしたことは言えませんけど、ドライバだけ実行環境が違うというのもヘンなので、おそらくユーザーアプリでも同じだと思います。AMD の文書(PDF) [amd.com] では、"Microsoft Windows for AMD64 will not context switch x87, 3DNow!, MMX for 64-bit native threads." となってますし。
無知な私におせーて! (スコア:1, 興味深い)
Re:無知な私におせーて! (スコア:1, 参考になる)
レジスタのやりくりロスが減るんじゃないかと。
(もちろんCPU内部にはより多くの物理レジスタがあってレジスタ
リネームされてるんでしょうけど)
浮動小数点周りは退化? (スコア:4, 参考になる)
けど、AMD64 版 Windows の 64bit モード下では、x87 FPU レジスタの内容を保存・復元しなくなりましたので、事実上 x87 FPU 浮動小数点演算や、その x87 FPU レジスタを間借りしている MMX/3DNow! が使えなくなってます。MMX/3DNow! はともかく x87 FPU が使えないとなると、80bit の拡張倍精度フォーマットが使えなくなりますし、超越関数(sin/cosなど)のハードウェア演算ができなくなるので、状況によっては 6
Re:浮動小数点周りは退化? (スコア:1)
Windows の 64bit モードで x87 FPU レジスタが保存されないとなると、32bit モードで動かさざるを得ないアプリが半ダースほどあるので。
#、と言うか 64bit 版への移行は断念かも。
Re:浮動小数点周りは退化? (スコア:2, 参考になる)
・Legacy Floating-Point Support
The MMX and floating-point stack registers (MM0-MM7/ST0-ST7) are volatile. That is, these legacy floating-point stack registers do not have their state preserved across context switches.
一つ補足 (スコア:2, 参考になる)
Re:浮動小数点周りは退化? (スコア:2, 興味深い)
教えていただいた URL [microsoft.com] は該当の記載が無いので Google で "Legacy Floating-Point Support " を検索 [google.co.jp]したところ、Other Calling Convention Process Issues [microsoft.com]を発見できました。
これは Other Calling Convention Process Issues [microsoft.com]
とあるのでDDK、ディバイスドライバのついて限定されるのではないかと思います。これまでドライバでx87が使えたか知らないのですが、超越関数が使えないとチョットだけ不便な気がします。
ドライバ以外(通常の64bit アプリケーション)でx87が使えるかはもう少し調べてみます。
Re:浮動小数点周りは退化? (スコア:1)
これがドライバに限定されるのかどうかは、私も実際に実機で試したわけではないのではっきりしたことは言えませんけど、ドライバだけ実行環境が違うというのもヘンなので、おそらくユーザーアプリでも同じだと思います。AMD の文書(PDF) [amd.com] では、"Microsoft Windows for AMD64 will not context switch x87, 3DNow!, MMX for 64-bit native threads." となってますし。
Re:浮動小数点周りは退化? (スコア:1)
=^..^=
Enjoy Computing, Skiing, as much as Horse Racing.
Re:浮動小数点周りは退化? (スコア:1)
Re:浮動小数点周りは退化? (スコア:1)
コンパイラはx86や3DNow!、MMX のコードを生成しないと思います。
しかし(インラインアセンブラを含む)アセンブラで書かれた資産はちがいます。
#個人的には 64bit に移行する今がx87と決別するいい潮時だと思います。
Re:浮動小数点周りは退化? (スコア:0)
そもそも64ビットコンパイラではインラインアセンブラが使えないはずですが(gccは使えるのかな?)
GCCのばぁい(Re:浮動小数点周りは退化?) (スコア:1)
最低でもgcc3まではインラインアセンブラ有効です。
従って、PC U*ixベースで開発されているAV系のソフトでは、x86_64などのSIMD命令をインラインアセンブラで記述している(そしてcofigure段階でMPUを判別して関数レベルで最適なコード記述を選択している)ものが結構あります。
# 勿論、インラインアセンブラだけでなく、XviD [xvid.org]のように
# 独立したアセンブルソースで書いてある例も多々ありますが…
Re:浮動小数点周りは退化? (スコア:1)
そうです,過去に決別して,さぁ,
Welcome to EPIC world!(寂しいので誰か来て)
# x86をすっ飛ばして,Itaniumのアセンブラしか知らないから微妙に話についていけん.
Re:浮動小数点周りは退化? (スコア:1)
Calling conventions for different C++ compilers and operating systems (PDF) [agner.org] という文書では、MSDN の記述にある "context switches" とはタスク切り替えのことではなくて関数呼び出しのことを指しているのではないか、というようなことが書かれています。要するに MSDN のあの一文の意味は「関数呼び出しの前後で FP レジスタの値は保存されない」という意味ではないかという説。
確かに FXSAVE/FXRSTOR 命令を使えば、FP レジスタを含むすべてのレジスタを一括して保存できるので、タスク切り替えの前後で FP レジスタだけ保存されないというのもヘンな仕様だなぁとは思っていたのですが。