iPXE
rotate.h
Go to the documentation of this file.
1#ifndef _IPXE_ROTATE_H
2#define _IPXE_ROTATE_H
3
4/** @file
5 *
6 * Bit operations
7 */
8
9FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
10FILE_SECBOOT ( PERMITTED );
11
12#include <stdint.h>
13
14#define ROLx( data, rotation ) \
15 ( ( (data) << (rotation) ) | \
16 ( (data) >> ( ( 8 * sizeof (data) ) - (rotation) ) ) );
17
18#define RORx( data, rotation ) \
19 ( ( (data) >> (rotation) ) | \
20 ( (data) << ( ( 8 * sizeof (data) ) - (rotation) ) ) );
21
22static inline __attribute__ (( always_inline )) uint8_t
23rol8 ( uint8_t data, unsigned int rotation ) {
24 return ROLx ( data, rotation );
25}
26
27static inline __attribute__ (( always_inline )) uint8_t
28ror8 ( uint8_t data, unsigned int rotation ) {
29 return RORx ( data, rotation );
30}
31
32static inline __attribute__ (( always_inline )) uint16_t
33rol16 ( uint16_t data, unsigned int rotation ) {
34 return ROLx ( data, rotation );
35}
36
37static inline __attribute__ (( always_inline )) uint16_t
38ror16 ( uint16_t data, unsigned int rotation ) {
39 return RORx ( data, rotation );
40}
41
42static inline __attribute__ (( always_inline )) uint32_t
43rol32 ( uint32_t data, unsigned int rotation ) {
44 return ROLx ( data, rotation );
45}
46
47static inline __attribute__ (( always_inline )) uint32_t
48ror32 ( uint32_t data, unsigned int rotation ) {
49 return RORx ( data, rotation );
50}
51
52static inline __attribute__ (( always_inline )) uint64_t
53rol64 ( uint64_t data, unsigned int rotation ) {
54 return ROLx ( data, rotation );
55}
56
57static inline __attribute__ (( always_inline )) uint64_t
58ror64 ( uint64_t data, unsigned int rotation ) {
59 return RORx ( data, rotation );
60}
61
62static inline __attribute__ (( always_inline )) unsigned long
63roll ( unsigned long data, unsigned int rotation ) {
64 return ROLx ( data, rotation );
65}
66
67static inline __attribute__ (( always_inline )) unsigned long
68rorl ( unsigned long data, unsigned int rotation ) {
69 return RORx ( data, rotation );
70}
71
72#endif /* _IPXE_ROTATE_H */
unsigned short uint16_t
Definition stdint.h:11
unsigned int uint32_t
Definition stdint.h:12
unsigned long long uint64_t
Definition stdint.h:13
unsigned char uint8_t
Definition stdint.h:10
uint8_t data[48]
Additional event data.
Definition ena.h:11
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
#define __attribute__(x)
Definition compiler.h:10
static unsigned int rotation
Definition rotate.h:23
#define ROLx(data, rotation)
Definition rotate.h:14
#define RORx(data, rotation)
Definition rotate.h:18
static u32 ror32(u32 v, int bits)
Rotate 32-bit value right.
Definition wpa_tkip.c:162
static u16 ror16(u16 v, int bits)
Rotate 16-bit value right.
Definition wpa_tkip.c:150
static u32 rol32(u32 v, int bits)
Rotate 32-bit value left.
Definition wpa_tkip.c:174