diff --git a/common/commonutil.c b/common/commonutil.c index be7576a8c..f9f039df1 100644 --- a/common/commonutil.c +++ b/common/commonutil.c @@ -144,6 +144,13 @@ uint32_t reflect32(uint32_t b) { return v; } +uint64_t reflect48(uint64_t v) { + uint64_t vhi = reflect16(v >> 32); + uint64_t vlo = reflect32(v); + v = (vlo << 32) | (vhi & 0xFFFF); + return v; +} + uint64_t reflect64(uint64_t b) { // https://graphics.stanford.edu/~seander/bithacks.html#BitReverseTable uint64_t v = b; // 64-bit word to reverse bit order diff --git a/common/commonutil.h b/common/commonutil.h index 62b1b78e7..a3476a284 100644 --- a/common/commonutil.h +++ b/common/commonutil.h @@ -74,6 +74,7 @@ uint32_t reflect(uint32_t v, int b); // used in crc.c ... uint8_t reflect8(uint8_t b); // dedicated 8bit reversal uint16_t reflect16(uint16_t b); // dedicated 16bit reversal uint32_t reflect32(uint32_t b); // dedicated 32bit reversal +uint64_t reflect48(uint64_t b); // dedicated 48bit reversal uint64_t reflect64(uint64_t b); // dedicated 64bit reversal void num_to_bytes(uint64_t n, size_t len, uint8_t *dest);