Skip to content

Commit f46523b

Browse files
authored
use _PyFloat APIs to (de)serialize (#340)
1 parent 197e307 commit f46523b

File tree

2 files changed

+7
-20
lines changed

2 files changed

+7
-20
lines changed

msgpack/pack_template.h

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -566,24 +566,17 @@ if(sizeof(unsigned long long) == 2) {
566566

567567
static inline int msgpack_pack_float(msgpack_packer* x, float d)
568568
{
569-
union { float f; uint32_t i; } mem;
570-
mem.f = d;
571569
unsigned char buf[5];
572-
buf[0] = 0xca; _msgpack_store32(&buf[1], mem.i);
570+
buf[0] = 0xca;
571+
_PyFloat_Pack4(d, &buf[1], 0);
573572
msgpack_pack_append_buffer(x, buf, 5);
574573
}
575574

576575
static inline int msgpack_pack_double(msgpack_packer* x, double d)
577576
{
578-
union { double f; uint64_t i; } mem;
579-
mem.f = d;
580577
unsigned char buf[9];
581578
buf[0] = 0xcb;
582-
#if defined(__arm__) && !(__ARM_EABI__) // arm-oabi
583-
// https://github.com/msgpack/msgpack-perl/pull/1
584-
mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
585-
#endif
586-
_msgpack_store64(&buf[1], mem.i);
579+
_PyFloat_Pack8(d, &buf[1], 0);
587580
msgpack_pack_append_buffer(x, buf, 9);
588581
}
589582

msgpack/unpack_template.h

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -243,17 +243,11 @@ static inline int unpack_execute(unpack_context* ctx, const char* data, Py_ssize
243243
_msgpack_load32(uint32_t,n)+1,
244244
_ext_zero);
245245
case CS_FLOAT: {
246-
union { uint32_t i; float f; } mem;
247-
mem.i = _msgpack_load32(uint32_t,n);
248-
push_fixed_value(_float, mem.f); }
246+
double f = _PyFloat_Unpack4((unsigned char*)n, 0);
247+
push_fixed_value(_float, f); }
249248
case CS_DOUBLE: {
250-
union { uint64_t i; double f; } mem;
251-
mem.i = _msgpack_load64(uint64_t,n);
252-
#if defined(__arm__) && !(__ARM_EABI__) // arm-oabi
253-
// https://github.com/msgpack/msgpack-perl/pull/1
254-
mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
255-
#endif
256-
push_fixed_value(_double, mem.f); }
249+
double f = _PyFloat_Unpack8((unsigned char*)n, 0);
250+
push_fixed_value(_double, f); }
257251
case CS_UINT_8:
258252
push_fixed_value(_uint8, *(uint8_t*)n);
259253
case CS_UINT_16:

0 commit comments

Comments
 (0)