在 Mac OS X Intel 上启用浮点中断
在 Linux 上,feenable except 和 fedisable except 可用于控制浮点异常上 SIGFPE 中断的生成。 如何在 Mac OS X Intel 上执行此操作?
http://developer.apple 中提供了用于启用浮点中断的内联汇编.com/documentation/Performance/Conceptual/Mac_OSX_Numerics/Mac_OSX_Numerics.pdf,第 7-15 页,但仅适用于 PowerPC 组装。
On Linux, feenableexcept and fedisableexcept can be used to control the generation of SIGFPE interrupts on floating point exceptions. How can I do this on Mac OS X Intel?
Inline assembly for enabling floating point interrupts is provided in http://developer.apple.com/documentation/Performance/Conceptual/Mac_OSX_Numerics/Mac_OSX_Numerics.pdf, pp. 7-15, but only for PowerPC assembly.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可以使用
xmmintrin.h
中的_MM_SET_EXCEPTION_MASK
启用 sse 例外。 例如,要启用无效(nan)异常,请执行以下操作Exceptions for sse can be enabled using
_MM_SET_EXCEPTION_MASK
fromxmmintrin.h
. For example, to enable invalid (nan) exceptions, do在 Mac OS X 上,这相当复杂。 默认情况下,OS X 对所有 FP 数学使用 SSE 单位,而不是 x87 FP 单位。 SSE 单元不支持中断选项,因此这意味着除了启用中断之外,您还需要确保编译所有代码时不使用 SSE 数学。
您可以通过将“-mno-sse -mno-sse2 -mno-sse3”添加到 CFLAGS 来禁用数学。 完成此操作后,您可以使用一些内联汇编来配置 FP 异常,其标志与 Linux 基本相同。
您可能会发现的一个问题是,由于 OS X 完全使用 sse 构建,因此可能存在未捕获的错误。 我知道曾经有一个很大的信号处理程序没有传回正确的代码,但那是几年前的事了,希望现在已经修复了。
On Mac OS X this is moderately complicated. OS X uses the SSE unit for all FP math by default, not the x87 FP unit. The SSE unit does not honor the interrupt options, so that means that in addition to enabling interrupts, you need to make sure to compile all your code not to use SSE math.
You can disable the math by adding "-mno-sse -mno-sse2 -mno-sse3" to your CFLAGS. Once you do that you can use some inline assembly to configure your FP exceptions, with basically the same flags as Linux.
The one catch you may find is that since OS X is built entirely using sse there may be uncaught bugs. I know there used to be a big with the signal handler not passing back the proper codes, but that was a few years ago, hopefully it is fixed now.