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)
12DUK_INTERNAL double duk_computed_nan;
13#endif
14
15#if defined(DUK_USE_COMPUTED_INFINITY)
16DUK_INTERNAL double duk_computed_infinity;
17#endif
18
19#if defined(DUK_USE_REPL_FPCLASSIFY)
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)
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)
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)
72 int c = DUK_FPCLASSIFY(x);
73 return (c == DUK_FP_NAN);
74}
75#endif
76
77#if defined(DUK_USE_REPL_ISINF)
79 int c = DUK_FPCLASSIFY(x);
80 return (c == DUK_FP_INFINITE);
81}
82#endif
duk_uint16_t duk_uint_fast16_t
DUK_INTERNAL int duk_repl_isinf(double x)
DUK_INTERNAL int duk_repl_signbit(double x)
DUK_INTERNAL int duk_repl_isnan(double x)
DUK_INTERNAL int duk_repl_isfinite(double x)
DUK_INTERNAL int duk_repl_fpclassify(double x)