Messages in this thread Patch in this message | | | From | Michal Wajdeczko <> | Subject | [PATCH 1/2] wordpart.h: Helpers for making u16/u32/u64 values | Date | Wed, 14 Feb 2024 22:46:53 +0100 |
| |
It is quite common practice to make u16, u32 or u64 values from smaller words. Add simple helpers for that.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> --- v2: new macro names due to conflict with crypto/aria.h explicit cast and truncation everywhere (Alexey) moved to wordpart.h (Andy) --- Cc: Kees Cook <keescook@chromium.org> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Alexey Dobriyan <adobriyan@gmail.com> Cc: Jani Nikula <jani.nikula@intel.com> --- include/linux/wordpart.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)
diff --git a/include/linux/wordpart.h b/include/linux/wordpart.h index f6f8f83b15b0..8c75a5355112 100644 --- a/include/linux/wordpart.h +++ b/include/linux/wordpart.h @@ -31,6 +31,38 @@ */ #define lower_16_bits(n) ((u16)((n) & 0xffff)) +/** + * make_u16_from_u8 - make u16 value from two u8 values + * @hi: value representing upper 8 bits + * @lo: value representing lower 8 bits + */ +#define make_u16_from_u8(hi, lo) ((u16)((u16)(u8)(hi) << 8 | (u8)(lo))) + +/** + * make_u32_from_u16 - make u32 value from two u16 values + * @hi: value representing upper 16 bits + * @lo: value representing lower 16 bits + */ +#define make_u32_from_u16(hi, lo) ((u32)((u32)(u16)(hi) << 16 | (u16)(lo))) + +/** + * make_u32_from_u8 - make u32 value from u8 values + * @a: value representing bits 31-24 + * @b: value representing bits 23-16 + * @c: value representing bits 15-8 + * @d: value representing bits 7-0 + */ +#define make_u32_from_u8(a, b, c, d) \ + make_u32_from_u16(make_u16_from_u8((a), (b)), \ + make_u16_from_u8((c), (d))) + +/** + * make_u64_from_u32 - make u64 value from two u32 values + * @hi: value representing upper 32 bits + * @lo: value representing lower 32 bits + */ +#define make_u64_from_u32(hi, lo) ((u64)((u64)(u32)(hi) << 32 | (u32)(lo))) + /** * REPEAT_BYTE - repeat the value @x multiple times as an unsigned long value * @x: value to repeat -- 2.43.0
| |