68 lines · 2.1 KB · C
RawDownload
#ifndef _LINUX_UNALIGNED_GENERIC_H#define _LINUX_UNALIGNED_GENERIC_H /* * Cause a link-time error if we try an unaligned access other than * 1,2,4 or 8 bytes long */extern void __bad_unaligned_access_size(void); #define __get_unaligned_le(ptr) ((__force typeof(*(ptr)))({			\	__builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr),			\	__builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_le16((ptr)),	\	__builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_le32((ptr)),	\	__builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_le64((ptr)),	\	__bad_unaligned_access_size()))));					\	})) #define __get_unaligned_be(ptr) ((__force typeof(*(ptr)))({			\	__builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr),			\	__builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_be16((ptr)),	\	__builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_be32((ptr)),	\	__builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_be64((ptr)),	\	__bad_unaligned_access_size()))));					\	})) #define __put_unaligned_le(val, ptr) ({					\	void *__gu_p = (ptr);						\	switch (sizeof(*(ptr))) {					\	case 1:								\		*(u8 *)__gu_p = (__force u8)(val);			\		break;							\	case 2:								\		put_unaligned_le16((__force u16)(val), __gu_p);		\		break;							\	case 4:								\		put_unaligned_le32((__force u32)(val), __gu_p);		\		break;							\	case 8:								\		put_unaligned_le64((__force u64)(val), __gu_p);		\		break;							\	default:							\		__bad_unaligned_access_size();				\		break;							\	}								\	(void)0; }) #define __put_unaligned_be(val, ptr) ({					\	void *__gu_p = (ptr);						\	switch (sizeof(*(ptr))) {					\	case 1:								\		*(u8 *)__gu_p = (__force u8)(val);			\		break;							\	case 2:								\		put_unaligned_be16((__force u16)(val), __gu_p);		\		break;							\	case 4:								\		put_unaligned_be32((__force u32)(val), __gu_p);		\		break;							\	case 8:								\		put_unaligned_be64((__force u64)(val), __gu_p);		\		break;							\	default:							\		__bad_unaligned_access_size();				\		break;							\	}								\	(void)0; }) #endif /* _LINUX_UNALIGNED_GENERIC_H */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t