qemu/bitops.h: Add extract8 and extract16
Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20200212130311.127515-3-ysato@users.sourceforge.jp> Message-Id: <20200225124710.14152-14-alex.bennee@linaro.org>
This commit is contained in:
parent
4133686110
commit
ed04c8b14c
|
@ -301,6 +301,44 @@ static inline uint32_t extract32(uint32_t value, int start, int length)
|
||||||
return (value >> start) & (~0U >> (32 - length));
|
return (value >> start) & (~0U >> (32 - length));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* extract8:
|
||||||
|
* @value: the value to extract the bit field from
|
||||||
|
* @start: the lowest bit in the bit field (numbered from 0)
|
||||||
|
* @length: the length of the bit field
|
||||||
|
*
|
||||||
|
* Extract from the 8 bit input @value the bit field specified by the
|
||||||
|
* @start and @length parameters, and return it. The bit field must
|
||||||
|
* lie entirely within the 8 bit word. It is valid to request that
|
||||||
|
* all 8 bits are returned (ie @length 8 and @start 0).
|
||||||
|
*
|
||||||
|
* Returns: the value of the bit field extracted from the input value.
|
||||||
|
*/
|
||||||
|
static inline uint8_t extract8(uint8_t value, int start, int length)
|
||||||
|
{
|
||||||
|
assert(start >= 0 && length > 0 && length <= 8 - start);
|
||||||
|
return extract32(value, start, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* extract16:
|
||||||
|
* @value: the value to extract the bit field from
|
||||||
|
* @start: the lowest bit in the bit field (numbered from 0)
|
||||||
|
* @length: the length of the bit field
|
||||||
|
*
|
||||||
|
* Extract from the 16 bit input @value the bit field specified by the
|
||||||
|
* @start and @length parameters, and return it. The bit field must
|
||||||
|
* lie entirely within the 16 bit word. It is valid to request that
|
||||||
|
* all 16 bits are returned (ie @length 16 and @start 0).
|
||||||
|
*
|
||||||
|
* Returns: the value of the bit field extracted from the input value.
|
||||||
|
*/
|
||||||
|
static inline uint16_t extract16(uint16_t value, int start, int length)
|
||||||
|
{
|
||||||
|
assert(start >= 0 && length > 0 && length <= 16 - start);
|
||||||
|
return extract32(value, start, length);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* extract64:
|
* extract64:
|
||||||
* @value: the value to extract the bit field from
|
* @value: the value to extract the bit field from
|
||||||
|
|
Loading…
Reference in a new issue