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 
9 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
10 FILE_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 
22 static inline __attribute__ (( always_inline )) uint8_t
23 rol8 ( uint8_t data, unsigned int rotation ) {
24  return ROLx ( data, rotation );
25 }
26 
27 static inline __attribute__ (( always_inline )) uint8_t
28 ror8 ( uint8_t data, unsigned int rotation ) {
29  return RORx ( data, rotation );
30 }
31 
32 static inline __attribute__ (( always_inline )) uint16_t
33 rol16 ( uint16_t data, unsigned int rotation ) {
34  return ROLx ( data, rotation );
35 }
36 
37 static inline __attribute__ (( always_inline )) uint16_t
38 ror16 ( uint16_t data, unsigned int rotation ) {
39  return RORx ( data, rotation );
40 }
41 
42 static inline __attribute__ (( always_inline )) uint32_t
43 rol32 ( uint32_t data, unsigned int rotation ) {
44  return ROLx ( data, rotation );
45 }
46 
47 static inline __attribute__ (( always_inline )) uint32_t
48 ror32 ( uint32_t data, unsigned int rotation ) {
49  return RORx ( data, rotation );
50 }
51 
52 static inline __attribute__ (( always_inline )) uint64_t
53 rol64 ( uint64_t data, unsigned int rotation ) {
54  return ROLx ( data, rotation );
55 }
56 
57 static inline __attribute__ (( always_inline )) uint64_t
58 ror64 ( uint64_t data, unsigned int rotation ) {
59  return RORx ( data, rotation );
60 }
61 
62 static inline __attribute__ (( always_inline )) unsigned long
63 roll ( unsigned long data, unsigned int rotation ) {
64  return ROLx ( data, rotation );
65 }
66 
67 static inline __attribute__ (( always_inline )) unsigned long
68 rorl ( 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
#define ROLx(data, rotation)
Definition: rotate.h:14
static u32 rol32(u32 v, int bits)
Rotate 32-bit value left.
Definition: wpa_tkip.c:174
unsigned long long uint64_t
Definition: stdint.h:13
static u32 ror32(u32 v, int bits)
Rotate 32-bit value right.
Definition: wpa_tkip.c:162
static __attribute__((always_inline)) uint8_t rol8(uint8_t data
unsigned char uint8_t
Definition: stdint.h:10
static unsigned int rotation
Definition: rotate.h:23
unsigned int uint32_t
Definition: stdint.h:12
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
uint8_t data[48]
Additional event data.
Definition: ena.h:22
FILE_SECBOOT(PERMITTED)
static u16 ror16(u16 v, int bits)
Rotate 16-bit value right.
Definition: wpa_tkip.c:150
#define RORx(data, rotation)
Definition: rotate.h:18