gpt4 book ai didi

windows - 具有内联 asm 的 Windows x64 平台中的 libsoxr 未编译

转载 作者:可可西里 更新时间:2023-11-01 11:20:22 26 4
gpt4 key购买 nike

我正在尝试编译 libsoxr(它由 Audacity 团队派生自 libsox 库)库。我可以编译 osx 32、osx 64 和 win32。他们使用内联汇编,而 Windows x64 平台不支持内联汇编。有问题的代码是这样的:

#if HAVE_FENV_H
#include <fenv.h>
#elif defined _MSC_VER
#define FE_INVALID 1
#define FE_DIVBYZERO 4
#define FE_OVERFLOW 8
#define FE_UNDERFLOW 16
#define FE_INEXACT 32
#define FE_ALL_EXCEPT (FE_INEXACT|FE_DIVBYZERO|FE_UNDERFLOW|FE_OVERFLOW|FE_INVALID)
static __inline int fetestexcept(int excepts)
{
short status_word;
__asm fnstsw status_word
return status_word & excepts & FE_ALL_EXCEPT;
}

static __inline int feclearexcept(int excepts)
{
int16_t status[14];
__asm fnstenv status
status[2] &= ~(excepts & FE_ALL_EXCEPT);
__asm fldenv status
return 0;
}
#endif

我不知道fnstenvfldenv 是做什么的。有人可以指导我与 x64 兼容吗?

最佳答案

假设您使用 Microsoft 编译器进行编译,那么您可以使用 RTL 函数而不是内联汇编。

要测试特定的浮点状态标志调用 _statusfp .要清除浮点状态标志,请调用 _clearfp .

为了使用 _statusfp,您需要将原始 8087 标志转换为 _statusfp 使用的抽象标志。

更新

问题中的代码是 fenv.h 的一小部分的实现,它是 C99 的一部分。 MS 编译器需要它,因为它只实现 C89。在我看来,使用真正的 C99 编译器会更好。这将伴随着 fenv.h 的实现。

关于windows - 具有内联 asm 的 Windows x64 平台中的 libsoxr 未编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14068396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com