FPU コントロールワードをシステムが(勝手に)変更しちゃう例がまたひとつ…

えーと、少し前、Cairo の OS/2 版で環境によって結果がおかしくなるっていうのがあって、私の記憶が確かなら「何かの OS/2 API を実行すると FPU のコントロールワードがいじられて例外マスクが解除されてしまう」というようなことだったような気がするのですが、それっぽい例を今日また発見してしまった。

とりあえず検証ソース: fptest.c

#include <stdio.h>
#include <float.h>

void
main(void)
{
    unsigned c1, c2;
    
    c1 = _control87(0,0);
    fprintf(stderr, "c1 ctrl %04x\n", c1);
    c2 = _control87(0,0);
    fprintf(stderr, "c2 ctrl %04x\n", c2);
}

まずふつうに OS/2 上の gccコンパイルして実行(VirtualPC のゲストだけど)。特に問題なし。

次に telnetd を起動、ホスト側から telnet でログインし、同じプログラムを実行する。

( ゚д゚)ポカーン

いやマジありえないって、これは。