swd: Improve parity calculation and move it to types.h
It could be reused by SWD drivers and in other places. Change-Id: Ieed0cf70c111a73d3a42ed59f46a0cdd177a73d5 Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Reviewed-on: http://openocd.zylin.com/1957 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com>
This commit is contained in:
@@ -270,6 +270,25 @@ static inline void buf_bswap32(uint8_t *dst, const uint8_t *src, size_t len)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the (even) parity of a 32-bit datum.
|
||||
* @param x The datum.
|
||||
* @return 1 if the number of set bits in x is odd, 0 if it is even.
|
||||
*/
|
||||
static inline int parity_u32(uint32_t x)
|
||||
{
|
||||
#ifdef __GNUC__
|
||||
return __builtin_parityl(x);
|
||||
#else
|
||||
x ^= x >> 16;
|
||||
x ^= x >> 8;
|
||||
x ^= x >> 4;
|
||||
x ^= x >> 2;
|
||||
x ^= x >> 1;
|
||||
return x & 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(__ECOS)
|
||||
|
||||
/* eCos plain lacks these definition... A series of upstream patches
|
||||
|
||||
Reference in New Issue
Block a user