我想編譯libsoxr
(它來自libsox
庫由Audacity團隊)庫。我可以編譯osx 32,osx 64和win32。他們使用內聯asm,而Windows x64平臺不支持內聯asm。有問題的代碼塊是這樣的:libsoxr在Windows x64平臺,內聯asm不編譯
#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
我不知道是什麼fnstenv
和fldenv
做。可能有人指導我與x64兼容嗎?
這些說明正在處理x87狀態。 Windows x64通常不使用x87浮點,而是使用SSE浮點指令。 –
我正在使用Visual C++ express edition 2012. –