28typedef vl_uint8_t vl_nibble_t;
30#define VL_NIBBLE_MASK_HIGH 0xF0
31#define VL_NIBBLE_MASK_LOW 0x0F
32#define VL_NIBBLE_MAX 0xF
33#define VL_NIBBLE_MIN 0x0
39static inline vl_nibble_t vlNibbleLow(vl_uint8_t x) {
return x & 0x0F; }
45static inline vl_nibble_t vlNibbleHigh(vl_uint8_t x) {
return (x >> 4) & 0x0F; }
51static inline vl_uint8_t vlNibblePack(vl_nibble_t high, vl_nibble_t low)
53 return (vl_uint8_t)((high << 4) | (low & 0x0F));
60static inline vl_nibble_t vlNibbleAdd(vl_nibble_t a, vl_nibble_t b) {
return (vl_nibble_t)((a + b) & 0x0F); }
66static inline vl_nibble_t vlNibbleAddSat(vl_nibble_t a, vl_nibble_t b)
68 vl_uint8_t sum = a + b;
69 return (sum > 0x0F) ? 0x0F : (vl_nibble_t)sum;
76static inline vl_nibble_t vlNibbleSub(vl_nibble_t a, vl_nibble_t b) {
return (vl_nibble_t)((a - b) & 0x0F); }
82static inline vl_nibble_t vlNibbleSubSat(vl_nibble_t a, vl_nibble_t b) {
return (b > a) ? 0 : (vl_nibble_t)(a - b); }
88static inline void vlNibbleSetHigh(vl_uint8_t* dst, vl_nibble_t v) { *dst = (*dst & 0x0F) | (v << 4); }
94static inline void vlNibbleSetLow(vl_uint8_t* dst, vl_nibble_t v) { *dst = (*dst & 0xF0) | (v & 0x0F); }