質問

Linuxでは、feenableexceptおよびfedisableexceptを使用して、浮動小数点例外でのSIGFPE割り込みの生成を制御できます。 Mac OS X Intelでこれを行うにはどうすればよいですか?

浮動小数点割り込みを有効にするためのインラインアセンブリは、 http://で提供されています。 developer.apple.com/documentation/Performance/Conceptual/Mac_OSX_Numerics/Mac_OSX_Numerics.pdf 、7-15ページ、ただしPowerPCアセンブリのみ。

役に立ちましたか?

解決

sseの例外は、 xmmintrin.h _MM_SET_EXCEPTION_MASK を使用して有効にできます。たとえば、無効な(nan)例外を有効にするには、do

#include <xmmintrin.h>
...
_MM_SET_EXCEPTION_MASK(_MM_GET_EXCEPTION_MASK() & ~_MM_MASK_INVALID);

他のヒント

Mac OS Xでは、これはやや複雑です。 OS Xは、x87 FPユニットではなく、デフォルトですべてのFP演算にSSEユニットを使用します。 SSEユニットは割り込みオプションを尊重しないため、割り込みを有効にすることに加えて、SSE数学を使用しないようにすべてのコードをコンパイルする必要があります。

&quot; -mno-sse -mno-sse2 -mno-sse3&quot;を追加して、数学を無効にできます。 CFLAGSへ。これを行うと、インラインアセンブリを使用して、基本的にLinuxと同じフラグを使用してFP例外を構成できます。

short fpflags = 0x1332 // Default FP flags, change this however you want. 
asm("fnclex");
asm("fldcw _fpflags");

あなたが見つけるかもしれない1つのキャッチは、OS Xが完全にsseを使用して構築されているため、キャッチされていないバグがあるかもしれないということです。以前はシグナルハンドラが適切なコードを返さないという大きな問題がありましたが、それは数年前のことでしたが、今は修正されていることを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top