blob: 5d240e1b84b40a4ad7ba10ce75c987ac83638faa [file] [log] [blame]
Elliott Hughes180edef2023-11-02 00:08:05 +00001/*
2 * This file is auto-generated. Modifications will be lost.
3 *
4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5 * for more information.
6 */
Ben Cheng655a7c02013-10-16 16:09:24 -07007#ifndef _UAPI_LINUX_SWAB_H
8#define _UAPI_LINUX_SWAB_H
9#include <linux/types.h>
Christopher Ferris8b7fdc92023-02-21 13:36:32 -080010#include <linux/stddef.h>
Christopher Ferrisbb9fcb42020-04-06 11:38:04 -070011#include <asm/bitsperlong.h>
Ben Cheng655a7c02013-10-16 16:09:24 -070012#include <asm/swab.h>
Tao Baod7db5942015-01-28 10:07:51 -080013#define ___constant_swab16(x) ((__u16) ((((__u16) (x) & (__u16) 0x00ffU) << 8) | (((__u16) (x) & (__u16) 0xff00U) >> 8)))
14#define ___constant_swab32(x) ((__u32) ((((__u32) (x) & (__u32) 0x000000ffUL) << 24) | (((__u32) (x) & (__u32) 0x0000ff00UL) << 8) | (((__u32) (x) & (__u32) 0x00ff0000UL) >> 8) | (((__u32) (x) & (__u32) 0xff000000UL) >> 24)))
15#define ___constant_swab64(x) ((__u64) ((((__u64) (x) & (__u64) 0x00000000000000ffULL) << 56) | (((__u64) (x) & (__u64) 0x000000000000ff00ULL) << 40) | (((__u64) (x) & (__u64) 0x0000000000ff0000ULL) << 24) | (((__u64) (x) & (__u64) 0x00000000ff000000ULL) << 8) | (((__u64) (x) & (__u64) 0x000000ff00000000ULL) >> 8) | (((__u64) (x) & (__u64) 0x0000ff0000000000ULL) >> 24) | (((__u64) (x) & (__u64) 0x00ff000000000000ULL) >> 40) | (((__u64) (x) & (__u64) 0xff00000000000000ULL) >> 56)))
Tao Baod7db5942015-01-28 10:07:51 -080016#define ___constant_swahw32(x) ((__u32) ((((__u32) (x) & (__u32) 0x0000ffffUL) << 16) | (((__u32) (x) & (__u32) 0xffff0000UL) >> 16)))
17#define ___constant_swahb32(x) ((__u32) ((((__u32) (x) & (__u32) 0x00ff00ffUL) << 8) | (((__u32) (x) & (__u32) 0xff00ff00UL) >> 8)))
Elliott Hughes0c603c32024-12-01 22:03:29 -050018#ifdef __SWAB_64_THRU_32__
Ben Cheng655a7c02013-10-16 16:09:24 -070019#else
20#endif
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070021static inline __attribute__((__const__)) __u32 __fswahw32(__u32 val) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070022 return ___constant_swahw32(val);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070023}
24static inline __attribute__((__const__)) __u32 __fswahb32(__u32 val) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070025 return ___constant_swahb32(val);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070026}
Christopher Ferris106b3a82016-08-24 12:15:38 -070027#define __swab16(x) (__u16) __builtin_bswap16((__u16) (x))
Christopher Ferris106b3a82016-08-24 12:15:38 -070028#define __swab32(x) (__u32) __builtin_bswap32((__u32) (x))
Christopher Ferris106b3a82016-08-24 12:15:38 -070029#define __swab64(x) (__u64) __builtin_bswap64((__u64) (x))
Christopher Ferrisbb9fcb42020-04-06 11:38:04 -070030#if __BITS_PER_LONG == 64
31#else
32#endif
Tao Baod7db5942015-01-28 10:07:51 -080033#define __swahw32(x) (__builtin_constant_p((__u32) (x)) ? ___constant_swahw32(x) : __fswahw32(x))
34#define __swahb32(x) (__builtin_constant_p((__u32) (x)) ? ___constant_swahb32(x) : __fswahb32(x))
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070035static __always_inline __u16 __swab16p(const __u16 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070036 return __swab16(* p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070037}
38static __always_inline __u32 __swab32p(const __u32 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070039 return __swab32(* p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070040}
41static __always_inline __u64 __swab64p(const __u64 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070042 return __swab64(* p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070043}
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070044static inline __u32 __swahw32p(const __u32 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070045 return __swahw32(* p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070046}
47static inline __u32 __swahb32p(const __u32 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070048 return __swahb32(* p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070049}
50static inline void __swab16s(__u16 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070051 * p = __swab16p(p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070052}
53static __always_inline void __swab32s(__u32 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070054 * p = __swab32p(p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070055}
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070056static __always_inline void __swab64s(__u64 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070057 * p = __swab64p(p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070058}
59static inline void __swahw32s(__u32 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070060 * p = __swahw32p(p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070061}
62static inline void __swahb32s(__u32 * p) {
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070063 * p = __swahb32p(p);
Christopher Ferrisee1e0a32017-04-20 13:38:49 -070064}
Christopher Ferris106b3a82016-08-24 12:15:38 -070065#endif