Github User Fetcher
1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
duktape-1.5.2/src-separate/duk_replacements.c
Go to the documentation of this file.
1
/*
2
* Replacements for missing platform functions.
3
*
4
* Unlike the originals, fpclassify() and signbit() replacements don't
5
* work on any floating point types, only doubles. The C typing here
6
* mimics the standard prototypes.
7
*/
8
9
#include "
duk_internal.h
"
10
11
#if defined(DUK_USE_COMPUTED_NAN)
12
DUK_INTERNAL
double
duk_computed_nan;
13
#endif
14
15
#if defined(DUK_USE_COMPUTED_INFINITY)
16
DUK_INTERNAL
double
duk_computed_infinity;
17
#endif
18
19
#if defined(DUK_USE_REPL_FPCLASSIFY)
20
DUK_INTERNAL
int
duk_repl_fpclassify
(
double
x) {
21
duk_double_union
u;
22
duk_uint_fast16_t
expt;
23
duk_small_int_t
mzero;
24
25
u.
d
= x;
26
expt = (
duk_uint_fast16_t
) (u.
us
[DUK_DBL_IDX_US0] & 0x7ff0UL);
27
if
(expt > 0x0000UL && expt < 0x7ff0UL) {
28
/* expt values [0x001,0x7fe] = normal */
29
return
DUK_FP_NORMAL
;
30
}
31
32
mzero = (u.
ui
[DUK_DBL_IDX_UI1] == 0 && (u.
ui
[DUK_DBL_IDX_UI0] & 0x000fffffUL) == 0);
33
if
(expt == 0x0000UL) {
34
/* expt 0x000 is zero/subnormal */
35
if
(mzero) {
36
return
DUK_FP_ZERO
;
37
}
else
{
38
return
DUK_FP_SUBNORMAL
;
39
}
40
}
else
{
41
/* expt 0xfff is infinite/nan */
42
if
(mzero) {
43
return
DUK_FP_INFINITE
;
44
}
else
{
45
return
DUK_FP_NAN
;
46
}
47
}
48
}
49
#endif
50
51
#if defined(DUK_USE_REPL_SIGNBIT)
52
DUK_INTERNAL
int
duk_repl_signbit
(
double
x) {
53
duk_double_union
u;
54
u.
d
= x;
55
return
(
int
) (u.
uc
[DUK_DBL_IDX_UC0] & 0x80UL);
56
}
57
#endif
58
59
#if defined(DUK_USE_REPL_ISFINITE)
60
DUK_INTERNAL
int
duk_repl_isfinite
(
double
x) {
61
int
c =
DUK_FPCLASSIFY
(x);
62
if
(c ==
DUK_FP_NAN
|| c ==
DUK_FP_INFINITE
) {
63
return
0;
64
}
else
{
65
return
1;
66
}
67
}
68
#endif
69
70
#if defined(DUK_USE_REPL_ISNAN)
71
DUK_INTERNAL
int
duk_repl_isnan
(
double
x) {
72
int
c =
DUK_FPCLASSIFY
(x);
73
return
(c ==
DUK_FP_NAN
);
74
}
75
#endif
76
77
#if defined(DUK_USE_REPL_ISINF)
78
DUK_INTERNAL
int
duk_repl_isinf
(
double
x) {
79
int
c =
DUK_FPCLASSIFY
(x);
80
return
(c ==
DUK_FP_INFINITE
);
81
}
82
#endif
duk_small_int_t
int duk_small_int_t
Definition
duktape-1.5.2/src-noline/duk_config.h:1807
DUK_FP_NAN
#define DUK_FP_NAN
Definition
duktape-1.5.2/src-noline/duk_config.h:2157
DUK_INTERNAL
#define DUK_INTERNAL
Definition
duktape-1.5.2/src-noline/duk_config.h:2548
DUK_FP_NORMAL
#define DUK_FP_NORMAL
Definition
duktape-1.5.2/src-noline/duk_config.h:2161
DUK_FP_ZERO
#define DUK_FP_ZERO
Definition
duktape-1.5.2/src-noline/duk_config.h:2159
DUK_FPCLASSIFY
#define DUK_FPCLASSIFY
Definition
duktape-1.5.2/src-noline/duk_config.h:2152
DUK_FP_SUBNORMAL
#define DUK_FP_SUBNORMAL
Definition
duktape-1.5.2/src-noline/duk_config.h:2160
DUK_FP_INFINITE
#define DUK_FP_INFINITE
Definition
duktape-1.5.2/src-noline/duk_config.h:2158
duk_uint_fast16_t
duk_uint16_t duk_uint_fast16_t
Definition
duktape-1.5.2/src-noline/duk_config.h:1629
duk_internal.h
duk_repl_isinf
DUK_INTERNAL int duk_repl_isinf(double x)
Definition
duktape-1.5.2/src-separate/duk_replacements.c:78
duk_repl_signbit
DUK_INTERNAL int duk_repl_signbit(double x)
Definition
duktape-1.5.2/src-separate/duk_replacements.c:52
duk_repl_isnan
DUK_INTERNAL int duk_repl_isnan(double x)
Definition
duktape-1.5.2/src-separate/duk_replacements.c:71
duk_repl_isfinite
DUK_INTERNAL int duk_repl_isfinite(double x)
Definition
duktape-1.5.2/src-separate/duk_replacements.c:60
duk_repl_fpclassify
DUK_INTERNAL int duk_repl_fpclassify(double x)
Definition
duktape-1.5.2/src-separate/duk_replacements.c:20
duk_double_union
Definition
duktape-1.5.2/src-noline/duktape.h:1243
duk_double_union::d
double d
Definition
duktape-1.5.2/src-noline/duktape.h:1244
duk_double_union::ui
duk_uint32_t ui[2]
Definition
duktape-1.5.2/src-noline/duktape.h:1249
duk_double_union::uc
duk_uint8_t uc[8]
Definition
duktape-1.5.2/src-noline/duktape.h:1251
duk_double_union::us
duk_uint16_t us[4]
Definition
duktape-1.5.2/src-noline/duktape.h:1250
vendor
civetweb
third_party
duktape-1.5.2
src-separate
duk_replacements.c
Generated by
1.10.0