fixeria has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmocore/+/35005?usp=email )


Change subject: core: add parity calculation functions for uint{32,16,8}_t
......................................................................

core: add parity calculation functions for uint{32,16,8}_t

Change-Id: I2d6265eac5ce062276a40f4968b129d8702c6117
---
M include/osmocom/core/bits.h
1 file changed, 48 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/05/35005/1

diff --git a/include/osmocom/core/bits.h b/include/osmocom/core/bits.h
index b1b8040..4b80036 100644
--- a/include/osmocom/core/bits.h
+++ b/include/osmocom/core/bits.h
@@ -119,4 +119,43 @@
        return (in << shift) | (in >> (16 - shift));
 }

+/*! Calculate parity for the given 32-bit unsigned integer.
+ *  \param[in] x a 32-bit unsigned integer.
+ *  \returns 1 for even parity (even number of bits set to 1);
+ *           0 for odd parity (odd number of bits set to 1). */
+static inline uint8_t osmo_parity_u32(uint32_t x)
+{
+       x ^= x >> 16;
+       x ^= x >> 8;
+       x ^= x >> 4;
+       x ^= x >> 2;
+       x ^= x >> 1;
+       return (~x) & 1;
+}
+
+/*! Calculate parity for the given 16-bit unsigned integer.
+ *  \param[in] x a 16-bit unsigned integer.
+ *  \returns 1 for even parity (even number of bits set to 1);
+ *           0 for odd parity (odd number of bits set to 1). */
+static inline uint8_t osmo_parity_u16(uint16_t x)
+{
+       x ^= x >> 8;
+       x ^= x >> 4;
+       x ^= x >> 2;
+       x ^= x >> 1;
+       return (~x) & 1;
+}
+
+/*! Calculate parity for the given 8-bit unsigned integer.
+ *  \param[in] x a 8-bit unsigned integer.
+ *  \returns 1 for even parity (even number of bits set to 1);
+ *           0 for odd parity (odd number of bits set to 1). */
+static inline uint8_t osmo_parity_u8(uint8_t x)
+{
+       x ^= x >> 4;
+       x ^= x >> 2;
+       x ^= x >> 1;
+       return (~x) & 1;
+}
+
 /*! @} */

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/35005?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I2d6265eac5ce062276a40f4968b129d8702c6117
Gerrit-Change-Number: 35005
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanits...@sysmocom.de>
Gerrit-MessageType: newchange

Reply via email to