문제

Linux에서는 FeenableExcrect 및 FedisableExcept를 사용하여 부동 소수점 예외에서 SIGFPE 인터럽트 생성을 제어 할 수 있습니다. Mac OS X Intel에서 어떻게 할 수 있습니까?

플로팅 포인트 인터럽트를 활성화하기위한 인라인 어셈블리가 제공됩니다. http://developer.apple.com/documentation/performance/conceptual/mac_osx_numerics/mac_osx_numerics.pdf, pp. 7-15, 그러나 PowerPC 어셈블리 용.

도움이 되었습니까?

해결책

SSE에 대한 예외를 사용하여 활성화 할 수 있습니다 _MM_SET_EXCEPTION_MASK ~에서 xmmintrin.h. 예를 들어, 유효하지 않은 (NAN) 예외를 활성화하려면

#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 수학을 사용하지 않도록 모든 코드를 컴파일해야합니다.

CFLAG에 "-mno-sse -mno-sse2 -mno-sse3"를 추가하여 수학을 비활성화 할 수 있습니다. 이렇게하면 인라인 어셈블리를 사용하여 기본적으로 Linux와 동일한 플래그를 사용하여 FP 예외를 구성 할 수 있습니다.

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

당신이 찾을 수있는 한 가지는 OS X가 SSE를 사용하여 완전히 구축되기 때문에 매치되지 않은 버그가있을 수 있다는 것입니다. 나는 신호 핸들러가 적절한 코드를 뒤로 전달하지 않는 것이 큰 것을 알고 있었지만, 몇 년 전, 지금은 지금 고정되어 있기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top