首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Mac OS X Intel上启用浮点中断

在Mac OS X Intel上启用浮点中断
EN

Stack Overflow用户
提问于 2008-10-29 14:41:34
回答 2查看 5.4K关注 0票数 19

在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汇编。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-12-04 14:06:36

可以从xmmintrin.h使用_MM_SET_EXCEPTION_MASK启用sse的例外。例如,要启用无效(nan)异常,请执行以下操作

代码语言:javascript
复制
#include <xmmintrin.h>
...
_MM_SET_EXCEPTION_MASK(_MM_GET_EXCEPTION_MASK() & ~_MM_MASK_INVALID);
票数 25
EN

Stack Overflow用户

发布于 2008-10-31 04:23:31

在Mac上,这是中等复杂的。默认情况下,OS对所有FP数学都使用SSE单位,而不是x87 FP单位。SSE单元不支持中断选项,因此这意味着除了启用中断之外,您还需要确保编译所有代码以避免使用SSE数学运算。

您可以通过向您的CFLAGS添加"-mno-sse -mno-sse2 -mno-sse3“来禁用数学运算。一旦你这样做了,你就可以使用一些内联汇编来配置你的FP异常,基本上和Linux一样的标志。

代码语言:javascript
复制
short fpflags = 0x1332 // Default FP flags, change this however you want. 
asm("fnclex");
asm("fldcw _fpflags");

您可能会发现,由于OS完全是使用sse构建的,因此可能存在未捕获的bug。我知道曾经有一个大问题,信号处理程序没有传回正确的代码,但那是几年前的事了,希望现在已经解决了。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/247053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档