From 45923c08b00ccdfd888caf6d2b555a137c563988 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Wed, 18 Oct 2017 16:13:24 +0000 Subject: Better packing / unpacking code Godbolted for x86_64 with gcc and clang. --- src/headers/bits-bendian | 3 +++ src/headers/bits-lendian | 5 ++++- src/headers/bits-template | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src/headers') diff --git a/src/headers/bits-bendian b/src/headers/bits-bendian index ef57f58..6caf1e7 100644 --- a/src/headers/bits-bendian +++ b/src/headers/bits-bendian @@ -1,3 +1,6 @@ #define uint@BITS@_little_endian(s, n) uint@BITS@_reverse((s), (n)) #define uint@BITS@_big_endian(s, n) +#define uint@BITS@_little(u) uint@BITS@_bswap(u) +#define uint@BITS@_big(u) (u) + diff --git a/src/headers/bits-lendian b/src/headers/bits-lendian index 278af3e..7528d46 100644 --- a/src/headers/bits-lendian +++ b/src/headers/bits-lendian @@ -1,3 +1,6 @@ #define uint@BITS@_little_endian(s, n) -#define uint@BITS@_big_endian(s, n) uint16_reverse((s), (n)) +#define uint@BITS@_big_endian(s, n) uint@BITS@_reverse((s), (n)) + +#define uint@BITS@_little(u) (u) +#define uint@BITS@_big(u) uint@BITS@_bswap(u) diff --git a/src/headers/bits-template b/src/headers/bits-template index 4b43de2..b09036b 100644 --- a/src/headers/bits-template +++ b/src/headers/bits-template @@ -3,6 +3,7 @@ extern void uint@BITS@_pack_big (char *, uint@BITS@_t) ; extern void uint@BITS@_unpack (char const *, uint@BITS@_t *) ; extern void uint@BITS@_unpack_big (char const *, uint@BITS@_t *) ; extern void uint@BITS@_reverse (char *, size_t) ; +extern uint@BITS@_t uint@BITS@_bswap (uint@BITS@_t) ; #define UINT@BITS@_FMT @DFMT@ #define UINT@BITS@_OFMT @OFMT@ -- cgit v1.2.3