Skip to content

Commit e8a7a6a

Browse files
authored
fix soxr: remove FE_INVALID optimization (#627)
1 parent 21eeeb7 commit e8a7a6a

2 files changed

Lines changed: 32 additions & 32 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

soxr-sys/src/rint.h

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@
1616
#define rint16D(a,b) __asm__ __volatile__("fistps %0": "=m"(a): "t"(b): "st")
1717
#define rint32F rint32D
1818
#define rint16F rint16D
19-
#define FE_INVALID 1
20-
static __inline int fe_test_invalid(void) {
21-
int status_word;
22-
__asm__ __volatile__("fnstsw %%ax": "=a"(status_word));
23-
return status_word & FE_INVALID;
24-
}
25-
static __inline int fe_clear_invalid(void) {
26-
int32_t status[7];
27-
__asm__ __volatile__("fnstenv %0": "=m"(status));
28-
status[1] &= ~FE_INVALID;
29-
__asm__ __volatile__("fldenv %0": : "m"(*status));
30-
return 0;
31-
}
19+
//#define FE_INVALID 1
20+
// static __inline int fe_test_invalid(void) {
21+
// int status_word;
22+
// __asm__ __volatile__("fnstsw %%ax": "=a"(status_word));
23+
// return status_word & FE_INVALID;
24+
// }
25+
// static __inline int fe_clear_invalid(void) {
26+
// int32_t status[7];
27+
// __asm__ __volatile__("fnstenv %0": "=m"(status));
28+
// status[1] &= ~FE_INVALID;
29+
// __asm__ __volatile__("fldenv %0": : "m"(*status));
30+
// return 0;
31+
// }
3232
#elif defined _MSC_VER && defined _M_IX86
3333
#define FPU_RINT32
3434
#define FPU_RINT16
@@ -42,19 +42,19 @@
4242
#define rint32F(y,x) rint32f(&(y),x)
4343
#define rint16D(y,x) rint16d(&(y),x)
4444
#define rint16F(y,x) rint16f(&(y),x)
45-
#define FE_INVALID 1
46-
static __inline int fe_test_invalid(void) {
47-
short status_word;
48-
__asm fnstsw status_word
49-
return status_word & FE_INVALID;
50-
}
51-
static __inline int fe_clear_invalid(void) {
52-
int32_t status[7];
53-
__asm fnstenv status
54-
status[1] &= ~FE_INVALID;
55-
__asm fldenv status
56-
return 0;
57-
}
45+
//#define FE_INVALID 1
46+
// static __inline int fe_test_invalid(void) {
47+
// short status_word;
48+
// __asm fnstsw status_word
49+
// return status_word & FE_INVALID;
50+
// }
51+
// static __inline int fe_clear_invalid(void) {
52+
// int32_t status[7];
53+
// __asm fnstenv status
54+
// status[1] &= ~FE_INVALID;
55+
// __asm fldenv status
56+
// return 0;
57+
// }
5858
#elif defined _MSC_VER && defined _M_X64
5959
#include <emmintrin.h>
6060
#include <float.h>
@@ -70,17 +70,17 @@
7070
#define rint32F(y,x) rint32f(&(y),x)
7171
#define rint16D(y,x) rint16d(&(y),x)
7272
#define rint16F(y,x) rint16d(&(y),(double)(x))
73-
#define FE_INVALID 1
74-
#define fe_test_invalid() (_statusfp() & _SW_INVALID)
75-
#define fe_clear_invalid _clearfp /* Note: clears all. */
73+
//#define FE_INVALID 1
74+
// #define fe_test_invalid() (_statusfp() & _SW_INVALID)
75+
// #define fe_clear_invalid _clearfp /* Note: clears all. */
7676
#elif HAVE_LRINT && LONG_MAX == 2147483647L && HAVE_FENV_H
7777
#include <math.h>
7878
#include <fenv.h>
7979
#define FPU_RINT32
8080
#define rint32D(y,x) ((y)=lrint(x))
8181
#define rint32F(y,x) ((y)=lrintf(x))
82-
#define fe_test_invalid() fetestexcept(FE_INVALID)
83-
#define fe_clear_invalid() feclearexcept(FE_INVALID)
82+
// #define fe_test_invalid() fetestexcept(FE_INVALID)
83+
// #define fe_clear_invalid() feclearexcept(FE_INVALID)
8484
#endif
8585

8686
#if !defined FPU_RINT32

0 commit comments

Comments
 (0)