X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/2b1f4228c2987459445d30443f92038f9ea080c6..88a2610af579e01e46abd05423827f5cdfe68a1c:/common/parity.h diff --git a/common/parity.h b/common/parity.h index 6adfdb30..89491646 100644 --- a/common/parity.h +++ b/common/parity.h @@ -13,21 +13,24 @@ extern const uint8_t OddByteParity[256]; -static inline uint8_t oddparity8(uint8_t bt) -{ - return OddByteParity[bt]; -} +#define oddparity8(x) (OddByteParity[(x)]) extern const uint8_t EvenByteParity[256]; -static inline uint8_t evenparity8(const uint8_t bt) -{ - return EvenByteParity[bt]; +static inline bool /*__attribute__((always_inline))*/ evenparity8(const uint8_t x) { +#if !defined __i386__ || !defined __GNUC__ + return EvenByteParity[x]; +#else + uint8_t y; + __asm( "testb $255, %1\n" + "setpo %0\n" : "=r"(y) : "r"(x): ); + return y; +#endif } -static inline uint32_t evenparity32(uint32_t x) +static inline uint8_t evenparity32(uint32_t x) { x ^= x >> 16; x ^= x >> 8;