SSEまで含めたFPU例外処理
昨日の続き。
id:shinichiro_hさんのアドバイスにしたがって、herumiさんの記事 http://homepage1.nifty.com/herumi/prog/binary.html##99 を参考にしました。
自分のところでは動作確認できました。所詮ゲーム用途なので今のところこれで十分。
あとはSSE1命令が使えるかどうかの判定が必要か・・・。
#ifdef __i386__ { short cw; __asm__ volatile("fnstcw %0":"=m"(cw)); cw &= ~(0x1 | 0x4); // 不正操作、ゼロ除算のみ検出 __asm__ volatile("fldcw %0"::"m"(cw)); int mxcsr; __asm__ volatile("stmxcsr %0":"=m"(mxcsr)); mxcsr &= ~((1 << 7) | (1 << 9)); // 不正操作、ゼロ除算のみ検出 __asm__ volatile("ldmxcsr %0"::"m"(mxcsr)); } #endif