Frage

Unter Linux feenableexcept und fedisableexcept kann verwendet werden, um die Erzeugung zu steuern SIGFPE Interrupts auf Punkt Ausnahmen schweben. Wie kann ich das auf Mac OS X Intel?

Inline Baugruppe zum Ermöglichen Gleitkomma-Interrupts vorgesehen in http: // developer.apple.com/documentation/Performance/Conceptual/Mac_OSX_Numerics/Mac_OSX_Numerics.pdf , S.. 7-15, aber nur für PowerPC-Montage.

War es hilfreich?

Lösung

Ausnahmen für sse können mit _MM_SET_EXCEPTION_MASK von xmmintrin.h aktiviert werden. Zum Beispiel, ungültig (nan) Ausnahmen zu ermöglichen, tut

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

Andere Tipps

Unter Mac OS X ist dies mäßig kompliziert. OS X verwendet die SSE-Einheit für alle FP Mathematik standardmäßig nicht der x87 FP-Einheit. Die SSE-Einheit nicht die Interrupt-Optionen ehrt, so dass bedeutet, dass zusätzlich zu ermöglichen, Unterbrechungen, müssen Sie kompilieren, um sicherzustellen, dass alle Ihren Code nicht SSE Mathematik zu verwenden.

Sie können die Mathematik deaktivieren, indem Sie "-mno-sse -mno-sse2 -mno-SSE3", um Ihre CFLAGS. Sobald Sie das tun können Sie einige Inline-Assembly verwenden, um Ihre FP Ausnahmen zu konfigurieren, mit im Grunde die gleichen Flags wie Linux.

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

Die einen Haken Sie finden können, ist, dass seit OS X vollständig sse mit eingebaut ist es nicht abgefangene Fehler sein kann. Ich weiß, es ist früher ein große mit den Signal-Handler sein, die richtigen Codes nicht vorbei zurück, aber das war vor ein paar Jahren, hoffentlich nun festgelegt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top