summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2018-07-18 12:52:19 -0700
committerThiago Macieira <thiago.macieira@intel.com>2018-09-01 15:19:34 +0000
commit7391662f80470549b9f9c182da43cf433efabdf7 (patch)
tree394a6846ad3c3c1409a13959acfd4ee95e598f54 /src
parent8ada0633cd58e0608df2e16880f1293286025504 (diff)
Update TinyCBOR
Updated to https://github.com/thiagomacieira/tinycbor commit 1286d99bdc664de6acf7c5274702325f5a095a0f Change-Id: I0d3cc366baaa49f3ad28fffd15428e886333bb38 Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/tinycbor/src/cborinternal_p.h69
-rw-r--r--src/3rdparty/tinycbor/src/compilersupport_p.h59
2 files changed, 69 insertions, 59 deletions
diff --git a/src/3rdparty/tinycbor/src/cborinternal_p.h b/src/3rdparty/tinycbor/src/cborinternal_p.h
index 8d77f28466..c5fe63003f 100644
--- a/src/3rdparty/tinycbor/src/cborinternal_p.h
+++ b/src/3rdparty/tinycbor/src/cborinternal_p.h
@@ -27,6 +27,75 @@
#include "compilersupport_p.h"
+#ifndef CBOR_NO_FLOATING_POINT
+# include <float.h>
+# include <math.h>
+#else
+# ifndef CBOR_NO_HALF_FLOAT_TYPE
+# define CBOR_NO_HALF_FLOAT_TYPE 1
+# endif
+#endif
+
+#ifndef CBOR_NO_HALF_FLOAT_TYPE
+# ifdef __F16C__
+# include <immintrin.h>
+static inline unsigned short encode_half(double val)
+{
+ return _cvtss_sh((float)val, 3);
+}
+static inline double decode_half(unsigned short half)
+{
+ return _cvtsh_ss(half);
+}
+# else
+/* software implementation of float-to-fp16 conversions */
+static inline unsigned short encode_half(double val)
+{
+ uint64_t v;
+ int sign, exp, mant;
+ memcpy(&v, &val, sizeof(v));
+ sign = v >> 63 << 15;
+ exp = (v >> 52) & 0x7ff;
+ mant = v << 12 >> 12 >> (53-11); /* keep only the 11 most significant bits of the mantissa */
+ exp -= 1023;
+ if (exp == 1024) {
+ /* infinity or NaN */
+ exp = 16;
+ mant >>= 1;
+ } else if (exp >= 16) {
+ /* overflow, as largest number */
+ exp = 15;
+ mant = 1023;
+ } else if (exp >= -14) {
+ /* regular normal */
+ } else if (exp >= -24) {
+ /* subnormal */
+ mant |= 1024;
+ mant >>= -(exp + 14);
+ exp = -15;
+ } else {
+ /* underflow, make zero */
+ return 0;
+ }
+
+ /* safe cast here as bit operations above guarantee not to overflow */
+ return (unsigned short)(sign | ((exp + 15) << 10) | mant);
+}
+
+/* this function was copied & adapted from RFC 7049 Appendix D */
+static inline double decode_half(unsigned short half)
+{
+ int exp = (half >> 10) & 0x1f;
+ int mant = half & 0x3ff;
+ double val;
+ if (exp == 0) val = ldexp(mant, -24);
+ else if (exp != 31) val = ldexp(mant + 1024, exp - 25);
+ else val = mant == 0 ? INFINITY : NAN;
+ return half & 0x8000 ? -val : val;
+}
+# endif
+#endif /* CBOR_NO_HALF_FLOAT_TYPE */
+
#ifndef CBOR_INTERNAL_API
# define CBOR_INTERNAL_API
#endif
diff --git a/src/3rdparty/tinycbor/src/compilersupport_p.h b/src/3rdparty/tinycbor/src/compilersupport_p.h
index dc4c4cfd8a..2b9491d34d 100644
--- a/src/3rdparty/tinycbor/src/compilersupport_p.h
+++ b/src/3rdparty/tinycbor/src/compilersupport_p.h
@@ -36,8 +36,6 @@
#ifndef assert
# include <assert.h>
#endif
-#include <float.h>
-#include <math.h>
#include <stddef.h>
#include <stdint.h>
#include <string.h>
@@ -46,10 +44,6 @@
# include <stdbool.h>
#endif
-#ifdef __F16C__
-# include <immintrin.h>
-#endif
-
#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L || __cpp_static_assert >= 200410
# define cbor_static_assert(x) static_assert(x, #x)
#elif !defined(__cplusplus) && defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406) && (__STDC_VERSION__ > 199901L)
@@ -207,58 +201,5 @@ static inline bool add_check_overflow(size_t v1, size_t v2, size_t *r)
#endif
}
-static inline unsigned short encode_half(double val)
-{
-#ifdef __F16C__
- return _cvtss_sh((float)val, 3);
-#else
- uint64_t v;
- int sign, exp, mant;
- memcpy(&v, &val, sizeof(v));
- sign = v >> 63 << 15;
- exp = (v >> 52) & 0x7ff;
- mant = v << 12 >> 12 >> (53-11); /* keep only the 11 most significant bits of the mantissa */
- exp -= 1023;
- if (exp == 1024) {
- /* infinity or NaN */
- exp = 16;
- mant >>= 1;
- } else if (exp >= 16) {
- /* overflow, as largest number */
- exp = 15;
- mant = 1023;
- } else if (exp >= -14) {
- /* regular normal */
- } else if (exp >= -24) {
- /* subnormal */
- mant |= 1024;
- mant >>= -(exp + 14);
- exp = -15;
- } else {
- /* underflow, make zero */
- return 0;
- }
-
- /* safe cast here as bit operations above guarantee not to overflow */
- return (unsigned short)(sign | ((exp + 15) << 10) | mant);
-#endif
-}
-
-/* this function was copied & adapted from RFC 7049 Appendix D */
-static inline double decode_half(unsigned short half)
-{
-#ifdef __F16C__
- return _cvtsh_ss(half);
-#else
- int exp = (half >> 10) & 0x1f;
- int mant = half & 0x3ff;
- double val;
- if (exp == 0) val = ldexp(mant, -24);
- else if (exp != 31) val = ldexp(mant + 1024, exp - 25);
- else val = mant == 0 ? INFINITY : NAN;
- return half & 0x8000 ? -val : val;
-#endif
-}
-
#endif /* COMPILERSUPPORT_H */